diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,44 @@
+# Amazon Global Accelerator SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2018-08-08@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-globalaccelerator)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/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
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+See [Amazonka.GlobalAccelerator](http://hackage.haskell.org/package/amazonka-globalaccelerator/docs/Amazonka-GlobalAccelerator.html)
+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-globalaccelerator` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/amazonka-globalaccelerator.cabal b/amazonka-globalaccelerator.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-globalaccelerator.cabal
@@ -0,0 +1,169 @@
+cabal-version:      2.2
+name:               amazonka-globalaccelerator
+version:            2.0
+synopsis:           Amazon Global Accelerator 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 @2018-08-08@ 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.GlobalAccelerator.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.GlobalAccelerator" 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-globalaccelerator
+
+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.GlobalAccelerator
+    Amazonka.GlobalAccelerator.AddCustomRoutingEndpoints
+    Amazonka.GlobalAccelerator.AddEndpoints
+    Amazonka.GlobalAccelerator.AdvertiseByoipCidr
+    Amazonka.GlobalAccelerator.AllowCustomRoutingTraffic
+    Amazonka.GlobalAccelerator.CreateAccelerator
+    Amazonka.GlobalAccelerator.CreateCustomRoutingAccelerator
+    Amazonka.GlobalAccelerator.CreateCustomRoutingEndpointGroup
+    Amazonka.GlobalAccelerator.CreateCustomRoutingListener
+    Amazonka.GlobalAccelerator.CreateEndpointGroup
+    Amazonka.GlobalAccelerator.CreateListener
+    Amazonka.GlobalAccelerator.DeleteAccelerator
+    Amazonka.GlobalAccelerator.DeleteCustomRoutingAccelerator
+    Amazonka.GlobalAccelerator.DeleteCustomRoutingEndpointGroup
+    Amazonka.GlobalAccelerator.DeleteCustomRoutingListener
+    Amazonka.GlobalAccelerator.DeleteEndpointGroup
+    Amazonka.GlobalAccelerator.DeleteListener
+    Amazonka.GlobalAccelerator.DenyCustomRoutingTraffic
+    Amazonka.GlobalAccelerator.DeprovisionByoipCidr
+    Amazonka.GlobalAccelerator.DescribeAccelerator
+    Amazonka.GlobalAccelerator.DescribeAcceleratorAttributes
+    Amazonka.GlobalAccelerator.DescribeCustomRoutingAccelerator
+    Amazonka.GlobalAccelerator.DescribeCustomRoutingAcceleratorAttributes
+    Amazonka.GlobalAccelerator.DescribeCustomRoutingEndpointGroup
+    Amazonka.GlobalAccelerator.DescribeCustomRoutingListener
+    Amazonka.GlobalAccelerator.DescribeEndpointGroup
+    Amazonka.GlobalAccelerator.DescribeListener
+    Amazonka.GlobalAccelerator.Lens
+    Amazonka.GlobalAccelerator.ListAccelerators
+    Amazonka.GlobalAccelerator.ListByoipCidrs
+    Amazonka.GlobalAccelerator.ListCustomRoutingAccelerators
+    Amazonka.GlobalAccelerator.ListCustomRoutingEndpointGroups
+    Amazonka.GlobalAccelerator.ListCustomRoutingListeners
+    Amazonka.GlobalAccelerator.ListCustomRoutingPortMappings
+    Amazonka.GlobalAccelerator.ListCustomRoutingPortMappingsByDestination
+    Amazonka.GlobalAccelerator.ListEndpointGroups
+    Amazonka.GlobalAccelerator.ListListeners
+    Amazonka.GlobalAccelerator.ListTagsForResource
+    Amazonka.GlobalAccelerator.ProvisionByoipCidr
+    Amazonka.GlobalAccelerator.RemoveCustomRoutingEndpoints
+    Amazonka.GlobalAccelerator.RemoveEndpoints
+    Amazonka.GlobalAccelerator.TagResource
+    Amazonka.GlobalAccelerator.Types
+    Amazonka.GlobalAccelerator.Types.Accelerator
+    Amazonka.GlobalAccelerator.Types.AcceleratorAttributes
+    Amazonka.GlobalAccelerator.Types.AcceleratorEvent
+    Amazonka.GlobalAccelerator.Types.AcceleratorStatus
+    Amazonka.GlobalAccelerator.Types.ByoipCidr
+    Amazonka.GlobalAccelerator.Types.ByoipCidrEvent
+    Amazonka.GlobalAccelerator.Types.ByoipCidrState
+    Amazonka.GlobalAccelerator.Types.CidrAuthorizationContext
+    Amazonka.GlobalAccelerator.Types.ClientAffinity
+    Amazonka.GlobalAccelerator.Types.CustomRoutingAccelerator
+    Amazonka.GlobalAccelerator.Types.CustomRoutingAcceleratorAttributes
+    Amazonka.GlobalAccelerator.Types.CustomRoutingAcceleratorStatus
+    Amazonka.GlobalAccelerator.Types.CustomRoutingDestinationConfiguration
+    Amazonka.GlobalAccelerator.Types.CustomRoutingDestinationDescription
+    Amazonka.GlobalAccelerator.Types.CustomRoutingDestinationTrafficState
+    Amazonka.GlobalAccelerator.Types.CustomRoutingEndpointConfiguration
+    Amazonka.GlobalAccelerator.Types.CustomRoutingEndpointDescription
+    Amazonka.GlobalAccelerator.Types.CustomRoutingEndpointGroup
+    Amazonka.GlobalAccelerator.Types.CustomRoutingListener
+    Amazonka.GlobalAccelerator.Types.CustomRoutingProtocol
+    Amazonka.GlobalAccelerator.Types.DestinationPortMapping
+    Amazonka.GlobalAccelerator.Types.EndpointConfiguration
+    Amazonka.GlobalAccelerator.Types.EndpointDescription
+    Amazonka.GlobalAccelerator.Types.EndpointGroup
+    Amazonka.GlobalAccelerator.Types.EndpointIdentifier
+    Amazonka.GlobalAccelerator.Types.HealthCheckProtocol
+    Amazonka.GlobalAccelerator.Types.HealthState
+    Amazonka.GlobalAccelerator.Types.IpAddressFamily
+    Amazonka.GlobalAccelerator.Types.IpAddressType
+    Amazonka.GlobalAccelerator.Types.IpSet
+    Amazonka.GlobalAccelerator.Types.Listener
+    Amazonka.GlobalAccelerator.Types.PortMapping
+    Amazonka.GlobalAccelerator.Types.PortOverride
+    Amazonka.GlobalAccelerator.Types.PortRange
+    Amazonka.GlobalAccelerator.Types.Protocol
+    Amazonka.GlobalAccelerator.Types.SocketAddress
+    Amazonka.GlobalAccelerator.Types.Tag
+    Amazonka.GlobalAccelerator.UntagResource
+    Amazonka.GlobalAccelerator.UpdateAccelerator
+    Amazonka.GlobalAccelerator.UpdateAcceleratorAttributes
+    Amazonka.GlobalAccelerator.UpdateCustomRoutingAccelerator
+    Amazonka.GlobalAccelerator.UpdateCustomRoutingAcceleratorAttributes
+    Amazonka.GlobalAccelerator.UpdateCustomRoutingListener
+    Amazonka.GlobalAccelerator.UpdateEndpointGroup
+    Amazonka.GlobalAccelerator.UpdateListener
+    Amazonka.GlobalAccelerator.Waiters
+    Amazonka.GlobalAccelerator.WithdrawByoipCidr
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-globalaccelerator-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.Gen.GlobalAccelerator
+    Test.Amazonka.GlobalAccelerator
+    Test.Amazonka.GlobalAccelerator.Internal
+
+  build-depends:
+    , amazonka-core               >=2.0 && <2.1
+    , amazonka-globalaccelerator
+    , amazonka-test               >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AddCustomRoutingEndpoints.yaml b/fixture/AddCustomRoutingEndpoints.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AddCustomRoutingEndpoints.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AddCustomRoutingEndpointsResponse.proto b/fixture/AddCustomRoutingEndpointsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AddCustomRoutingEndpointsResponse.proto
diff --git a/fixture/AddEndpoints.yaml b/fixture/AddEndpoints.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AddEndpoints.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AddEndpointsResponse.proto b/fixture/AddEndpointsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AddEndpointsResponse.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/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  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/AllowCustomRoutingTraffic.yaml b/fixture/AllowCustomRoutingTraffic.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AllowCustomRoutingTraffic.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AllowCustomRoutingTrafficResponse.proto b/fixture/AllowCustomRoutingTrafficResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AllowCustomRoutingTrafficResponse.proto
diff --git a/fixture/CreateAccelerator.yaml b/fixture/CreateAccelerator.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAccelerator.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateAcceleratorResponse.proto b/fixture/CreateAcceleratorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAcceleratorResponse.proto
diff --git a/fixture/CreateCustomRoutingAccelerator.yaml b/fixture/CreateCustomRoutingAccelerator.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCustomRoutingAccelerator.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateCustomRoutingAcceleratorResponse.proto b/fixture/CreateCustomRoutingAcceleratorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCustomRoutingAcceleratorResponse.proto
diff --git a/fixture/CreateCustomRoutingEndpointGroup.yaml b/fixture/CreateCustomRoutingEndpointGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCustomRoutingEndpointGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateCustomRoutingEndpointGroupResponse.proto b/fixture/CreateCustomRoutingEndpointGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCustomRoutingEndpointGroupResponse.proto
diff --git a/fixture/CreateCustomRoutingListener.yaml b/fixture/CreateCustomRoutingListener.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCustomRoutingListener.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateCustomRoutingListenerResponse.proto b/fixture/CreateCustomRoutingListenerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCustomRoutingListenerResponse.proto
diff --git a/fixture/CreateEndpointGroup.yaml b/fixture/CreateEndpointGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEndpointGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateEndpointGroupResponse.proto b/fixture/CreateEndpointGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEndpointGroupResponse.proto
diff --git a/fixture/CreateListener.yaml b/fixture/CreateListener.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateListener.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateListenerResponse.proto b/fixture/CreateListenerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateListenerResponse.proto
diff --git a/fixture/DeleteAccelerator.yaml b/fixture/DeleteAccelerator.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAccelerator.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteAcceleratorResponse.proto b/fixture/DeleteAcceleratorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAcceleratorResponse.proto
diff --git a/fixture/DeleteCustomRoutingAccelerator.yaml b/fixture/DeleteCustomRoutingAccelerator.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomRoutingAccelerator.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteCustomRoutingAcceleratorResponse.proto b/fixture/DeleteCustomRoutingAcceleratorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomRoutingAcceleratorResponse.proto
diff --git a/fixture/DeleteCustomRoutingEndpointGroup.yaml b/fixture/DeleteCustomRoutingEndpointGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomRoutingEndpointGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteCustomRoutingEndpointGroupResponse.proto b/fixture/DeleteCustomRoutingEndpointGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomRoutingEndpointGroupResponse.proto
diff --git a/fixture/DeleteCustomRoutingListener.yaml b/fixture/DeleteCustomRoutingListener.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomRoutingListener.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteCustomRoutingListenerResponse.proto b/fixture/DeleteCustomRoutingListenerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomRoutingListenerResponse.proto
diff --git a/fixture/DeleteEndpointGroup.yaml b/fixture/DeleteEndpointGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEndpointGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteEndpointGroupResponse.proto b/fixture/DeleteEndpointGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEndpointGroupResponse.proto
diff --git a/fixture/DeleteListener.yaml b/fixture/DeleteListener.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteListener.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteListenerResponse.proto b/fixture/DeleteListenerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteListenerResponse.proto
diff --git a/fixture/DenyCustomRoutingTraffic.yaml b/fixture/DenyCustomRoutingTraffic.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DenyCustomRoutingTraffic.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DenyCustomRoutingTrafficResponse.proto b/fixture/DenyCustomRoutingTrafficResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DenyCustomRoutingTrafficResponse.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/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  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/DescribeAccelerator.yaml b/fixture/DescribeAccelerator.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAccelerator.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAcceleratorAttributes.yaml b/fixture/DescribeAcceleratorAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAcceleratorAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAcceleratorAttributesResponse.proto b/fixture/DescribeAcceleratorAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAcceleratorAttributesResponse.proto
diff --git a/fixture/DescribeAcceleratorResponse.proto b/fixture/DescribeAcceleratorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAcceleratorResponse.proto
diff --git a/fixture/DescribeCustomRoutingAccelerator.yaml b/fixture/DescribeCustomRoutingAccelerator.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCustomRoutingAccelerator.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeCustomRoutingAcceleratorAttributes.yaml b/fixture/DescribeCustomRoutingAcceleratorAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCustomRoutingAcceleratorAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeCustomRoutingAcceleratorAttributesResponse.proto b/fixture/DescribeCustomRoutingAcceleratorAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCustomRoutingAcceleratorAttributesResponse.proto
diff --git a/fixture/DescribeCustomRoutingAcceleratorResponse.proto b/fixture/DescribeCustomRoutingAcceleratorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCustomRoutingAcceleratorResponse.proto
diff --git a/fixture/DescribeCustomRoutingEndpointGroup.yaml b/fixture/DescribeCustomRoutingEndpointGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCustomRoutingEndpointGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeCustomRoutingEndpointGroupResponse.proto b/fixture/DescribeCustomRoutingEndpointGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCustomRoutingEndpointGroupResponse.proto
diff --git a/fixture/DescribeCustomRoutingListener.yaml b/fixture/DescribeCustomRoutingListener.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCustomRoutingListener.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeCustomRoutingListenerResponse.proto b/fixture/DescribeCustomRoutingListenerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCustomRoutingListenerResponse.proto
diff --git a/fixture/DescribeEndpointGroup.yaml b/fixture/DescribeEndpointGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEndpointGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeEndpointGroupResponse.proto b/fixture/DescribeEndpointGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEndpointGroupResponse.proto
diff --git a/fixture/DescribeListener.yaml b/fixture/DescribeListener.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeListener.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeListenerResponse.proto b/fixture/DescribeListenerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeListenerResponse.proto
diff --git a/fixture/ListAccelerators.yaml b/fixture/ListAccelerators.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAccelerators.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListAcceleratorsResponse.proto b/fixture/ListAcceleratorsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAcceleratorsResponse.proto
diff --git a/fixture/ListByoipCidrs.yaml b/fixture/ListByoipCidrs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListByoipCidrs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListByoipCidrsResponse.proto b/fixture/ListByoipCidrsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListByoipCidrsResponse.proto
diff --git a/fixture/ListCustomRoutingAccelerators.yaml b/fixture/ListCustomRoutingAccelerators.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomRoutingAccelerators.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListCustomRoutingAcceleratorsResponse.proto b/fixture/ListCustomRoutingAcceleratorsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomRoutingAcceleratorsResponse.proto
diff --git a/fixture/ListCustomRoutingEndpointGroups.yaml b/fixture/ListCustomRoutingEndpointGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomRoutingEndpointGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListCustomRoutingEndpointGroupsResponse.proto b/fixture/ListCustomRoutingEndpointGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomRoutingEndpointGroupsResponse.proto
diff --git a/fixture/ListCustomRoutingListeners.yaml b/fixture/ListCustomRoutingListeners.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomRoutingListeners.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListCustomRoutingListenersResponse.proto b/fixture/ListCustomRoutingListenersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomRoutingListenersResponse.proto
diff --git a/fixture/ListCustomRoutingPortMappings.yaml b/fixture/ListCustomRoutingPortMappings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomRoutingPortMappings.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListCustomRoutingPortMappingsByDestination.yaml b/fixture/ListCustomRoutingPortMappingsByDestination.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomRoutingPortMappingsByDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListCustomRoutingPortMappingsByDestinationResponse.proto b/fixture/ListCustomRoutingPortMappingsByDestinationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomRoutingPortMappingsByDestinationResponse.proto
diff --git a/fixture/ListCustomRoutingPortMappingsResponse.proto b/fixture/ListCustomRoutingPortMappingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomRoutingPortMappingsResponse.proto
diff --git a/fixture/ListEndpointGroups.yaml b/fixture/ListEndpointGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEndpointGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListEndpointGroupsResponse.proto b/fixture/ListEndpointGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEndpointGroupsResponse.proto
diff --git a/fixture/ListListeners.yaml b/fixture/ListListeners.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListListeners.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListListenersResponse.proto b/fixture/ListListenersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListListenersResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.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/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  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/RemoveCustomRoutingEndpoints.yaml b/fixture/RemoveCustomRoutingEndpoints.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveCustomRoutingEndpoints.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RemoveCustomRoutingEndpointsResponse.proto b/fixture/RemoveCustomRoutingEndpointsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveCustomRoutingEndpointsResponse.proto
diff --git a/fixture/RemoveEndpoints.yaml b/fixture/RemoveEndpoints.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveEndpoints.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RemoveEndpointsResponse.proto b/fixture/RemoveEndpointsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveEndpointsResponse.proto
diff --git a/fixture/TagResource.yaml b/fixture/TagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UntagResourceResponse.proto b/fixture/UntagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResourceResponse.proto
diff --git a/fixture/UpdateAccelerator.yaml b/fixture/UpdateAccelerator.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAccelerator.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateAcceleratorAttributes.yaml b/fixture/UpdateAcceleratorAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAcceleratorAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateAcceleratorAttributesResponse.proto b/fixture/UpdateAcceleratorAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAcceleratorAttributesResponse.proto
diff --git a/fixture/UpdateAcceleratorResponse.proto b/fixture/UpdateAcceleratorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAcceleratorResponse.proto
diff --git a/fixture/UpdateCustomRoutingAccelerator.yaml b/fixture/UpdateCustomRoutingAccelerator.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCustomRoutingAccelerator.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateCustomRoutingAcceleratorAttributes.yaml b/fixture/UpdateCustomRoutingAcceleratorAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCustomRoutingAcceleratorAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateCustomRoutingAcceleratorAttributesResponse.proto b/fixture/UpdateCustomRoutingAcceleratorAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCustomRoutingAcceleratorAttributesResponse.proto
diff --git a/fixture/UpdateCustomRoutingAcceleratorResponse.proto b/fixture/UpdateCustomRoutingAcceleratorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCustomRoutingAcceleratorResponse.proto
diff --git a/fixture/UpdateCustomRoutingListener.yaml b/fixture/UpdateCustomRoutingListener.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCustomRoutingListener.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateCustomRoutingListenerResponse.proto b/fixture/UpdateCustomRoutingListenerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCustomRoutingListenerResponse.proto
diff --git a/fixture/UpdateEndpointGroup.yaml b/fixture/UpdateEndpointGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEndpointGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateEndpointGroupResponse.proto b/fixture/UpdateEndpointGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEndpointGroupResponse.proto
diff --git a/fixture/UpdateListener.yaml b/fixture/UpdateListener.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateListener.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateListenerResponse.proto b/fixture/UpdateListenerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateListenerResponse.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/globalaccelerator/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  globalaccelerator.us-east-1.amazonaws.com
+  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/GlobalAccelerator.hs b/gen/Amazonka/GlobalAccelerator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator.hs
@@ -0,0 +1,664 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator
+-- 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 @2018-08-08@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Global Accelerator
+--
+-- This is the /Global Accelerator API Reference/. This guide is for
+-- developers who need detailed information about Global Accelerator API
+-- actions, data types, and errors. For more information about Global
+-- Accelerator features, see the
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/what-is-global-accelerator.html Global Accelerator Developer Guide>.
+--
+-- Global Accelerator is a service in which you create /accelerators/ to
+-- improve the performance of your applications for local and global users.
+-- Depending on the type of accelerator you choose, you can gain additional
+-- benefits.
+--
+-- -   By using a standard accelerator, you can improve availability of
+--     your internet applications that are used by a global audience. With
+--     a standard accelerator, Global Accelerator directs traffic to
+--     optimal endpoints over the Amazon Web Services global network.
+--
+-- -   For other scenarios, you might choose a custom routing accelerator.
+--     With a custom routing accelerator, you can use application logic to
+--     directly map one or more users to a specific endpoint among many
+--     endpoints.
+--
+-- Global Accelerator is a global service that supports endpoints in
+-- multiple Amazon Web Services Regions but you must specify the US West
+-- (Oregon) Region to create, update, or otherwise work with accelerators.
+-- That is, for example, specify @--region us-west-2@ on AWS CLI commands.
+--
+-- By default, Global Accelerator provides you with static IP addresses
+-- that you associate with your accelerator. The static IP addresses are
+-- anycast from the Amazon Web Services edge network. For IPv4, Global
+-- Accelerator provides two static IPv4 addresses. For dual-stack, Global
+-- Accelerator provides a total of four addresses: two static IPv4
+-- addresses and two static IPv6 addresses. With a standard accelerator for
+-- IPv4, instead of using the addresses that Global Accelerator provides,
+-- you can configure these entry points to be IPv4 addresses from your own
+-- IP address ranges that you bring toGlobal Accelerator (BYOIP).
+--
+-- For a standard accelerator, they distribute incoming application traffic
+-- across multiple endpoint resources in multiple Amazon Web Services
+-- Regions , which increases the availability of your applications.
+-- Endpoints for standard accelerators can be Network Load Balancers,
+-- Application Load Balancers, Amazon EC2 instances, or Elastic IP
+-- addresses that are located in one Amazon Web Services Region or multiple
+-- Amazon Web Services Regions. For custom routing accelerators, you map
+-- traffic that arrives to the static IP addresses to specific Amazon EC2
+-- servers in endpoints that are virtual private cloud (VPC) subnets.
+--
+-- The static IP addresses remain assigned to your accelerator for as long
+-- as it exists, even if you disable the accelerator and it no longer
+-- accepts or routes traffic. However, when you /delete/ an accelerator,
+-- you lose the static IP addresses that are assigned to it, so you can no
+-- longer route traffic by using them. You can use IAM policies like
+-- tag-based permissions with Global Accelerator to limit the users who
+-- have permissions to delete an accelerator. For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/access-control-manage-access-tag-policies.html Tag-based policies>.
+--
+-- For standard accelerators, Global Accelerator uses the Amazon Web
+-- Services global network to route traffic to the optimal regional
+-- endpoint based on health, client location, and policies that you
+-- configure. The service reacts instantly to changes in health or
+-- configuration to ensure that internet traffic from clients is always
+-- directed to healthy endpoints.
+--
+-- For more information about understanding and using Global Accelerator,
+-- see the
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/what-is-global-accelerator.html Global Accelerator Developer Guide>.
+module Amazonka.GlobalAccelerator
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AcceleratorNotDisabledException
+    _AcceleratorNotDisabledException,
+
+    -- ** AcceleratorNotFoundException
+    _AcceleratorNotFoundException,
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** AssociatedEndpointGroupFoundException
+    _AssociatedEndpointGroupFoundException,
+
+    -- ** AssociatedListenerFoundException
+    _AssociatedListenerFoundException,
+
+    -- ** ByoipCidrNotFoundException
+    _ByoipCidrNotFoundException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** EndpointAlreadyExistsException
+    _EndpointAlreadyExistsException,
+
+    -- ** EndpointGroupAlreadyExistsException
+    _EndpointGroupAlreadyExistsException,
+
+    -- ** EndpointGroupNotFoundException
+    _EndpointGroupNotFoundException,
+
+    -- ** EndpointNotFoundException
+    _EndpointNotFoundException,
+
+    -- ** IncorrectCidrStateException
+    _IncorrectCidrStateException,
+
+    -- ** InternalServiceErrorException
+    _InternalServiceErrorException,
+
+    -- ** InvalidArgumentException
+    _InvalidArgumentException,
+
+    -- ** InvalidNextTokenException
+    _InvalidNextTokenException,
+
+    -- ** InvalidPortRangeException
+    _InvalidPortRangeException,
+
+    -- ** LimitExceededException
+    _LimitExceededException,
+
+    -- ** ListenerNotFoundException
+    _ListenerNotFoundException,
+
+    -- ** TransactionInProgressException
+    _TransactionInProgressException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** AddCustomRoutingEndpoints
+    AddCustomRoutingEndpoints (AddCustomRoutingEndpoints'),
+    newAddCustomRoutingEndpoints,
+    AddCustomRoutingEndpointsResponse (AddCustomRoutingEndpointsResponse'),
+    newAddCustomRoutingEndpointsResponse,
+
+    -- ** AddEndpoints
+    AddEndpoints (AddEndpoints'),
+    newAddEndpoints,
+    AddEndpointsResponse (AddEndpointsResponse'),
+    newAddEndpointsResponse,
+
+    -- ** AdvertiseByoipCidr
+    AdvertiseByoipCidr (AdvertiseByoipCidr'),
+    newAdvertiseByoipCidr,
+    AdvertiseByoipCidrResponse (AdvertiseByoipCidrResponse'),
+    newAdvertiseByoipCidrResponse,
+
+    -- ** AllowCustomRoutingTraffic
+    AllowCustomRoutingTraffic (AllowCustomRoutingTraffic'),
+    newAllowCustomRoutingTraffic,
+    AllowCustomRoutingTrafficResponse (AllowCustomRoutingTrafficResponse'),
+    newAllowCustomRoutingTrafficResponse,
+
+    -- ** CreateAccelerator
+    CreateAccelerator (CreateAccelerator'),
+    newCreateAccelerator,
+    CreateAcceleratorResponse (CreateAcceleratorResponse'),
+    newCreateAcceleratorResponse,
+
+    -- ** CreateCustomRoutingAccelerator
+    CreateCustomRoutingAccelerator (CreateCustomRoutingAccelerator'),
+    newCreateCustomRoutingAccelerator,
+    CreateCustomRoutingAcceleratorResponse (CreateCustomRoutingAcceleratorResponse'),
+    newCreateCustomRoutingAcceleratorResponse,
+
+    -- ** CreateCustomRoutingEndpointGroup
+    CreateCustomRoutingEndpointGroup (CreateCustomRoutingEndpointGroup'),
+    newCreateCustomRoutingEndpointGroup,
+    CreateCustomRoutingEndpointGroupResponse (CreateCustomRoutingEndpointGroupResponse'),
+    newCreateCustomRoutingEndpointGroupResponse,
+
+    -- ** CreateCustomRoutingListener
+    CreateCustomRoutingListener (CreateCustomRoutingListener'),
+    newCreateCustomRoutingListener,
+    CreateCustomRoutingListenerResponse (CreateCustomRoutingListenerResponse'),
+    newCreateCustomRoutingListenerResponse,
+
+    -- ** CreateEndpointGroup
+    CreateEndpointGroup (CreateEndpointGroup'),
+    newCreateEndpointGroup,
+    CreateEndpointGroupResponse (CreateEndpointGroupResponse'),
+    newCreateEndpointGroupResponse,
+
+    -- ** CreateListener
+    CreateListener (CreateListener'),
+    newCreateListener,
+    CreateListenerResponse (CreateListenerResponse'),
+    newCreateListenerResponse,
+
+    -- ** DeleteAccelerator
+    DeleteAccelerator (DeleteAccelerator'),
+    newDeleteAccelerator,
+    DeleteAcceleratorResponse (DeleteAcceleratorResponse'),
+    newDeleteAcceleratorResponse,
+
+    -- ** DeleteCustomRoutingAccelerator
+    DeleteCustomRoutingAccelerator (DeleteCustomRoutingAccelerator'),
+    newDeleteCustomRoutingAccelerator,
+    DeleteCustomRoutingAcceleratorResponse (DeleteCustomRoutingAcceleratorResponse'),
+    newDeleteCustomRoutingAcceleratorResponse,
+
+    -- ** DeleteCustomRoutingEndpointGroup
+    DeleteCustomRoutingEndpointGroup (DeleteCustomRoutingEndpointGroup'),
+    newDeleteCustomRoutingEndpointGroup,
+    DeleteCustomRoutingEndpointGroupResponse (DeleteCustomRoutingEndpointGroupResponse'),
+    newDeleteCustomRoutingEndpointGroupResponse,
+
+    -- ** DeleteCustomRoutingListener
+    DeleteCustomRoutingListener (DeleteCustomRoutingListener'),
+    newDeleteCustomRoutingListener,
+    DeleteCustomRoutingListenerResponse (DeleteCustomRoutingListenerResponse'),
+    newDeleteCustomRoutingListenerResponse,
+
+    -- ** DeleteEndpointGroup
+    DeleteEndpointGroup (DeleteEndpointGroup'),
+    newDeleteEndpointGroup,
+    DeleteEndpointGroupResponse (DeleteEndpointGroupResponse'),
+    newDeleteEndpointGroupResponse,
+
+    -- ** DeleteListener
+    DeleteListener (DeleteListener'),
+    newDeleteListener,
+    DeleteListenerResponse (DeleteListenerResponse'),
+    newDeleteListenerResponse,
+
+    -- ** DenyCustomRoutingTraffic
+    DenyCustomRoutingTraffic (DenyCustomRoutingTraffic'),
+    newDenyCustomRoutingTraffic,
+    DenyCustomRoutingTrafficResponse (DenyCustomRoutingTrafficResponse'),
+    newDenyCustomRoutingTrafficResponse,
+
+    -- ** DeprovisionByoipCidr
+    DeprovisionByoipCidr (DeprovisionByoipCidr'),
+    newDeprovisionByoipCidr,
+    DeprovisionByoipCidrResponse (DeprovisionByoipCidrResponse'),
+    newDeprovisionByoipCidrResponse,
+
+    -- ** DescribeAccelerator
+    DescribeAccelerator (DescribeAccelerator'),
+    newDescribeAccelerator,
+    DescribeAcceleratorResponse (DescribeAcceleratorResponse'),
+    newDescribeAcceleratorResponse,
+
+    -- ** DescribeAcceleratorAttributes
+    DescribeAcceleratorAttributes (DescribeAcceleratorAttributes'),
+    newDescribeAcceleratorAttributes,
+    DescribeAcceleratorAttributesResponse (DescribeAcceleratorAttributesResponse'),
+    newDescribeAcceleratorAttributesResponse,
+
+    -- ** DescribeCustomRoutingAccelerator
+    DescribeCustomRoutingAccelerator (DescribeCustomRoutingAccelerator'),
+    newDescribeCustomRoutingAccelerator,
+    DescribeCustomRoutingAcceleratorResponse (DescribeCustomRoutingAcceleratorResponse'),
+    newDescribeCustomRoutingAcceleratorResponse,
+
+    -- ** DescribeCustomRoutingAcceleratorAttributes
+    DescribeCustomRoutingAcceleratorAttributes (DescribeCustomRoutingAcceleratorAttributes'),
+    newDescribeCustomRoutingAcceleratorAttributes,
+    DescribeCustomRoutingAcceleratorAttributesResponse (DescribeCustomRoutingAcceleratorAttributesResponse'),
+    newDescribeCustomRoutingAcceleratorAttributesResponse,
+
+    -- ** DescribeCustomRoutingEndpointGroup
+    DescribeCustomRoutingEndpointGroup (DescribeCustomRoutingEndpointGroup'),
+    newDescribeCustomRoutingEndpointGroup,
+    DescribeCustomRoutingEndpointGroupResponse (DescribeCustomRoutingEndpointGroupResponse'),
+    newDescribeCustomRoutingEndpointGroupResponse,
+
+    -- ** DescribeCustomRoutingListener
+    DescribeCustomRoutingListener (DescribeCustomRoutingListener'),
+    newDescribeCustomRoutingListener,
+    DescribeCustomRoutingListenerResponse (DescribeCustomRoutingListenerResponse'),
+    newDescribeCustomRoutingListenerResponse,
+
+    -- ** DescribeEndpointGroup
+    DescribeEndpointGroup (DescribeEndpointGroup'),
+    newDescribeEndpointGroup,
+    DescribeEndpointGroupResponse (DescribeEndpointGroupResponse'),
+    newDescribeEndpointGroupResponse,
+
+    -- ** DescribeListener
+    DescribeListener (DescribeListener'),
+    newDescribeListener,
+    DescribeListenerResponse (DescribeListenerResponse'),
+    newDescribeListenerResponse,
+
+    -- ** ListAccelerators (Paginated)
+    ListAccelerators (ListAccelerators'),
+    newListAccelerators,
+    ListAcceleratorsResponse (ListAcceleratorsResponse'),
+    newListAcceleratorsResponse,
+
+    -- ** ListByoipCidrs (Paginated)
+    ListByoipCidrs (ListByoipCidrs'),
+    newListByoipCidrs,
+    ListByoipCidrsResponse (ListByoipCidrsResponse'),
+    newListByoipCidrsResponse,
+
+    -- ** ListCustomRoutingAccelerators (Paginated)
+    ListCustomRoutingAccelerators (ListCustomRoutingAccelerators'),
+    newListCustomRoutingAccelerators,
+    ListCustomRoutingAcceleratorsResponse (ListCustomRoutingAcceleratorsResponse'),
+    newListCustomRoutingAcceleratorsResponse,
+
+    -- ** ListCustomRoutingEndpointGroups
+    ListCustomRoutingEndpointGroups (ListCustomRoutingEndpointGroups'),
+    newListCustomRoutingEndpointGroups,
+    ListCustomRoutingEndpointGroupsResponse (ListCustomRoutingEndpointGroupsResponse'),
+    newListCustomRoutingEndpointGroupsResponse,
+
+    -- ** ListCustomRoutingListeners (Paginated)
+    ListCustomRoutingListeners (ListCustomRoutingListeners'),
+    newListCustomRoutingListeners,
+    ListCustomRoutingListenersResponse (ListCustomRoutingListenersResponse'),
+    newListCustomRoutingListenersResponse,
+
+    -- ** ListCustomRoutingPortMappings (Paginated)
+    ListCustomRoutingPortMappings (ListCustomRoutingPortMappings'),
+    newListCustomRoutingPortMappings,
+    ListCustomRoutingPortMappingsResponse (ListCustomRoutingPortMappingsResponse'),
+    newListCustomRoutingPortMappingsResponse,
+
+    -- ** ListCustomRoutingPortMappingsByDestination (Paginated)
+    ListCustomRoutingPortMappingsByDestination (ListCustomRoutingPortMappingsByDestination'),
+    newListCustomRoutingPortMappingsByDestination,
+    ListCustomRoutingPortMappingsByDestinationResponse (ListCustomRoutingPortMappingsByDestinationResponse'),
+    newListCustomRoutingPortMappingsByDestinationResponse,
+
+    -- ** ListEndpointGroups (Paginated)
+    ListEndpointGroups (ListEndpointGroups'),
+    newListEndpointGroups,
+    ListEndpointGroupsResponse (ListEndpointGroupsResponse'),
+    newListEndpointGroupsResponse,
+
+    -- ** ListListeners (Paginated)
+    ListListeners (ListListeners'),
+    newListListeners,
+    ListListenersResponse (ListListenersResponse'),
+    newListListenersResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ProvisionByoipCidr
+    ProvisionByoipCidr (ProvisionByoipCidr'),
+    newProvisionByoipCidr,
+    ProvisionByoipCidrResponse (ProvisionByoipCidrResponse'),
+    newProvisionByoipCidrResponse,
+
+    -- ** RemoveCustomRoutingEndpoints
+    RemoveCustomRoutingEndpoints (RemoveCustomRoutingEndpoints'),
+    newRemoveCustomRoutingEndpoints,
+    RemoveCustomRoutingEndpointsResponse (RemoveCustomRoutingEndpointsResponse'),
+    newRemoveCustomRoutingEndpointsResponse,
+
+    -- ** RemoveEndpoints
+    RemoveEndpoints (RemoveEndpoints'),
+    newRemoveEndpoints,
+    RemoveEndpointsResponse (RemoveEndpointsResponse'),
+    newRemoveEndpointsResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateAccelerator
+    UpdateAccelerator (UpdateAccelerator'),
+    newUpdateAccelerator,
+    UpdateAcceleratorResponse (UpdateAcceleratorResponse'),
+    newUpdateAcceleratorResponse,
+
+    -- ** UpdateAcceleratorAttributes
+    UpdateAcceleratorAttributes (UpdateAcceleratorAttributes'),
+    newUpdateAcceleratorAttributes,
+    UpdateAcceleratorAttributesResponse (UpdateAcceleratorAttributesResponse'),
+    newUpdateAcceleratorAttributesResponse,
+
+    -- ** UpdateCustomRoutingAccelerator
+    UpdateCustomRoutingAccelerator (UpdateCustomRoutingAccelerator'),
+    newUpdateCustomRoutingAccelerator,
+    UpdateCustomRoutingAcceleratorResponse (UpdateCustomRoutingAcceleratorResponse'),
+    newUpdateCustomRoutingAcceleratorResponse,
+
+    -- ** UpdateCustomRoutingAcceleratorAttributes
+    UpdateCustomRoutingAcceleratorAttributes (UpdateCustomRoutingAcceleratorAttributes'),
+    newUpdateCustomRoutingAcceleratorAttributes,
+    UpdateCustomRoutingAcceleratorAttributesResponse (UpdateCustomRoutingAcceleratorAttributesResponse'),
+    newUpdateCustomRoutingAcceleratorAttributesResponse,
+
+    -- ** UpdateCustomRoutingListener
+    UpdateCustomRoutingListener (UpdateCustomRoutingListener'),
+    newUpdateCustomRoutingListener,
+    UpdateCustomRoutingListenerResponse (UpdateCustomRoutingListenerResponse'),
+    newUpdateCustomRoutingListenerResponse,
+
+    -- ** UpdateEndpointGroup
+    UpdateEndpointGroup (UpdateEndpointGroup'),
+    newUpdateEndpointGroup,
+    UpdateEndpointGroupResponse (UpdateEndpointGroupResponse'),
+    newUpdateEndpointGroupResponse,
+
+    -- ** UpdateListener
+    UpdateListener (UpdateListener'),
+    newUpdateListener,
+    UpdateListenerResponse (UpdateListenerResponse'),
+    newUpdateListenerResponse,
+
+    -- ** WithdrawByoipCidr
+    WithdrawByoipCidr (WithdrawByoipCidr'),
+    newWithdrawByoipCidr,
+    WithdrawByoipCidrResponse (WithdrawByoipCidrResponse'),
+    newWithdrawByoipCidrResponse,
+
+    -- * Types
+
+    -- ** AcceleratorStatus
+    AcceleratorStatus (..),
+
+    -- ** ByoipCidrState
+    ByoipCidrState (..),
+
+    -- ** ClientAffinity
+    ClientAffinity (..),
+
+    -- ** CustomRoutingAcceleratorStatus
+    CustomRoutingAcceleratorStatus (..),
+
+    -- ** CustomRoutingDestinationTrafficState
+    CustomRoutingDestinationTrafficState (..),
+
+    -- ** CustomRoutingProtocol
+    CustomRoutingProtocol (..),
+
+    -- ** HealthCheckProtocol
+    HealthCheckProtocol (..),
+
+    -- ** HealthState
+    HealthState (..),
+
+    -- ** IpAddressFamily
+    IpAddressFamily (..),
+
+    -- ** IpAddressType
+    IpAddressType (..),
+
+    -- ** Protocol
+    Protocol (..),
+
+    -- ** Accelerator
+    Accelerator (Accelerator'),
+    newAccelerator,
+
+    -- ** AcceleratorAttributes
+    AcceleratorAttributes (AcceleratorAttributes'),
+    newAcceleratorAttributes,
+
+    -- ** AcceleratorEvent
+    AcceleratorEvent (AcceleratorEvent'),
+    newAcceleratorEvent,
+
+    -- ** ByoipCidr
+    ByoipCidr (ByoipCidr'),
+    newByoipCidr,
+
+    -- ** ByoipCidrEvent
+    ByoipCidrEvent (ByoipCidrEvent'),
+    newByoipCidrEvent,
+
+    -- ** CidrAuthorizationContext
+    CidrAuthorizationContext (CidrAuthorizationContext'),
+    newCidrAuthorizationContext,
+
+    -- ** CustomRoutingAccelerator
+    CustomRoutingAccelerator (CustomRoutingAccelerator'),
+    newCustomRoutingAccelerator,
+
+    -- ** CustomRoutingAcceleratorAttributes
+    CustomRoutingAcceleratorAttributes (CustomRoutingAcceleratorAttributes'),
+    newCustomRoutingAcceleratorAttributes,
+
+    -- ** CustomRoutingDestinationConfiguration
+    CustomRoutingDestinationConfiguration (CustomRoutingDestinationConfiguration'),
+    newCustomRoutingDestinationConfiguration,
+
+    -- ** CustomRoutingDestinationDescription
+    CustomRoutingDestinationDescription (CustomRoutingDestinationDescription'),
+    newCustomRoutingDestinationDescription,
+
+    -- ** CustomRoutingEndpointConfiguration
+    CustomRoutingEndpointConfiguration (CustomRoutingEndpointConfiguration'),
+    newCustomRoutingEndpointConfiguration,
+
+    -- ** CustomRoutingEndpointDescription
+    CustomRoutingEndpointDescription (CustomRoutingEndpointDescription'),
+    newCustomRoutingEndpointDescription,
+
+    -- ** CustomRoutingEndpointGroup
+    CustomRoutingEndpointGroup (CustomRoutingEndpointGroup'),
+    newCustomRoutingEndpointGroup,
+
+    -- ** CustomRoutingListener
+    CustomRoutingListener (CustomRoutingListener'),
+    newCustomRoutingListener,
+
+    -- ** DestinationPortMapping
+    DestinationPortMapping (DestinationPortMapping'),
+    newDestinationPortMapping,
+
+    -- ** EndpointConfiguration
+    EndpointConfiguration (EndpointConfiguration'),
+    newEndpointConfiguration,
+
+    -- ** EndpointDescription
+    EndpointDescription (EndpointDescription'),
+    newEndpointDescription,
+
+    -- ** EndpointGroup
+    EndpointGroup (EndpointGroup'),
+    newEndpointGroup,
+
+    -- ** EndpointIdentifier
+    EndpointIdentifier (EndpointIdentifier'),
+    newEndpointIdentifier,
+
+    -- ** IpSet
+    IpSet (IpSet'),
+    newIpSet,
+
+    -- ** Listener
+    Listener (Listener'),
+    newListener,
+
+    -- ** PortMapping
+    PortMapping (PortMapping'),
+    newPortMapping,
+
+    -- ** PortOverride
+    PortOverride (PortOverride'),
+    newPortOverride,
+
+    -- ** PortRange
+    PortRange (PortRange'),
+    newPortRange,
+
+    -- ** SocketAddress
+    SocketAddress (SocketAddress'),
+    newSocketAddress,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+  )
+where
+
+import Amazonka.GlobalAccelerator.AddCustomRoutingEndpoints
+import Amazonka.GlobalAccelerator.AddEndpoints
+import Amazonka.GlobalAccelerator.AdvertiseByoipCidr
+import Amazonka.GlobalAccelerator.AllowCustomRoutingTraffic
+import Amazonka.GlobalAccelerator.CreateAccelerator
+import Amazonka.GlobalAccelerator.CreateCustomRoutingAccelerator
+import Amazonka.GlobalAccelerator.CreateCustomRoutingEndpointGroup
+import Amazonka.GlobalAccelerator.CreateCustomRoutingListener
+import Amazonka.GlobalAccelerator.CreateEndpointGroup
+import Amazonka.GlobalAccelerator.CreateListener
+import Amazonka.GlobalAccelerator.DeleteAccelerator
+import Amazonka.GlobalAccelerator.DeleteCustomRoutingAccelerator
+import Amazonka.GlobalAccelerator.DeleteCustomRoutingEndpointGroup
+import Amazonka.GlobalAccelerator.DeleteCustomRoutingListener
+import Amazonka.GlobalAccelerator.DeleteEndpointGroup
+import Amazonka.GlobalAccelerator.DeleteListener
+import Amazonka.GlobalAccelerator.DenyCustomRoutingTraffic
+import Amazonka.GlobalAccelerator.DeprovisionByoipCidr
+import Amazonka.GlobalAccelerator.DescribeAccelerator
+import Amazonka.GlobalAccelerator.DescribeAcceleratorAttributes
+import Amazonka.GlobalAccelerator.DescribeCustomRoutingAccelerator
+import Amazonka.GlobalAccelerator.DescribeCustomRoutingAcceleratorAttributes
+import Amazonka.GlobalAccelerator.DescribeCustomRoutingEndpointGroup
+import Amazonka.GlobalAccelerator.DescribeCustomRoutingListener
+import Amazonka.GlobalAccelerator.DescribeEndpointGroup
+import Amazonka.GlobalAccelerator.DescribeListener
+import Amazonka.GlobalAccelerator.Lens
+import Amazonka.GlobalAccelerator.ListAccelerators
+import Amazonka.GlobalAccelerator.ListByoipCidrs
+import Amazonka.GlobalAccelerator.ListCustomRoutingAccelerators
+import Amazonka.GlobalAccelerator.ListCustomRoutingEndpointGroups
+import Amazonka.GlobalAccelerator.ListCustomRoutingListeners
+import Amazonka.GlobalAccelerator.ListCustomRoutingPortMappings
+import Amazonka.GlobalAccelerator.ListCustomRoutingPortMappingsByDestination
+import Amazonka.GlobalAccelerator.ListEndpointGroups
+import Amazonka.GlobalAccelerator.ListListeners
+import Amazonka.GlobalAccelerator.ListTagsForResource
+import Amazonka.GlobalAccelerator.ProvisionByoipCidr
+import Amazonka.GlobalAccelerator.RemoveCustomRoutingEndpoints
+import Amazonka.GlobalAccelerator.RemoveEndpoints
+import Amazonka.GlobalAccelerator.TagResource
+import Amazonka.GlobalAccelerator.Types
+import Amazonka.GlobalAccelerator.UntagResource
+import Amazonka.GlobalAccelerator.UpdateAccelerator
+import Amazonka.GlobalAccelerator.UpdateAcceleratorAttributes
+import Amazonka.GlobalAccelerator.UpdateCustomRoutingAccelerator
+import Amazonka.GlobalAccelerator.UpdateCustomRoutingAcceleratorAttributes
+import Amazonka.GlobalAccelerator.UpdateCustomRoutingListener
+import Amazonka.GlobalAccelerator.UpdateEndpointGroup
+import Amazonka.GlobalAccelerator.UpdateListener
+import Amazonka.GlobalAccelerator.Waiters
+import Amazonka.GlobalAccelerator.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 'GlobalAccelerator'.
+
+-- $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/GlobalAccelerator/AddCustomRoutingEndpoints.hs b/gen/Amazonka/GlobalAccelerator/AddCustomRoutingEndpoints.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/AddCustomRoutingEndpoints.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.GlobalAccelerator.AddCustomRoutingEndpoints
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associate a virtual private cloud (VPC) subnet endpoint with your custom
+-- routing accelerator.
+--
+-- The listener port range must be large enough to support the number of IP
+-- addresses that can be specified in your subnet. The number of ports
+-- required is: subnet size times the number of ports per destination EC2
+-- instances. For example, a subnet defined as \/24 requires a listener
+-- port range of at least 255 ports.
+--
+-- Note: You must have enough remaining listener ports available to map to
+-- the subnet ports, or the call will fail with a LimitExceededException.
+--
+-- By default, all destinations in a subnet in a custom routing accelerator
+-- cannot receive traffic. To enable all destinations to receive traffic,
+-- or to specify individual port mappings that can receive traffic, see the
+-- <https://docs.aws.amazon.com/global-accelerator/latest/api/API_AllowCustomRoutingTraffic.html AllowCustomRoutingTraffic>
+-- operation.
+module Amazonka.GlobalAccelerator.AddCustomRoutingEndpoints
+  ( -- * Creating a Request
+    AddCustomRoutingEndpoints (..),
+    newAddCustomRoutingEndpoints,
+
+    -- * Request Lenses
+    addCustomRoutingEndpoints_endpointConfigurations,
+    addCustomRoutingEndpoints_endpointGroupArn,
+
+    -- * Destructuring the Response
+    AddCustomRoutingEndpointsResponse (..),
+    newAddCustomRoutingEndpointsResponse,
+
+    -- * Response Lenses
+    addCustomRoutingEndpointsResponse_endpointDescriptions,
+    addCustomRoutingEndpointsResponse_endpointGroupArn,
+    addCustomRoutingEndpointsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAddCustomRoutingEndpoints' smart constructor.
+data AddCustomRoutingEndpoints = AddCustomRoutingEndpoints'
+  { -- | The list of endpoint objects to add to a custom routing accelerator.
+    endpointConfigurations :: Prelude.NonEmpty CustomRoutingEndpointConfiguration,
+    -- | The Amazon Resource Name (ARN) of the endpoint group for the custom
+    -- routing endpoint.
+    endpointGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddCustomRoutingEndpoints' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointConfigurations', 'addCustomRoutingEndpoints_endpointConfigurations' - The list of endpoint objects to add to a custom routing accelerator.
+--
+-- 'endpointGroupArn', 'addCustomRoutingEndpoints_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group for the custom
+-- routing endpoint.
+newAddCustomRoutingEndpoints ::
+  -- | 'endpointConfigurations'
+  Prelude.NonEmpty CustomRoutingEndpointConfiguration ->
+  -- | 'endpointGroupArn'
+  Prelude.Text ->
+  AddCustomRoutingEndpoints
+newAddCustomRoutingEndpoints
+  pEndpointConfigurations_
+  pEndpointGroupArn_ =
+    AddCustomRoutingEndpoints'
+      { endpointConfigurations =
+          Lens.coerced Lens.# pEndpointConfigurations_,
+        endpointGroupArn = pEndpointGroupArn_
+      }
+
+-- | The list of endpoint objects to add to a custom routing accelerator.
+addCustomRoutingEndpoints_endpointConfigurations :: Lens.Lens' AddCustomRoutingEndpoints (Prelude.NonEmpty CustomRoutingEndpointConfiguration)
+addCustomRoutingEndpoints_endpointConfigurations = Lens.lens (\AddCustomRoutingEndpoints' {endpointConfigurations} -> endpointConfigurations) (\s@AddCustomRoutingEndpoints' {} a -> s {endpointConfigurations = a} :: AddCustomRoutingEndpoints) Prelude.. Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the endpoint group for the custom
+-- routing endpoint.
+addCustomRoutingEndpoints_endpointGroupArn :: Lens.Lens' AddCustomRoutingEndpoints Prelude.Text
+addCustomRoutingEndpoints_endpointGroupArn = Lens.lens (\AddCustomRoutingEndpoints' {endpointGroupArn} -> endpointGroupArn) (\s@AddCustomRoutingEndpoints' {} a -> s {endpointGroupArn = a} :: AddCustomRoutingEndpoints)
+
+instance Core.AWSRequest AddCustomRoutingEndpoints where
+  type
+    AWSResponse AddCustomRoutingEndpoints =
+      AddCustomRoutingEndpointsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AddCustomRoutingEndpointsResponse'
+            Prelude.<$> ( x
+                            Data..?> "EndpointDescriptions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "EndpointGroupArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AddCustomRoutingEndpoints where
+  hashWithSalt _salt AddCustomRoutingEndpoints' {..} =
+    _salt
+      `Prelude.hashWithSalt` endpointConfigurations
+      `Prelude.hashWithSalt` endpointGroupArn
+
+instance Prelude.NFData AddCustomRoutingEndpoints where
+  rnf AddCustomRoutingEndpoints' {..} =
+    Prelude.rnf endpointConfigurations
+      `Prelude.seq` Prelude.rnf endpointGroupArn
+
+instance Data.ToHeaders AddCustomRoutingEndpoints where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.AddCustomRoutingEndpoints" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AddCustomRoutingEndpoints where
+  toJSON AddCustomRoutingEndpoints' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "EndpointConfigurations"
+                  Data..= endpointConfigurations
+              ),
+            Prelude.Just
+              ("EndpointGroupArn" Data..= endpointGroupArn)
+          ]
+      )
+
+instance Data.ToPath AddCustomRoutingEndpoints where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AddCustomRoutingEndpoints where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAddCustomRoutingEndpointsResponse' smart constructor.
+data AddCustomRoutingEndpointsResponse = AddCustomRoutingEndpointsResponse'
+  { -- | The endpoint objects added to the custom routing accelerator.
+    endpointDescriptions :: Prelude.Maybe [CustomRoutingEndpointDescription],
+    -- | The Amazon Resource Name (ARN) of the endpoint group for the custom
+    -- routing endpoint.
+    endpointGroupArn :: 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 'AddCustomRoutingEndpointsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointDescriptions', 'addCustomRoutingEndpointsResponse_endpointDescriptions' - The endpoint objects added to the custom routing accelerator.
+--
+-- 'endpointGroupArn', 'addCustomRoutingEndpointsResponse_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group for the custom
+-- routing endpoint.
+--
+-- 'httpStatus', 'addCustomRoutingEndpointsResponse_httpStatus' - The response's http status code.
+newAddCustomRoutingEndpointsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AddCustomRoutingEndpointsResponse
+newAddCustomRoutingEndpointsResponse pHttpStatus_ =
+  AddCustomRoutingEndpointsResponse'
+    { endpointDescriptions =
+        Prelude.Nothing,
+      endpointGroupArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The endpoint objects added to the custom routing accelerator.
+addCustomRoutingEndpointsResponse_endpointDescriptions :: Lens.Lens' AddCustomRoutingEndpointsResponse (Prelude.Maybe [CustomRoutingEndpointDescription])
+addCustomRoutingEndpointsResponse_endpointDescriptions = Lens.lens (\AddCustomRoutingEndpointsResponse' {endpointDescriptions} -> endpointDescriptions) (\s@AddCustomRoutingEndpointsResponse' {} a -> s {endpointDescriptions = a} :: AddCustomRoutingEndpointsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the endpoint group for the custom
+-- routing endpoint.
+addCustomRoutingEndpointsResponse_endpointGroupArn :: Lens.Lens' AddCustomRoutingEndpointsResponse (Prelude.Maybe Prelude.Text)
+addCustomRoutingEndpointsResponse_endpointGroupArn = Lens.lens (\AddCustomRoutingEndpointsResponse' {endpointGroupArn} -> endpointGroupArn) (\s@AddCustomRoutingEndpointsResponse' {} a -> s {endpointGroupArn = a} :: AddCustomRoutingEndpointsResponse)
+
+-- | The response's http status code.
+addCustomRoutingEndpointsResponse_httpStatus :: Lens.Lens' AddCustomRoutingEndpointsResponse Prelude.Int
+addCustomRoutingEndpointsResponse_httpStatus = Lens.lens (\AddCustomRoutingEndpointsResponse' {httpStatus} -> httpStatus) (\s@AddCustomRoutingEndpointsResponse' {} a -> s {httpStatus = a} :: AddCustomRoutingEndpointsResponse)
+
+instance
+  Prelude.NFData
+    AddCustomRoutingEndpointsResponse
+  where
+  rnf AddCustomRoutingEndpointsResponse' {..} =
+    Prelude.rnf endpointDescriptions
+      `Prelude.seq` Prelude.rnf endpointGroupArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/AddEndpoints.hs b/gen/Amazonka/GlobalAccelerator/AddEndpoints.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/AddEndpoints.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.GlobalAccelerator.AddEndpoints
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Add endpoints to an endpoint group. The @AddEndpoints@ API operation is
+-- the recommended option for adding endpoints. The alternative options are
+-- to add endpoints when you create an endpoint group (with the
+-- <https://docs.aws.amazon.com/global-accelerator/latest/api/API_CreateEndpointGroup.html CreateEndpointGroup>
+-- API) or when you update an endpoint group (with the
+-- <https://docs.aws.amazon.com/global-accelerator/latest/api/API_UpdateEndpointGroup.html UpdateEndpointGroup>
+-- API).
+--
+-- There are two advantages to using @AddEndpoints@ to add endpoints:
+--
+-- -   It\'s faster, because Global Accelerator only has to resolve the new
+--     endpoints that you\'re adding.
+--
+-- -   It\'s more convenient, because you don\'t need to specify all of the
+--     current endpoints that are already in the endpoint group in addition
+--     to the new endpoints that you want to add.
+module Amazonka.GlobalAccelerator.AddEndpoints
+  ( -- * Creating a Request
+    AddEndpoints (..),
+    newAddEndpoints,
+
+    -- * Request Lenses
+    addEndpoints_endpointConfigurations,
+    addEndpoints_endpointGroupArn,
+
+    -- * Destructuring the Response
+    AddEndpointsResponse (..),
+    newAddEndpointsResponse,
+
+    -- * Response Lenses
+    addEndpointsResponse_endpointDescriptions,
+    addEndpointsResponse_endpointGroupArn,
+    addEndpointsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAddEndpoints' smart constructor.
+data AddEndpoints = AddEndpoints'
+  { -- | The list of endpoint objects.
+    endpointConfigurations :: [EndpointConfiguration],
+    -- | The Amazon Resource Name (ARN) of the endpoint group.
+    endpointGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddEndpoints' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointConfigurations', 'addEndpoints_endpointConfigurations' - The list of endpoint objects.
+--
+-- 'endpointGroupArn', 'addEndpoints_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group.
+newAddEndpoints ::
+  -- | 'endpointGroupArn'
+  Prelude.Text ->
+  AddEndpoints
+newAddEndpoints pEndpointGroupArn_ =
+  AddEndpoints'
+    { endpointConfigurations =
+        Prelude.mempty,
+      endpointGroupArn = pEndpointGroupArn_
+    }
+
+-- | The list of endpoint objects.
+addEndpoints_endpointConfigurations :: Lens.Lens' AddEndpoints [EndpointConfiguration]
+addEndpoints_endpointConfigurations = Lens.lens (\AddEndpoints' {endpointConfigurations} -> endpointConfigurations) (\s@AddEndpoints' {} a -> s {endpointConfigurations = a} :: AddEndpoints) Prelude.. Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the endpoint group.
+addEndpoints_endpointGroupArn :: Lens.Lens' AddEndpoints Prelude.Text
+addEndpoints_endpointGroupArn = Lens.lens (\AddEndpoints' {endpointGroupArn} -> endpointGroupArn) (\s@AddEndpoints' {} a -> s {endpointGroupArn = a} :: AddEndpoints)
+
+instance Core.AWSRequest AddEndpoints where
+  type AWSResponse AddEndpoints = AddEndpointsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AddEndpointsResponse'
+            Prelude.<$> ( x
+                            Data..?> "EndpointDescriptions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "EndpointGroupArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AddEndpoints where
+  hashWithSalt _salt AddEndpoints' {..} =
+    _salt
+      `Prelude.hashWithSalt` endpointConfigurations
+      `Prelude.hashWithSalt` endpointGroupArn
+
+instance Prelude.NFData AddEndpoints where
+  rnf AddEndpoints' {..} =
+    Prelude.rnf endpointConfigurations
+      `Prelude.seq` Prelude.rnf endpointGroupArn
+
+instance Data.ToHeaders AddEndpoints where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.AddEndpoints" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AddEndpoints where
+  toJSON AddEndpoints' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "EndpointConfigurations"
+                  Data..= endpointConfigurations
+              ),
+            Prelude.Just
+              ("EndpointGroupArn" Data..= endpointGroupArn)
+          ]
+      )
+
+instance Data.ToPath AddEndpoints where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AddEndpoints where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAddEndpointsResponse' smart constructor.
+data AddEndpointsResponse = AddEndpointsResponse'
+  { -- | The list of endpoint objects.
+    endpointDescriptions :: Prelude.Maybe [EndpointDescription],
+    -- | The Amazon Resource Name (ARN) of the endpoint group.
+    endpointGroupArn :: 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 'AddEndpointsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointDescriptions', 'addEndpointsResponse_endpointDescriptions' - The list of endpoint objects.
+--
+-- 'endpointGroupArn', 'addEndpointsResponse_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group.
+--
+-- 'httpStatus', 'addEndpointsResponse_httpStatus' - The response's http status code.
+newAddEndpointsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AddEndpointsResponse
+newAddEndpointsResponse pHttpStatus_ =
+  AddEndpointsResponse'
+    { endpointDescriptions =
+        Prelude.Nothing,
+      endpointGroupArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of endpoint objects.
+addEndpointsResponse_endpointDescriptions :: Lens.Lens' AddEndpointsResponse (Prelude.Maybe [EndpointDescription])
+addEndpointsResponse_endpointDescriptions = Lens.lens (\AddEndpointsResponse' {endpointDescriptions} -> endpointDescriptions) (\s@AddEndpointsResponse' {} a -> s {endpointDescriptions = a} :: AddEndpointsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the endpoint group.
+addEndpointsResponse_endpointGroupArn :: Lens.Lens' AddEndpointsResponse (Prelude.Maybe Prelude.Text)
+addEndpointsResponse_endpointGroupArn = Lens.lens (\AddEndpointsResponse' {endpointGroupArn} -> endpointGroupArn) (\s@AddEndpointsResponse' {} a -> s {endpointGroupArn = a} :: AddEndpointsResponse)
+
+-- | The response's http status code.
+addEndpointsResponse_httpStatus :: Lens.Lens' AddEndpointsResponse Prelude.Int
+addEndpointsResponse_httpStatus = Lens.lens (\AddEndpointsResponse' {httpStatus} -> httpStatus) (\s@AddEndpointsResponse' {} a -> s {httpStatus = a} :: AddEndpointsResponse)
+
+instance Prelude.NFData AddEndpointsResponse where
+  rnf AddEndpointsResponse' {..} =
+    Prelude.rnf endpointDescriptions
+      `Prelude.seq` Prelude.rnf endpointGroupArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/AdvertiseByoipCidr.hs b/gen/Amazonka/GlobalAccelerator/AdvertiseByoipCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/AdvertiseByoipCidr.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.GlobalAccelerator.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 address range that is provisioned for use with your
+-- Amazon Web Services resources through bring your own IP addresses
+-- (BYOIP). It can take a few minutes before traffic to the specified
+-- addresses starts routing to Amazon Web Services because of propagation
+-- delays.
+--
+-- To stop advertising the BYOIP address range, use
+-- <https://docs.aws.amazon.com/global-accelerator/latest/api/WithdrawByoipCidr.html WithdrawByoipCidr>.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/using-byoip.html Bring your own IP addresses (BYOIP)>
+-- in the /Global Accelerator Developer Guide/.
+module Amazonka.GlobalAccelerator.AdvertiseByoipCidr
+  ( -- * Creating a Request
+    AdvertiseByoipCidr (..),
+    newAdvertiseByoipCidr,
+
+    -- * Request Lenses
+    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.GlobalAccelerator.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'
+  { -- | 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:
+--
+-- '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' {cidr = pCidr_}
+
+-- | 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.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \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` cidr
+
+instance Prelude.NFData AdvertiseByoipCidr where
+  rnf AdvertiseByoipCidr' {..} = Prelude.rnf cidr
+
+instance Data.ToHeaders AdvertiseByoipCidr where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.AdvertiseByoipCidr" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AdvertiseByoipCidr where
+  toJSON AdvertiseByoipCidr' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Cidr" Data..= cidr)]
+      )
+
+instance Data.ToPath AdvertiseByoipCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AdvertiseByoipCidr where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /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/GlobalAccelerator/AllowCustomRoutingTraffic.hs b/gen/Amazonka/GlobalAccelerator/AllowCustomRoutingTraffic.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/AllowCustomRoutingTraffic.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.GlobalAccelerator.AllowCustomRoutingTraffic
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Specify the Amazon EC2 instance (destination) IP addresses and ports for
+-- a VPC subnet endpoint that can receive traffic for a custom routing
+-- accelerator. You can allow traffic to all destinations in the subnet
+-- endpoint, or allow traffic to a specified list of destination IP
+-- addresses and ports in the subnet. Note that you cannot specify IP
+-- addresses or ports outside of the range that you configured for the
+-- endpoint group.
+--
+-- After you make changes, you can verify that the updates are complete by
+-- checking the status of your accelerator: the status changes from
+-- IN_PROGRESS to DEPLOYED.
+module Amazonka.GlobalAccelerator.AllowCustomRoutingTraffic
+  ( -- * Creating a Request
+    AllowCustomRoutingTraffic (..),
+    newAllowCustomRoutingTraffic,
+
+    -- * Request Lenses
+    allowCustomRoutingTraffic_allowAllTrafficToEndpoint,
+    allowCustomRoutingTraffic_destinationAddresses,
+    allowCustomRoutingTraffic_destinationPorts,
+    allowCustomRoutingTraffic_endpointGroupArn,
+    allowCustomRoutingTraffic_endpointId,
+
+    -- * Destructuring the Response
+    AllowCustomRoutingTrafficResponse (..),
+    newAllowCustomRoutingTrafficResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAllowCustomRoutingTraffic' smart constructor.
+data AllowCustomRoutingTraffic = AllowCustomRoutingTraffic'
+  { -- | Indicates whether all destination IP addresses and ports for a specified
+    -- VPC subnet endpoint can receive traffic from a custom routing
+    -- accelerator. The value is TRUE or FALSE.
+    --
+    -- When set to TRUE, /all/ destinations in the custom routing VPC subnet
+    -- can receive traffic. Note that you cannot specify destination IP
+    -- addresses and ports when the value is set to TRUE.
+    --
+    -- When set to FALSE (or not specified), you /must/ specify a list of
+    -- destination IP addresses that are allowed to receive traffic. A list of
+    -- ports is optional. If you don\'t specify a list of ports, the ports that
+    -- can accept traffic is the same as the ports configured for the endpoint
+    -- group.
+    --
+    -- The default value is FALSE.
+    allowAllTrafficToEndpoint :: Prelude.Maybe Prelude.Bool,
+    -- | A list of specific Amazon EC2 instance IP addresses (destination
+    -- addresses) in a subnet that you want to allow to receive traffic. The IP
+    -- addresses must be a subset of the IP addresses that you specified for
+    -- the endpoint group.
+    --
+    -- @DestinationAddresses@ is required if @AllowAllTrafficToEndpoint@ is
+    -- @FALSE@ or is not specified.
+    destinationAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | A list of specific Amazon EC2 instance ports (destination ports) that
+    -- you want to allow to receive traffic.
+    destinationPorts :: Prelude.Maybe [Prelude.Natural],
+    -- | The Amazon Resource Name (ARN) of the endpoint group.
+    endpointGroupArn :: Prelude.Text,
+    -- | An ID for the endpoint. For custom routing accelerators, this is the
+    -- virtual private cloud (VPC) subnet ID.
+    endpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AllowCustomRoutingTraffic' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowAllTrafficToEndpoint', 'allowCustomRoutingTraffic_allowAllTrafficToEndpoint' - Indicates whether all destination IP addresses and ports for a specified
+-- VPC subnet endpoint can receive traffic from a custom routing
+-- accelerator. The value is TRUE or FALSE.
+--
+-- When set to TRUE, /all/ destinations in the custom routing VPC subnet
+-- can receive traffic. Note that you cannot specify destination IP
+-- addresses and ports when the value is set to TRUE.
+--
+-- When set to FALSE (or not specified), you /must/ specify a list of
+-- destination IP addresses that are allowed to receive traffic. A list of
+-- ports is optional. If you don\'t specify a list of ports, the ports that
+-- can accept traffic is the same as the ports configured for the endpoint
+-- group.
+--
+-- The default value is FALSE.
+--
+-- 'destinationAddresses', 'allowCustomRoutingTraffic_destinationAddresses' - A list of specific Amazon EC2 instance IP addresses (destination
+-- addresses) in a subnet that you want to allow to receive traffic. The IP
+-- addresses must be a subset of the IP addresses that you specified for
+-- the endpoint group.
+--
+-- @DestinationAddresses@ is required if @AllowAllTrafficToEndpoint@ is
+-- @FALSE@ or is not specified.
+--
+-- 'destinationPorts', 'allowCustomRoutingTraffic_destinationPorts' - A list of specific Amazon EC2 instance ports (destination ports) that
+-- you want to allow to receive traffic.
+--
+-- 'endpointGroupArn', 'allowCustomRoutingTraffic_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group.
+--
+-- 'endpointId', 'allowCustomRoutingTraffic_endpointId' - An ID for the endpoint. For custom routing accelerators, this is the
+-- virtual private cloud (VPC) subnet ID.
+newAllowCustomRoutingTraffic ::
+  -- | 'endpointGroupArn'
+  Prelude.Text ->
+  -- | 'endpointId'
+  Prelude.Text ->
+  AllowCustomRoutingTraffic
+newAllowCustomRoutingTraffic
+  pEndpointGroupArn_
+  pEndpointId_ =
+    AllowCustomRoutingTraffic'
+      { allowAllTrafficToEndpoint =
+          Prelude.Nothing,
+        destinationAddresses = Prelude.Nothing,
+        destinationPorts = Prelude.Nothing,
+        endpointGroupArn = pEndpointGroupArn_,
+        endpointId = pEndpointId_
+      }
+
+-- | Indicates whether all destination IP addresses and ports for a specified
+-- VPC subnet endpoint can receive traffic from a custom routing
+-- accelerator. The value is TRUE or FALSE.
+--
+-- When set to TRUE, /all/ destinations in the custom routing VPC subnet
+-- can receive traffic. Note that you cannot specify destination IP
+-- addresses and ports when the value is set to TRUE.
+--
+-- When set to FALSE (or not specified), you /must/ specify a list of
+-- destination IP addresses that are allowed to receive traffic. A list of
+-- ports is optional. If you don\'t specify a list of ports, the ports that
+-- can accept traffic is the same as the ports configured for the endpoint
+-- group.
+--
+-- The default value is FALSE.
+allowCustomRoutingTraffic_allowAllTrafficToEndpoint :: Lens.Lens' AllowCustomRoutingTraffic (Prelude.Maybe Prelude.Bool)
+allowCustomRoutingTraffic_allowAllTrafficToEndpoint = Lens.lens (\AllowCustomRoutingTraffic' {allowAllTrafficToEndpoint} -> allowAllTrafficToEndpoint) (\s@AllowCustomRoutingTraffic' {} a -> s {allowAllTrafficToEndpoint = a} :: AllowCustomRoutingTraffic)
+
+-- | A list of specific Amazon EC2 instance IP addresses (destination
+-- addresses) in a subnet that you want to allow to receive traffic. The IP
+-- addresses must be a subset of the IP addresses that you specified for
+-- the endpoint group.
+--
+-- @DestinationAddresses@ is required if @AllowAllTrafficToEndpoint@ is
+-- @FALSE@ or is not specified.
+allowCustomRoutingTraffic_destinationAddresses :: Lens.Lens' AllowCustomRoutingTraffic (Prelude.Maybe [Prelude.Text])
+allowCustomRoutingTraffic_destinationAddresses = Lens.lens (\AllowCustomRoutingTraffic' {destinationAddresses} -> destinationAddresses) (\s@AllowCustomRoutingTraffic' {} a -> s {destinationAddresses = a} :: AllowCustomRoutingTraffic) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of specific Amazon EC2 instance ports (destination ports) that
+-- you want to allow to receive traffic.
+allowCustomRoutingTraffic_destinationPorts :: Lens.Lens' AllowCustomRoutingTraffic (Prelude.Maybe [Prelude.Natural])
+allowCustomRoutingTraffic_destinationPorts = Lens.lens (\AllowCustomRoutingTraffic' {destinationPorts} -> destinationPorts) (\s@AllowCustomRoutingTraffic' {} a -> s {destinationPorts = a} :: AllowCustomRoutingTraffic) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the endpoint group.
+allowCustomRoutingTraffic_endpointGroupArn :: Lens.Lens' AllowCustomRoutingTraffic Prelude.Text
+allowCustomRoutingTraffic_endpointGroupArn = Lens.lens (\AllowCustomRoutingTraffic' {endpointGroupArn} -> endpointGroupArn) (\s@AllowCustomRoutingTraffic' {} a -> s {endpointGroupArn = a} :: AllowCustomRoutingTraffic)
+
+-- | An ID for the endpoint. For custom routing accelerators, this is the
+-- virtual private cloud (VPC) subnet ID.
+allowCustomRoutingTraffic_endpointId :: Lens.Lens' AllowCustomRoutingTraffic Prelude.Text
+allowCustomRoutingTraffic_endpointId = Lens.lens (\AllowCustomRoutingTraffic' {endpointId} -> endpointId) (\s@AllowCustomRoutingTraffic' {} a -> s {endpointId = a} :: AllowCustomRoutingTraffic)
+
+instance Core.AWSRequest AllowCustomRoutingTraffic where
+  type
+    AWSResponse AllowCustomRoutingTraffic =
+      AllowCustomRoutingTrafficResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      AllowCustomRoutingTrafficResponse'
+
+instance Prelude.Hashable AllowCustomRoutingTraffic where
+  hashWithSalt _salt AllowCustomRoutingTraffic' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowAllTrafficToEndpoint
+      `Prelude.hashWithSalt` destinationAddresses
+      `Prelude.hashWithSalt` destinationPorts
+      `Prelude.hashWithSalt` endpointGroupArn
+      `Prelude.hashWithSalt` endpointId
+
+instance Prelude.NFData AllowCustomRoutingTraffic where
+  rnf AllowCustomRoutingTraffic' {..} =
+    Prelude.rnf allowAllTrafficToEndpoint
+      `Prelude.seq` Prelude.rnf destinationAddresses
+      `Prelude.seq` Prelude.rnf destinationPorts
+      `Prelude.seq` Prelude.rnf endpointGroupArn
+      `Prelude.seq` Prelude.rnf endpointId
+
+instance Data.ToHeaders AllowCustomRoutingTraffic where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.AllowCustomRoutingTraffic" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AllowCustomRoutingTraffic where
+  toJSON AllowCustomRoutingTraffic' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AllowAllTrafficToEndpoint" Data..=)
+              Prelude.<$> allowAllTrafficToEndpoint,
+            ("DestinationAddresses" Data..=)
+              Prelude.<$> destinationAddresses,
+            ("DestinationPorts" Data..=)
+              Prelude.<$> destinationPorts,
+            Prelude.Just
+              ("EndpointGroupArn" Data..= endpointGroupArn),
+            Prelude.Just ("EndpointId" Data..= endpointId)
+          ]
+      )
+
+instance Data.ToPath AllowCustomRoutingTraffic where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AllowCustomRoutingTraffic where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAllowCustomRoutingTrafficResponse' smart constructor.
+data AllowCustomRoutingTrafficResponse = AllowCustomRoutingTrafficResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AllowCustomRoutingTrafficResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newAllowCustomRoutingTrafficResponse ::
+  AllowCustomRoutingTrafficResponse
+newAllowCustomRoutingTrafficResponse =
+  AllowCustomRoutingTrafficResponse'
+
+instance
+  Prelude.NFData
+    AllowCustomRoutingTrafficResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/GlobalAccelerator/CreateAccelerator.hs b/gen/Amazonka/GlobalAccelerator/CreateAccelerator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/CreateAccelerator.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.GlobalAccelerator.CreateAccelerator
+-- 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 accelerator. An accelerator includes one or more listeners
+-- that process inbound connections and direct traffic to one or more
+-- endpoint groups, each of which includes endpoints, such as Network Load
+-- Balancers.
+--
+-- Global Accelerator is a global service that supports endpoints in
+-- multiple Amazon Web Services Regions but you must specify the US West
+-- (Oregon) Region to create, update, or otherwise work with accelerators.
+-- That is, for example, specify @--region us-west-2@ on AWS CLI commands.
+module Amazonka.GlobalAccelerator.CreateAccelerator
+  ( -- * Creating a Request
+    CreateAccelerator (..),
+    newCreateAccelerator,
+
+    -- * Request Lenses
+    createAccelerator_enabled,
+    createAccelerator_ipAddressType,
+    createAccelerator_ipAddresses,
+    createAccelerator_tags,
+    createAccelerator_name,
+    createAccelerator_idempotencyToken,
+
+    -- * Destructuring the Response
+    CreateAcceleratorResponse (..),
+    newCreateAcceleratorResponse,
+
+    -- * Response Lenses
+    createAcceleratorResponse_accelerator,
+    createAcceleratorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateAccelerator' smart constructor.
+data CreateAccelerator = CreateAccelerator'
+  { -- | Indicates whether an accelerator is enabled. The value is true or false.
+    -- The default value is true.
+    --
+    -- If the value is set to true, an accelerator cannot be deleted. If set to
+    -- false, the accelerator can be deleted.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The IP address type that an accelerator supports. For a standard
+    -- accelerator, the value can be IPV4 or DUAL_STACK.
+    ipAddressType :: Prelude.Maybe IpAddressType,
+    -- | Optionally, if you\'ve added your own IP address pool to Global
+    -- Accelerator (BYOIP), you can choose an IPv4 address from your own pool
+    -- to use for the accelerator\'s static IPv4 address when you create an
+    -- accelerator.
+    --
+    -- After you bring an address range to Amazon Web Services, it appears in
+    -- your account as an address pool. When you create an accelerator, you can
+    -- assign one IPv4 address from your range to it. Global Accelerator
+    -- assigns you a second static IPv4 address from an Amazon IP address
+    -- range. If you bring two IPv4 address ranges to Amazon Web Services, you
+    -- can assign one IPv4 address from each range to your accelerator. This
+    -- restriction is because Global Accelerator assigns each address range to
+    -- a different network zone, for high availability.
+    --
+    -- You can specify one or two addresses, separated by a space. Do not
+    -- include the \/32 suffix.
+    --
+    -- Note that you can\'t update IP addresses for an existing accelerator. To
+    -- change them, you must create a new accelerator with the new addresses.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/using-byoip.html Bring your own IP addresses (BYOIP)>
+    -- in the /Global Accelerator Developer Guide/.
+    ipAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | Create tags for an accelerator.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/tagging-in-global-accelerator.html Tagging in Global Accelerator>
+    -- in the /Global Accelerator Developer Guide/.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the accelerator. The name can have a maximum of 64
+    -- characters, must contain only alphanumeric characters, periods (.), or
+    -- hyphens (-), and must not begin or end with a hyphen or period.
+    name :: Prelude.Text,
+    -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency—that is, the uniqueness—of an accelerator.
+    idempotencyToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAccelerator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createAccelerator_enabled' - Indicates whether an accelerator is enabled. The value is true or false.
+-- The default value is true.
+--
+-- If the value is set to true, an accelerator cannot be deleted. If set to
+-- false, the accelerator can be deleted.
+--
+-- 'ipAddressType', 'createAccelerator_ipAddressType' - The IP address type that an accelerator supports. For a standard
+-- accelerator, the value can be IPV4 or DUAL_STACK.
+--
+-- 'ipAddresses', 'createAccelerator_ipAddresses' - Optionally, if you\'ve added your own IP address pool to Global
+-- Accelerator (BYOIP), you can choose an IPv4 address from your own pool
+-- to use for the accelerator\'s static IPv4 address when you create an
+-- accelerator.
+--
+-- After you bring an address range to Amazon Web Services, it appears in
+-- your account as an address pool. When you create an accelerator, you can
+-- assign one IPv4 address from your range to it. Global Accelerator
+-- assigns you a second static IPv4 address from an Amazon IP address
+-- range. If you bring two IPv4 address ranges to Amazon Web Services, you
+-- can assign one IPv4 address from each range to your accelerator. This
+-- restriction is because Global Accelerator assigns each address range to
+-- a different network zone, for high availability.
+--
+-- You can specify one or two addresses, separated by a space. Do not
+-- include the \/32 suffix.
+--
+-- Note that you can\'t update IP addresses for an existing accelerator. To
+-- change them, you must create a new accelerator with the new addresses.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/using-byoip.html Bring your own IP addresses (BYOIP)>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- 'tags', 'createAccelerator_tags' - Create tags for an accelerator.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/tagging-in-global-accelerator.html Tagging in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- 'name', 'createAccelerator_name' - The name of the accelerator. The name can have a maximum of 64
+-- characters, must contain only alphanumeric characters, periods (.), or
+-- hyphens (-), and must not begin or end with a hyphen or period.
+--
+-- 'idempotencyToken', 'createAccelerator_idempotencyToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency—that is, the uniqueness—of an accelerator.
+newCreateAccelerator ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'idempotencyToken'
+  Prelude.Text ->
+  CreateAccelerator
+newCreateAccelerator pName_ pIdempotencyToken_ =
+  CreateAccelerator'
+    { enabled = Prelude.Nothing,
+      ipAddressType = Prelude.Nothing,
+      ipAddresses = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      idempotencyToken = pIdempotencyToken_
+    }
+
+-- | Indicates whether an accelerator is enabled. The value is true or false.
+-- The default value is true.
+--
+-- If the value is set to true, an accelerator cannot be deleted. If set to
+-- false, the accelerator can be deleted.
+createAccelerator_enabled :: Lens.Lens' CreateAccelerator (Prelude.Maybe Prelude.Bool)
+createAccelerator_enabled = Lens.lens (\CreateAccelerator' {enabled} -> enabled) (\s@CreateAccelerator' {} a -> s {enabled = a} :: CreateAccelerator)
+
+-- | The IP address type that an accelerator supports. For a standard
+-- accelerator, the value can be IPV4 or DUAL_STACK.
+createAccelerator_ipAddressType :: Lens.Lens' CreateAccelerator (Prelude.Maybe IpAddressType)
+createAccelerator_ipAddressType = Lens.lens (\CreateAccelerator' {ipAddressType} -> ipAddressType) (\s@CreateAccelerator' {} a -> s {ipAddressType = a} :: CreateAccelerator)
+
+-- | Optionally, if you\'ve added your own IP address pool to Global
+-- Accelerator (BYOIP), you can choose an IPv4 address from your own pool
+-- to use for the accelerator\'s static IPv4 address when you create an
+-- accelerator.
+--
+-- After you bring an address range to Amazon Web Services, it appears in
+-- your account as an address pool. When you create an accelerator, you can
+-- assign one IPv4 address from your range to it. Global Accelerator
+-- assigns you a second static IPv4 address from an Amazon IP address
+-- range. If you bring two IPv4 address ranges to Amazon Web Services, you
+-- can assign one IPv4 address from each range to your accelerator. This
+-- restriction is because Global Accelerator assigns each address range to
+-- a different network zone, for high availability.
+--
+-- You can specify one or two addresses, separated by a space. Do not
+-- include the \/32 suffix.
+--
+-- Note that you can\'t update IP addresses for an existing accelerator. To
+-- change them, you must create a new accelerator with the new addresses.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/using-byoip.html Bring your own IP addresses (BYOIP)>
+-- in the /Global Accelerator Developer Guide/.
+createAccelerator_ipAddresses :: Lens.Lens' CreateAccelerator (Prelude.Maybe [Prelude.Text])
+createAccelerator_ipAddresses = Lens.lens (\CreateAccelerator' {ipAddresses} -> ipAddresses) (\s@CreateAccelerator' {} a -> s {ipAddresses = a} :: CreateAccelerator) Prelude.. Lens.mapping Lens.coerced
+
+-- | Create tags for an accelerator.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/tagging-in-global-accelerator.html Tagging in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+createAccelerator_tags :: Lens.Lens' CreateAccelerator (Prelude.Maybe [Tag])
+createAccelerator_tags = Lens.lens (\CreateAccelerator' {tags} -> tags) (\s@CreateAccelerator' {} a -> s {tags = a} :: CreateAccelerator) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the accelerator. The name can have a maximum of 64
+-- characters, must contain only alphanumeric characters, periods (.), or
+-- hyphens (-), and must not begin or end with a hyphen or period.
+createAccelerator_name :: Lens.Lens' CreateAccelerator Prelude.Text
+createAccelerator_name = Lens.lens (\CreateAccelerator' {name} -> name) (\s@CreateAccelerator' {} a -> s {name = a} :: CreateAccelerator)
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency—that is, the uniqueness—of an accelerator.
+createAccelerator_idempotencyToken :: Lens.Lens' CreateAccelerator Prelude.Text
+createAccelerator_idempotencyToken = Lens.lens (\CreateAccelerator' {idempotencyToken} -> idempotencyToken) (\s@CreateAccelerator' {} a -> s {idempotencyToken = a} :: CreateAccelerator)
+
+instance Core.AWSRequest CreateAccelerator where
+  type
+    AWSResponse CreateAccelerator =
+      CreateAcceleratorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAcceleratorResponse'
+            Prelude.<$> (x Data..?> "Accelerator")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAccelerator where
+  hashWithSalt _salt CreateAccelerator' {..} =
+    _salt
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` ipAddressType
+      `Prelude.hashWithSalt` ipAddresses
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` idempotencyToken
+
+instance Prelude.NFData CreateAccelerator where
+  rnf CreateAccelerator' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf ipAddressType
+      `Prelude.seq` Prelude.rnf ipAddresses
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf idempotencyToken
+
+instance Data.ToHeaders CreateAccelerator where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.CreateAccelerator" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAccelerator where
+  toJSON CreateAccelerator' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Enabled" Data..=) Prelude.<$> enabled,
+            ("IpAddressType" Data..=) Prelude.<$> ipAddressType,
+            ("IpAddresses" Data..=) Prelude.<$> ipAddresses,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just
+              ("IdempotencyToken" Data..= idempotencyToken)
+          ]
+      )
+
+instance Data.ToPath CreateAccelerator where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateAccelerator where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAcceleratorResponse' smart constructor.
+data CreateAcceleratorResponse = CreateAcceleratorResponse'
+  { -- | The accelerator that is created by specifying a listener and the
+    -- supported IP address types.
+    accelerator :: Prelude.Maybe Accelerator,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAcceleratorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accelerator', 'createAcceleratorResponse_accelerator' - The accelerator that is created by specifying a listener and the
+-- supported IP address types.
+--
+-- 'httpStatus', 'createAcceleratorResponse_httpStatus' - The response's http status code.
+newCreateAcceleratorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAcceleratorResponse
+newCreateAcceleratorResponse pHttpStatus_ =
+  CreateAcceleratorResponse'
+    { accelerator =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The accelerator that is created by specifying a listener and the
+-- supported IP address types.
+createAcceleratorResponse_accelerator :: Lens.Lens' CreateAcceleratorResponse (Prelude.Maybe Accelerator)
+createAcceleratorResponse_accelerator = Lens.lens (\CreateAcceleratorResponse' {accelerator} -> accelerator) (\s@CreateAcceleratorResponse' {} a -> s {accelerator = a} :: CreateAcceleratorResponse)
+
+-- | The response's http status code.
+createAcceleratorResponse_httpStatus :: Lens.Lens' CreateAcceleratorResponse Prelude.Int
+createAcceleratorResponse_httpStatus = Lens.lens (\CreateAcceleratorResponse' {httpStatus} -> httpStatus) (\s@CreateAcceleratorResponse' {} a -> s {httpStatus = a} :: CreateAcceleratorResponse)
+
+instance Prelude.NFData CreateAcceleratorResponse where
+  rnf CreateAcceleratorResponse' {..} =
+    Prelude.rnf accelerator
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/CreateCustomRoutingAccelerator.hs b/gen/Amazonka/GlobalAccelerator/CreateCustomRoutingAccelerator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/CreateCustomRoutingAccelerator.hs
@@ -0,0 +1,379 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.CreateCustomRoutingAccelerator
+-- 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 a custom routing accelerator. A custom routing accelerator
+-- directs traffic to one of possibly thousands of Amazon EC2 instance
+-- destinations running in a single or multiple virtual private clouds
+-- (VPC) subnet endpoints.
+--
+-- Be aware that, by default, all destination EC2 instances in a VPC subnet
+-- endpoint cannot receive traffic. To enable all destinations to receive
+-- traffic, or to specify individual port mappings that can receive
+-- traffic, see the
+-- <https://docs.aws.amazon.com/global-accelerator/latest/api/API_AllowCustomRoutingTraffic.html AllowCustomRoutingTraffic>
+-- operation.
+--
+-- Global Accelerator is a global service that supports endpoints in
+-- multiple Amazon Web Services Regions but you must specify the US West
+-- (Oregon) Region to create, update, or otherwise work with accelerators.
+-- That is, for example, specify @--region us-west-2@ on AWS CLI commands.
+module Amazonka.GlobalAccelerator.CreateCustomRoutingAccelerator
+  ( -- * Creating a Request
+    CreateCustomRoutingAccelerator (..),
+    newCreateCustomRoutingAccelerator,
+
+    -- * Request Lenses
+    createCustomRoutingAccelerator_enabled,
+    createCustomRoutingAccelerator_ipAddressType,
+    createCustomRoutingAccelerator_ipAddresses,
+    createCustomRoutingAccelerator_tags,
+    createCustomRoutingAccelerator_name,
+    createCustomRoutingAccelerator_idempotencyToken,
+
+    -- * Destructuring the Response
+    CreateCustomRoutingAcceleratorResponse (..),
+    newCreateCustomRoutingAcceleratorResponse,
+
+    -- * Response Lenses
+    createCustomRoutingAcceleratorResponse_accelerator,
+    createCustomRoutingAcceleratorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateCustomRoutingAccelerator' smart constructor.
+data CreateCustomRoutingAccelerator = CreateCustomRoutingAccelerator'
+  { -- | Indicates whether an accelerator is enabled. The value is true or false.
+    -- The default value is true.
+    --
+    -- If the value is set to true, an accelerator cannot be deleted. If set to
+    -- false, the accelerator can be deleted.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The IP address type that an accelerator supports. For a custom routing
+    -- accelerator, the value must be IPV4.
+    ipAddressType :: Prelude.Maybe IpAddressType,
+    -- | Optionally, if you\'ve added your own IP address pool to Global
+    -- Accelerator (BYOIP), you can choose an IPv4 address from your own pool
+    -- to use for the accelerator\'s static IPv4 address when you create an
+    -- accelerator.
+    --
+    -- After you bring an address range to Amazon Web Services, it appears in
+    -- your account as an address pool. When you create an accelerator, you can
+    -- assign one IPv4 address from your range to it. Global Accelerator
+    -- assigns you a second static IPv4 address from an Amazon IP address
+    -- range. If you bring two IPv4 address ranges to Amazon Web Services, you
+    -- can assign one IPv4 address from each range to your accelerator. This
+    -- restriction is because Global Accelerator assigns each address range to
+    -- a different network zone, for high availability.
+    --
+    -- You can specify one or two addresses, separated by a space. Do not
+    -- include the \/32 suffix.
+    --
+    -- Note that you can\'t update IP addresses for an existing accelerator. To
+    -- change them, you must create a new accelerator with the new addresses.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/using-byoip.html Bring your own IP addresses (BYOIP)>
+    -- in the /Global Accelerator Developer Guide/.
+    ipAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | Create tags for an accelerator.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/tagging-in-global-accelerator.html Tagging in Global Accelerator>
+    -- in the /Global Accelerator Developer Guide/.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of a custom routing accelerator. The name can have a maximum of
+    -- 64 characters, must contain only alphanumeric characters or hyphens (-),
+    -- and must not begin or end with a hyphen.
+    name :: Prelude.Text,
+    -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency—that is, the uniqueness—of the request.
+    idempotencyToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCustomRoutingAccelerator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createCustomRoutingAccelerator_enabled' - Indicates whether an accelerator is enabled. The value is true or false.
+-- The default value is true.
+--
+-- If the value is set to true, an accelerator cannot be deleted. If set to
+-- false, the accelerator can be deleted.
+--
+-- 'ipAddressType', 'createCustomRoutingAccelerator_ipAddressType' - The IP address type that an accelerator supports. For a custom routing
+-- accelerator, the value must be IPV4.
+--
+-- 'ipAddresses', 'createCustomRoutingAccelerator_ipAddresses' - Optionally, if you\'ve added your own IP address pool to Global
+-- Accelerator (BYOIP), you can choose an IPv4 address from your own pool
+-- to use for the accelerator\'s static IPv4 address when you create an
+-- accelerator.
+--
+-- After you bring an address range to Amazon Web Services, it appears in
+-- your account as an address pool. When you create an accelerator, you can
+-- assign one IPv4 address from your range to it. Global Accelerator
+-- assigns you a second static IPv4 address from an Amazon IP address
+-- range. If you bring two IPv4 address ranges to Amazon Web Services, you
+-- can assign one IPv4 address from each range to your accelerator. This
+-- restriction is because Global Accelerator assigns each address range to
+-- a different network zone, for high availability.
+--
+-- You can specify one or two addresses, separated by a space. Do not
+-- include the \/32 suffix.
+--
+-- Note that you can\'t update IP addresses for an existing accelerator. To
+-- change them, you must create a new accelerator with the new addresses.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/using-byoip.html Bring your own IP addresses (BYOIP)>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- 'tags', 'createCustomRoutingAccelerator_tags' - Create tags for an accelerator.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/tagging-in-global-accelerator.html Tagging in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- 'name', 'createCustomRoutingAccelerator_name' - The name of a custom routing accelerator. The name can have a maximum of
+-- 64 characters, must contain only alphanumeric characters or hyphens (-),
+-- and must not begin or end with a hyphen.
+--
+-- 'idempotencyToken', 'createCustomRoutingAccelerator_idempotencyToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency—that is, the uniqueness—of the request.
+newCreateCustomRoutingAccelerator ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'idempotencyToken'
+  Prelude.Text ->
+  CreateCustomRoutingAccelerator
+newCreateCustomRoutingAccelerator
+  pName_
+  pIdempotencyToken_ =
+    CreateCustomRoutingAccelerator'
+      { enabled =
+          Prelude.Nothing,
+        ipAddressType = Prelude.Nothing,
+        ipAddresses = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        name = pName_,
+        idempotencyToken = pIdempotencyToken_
+      }
+
+-- | Indicates whether an accelerator is enabled. The value is true or false.
+-- The default value is true.
+--
+-- If the value is set to true, an accelerator cannot be deleted. If set to
+-- false, the accelerator can be deleted.
+createCustomRoutingAccelerator_enabled :: Lens.Lens' CreateCustomRoutingAccelerator (Prelude.Maybe Prelude.Bool)
+createCustomRoutingAccelerator_enabled = Lens.lens (\CreateCustomRoutingAccelerator' {enabled} -> enabled) (\s@CreateCustomRoutingAccelerator' {} a -> s {enabled = a} :: CreateCustomRoutingAccelerator)
+
+-- | The IP address type that an accelerator supports. For a custom routing
+-- accelerator, the value must be IPV4.
+createCustomRoutingAccelerator_ipAddressType :: Lens.Lens' CreateCustomRoutingAccelerator (Prelude.Maybe IpAddressType)
+createCustomRoutingAccelerator_ipAddressType = Lens.lens (\CreateCustomRoutingAccelerator' {ipAddressType} -> ipAddressType) (\s@CreateCustomRoutingAccelerator' {} a -> s {ipAddressType = a} :: CreateCustomRoutingAccelerator)
+
+-- | Optionally, if you\'ve added your own IP address pool to Global
+-- Accelerator (BYOIP), you can choose an IPv4 address from your own pool
+-- to use for the accelerator\'s static IPv4 address when you create an
+-- accelerator.
+--
+-- After you bring an address range to Amazon Web Services, it appears in
+-- your account as an address pool. When you create an accelerator, you can
+-- assign one IPv4 address from your range to it. Global Accelerator
+-- assigns you a second static IPv4 address from an Amazon IP address
+-- range. If you bring two IPv4 address ranges to Amazon Web Services, you
+-- can assign one IPv4 address from each range to your accelerator. This
+-- restriction is because Global Accelerator assigns each address range to
+-- a different network zone, for high availability.
+--
+-- You can specify one or two addresses, separated by a space. Do not
+-- include the \/32 suffix.
+--
+-- Note that you can\'t update IP addresses for an existing accelerator. To
+-- change them, you must create a new accelerator with the new addresses.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/using-byoip.html Bring your own IP addresses (BYOIP)>
+-- in the /Global Accelerator Developer Guide/.
+createCustomRoutingAccelerator_ipAddresses :: Lens.Lens' CreateCustomRoutingAccelerator (Prelude.Maybe [Prelude.Text])
+createCustomRoutingAccelerator_ipAddresses = Lens.lens (\CreateCustomRoutingAccelerator' {ipAddresses} -> ipAddresses) (\s@CreateCustomRoutingAccelerator' {} a -> s {ipAddresses = a} :: CreateCustomRoutingAccelerator) Prelude.. Lens.mapping Lens.coerced
+
+-- | Create tags for an accelerator.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/tagging-in-global-accelerator.html Tagging in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+createCustomRoutingAccelerator_tags :: Lens.Lens' CreateCustomRoutingAccelerator (Prelude.Maybe [Tag])
+createCustomRoutingAccelerator_tags = Lens.lens (\CreateCustomRoutingAccelerator' {tags} -> tags) (\s@CreateCustomRoutingAccelerator' {} a -> s {tags = a} :: CreateCustomRoutingAccelerator) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of a custom routing accelerator. The name can have a maximum of
+-- 64 characters, must contain only alphanumeric characters or hyphens (-),
+-- and must not begin or end with a hyphen.
+createCustomRoutingAccelerator_name :: Lens.Lens' CreateCustomRoutingAccelerator Prelude.Text
+createCustomRoutingAccelerator_name = Lens.lens (\CreateCustomRoutingAccelerator' {name} -> name) (\s@CreateCustomRoutingAccelerator' {} a -> s {name = a} :: CreateCustomRoutingAccelerator)
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency—that is, the uniqueness—of the request.
+createCustomRoutingAccelerator_idempotencyToken :: Lens.Lens' CreateCustomRoutingAccelerator Prelude.Text
+createCustomRoutingAccelerator_idempotencyToken = Lens.lens (\CreateCustomRoutingAccelerator' {idempotencyToken} -> idempotencyToken) (\s@CreateCustomRoutingAccelerator' {} a -> s {idempotencyToken = a} :: CreateCustomRoutingAccelerator)
+
+instance
+  Core.AWSRequest
+    CreateCustomRoutingAccelerator
+  where
+  type
+    AWSResponse CreateCustomRoutingAccelerator =
+      CreateCustomRoutingAcceleratorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateCustomRoutingAcceleratorResponse'
+            Prelude.<$> (x Data..?> "Accelerator")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateCustomRoutingAccelerator
+  where
+  hashWithSalt
+    _salt
+    CreateCustomRoutingAccelerator' {..} =
+      _salt
+        `Prelude.hashWithSalt` enabled
+        `Prelude.hashWithSalt` ipAddressType
+        `Prelude.hashWithSalt` ipAddresses
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` idempotencyToken
+
+instance
+  Prelude.NFData
+    CreateCustomRoutingAccelerator
+  where
+  rnf CreateCustomRoutingAccelerator' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf ipAddressType
+      `Prelude.seq` Prelude.rnf ipAddresses
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf idempotencyToken
+
+instance
+  Data.ToHeaders
+    CreateCustomRoutingAccelerator
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.CreateCustomRoutingAccelerator" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateCustomRoutingAccelerator where
+  toJSON CreateCustomRoutingAccelerator' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Enabled" Data..=) Prelude.<$> enabled,
+            ("IpAddressType" Data..=) Prelude.<$> ipAddressType,
+            ("IpAddresses" Data..=) Prelude.<$> ipAddresses,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just
+              ("IdempotencyToken" Data..= idempotencyToken)
+          ]
+      )
+
+instance Data.ToPath CreateCustomRoutingAccelerator where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateCustomRoutingAccelerator where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateCustomRoutingAcceleratorResponse' smart constructor.
+data CreateCustomRoutingAcceleratorResponse = CreateCustomRoutingAcceleratorResponse'
+  { -- | The accelerator that is created.
+    accelerator :: Prelude.Maybe CustomRoutingAccelerator,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCustomRoutingAcceleratorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accelerator', 'createCustomRoutingAcceleratorResponse_accelerator' - The accelerator that is created.
+--
+-- 'httpStatus', 'createCustomRoutingAcceleratorResponse_httpStatus' - The response's http status code.
+newCreateCustomRoutingAcceleratorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCustomRoutingAcceleratorResponse
+newCreateCustomRoutingAcceleratorResponse
+  pHttpStatus_ =
+    CreateCustomRoutingAcceleratorResponse'
+      { accelerator =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The accelerator that is created.
+createCustomRoutingAcceleratorResponse_accelerator :: Lens.Lens' CreateCustomRoutingAcceleratorResponse (Prelude.Maybe CustomRoutingAccelerator)
+createCustomRoutingAcceleratorResponse_accelerator = Lens.lens (\CreateCustomRoutingAcceleratorResponse' {accelerator} -> accelerator) (\s@CreateCustomRoutingAcceleratorResponse' {} a -> s {accelerator = a} :: CreateCustomRoutingAcceleratorResponse)
+
+-- | The response's http status code.
+createCustomRoutingAcceleratorResponse_httpStatus :: Lens.Lens' CreateCustomRoutingAcceleratorResponse Prelude.Int
+createCustomRoutingAcceleratorResponse_httpStatus = Lens.lens (\CreateCustomRoutingAcceleratorResponse' {httpStatus} -> httpStatus) (\s@CreateCustomRoutingAcceleratorResponse' {} a -> s {httpStatus = a} :: CreateCustomRoutingAcceleratorResponse)
+
+instance
+  Prelude.NFData
+    CreateCustomRoutingAcceleratorResponse
+  where
+  rnf CreateCustomRoutingAcceleratorResponse' {..} =
+    Prelude.rnf accelerator
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/CreateCustomRoutingEndpointGroup.hs b/gen/Amazonka/GlobalAccelerator/CreateCustomRoutingEndpointGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/CreateCustomRoutingEndpointGroup.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.GlobalAccelerator.CreateCustomRoutingEndpointGroup
+-- 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 endpoint group for the specified listener for a custom routing
+-- accelerator. An endpoint group is a collection of endpoints in one
+-- Amazon Web Services Region.
+module Amazonka.GlobalAccelerator.CreateCustomRoutingEndpointGroup
+  ( -- * Creating a Request
+    CreateCustomRoutingEndpointGroup (..),
+    newCreateCustomRoutingEndpointGroup,
+
+    -- * Request Lenses
+    createCustomRoutingEndpointGroup_listenerArn,
+    createCustomRoutingEndpointGroup_endpointGroupRegion,
+    createCustomRoutingEndpointGroup_destinationConfigurations,
+    createCustomRoutingEndpointGroup_idempotencyToken,
+
+    -- * Destructuring the Response
+    CreateCustomRoutingEndpointGroupResponse (..),
+    newCreateCustomRoutingEndpointGroupResponse,
+
+    -- * Response Lenses
+    createCustomRoutingEndpointGroupResponse_endpointGroup,
+    createCustomRoutingEndpointGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateCustomRoutingEndpointGroup' smart constructor.
+data CreateCustomRoutingEndpointGroup = CreateCustomRoutingEndpointGroup'
+  { -- | The Amazon Resource Name (ARN) of the listener for a custom routing
+    -- endpoint.
+    listenerArn :: Prelude.Text,
+    -- | The Amazon Web Services Region where the endpoint group is located. A
+    -- listener can have only one endpoint group in a specific Region.
+    endpointGroupRegion :: Prelude.Text,
+    -- | Sets the port range and protocol for all endpoints (virtual private
+    -- cloud subnets) in a custom routing endpoint group to accept client
+    -- traffic on.
+    destinationConfigurations :: Prelude.NonEmpty CustomRoutingDestinationConfiguration,
+    -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency—that is, the uniqueness—of the request.
+    idempotencyToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCustomRoutingEndpointGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'listenerArn', 'createCustomRoutingEndpointGroup_listenerArn' - The Amazon Resource Name (ARN) of the listener for a custom routing
+-- endpoint.
+--
+-- 'endpointGroupRegion', 'createCustomRoutingEndpointGroup_endpointGroupRegion' - The Amazon Web Services Region where the endpoint group is located. A
+-- listener can have only one endpoint group in a specific Region.
+--
+-- 'destinationConfigurations', 'createCustomRoutingEndpointGroup_destinationConfigurations' - Sets the port range and protocol for all endpoints (virtual private
+-- cloud subnets) in a custom routing endpoint group to accept client
+-- traffic on.
+--
+-- 'idempotencyToken', 'createCustomRoutingEndpointGroup_idempotencyToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency—that is, the uniqueness—of the request.
+newCreateCustomRoutingEndpointGroup ::
+  -- | 'listenerArn'
+  Prelude.Text ->
+  -- | 'endpointGroupRegion'
+  Prelude.Text ->
+  -- | 'destinationConfigurations'
+  Prelude.NonEmpty CustomRoutingDestinationConfiguration ->
+  -- | 'idempotencyToken'
+  Prelude.Text ->
+  CreateCustomRoutingEndpointGroup
+newCreateCustomRoutingEndpointGroup
+  pListenerArn_
+  pEndpointGroupRegion_
+  pDestinationConfigurations_
+  pIdempotencyToken_ =
+    CreateCustomRoutingEndpointGroup'
+      { listenerArn =
+          pListenerArn_,
+        endpointGroupRegion =
+          pEndpointGroupRegion_,
+        destinationConfigurations =
+          Lens.coerced
+            Lens.# pDestinationConfigurations_,
+        idempotencyToken = pIdempotencyToken_
+      }
+
+-- | The Amazon Resource Name (ARN) of the listener for a custom routing
+-- endpoint.
+createCustomRoutingEndpointGroup_listenerArn :: Lens.Lens' CreateCustomRoutingEndpointGroup Prelude.Text
+createCustomRoutingEndpointGroup_listenerArn = Lens.lens (\CreateCustomRoutingEndpointGroup' {listenerArn} -> listenerArn) (\s@CreateCustomRoutingEndpointGroup' {} a -> s {listenerArn = a} :: CreateCustomRoutingEndpointGroup)
+
+-- | The Amazon Web Services Region where the endpoint group is located. A
+-- listener can have only one endpoint group in a specific Region.
+createCustomRoutingEndpointGroup_endpointGroupRegion :: Lens.Lens' CreateCustomRoutingEndpointGroup Prelude.Text
+createCustomRoutingEndpointGroup_endpointGroupRegion = Lens.lens (\CreateCustomRoutingEndpointGroup' {endpointGroupRegion} -> endpointGroupRegion) (\s@CreateCustomRoutingEndpointGroup' {} a -> s {endpointGroupRegion = a} :: CreateCustomRoutingEndpointGroup)
+
+-- | Sets the port range and protocol for all endpoints (virtual private
+-- cloud subnets) in a custom routing endpoint group to accept client
+-- traffic on.
+createCustomRoutingEndpointGroup_destinationConfigurations :: Lens.Lens' CreateCustomRoutingEndpointGroup (Prelude.NonEmpty CustomRoutingDestinationConfiguration)
+createCustomRoutingEndpointGroup_destinationConfigurations = Lens.lens (\CreateCustomRoutingEndpointGroup' {destinationConfigurations} -> destinationConfigurations) (\s@CreateCustomRoutingEndpointGroup' {} a -> s {destinationConfigurations = a} :: CreateCustomRoutingEndpointGroup) Prelude.. Lens.coerced
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency—that is, the uniqueness—of the request.
+createCustomRoutingEndpointGroup_idempotencyToken :: Lens.Lens' CreateCustomRoutingEndpointGroup Prelude.Text
+createCustomRoutingEndpointGroup_idempotencyToken = Lens.lens (\CreateCustomRoutingEndpointGroup' {idempotencyToken} -> idempotencyToken) (\s@CreateCustomRoutingEndpointGroup' {} a -> s {idempotencyToken = a} :: CreateCustomRoutingEndpointGroup)
+
+instance
+  Core.AWSRequest
+    CreateCustomRoutingEndpointGroup
+  where
+  type
+    AWSResponse CreateCustomRoutingEndpointGroup =
+      CreateCustomRoutingEndpointGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateCustomRoutingEndpointGroupResponse'
+            Prelude.<$> (x Data..?> "EndpointGroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateCustomRoutingEndpointGroup
+  where
+  hashWithSalt
+    _salt
+    CreateCustomRoutingEndpointGroup' {..} =
+      _salt
+        `Prelude.hashWithSalt` listenerArn
+        `Prelude.hashWithSalt` endpointGroupRegion
+        `Prelude.hashWithSalt` destinationConfigurations
+        `Prelude.hashWithSalt` idempotencyToken
+
+instance
+  Prelude.NFData
+    CreateCustomRoutingEndpointGroup
+  where
+  rnf CreateCustomRoutingEndpointGroup' {..} =
+    Prelude.rnf listenerArn
+      `Prelude.seq` Prelude.rnf endpointGroupRegion
+      `Prelude.seq` Prelude.rnf destinationConfigurations
+      `Prelude.seq` Prelude.rnf idempotencyToken
+
+instance
+  Data.ToHeaders
+    CreateCustomRoutingEndpointGroup
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.CreateCustomRoutingEndpointGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateCustomRoutingEndpointGroup where
+  toJSON CreateCustomRoutingEndpointGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ListenerArn" Data..= listenerArn),
+            Prelude.Just
+              ("EndpointGroupRegion" Data..= endpointGroupRegion),
+            Prelude.Just
+              ( "DestinationConfigurations"
+                  Data..= destinationConfigurations
+              ),
+            Prelude.Just
+              ("IdempotencyToken" Data..= idempotencyToken)
+          ]
+      )
+
+instance Data.ToPath CreateCustomRoutingEndpointGroup where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreateCustomRoutingEndpointGroup
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateCustomRoutingEndpointGroupResponse' smart constructor.
+data CreateCustomRoutingEndpointGroupResponse = CreateCustomRoutingEndpointGroupResponse'
+  { -- | The information about the endpoint group created for a custom routing
+    -- accelerator.
+    endpointGroup :: Prelude.Maybe CustomRoutingEndpointGroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCustomRoutingEndpointGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointGroup', 'createCustomRoutingEndpointGroupResponse_endpointGroup' - The information about the endpoint group created for a custom routing
+-- accelerator.
+--
+-- 'httpStatus', 'createCustomRoutingEndpointGroupResponse_httpStatus' - The response's http status code.
+newCreateCustomRoutingEndpointGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCustomRoutingEndpointGroupResponse
+newCreateCustomRoutingEndpointGroupResponse
+  pHttpStatus_ =
+    CreateCustomRoutingEndpointGroupResponse'
+      { endpointGroup =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The information about the endpoint group created for a custom routing
+-- accelerator.
+createCustomRoutingEndpointGroupResponse_endpointGroup :: Lens.Lens' CreateCustomRoutingEndpointGroupResponse (Prelude.Maybe CustomRoutingEndpointGroup)
+createCustomRoutingEndpointGroupResponse_endpointGroup = Lens.lens (\CreateCustomRoutingEndpointGroupResponse' {endpointGroup} -> endpointGroup) (\s@CreateCustomRoutingEndpointGroupResponse' {} a -> s {endpointGroup = a} :: CreateCustomRoutingEndpointGroupResponse)
+
+-- | The response's http status code.
+createCustomRoutingEndpointGroupResponse_httpStatus :: Lens.Lens' CreateCustomRoutingEndpointGroupResponse Prelude.Int
+createCustomRoutingEndpointGroupResponse_httpStatus = Lens.lens (\CreateCustomRoutingEndpointGroupResponse' {httpStatus} -> httpStatus) (\s@CreateCustomRoutingEndpointGroupResponse' {} a -> s {httpStatus = a} :: CreateCustomRoutingEndpointGroupResponse)
+
+instance
+  Prelude.NFData
+    CreateCustomRoutingEndpointGroupResponse
+  where
+  rnf CreateCustomRoutingEndpointGroupResponse' {..} =
+    Prelude.rnf endpointGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/CreateCustomRoutingListener.hs b/gen/Amazonka/GlobalAccelerator/CreateCustomRoutingListener.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/CreateCustomRoutingListener.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.GlobalAccelerator.CreateCustomRoutingListener
+-- 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 a listener to process inbound connections from clients to a
+-- custom routing accelerator. Connections arrive to assigned static IP
+-- addresses on the port range that you specify.
+module Amazonka.GlobalAccelerator.CreateCustomRoutingListener
+  ( -- * Creating a Request
+    CreateCustomRoutingListener (..),
+    newCreateCustomRoutingListener,
+
+    -- * Request Lenses
+    createCustomRoutingListener_acceleratorArn,
+    createCustomRoutingListener_portRanges,
+    createCustomRoutingListener_idempotencyToken,
+
+    -- * Destructuring the Response
+    CreateCustomRoutingListenerResponse (..),
+    newCreateCustomRoutingListenerResponse,
+
+    -- * Response Lenses
+    createCustomRoutingListenerResponse_listener,
+    createCustomRoutingListenerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateCustomRoutingListener' smart constructor.
+data CreateCustomRoutingListener = CreateCustomRoutingListener'
+  { -- | The Amazon Resource Name (ARN) of the accelerator for a custom routing
+    -- listener.
+    acceleratorArn :: Prelude.Text,
+    -- | The port range to support for connections from clients to your
+    -- accelerator.
+    --
+    -- Separately, you set port ranges for endpoints. For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-custom-routing-endpoints.html About endpoints for custom routing accelerators>.
+    portRanges :: Prelude.NonEmpty PortRange,
+    -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency—that is, the uniqueness—of the request.
+    idempotencyToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCustomRoutingListener' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorArn', 'createCustomRoutingListener_acceleratorArn' - The Amazon Resource Name (ARN) of the accelerator for a custom routing
+-- listener.
+--
+-- 'portRanges', 'createCustomRoutingListener_portRanges' - The port range to support for connections from clients to your
+-- accelerator.
+--
+-- Separately, you set port ranges for endpoints. For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-custom-routing-endpoints.html About endpoints for custom routing accelerators>.
+--
+-- 'idempotencyToken', 'createCustomRoutingListener_idempotencyToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency—that is, the uniqueness—of the request.
+newCreateCustomRoutingListener ::
+  -- | 'acceleratorArn'
+  Prelude.Text ->
+  -- | 'portRanges'
+  Prelude.NonEmpty PortRange ->
+  -- | 'idempotencyToken'
+  Prelude.Text ->
+  CreateCustomRoutingListener
+newCreateCustomRoutingListener
+  pAcceleratorArn_
+  pPortRanges_
+  pIdempotencyToken_ =
+    CreateCustomRoutingListener'
+      { acceleratorArn =
+          pAcceleratorArn_,
+        portRanges = Lens.coerced Lens.# pPortRanges_,
+        idempotencyToken = pIdempotencyToken_
+      }
+
+-- | The Amazon Resource Name (ARN) of the accelerator for a custom routing
+-- listener.
+createCustomRoutingListener_acceleratorArn :: Lens.Lens' CreateCustomRoutingListener Prelude.Text
+createCustomRoutingListener_acceleratorArn = Lens.lens (\CreateCustomRoutingListener' {acceleratorArn} -> acceleratorArn) (\s@CreateCustomRoutingListener' {} a -> s {acceleratorArn = a} :: CreateCustomRoutingListener)
+
+-- | The port range to support for connections from clients to your
+-- accelerator.
+--
+-- Separately, you set port ranges for endpoints. For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-custom-routing-endpoints.html About endpoints for custom routing accelerators>.
+createCustomRoutingListener_portRanges :: Lens.Lens' CreateCustomRoutingListener (Prelude.NonEmpty PortRange)
+createCustomRoutingListener_portRanges = Lens.lens (\CreateCustomRoutingListener' {portRanges} -> portRanges) (\s@CreateCustomRoutingListener' {} a -> s {portRanges = a} :: CreateCustomRoutingListener) Prelude.. Lens.coerced
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency—that is, the uniqueness—of the request.
+createCustomRoutingListener_idempotencyToken :: Lens.Lens' CreateCustomRoutingListener Prelude.Text
+createCustomRoutingListener_idempotencyToken = Lens.lens (\CreateCustomRoutingListener' {idempotencyToken} -> idempotencyToken) (\s@CreateCustomRoutingListener' {} a -> s {idempotencyToken = a} :: CreateCustomRoutingListener)
+
+instance Core.AWSRequest CreateCustomRoutingListener where
+  type
+    AWSResponse CreateCustomRoutingListener =
+      CreateCustomRoutingListenerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateCustomRoutingListenerResponse'
+            Prelude.<$> (x Data..?> "Listener")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateCustomRoutingListener where
+  hashWithSalt _salt CreateCustomRoutingListener' {..} =
+    _salt
+      `Prelude.hashWithSalt` acceleratorArn
+      `Prelude.hashWithSalt` portRanges
+      `Prelude.hashWithSalt` idempotencyToken
+
+instance Prelude.NFData CreateCustomRoutingListener where
+  rnf CreateCustomRoutingListener' {..} =
+    Prelude.rnf acceleratorArn
+      `Prelude.seq` Prelude.rnf portRanges
+      `Prelude.seq` Prelude.rnf idempotencyToken
+
+instance Data.ToHeaders CreateCustomRoutingListener where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.CreateCustomRoutingListener" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateCustomRoutingListener where
+  toJSON CreateCustomRoutingListener' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AcceleratorArn" Data..= acceleratorArn),
+            Prelude.Just ("PortRanges" Data..= portRanges),
+            Prelude.Just
+              ("IdempotencyToken" Data..= idempotencyToken)
+          ]
+      )
+
+instance Data.ToPath CreateCustomRoutingListener where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateCustomRoutingListener where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateCustomRoutingListenerResponse' smart constructor.
+data CreateCustomRoutingListenerResponse = CreateCustomRoutingListenerResponse'
+  { -- | The listener that you\'ve created for a custom routing accelerator.
+    listener :: Prelude.Maybe CustomRoutingListener,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCustomRoutingListenerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'listener', 'createCustomRoutingListenerResponse_listener' - The listener that you\'ve created for a custom routing accelerator.
+--
+-- 'httpStatus', 'createCustomRoutingListenerResponse_httpStatus' - The response's http status code.
+newCreateCustomRoutingListenerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCustomRoutingListenerResponse
+newCreateCustomRoutingListenerResponse pHttpStatus_ =
+  CreateCustomRoutingListenerResponse'
+    { listener =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The listener that you\'ve created for a custom routing accelerator.
+createCustomRoutingListenerResponse_listener :: Lens.Lens' CreateCustomRoutingListenerResponse (Prelude.Maybe CustomRoutingListener)
+createCustomRoutingListenerResponse_listener = Lens.lens (\CreateCustomRoutingListenerResponse' {listener} -> listener) (\s@CreateCustomRoutingListenerResponse' {} a -> s {listener = a} :: CreateCustomRoutingListenerResponse)
+
+-- | The response's http status code.
+createCustomRoutingListenerResponse_httpStatus :: Lens.Lens' CreateCustomRoutingListenerResponse Prelude.Int
+createCustomRoutingListenerResponse_httpStatus = Lens.lens (\CreateCustomRoutingListenerResponse' {httpStatus} -> httpStatus) (\s@CreateCustomRoutingListenerResponse' {} a -> s {httpStatus = a} :: CreateCustomRoutingListenerResponse)
+
+instance
+  Prelude.NFData
+    CreateCustomRoutingListenerResponse
+  where
+  rnf CreateCustomRoutingListenerResponse' {..} =
+    Prelude.rnf listener
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/CreateEndpointGroup.hs b/gen/Amazonka/GlobalAccelerator/CreateEndpointGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/CreateEndpointGroup.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.GlobalAccelerator.CreateEndpointGroup
+-- 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 endpoint group for the specified listener. An endpoint group
+-- is a collection of endpoints in one Amazon Web Services Region. A
+-- resource must be valid and active when you add it as an endpoint.
+module Amazonka.GlobalAccelerator.CreateEndpointGroup
+  ( -- * Creating a Request
+    CreateEndpointGroup (..),
+    newCreateEndpointGroup,
+
+    -- * Request Lenses
+    createEndpointGroup_endpointConfigurations,
+    createEndpointGroup_healthCheckIntervalSeconds,
+    createEndpointGroup_healthCheckPath,
+    createEndpointGroup_healthCheckPort,
+    createEndpointGroup_healthCheckProtocol,
+    createEndpointGroup_portOverrides,
+    createEndpointGroup_thresholdCount,
+    createEndpointGroup_trafficDialPercentage,
+    createEndpointGroup_listenerArn,
+    createEndpointGroup_endpointGroupRegion,
+    createEndpointGroup_idempotencyToken,
+
+    -- * Destructuring the Response
+    CreateEndpointGroupResponse (..),
+    newCreateEndpointGroupResponse,
+
+    -- * Response Lenses
+    createEndpointGroupResponse_endpointGroup,
+    createEndpointGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateEndpointGroup' smart constructor.
+data CreateEndpointGroup = CreateEndpointGroup'
+  { -- | The list of endpoint objects.
+    endpointConfigurations :: Prelude.Maybe [EndpointConfiguration],
+    -- | The time—10 seconds or 30 seconds—between each health check for an
+    -- endpoint. The default value is 30.
+    healthCheckIntervalSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | If the protocol is HTTP\/S, then this specifies the path that is the
+    -- destination for health check targets. The default value is slash (\/).
+    healthCheckPath :: Prelude.Maybe Prelude.Text,
+    -- | The port that Global Accelerator uses to check the health of endpoints
+    -- that are part of this endpoint group. The default port is the listener
+    -- port that this endpoint group is associated with. If listener port is a
+    -- list of ports, Global Accelerator uses the first port in the list.
+    healthCheckPort :: Prelude.Maybe Prelude.Natural,
+    -- | The protocol that Global Accelerator uses to check the health of
+    -- endpoints that are part of this endpoint group. The default value is
+    -- TCP.
+    healthCheckProtocol :: Prelude.Maybe HealthCheckProtocol,
+    -- | Override specific listener ports used to route traffic to endpoints that
+    -- are part of this endpoint group. For example, you can create a port
+    -- override in which the listener receives user traffic on ports 80 and
+    -- 443, but your accelerator routes that traffic to ports 1080 and 1443,
+    -- respectively, on the endpoints.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-endpoint-groups-port-override.html Overriding listener ports>
+    -- in the /Global Accelerator Developer Guide/.
+    portOverrides :: Prelude.Maybe [PortOverride],
+    -- | The number of consecutive health checks required to set the state of a
+    -- healthy endpoint to unhealthy, or to set an unhealthy endpoint to
+    -- healthy. The default value is 3.
+    thresholdCount :: Prelude.Maybe Prelude.Natural,
+    -- | The percentage of traffic to send to an Amazon Web Services Region.
+    -- Additional traffic is distributed to other endpoint groups for this
+    -- listener.
+    --
+    -- Use this action to increase (dial up) or decrease (dial down) traffic to
+    -- a specific Region. The percentage is applied to the traffic that would
+    -- otherwise have been routed to the Region based on optimal routing.
+    --
+    -- The default value is 100.
+    trafficDialPercentage :: Prelude.Maybe Prelude.Double,
+    -- | The Amazon Resource Name (ARN) of the listener.
+    listenerArn :: Prelude.Text,
+    -- | The Amazon Web Services Region where the endpoint group is located. A
+    -- listener can have only one endpoint group in a specific Region.
+    endpointGroupRegion :: Prelude.Text,
+    -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency—that is, the uniqueness—of the request.
+    idempotencyToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEndpointGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointConfigurations', 'createEndpointGroup_endpointConfigurations' - The list of endpoint objects.
+--
+-- 'healthCheckIntervalSeconds', 'createEndpointGroup_healthCheckIntervalSeconds' - The time—10 seconds or 30 seconds—between each health check for an
+-- endpoint. The default value is 30.
+--
+-- 'healthCheckPath', 'createEndpointGroup_healthCheckPath' - If the protocol is HTTP\/S, then this specifies the path that is the
+-- destination for health check targets. The default value is slash (\/).
+--
+-- 'healthCheckPort', 'createEndpointGroup_healthCheckPort' - The port that Global Accelerator uses to check the health of endpoints
+-- that are part of this endpoint group. The default port is the listener
+-- port that this endpoint group is associated with. If listener port is a
+-- list of ports, Global Accelerator uses the first port in the list.
+--
+-- 'healthCheckProtocol', 'createEndpointGroup_healthCheckProtocol' - The protocol that Global Accelerator uses to check the health of
+-- endpoints that are part of this endpoint group. The default value is
+-- TCP.
+--
+-- 'portOverrides', 'createEndpointGroup_portOverrides' - Override specific listener ports used to route traffic to endpoints that
+-- are part of this endpoint group. For example, you can create a port
+-- override in which the listener receives user traffic on ports 80 and
+-- 443, but your accelerator routes that traffic to ports 1080 and 1443,
+-- respectively, on the endpoints.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-endpoint-groups-port-override.html Overriding listener ports>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- 'thresholdCount', 'createEndpointGroup_thresholdCount' - The number of consecutive health checks required to set the state of a
+-- healthy endpoint to unhealthy, or to set an unhealthy endpoint to
+-- healthy. The default value is 3.
+--
+-- 'trafficDialPercentage', 'createEndpointGroup_trafficDialPercentage' - The percentage of traffic to send to an Amazon Web Services Region.
+-- Additional traffic is distributed to other endpoint groups for this
+-- listener.
+--
+-- Use this action to increase (dial up) or decrease (dial down) traffic to
+-- a specific Region. The percentage is applied to the traffic that would
+-- otherwise have been routed to the Region based on optimal routing.
+--
+-- The default value is 100.
+--
+-- 'listenerArn', 'createEndpointGroup_listenerArn' - The Amazon Resource Name (ARN) of the listener.
+--
+-- 'endpointGroupRegion', 'createEndpointGroup_endpointGroupRegion' - The Amazon Web Services Region where the endpoint group is located. A
+-- listener can have only one endpoint group in a specific Region.
+--
+-- 'idempotencyToken', 'createEndpointGroup_idempotencyToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency—that is, the uniqueness—of the request.
+newCreateEndpointGroup ::
+  -- | 'listenerArn'
+  Prelude.Text ->
+  -- | 'endpointGroupRegion'
+  Prelude.Text ->
+  -- | 'idempotencyToken'
+  Prelude.Text ->
+  CreateEndpointGroup
+newCreateEndpointGroup
+  pListenerArn_
+  pEndpointGroupRegion_
+  pIdempotencyToken_ =
+    CreateEndpointGroup'
+      { endpointConfigurations =
+          Prelude.Nothing,
+        healthCheckIntervalSeconds = Prelude.Nothing,
+        healthCheckPath = Prelude.Nothing,
+        healthCheckPort = Prelude.Nothing,
+        healthCheckProtocol = Prelude.Nothing,
+        portOverrides = Prelude.Nothing,
+        thresholdCount = Prelude.Nothing,
+        trafficDialPercentage = Prelude.Nothing,
+        listenerArn = pListenerArn_,
+        endpointGroupRegion = pEndpointGroupRegion_,
+        idempotencyToken = pIdempotencyToken_
+      }
+
+-- | The list of endpoint objects.
+createEndpointGroup_endpointConfigurations :: Lens.Lens' CreateEndpointGroup (Prelude.Maybe [EndpointConfiguration])
+createEndpointGroup_endpointConfigurations = Lens.lens (\CreateEndpointGroup' {endpointConfigurations} -> endpointConfigurations) (\s@CreateEndpointGroup' {} a -> s {endpointConfigurations = a} :: CreateEndpointGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time—10 seconds or 30 seconds—between each health check for an
+-- endpoint. The default value is 30.
+createEndpointGroup_healthCheckIntervalSeconds :: Lens.Lens' CreateEndpointGroup (Prelude.Maybe Prelude.Natural)
+createEndpointGroup_healthCheckIntervalSeconds = Lens.lens (\CreateEndpointGroup' {healthCheckIntervalSeconds} -> healthCheckIntervalSeconds) (\s@CreateEndpointGroup' {} a -> s {healthCheckIntervalSeconds = a} :: CreateEndpointGroup)
+
+-- | If the protocol is HTTP\/S, then this specifies the path that is the
+-- destination for health check targets. The default value is slash (\/).
+createEndpointGroup_healthCheckPath :: Lens.Lens' CreateEndpointGroup (Prelude.Maybe Prelude.Text)
+createEndpointGroup_healthCheckPath = Lens.lens (\CreateEndpointGroup' {healthCheckPath} -> healthCheckPath) (\s@CreateEndpointGroup' {} a -> s {healthCheckPath = a} :: CreateEndpointGroup)
+
+-- | The port that Global Accelerator uses to check the health of endpoints
+-- that are part of this endpoint group. The default port is the listener
+-- port that this endpoint group is associated with. If listener port is a
+-- list of ports, Global Accelerator uses the first port in the list.
+createEndpointGroup_healthCheckPort :: Lens.Lens' CreateEndpointGroup (Prelude.Maybe Prelude.Natural)
+createEndpointGroup_healthCheckPort = Lens.lens (\CreateEndpointGroup' {healthCheckPort} -> healthCheckPort) (\s@CreateEndpointGroup' {} a -> s {healthCheckPort = a} :: CreateEndpointGroup)
+
+-- | The protocol that Global Accelerator uses to check the health of
+-- endpoints that are part of this endpoint group. The default value is
+-- TCP.
+createEndpointGroup_healthCheckProtocol :: Lens.Lens' CreateEndpointGroup (Prelude.Maybe HealthCheckProtocol)
+createEndpointGroup_healthCheckProtocol = Lens.lens (\CreateEndpointGroup' {healthCheckProtocol} -> healthCheckProtocol) (\s@CreateEndpointGroup' {} a -> s {healthCheckProtocol = a} :: CreateEndpointGroup)
+
+-- | Override specific listener ports used to route traffic to endpoints that
+-- are part of this endpoint group. For example, you can create a port
+-- override in which the listener receives user traffic on ports 80 and
+-- 443, but your accelerator routes that traffic to ports 1080 and 1443,
+-- respectively, on the endpoints.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-endpoint-groups-port-override.html Overriding listener ports>
+-- in the /Global Accelerator Developer Guide/.
+createEndpointGroup_portOverrides :: Lens.Lens' CreateEndpointGroup (Prelude.Maybe [PortOverride])
+createEndpointGroup_portOverrides = Lens.lens (\CreateEndpointGroup' {portOverrides} -> portOverrides) (\s@CreateEndpointGroup' {} a -> s {portOverrides = a} :: CreateEndpointGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of consecutive health checks required to set the state of a
+-- healthy endpoint to unhealthy, or to set an unhealthy endpoint to
+-- healthy. The default value is 3.
+createEndpointGroup_thresholdCount :: Lens.Lens' CreateEndpointGroup (Prelude.Maybe Prelude.Natural)
+createEndpointGroup_thresholdCount = Lens.lens (\CreateEndpointGroup' {thresholdCount} -> thresholdCount) (\s@CreateEndpointGroup' {} a -> s {thresholdCount = a} :: CreateEndpointGroup)
+
+-- | The percentage of traffic to send to an Amazon Web Services Region.
+-- Additional traffic is distributed to other endpoint groups for this
+-- listener.
+--
+-- Use this action to increase (dial up) or decrease (dial down) traffic to
+-- a specific Region. The percentage is applied to the traffic that would
+-- otherwise have been routed to the Region based on optimal routing.
+--
+-- The default value is 100.
+createEndpointGroup_trafficDialPercentage :: Lens.Lens' CreateEndpointGroup (Prelude.Maybe Prelude.Double)
+createEndpointGroup_trafficDialPercentage = Lens.lens (\CreateEndpointGroup' {trafficDialPercentage} -> trafficDialPercentage) (\s@CreateEndpointGroup' {} a -> s {trafficDialPercentage = a} :: CreateEndpointGroup)
+
+-- | The Amazon Resource Name (ARN) of the listener.
+createEndpointGroup_listenerArn :: Lens.Lens' CreateEndpointGroup Prelude.Text
+createEndpointGroup_listenerArn = Lens.lens (\CreateEndpointGroup' {listenerArn} -> listenerArn) (\s@CreateEndpointGroup' {} a -> s {listenerArn = a} :: CreateEndpointGroup)
+
+-- | The Amazon Web Services Region where the endpoint group is located. A
+-- listener can have only one endpoint group in a specific Region.
+createEndpointGroup_endpointGroupRegion :: Lens.Lens' CreateEndpointGroup Prelude.Text
+createEndpointGroup_endpointGroupRegion = Lens.lens (\CreateEndpointGroup' {endpointGroupRegion} -> endpointGroupRegion) (\s@CreateEndpointGroup' {} a -> s {endpointGroupRegion = a} :: CreateEndpointGroup)
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency—that is, the uniqueness—of the request.
+createEndpointGroup_idempotencyToken :: Lens.Lens' CreateEndpointGroup Prelude.Text
+createEndpointGroup_idempotencyToken = Lens.lens (\CreateEndpointGroup' {idempotencyToken} -> idempotencyToken) (\s@CreateEndpointGroup' {} a -> s {idempotencyToken = a} :: CreateEndpointGroup)
+
+instance Core.AWSRequest CreateEndpointGroup where
+  type
+    AWSResponse CreateEndpointGroup =
+      CreateEndpointGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateEndpointGroupResponse'
+            Prelude.<$> (x Data..?> "EndpointGroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateEndpointGroup where
+  hashWithSalt _salt CreateEndpointGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` endpointConfigurations
+      `Prelude.hashWithSalt` healthCheckIntervalSeconds
+      `Prelude.hashWithSalt` healthCheckPath
+      `Prelude.hashWithSalt` healthCheckPort
+      `Prelude.hashWithSalt` healthCheckProtocol
+      `Prelude.hashWithSalt` portOverrides
+      `Prelude.hashWithSalt` thresholdCount
+      `Prelude.hashWithSalt` trafficDialPercentage
+      `Prelude.hashWithSalt` listenerArn
+      `Prelude.hashWithSalt` endpointGroupRegion
+      `Prelude.hashWithSalt` idempotencyToken
+
+instance Prelude.NFData CreateEndpointGroup where
+  rnf CreateEndpointGroup' {..} =
+    Prelude.rnf endpointConfigurations
+      `Prelude.seq` Prelude.rnf healthCheckIntervalSeconds
+      `Prelude.seq` Prelude.rnf healthCheckPath
+      `Prelude.seq` Prelude.rnf healthCheckPort
+      `Prelude.seq` Prelude.rnf healthCheckProtocol
+      `Prelude.seq` Prelude.rnf portOverrides
+      `Prelude.seq` Prelude.rnf thresholdCount
+      `Prelude.seq` Prelude.rnf trafficDialPercentage
+      `Prelude.seq` Prelude.rnf listenerArn
+      `Prelude.seq` Prelude.rnf endpointGroupRegion
+      `Prelude.seq` Prelude.rnf idempotencyToken
+
+instance Data.ToHeaders CreateEndpointGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.CreateEndpointGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateEndpointGroup where
+  toJSON CreateEndpointGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EndpointConfigurations" Data..=)
+              Prelude.<$> endpointConfigurations,
+            ("HealthCheckIntervalSeconds" Data..=)
+              Prelude.<$> healthCheckIntervalSeconds,
+            ("HealthCheckPath" Data..=)
+              Prelude.<$> healthCheckPath,
+            ("HealthCheckPort" Data..=)
+              Prelude.<$> healthCheckPort,
+            ("HealthCheckProtocol" Data..=)
+              Prelude.<$> healthCheckProtocol,
+            ("PortOverrides" Data..=) Prelude.<$> portOverrides,
+            ("ThresholdCount" Data..=)
+              Prelude.<$> thresholdCount,
+            ("TrafficDialPercentage" Data..=)
+              Prelude.<$> trafficDialPercentage,
+            Prelude.Just ("ListenerArn" Data..= listenerArn),
+            Prelude.Just
+              ("EndpointGroupRegion" Data..= endpointGroupRegion),
+            Prelude.Just
+              ("IdempotencyToken" Data..= idempotencyToken)
+          ]
+      )
+
+instance Data.ToPath CreateEndpointGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateEndpointGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateEndpointGroupResponse' smart constructor.
+data CreateEndpointGroupResponse = CreateEndpointGroupResponse'
+  { -- | The information about the endpoint group that was created.
+    endpointGroup :: Prelude.Maybe EndpointGroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEndpointGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointGroup', 'createEndpointGroupResponse_endpointGroup' - The information about the endpoint group that was created.
+--
+-- 'httpStatus', 'createEndpointGroupResponse_httpStatus' - The response's http status code.
+newCreateEndpointGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateEndpointGroupResponse
+newCreateEndpointGroupResponse pHttpStatus_ =
+  CreateEndpointGroupResponse'
+    { endpointGroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The information about the endpoint group that was created.
+createEndpointGroupResponse_endpointGroup :: Lens.Lens' CreateEndpointGroupResponse (Prelude.Maybe EndpointGroup)
+createEndpointGroupResponse_endpointGroup = Lens.lens (\CreateEndpointGroupResponse' {endpointGroup} -> endpointGroup) (\s@CreateEndpointGroupResponse' {} a -> s {endpointGroup = a} :: CreateEndpointGroupResponse)
+
+-- | The response's http status code.
+createEndpointGroupResponse_httpStatus :: Lens.Lens' CreateEndpointGroupResponse Prelude.Int
+createEndpointGroupResponse_httpStatus = Lens.lens (\CreateEndpointGroupResponse' {httpStatus} -> httpStatus) (\s@CreateEndpointGroupResponse' {} a -> s {httpStatus = a} :: CreateEndpointGroupResponse)
+
+instance Prelude.NFData CreateEndpointGroupResponse where
+  rnf CreateEndpointGroupResponse' {..} =
+    Prelude.rnf endpointGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/CreateListener.hs b/gen/Amazonka/GlobalAccelerator/CreateListener.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/CreateListener.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.GlobalAccelerator.CreateListener
+-- 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 a listener to process inbound connections from clients to an
+-- accelerator. Connections arrive to assigned static IP addresses on a
+-- port, port range, or list of port ranges that you specify.
+module Amazonka.GlobalAccelerator.CreateListener
+  ( -- * Creating a Request
+    CreateListener (..),
+    newCreateListener,
+
+    -- * Request Lenses
+    createListener_clientAffinity,
+    createListener_acceleratorArn,
+    createListener_portRanges,
+    createListener_protocol,
+    createListener_idempotencyToken,
+
+    -- * Destructuring the Response
+    CreateListenerResponse (..),
+    newCreateListenerResponse,
+
+    -- * Response Lenses
+    createListenerResponse_listener,
+    createListenerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateListener' smart constructor.
+data CreateListener = CreateListener'
+  { -- | Client affinity lets you direct all requests from a user to the same
+    -- endpoint, if you have stateful applications, regardless of the port and
+    -- protocol of the client request. Client affinity gives you control over
+    -- whether to always route each client to the same specific endpoint.
+    --
+    -- Global Accelerator uses a consistent-flow hashing algorithm to choose
+    -- the optimal endpoint for a connection. If client affinity is @NONE@,
+    -- Global Accelerator uses the \"five-tuple\" (5-tuple) properties—source
+    -- IP address, source port, destination IP address, destination port, and
+    -- protocol—to select the hash value, and then chooses the best endpoint.
+    -- However, with this setting, if someone uses different ports to connect
+    -- to Global Accelerator, their connections might not be always routed to
+    -- the same endpoint because the hash value changes.
+    --
+    -- If you want a given client to always be routed to the same endpoint, set
+    -- client affinity to @SOURCE_IP@ instead. When you use the @SOURCE_IP@
+    -- setting, Global Accelerator uses the \"two-tuple\" (2-tuple) properties—
+    -- source (client) IP address and destination IP address—to select the hash
+    -- value.
+    --
+    -- The default value is @NONE@.
+    clientAffinity :: Prelude.Maybe ClientAffinity,
+    -- | The Amazon Resource Name (ARN) of your accelerator.
+    acceleratorArn :: Prelude.Text,
+    -- | The list of port ranges to support for connections from clients to your
+    -- accelerator.
+    portRanges :: Prelude.NonEmpty PortRange,
+    -- | The protocol for connections from clients to your accelerator.
+    protocol :: Protocol,
+    -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency—that is, the uniqueness—of the request.
+    idempotencyToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateListener' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientAffinity', 'createListener_clientAffinity' - Client affinity lets you direct all requests from a user to the same
+-- endpoint, if you have stateful applications, regardless of the port and
+-- protocol of the client request. Client affinity gives you control over
+-- whether to always route each client to the same specific endpoint.
+--
+-- Global Accelerator uses a consistent-flow hashing algorithm to choose
+-- the optimal endpoint for a connection. If client affinity is @NONE@,
+-- Global Accelerator uses the \"five-tuple\" (5-tuple) properties—source
+-- IP address, source port, destination IP address, destination port, and
+-- protocol—to select the hash value, and then chooses the best endpoint.
+-- However, with this setting, if someone uses different ports to connect
+-- to Global Accelerator, their connections might not be always routed to
+-- the same endpoint because the hash value changes.
+--
+-- If you want a given client to always be routed to the same endpoint, set
+-- client affinity to @SOURCE_IP@ instead. When you use the @SOURCE_IP@
+-- setting, Global Accelerator uses the \"two-tuple\" (2-tuple) properties—
+-- source (client) IP address and destination IP address—to select the hash
+-- value.
+--
+-- The default value is @NONE@.
+--
+-- 'acceleratorArn', 'createListener_acceleratorArn' - The Amazon Resource Name (ARN) of your accelerator.
+--
+-- 'portRanges', 'createListener_portRanges' - The list of port ranges to support for connections from clients to your
+-- accelerator.
+--
+-- 'protocol', 'createListener_protocol' - The protocol for connections from clients to your accelerator.
+--
+-- 'idempotencyToken', 'createListener_idempotencyToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency—that is, the uniqueness—of the request.
+newCreateListener ::
+  -- | 'acceleratorArn'
+  Prelude.Text ->
+  -- | 'portRanges'
+  Prelude.NonEmpty PortRange ->
+  -- | 'protocol'
+  Protocol ->
+  -- | 'idempotencyToken'
+  Prelude.Text ->
+  CreateListener
+newCreateListener
+  pAcceleratorArn_
+  pPortRanges_
+  pProtocol_
+  pIdempotencyToken_ =
+    CreateListener'
+      { clientAffinity = Prelude.Nothing,
+        acceleratorArn = pAcceleratorArn_,
+        portRanges = Lens.coerced Lens.# pPortRanges_,
+        protocol = pProtocol_,
+        idempotencyToken = pIdempotencyToken_
+      }
+
+-- | Client affinity lets you direct all requests from a user to the same
+-- endpoint, if you have stateful applications, regardless of the port and
+-- protocol of the client request. Client affinity gives you control over
+-- whether to always route each client to the same specific endpoint.
+--
+-- Global Accelerator uses a consistent-flow hashing algorithm to choose
+-- the optimal endpoint for a connection. If client affinity is @NONE@,
+-- Global Accelerator uses the \"five-tuple\" (5-tuple) properties—source
+-- IP address, source port, destination IP address, destination port, and
+-- protocol—to select the hash value, and then chooses the best endpoint.
+-- However, with this setting, if someone uses different ports to connect
+-- to Global Accelerator, their connections might not be always routed to
+-- the same endpoint because the hash value changes.
+--
+-- If you want a given client to always be routed to the same endpoint, set
+-- client affinity to @SOURCE_IP@ instead. When you use the @SOURCE_IP@
+-- setting, Global Accelerator uses the \"two-tuple\" (2-tuple) properties—
+-- source (client) IP address and destination IP address—to select the hash
+-- value.
+--
+-- The default value is @NONE@.
+createListener_clientAffinity :: Lens.Lens' CreateListener (Prelude.Maybe ClientAffinity)
+createListener_clientAffinity = Lens.lens (\CreateListener' {clientAffinity} -> clientAffinity) (\s@CreateListener' {} a -> s {clientAffinity = a} :: CreateListener)
+
+-- | The Amazon Resource Name (ARN) of your accelerator.
+createListener_acceleratorArn :: Lens.Lens' CreateListener Prelude.Text
+createListener_acceleratorArn = Lens.lens (\CreateListener' {acceleratorArn} -> acceleratorArn) (\s@CreateListener' {} a -> s {acceleratorArn = a} :: CreateListener)
+
+-- | The list of port ranges to support for connections from clients to your
+-- accelerator.
+createListener_portRanges :: Lens.Lens' CreateListener (Prelude.NonEmpty PortRange)
+createListener_portRanges = Lens.lens (\CreateListener' {portRanges} -> portRanges) (\s@CreateListener' {} a -> s {portRanges = a} :: CreateListener) Prelude.. Lens.coerced
+
+-- | The protocol for connections from clients to your accelerator.
+createListener_protocol :: Lens.Lens' CreateListener Protocol
+createListener_protocol = Lens.lens (\CreateListener' {protocol} -> protocol) (\s@CreateListener' {} a -> s {protocol = a} :: CreateListener)
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency—that is, the uniqueness—of the request.
+createListener_idempotencyToken :: Lens.Lens' CreateListener Prelude.Text
+createListener_idempotencyToken = Lens.lens (\CreateListener' {idempotencyToken} -> idempotencyToken) (\s@CreateListener' {} a -> s {idempotencyToken = a} :: CreateListener)
+
+instance Core.AWSRequest CreateListener where
+  type
+    AWSResponse CreateListener =
+      CreateListenerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateListenerResponse'
+            Prelude.<$> (x Data..?> "Listener")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateListener where
+  hashWithSalt _salt CreateListener' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientAffinity
+      `Prelude.hashWithSalt` acceleratorArn
+      `Prelude.hashWithSalt` portRanges
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` idempotencyToken
+
+instance Prelude.NFData CreateListener where
+  rnf CreateListener' {..} =
+    Prelude.rnf clientAffinity
+      `Prelude.seq` Prelude.rnf acceleratorArn
+      `Prelude.seq` Prelude.rnf portRanges
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf idempotencyToken
+
+instance Data.ToHeaders CreateListener where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.CreateListener" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateListener where
+  toJSON CreateListener' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientAffinity" Data..=)
+              Prelude.<$> clientAffinity,
+            Prelude.Just
+              ("AcceleratorArn" Data..= acceleratorArn),
+            Prelude.Just ("PortRanges" Data..= portRanges),
+            Prelude.Just ("Protocol" Data..= protocol),
+            Prelude.Just
+              ("IdempotencyToken" Data..= idempotencyToken)
+          ]
+      )
+
+instance Data.ToPath CreateListener where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateListener where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateListenerResponse' smart constructor.
+data CreateListenerResponse = CreateListenerResponse'
+  { -- | The listener that you\'ve created.
+    listener :: Prelude.Maybe Listener,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateListenerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'listener', 'createListenerResponse_listener' - The listener that you\'ve created.
+--
+-- 'httpStatus', 'createListenerResponse_httpStatus' - The response's http status code.
+newCreateListenerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateListenerResponse
+newCreateListenerResponse pHttpStatus_ =
+  CreateListenerResponse'
+    { listener = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The listener that you\'ve created.
+createListenerResponse_listener :: Lens.Lens' CreateListenerResponse (Prelude.Maybe Listener)
+createListenerResponse_listener = Lens.lens (\CreateListenerResponse' {listener} -> listener) (\s@CreateListenerResponse' {} a -> s {listener = a} :: CreateListenerResponse)
+
+-- | The response's http status code.
+createListenerResponse_httpStatus :: Lens.Lens' CreateListenerResponse Prelude.Int
+createListenerResponse_httpStatus = Lens.lens (\CreateListenerResponse' {httpStatus} -> httpStatus) (\s@CreateListenerResponse' {} a -> s {httpStatus = a} :: CreateListenerResponse)
+
+instance Prelude.NFData CreateListenerResponse where
+  rnf CreateListenerResponse' {..} =
+    Prelude.rnf listener
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/DeleteAccelerator.hs b/gen/Amazonka/GlobalAccelerator/DeleteAccelerator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DeleteAccelerator.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.GlobalAccelerator.DeleteAccelerator
+-- 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 accelerator. Before you can delete an accelerator, you must
+-- disable it and remove all dependent resources (listeners and endpoint
+-- groups). To disable the accelerator, update the accelerator to set
+-- @Enabled@ to false.
+--
+-- When you create an accelerator, by default, Global Accelerator provides
+-- you with a set of two static IP addresses. Alternatively, you can bring
+-- your own IP address ranges to Global Accelerator and assign IP addresses
+-- from those ranges.
+--
+-- The IP addresses are assigned to your accelerator for as long as it
+-- exists, even if you disable the accelerator and it no longer accepts or
+-- routes traffic. However, when you /delete/ an accelerator, you lose the
+-- static IP addresses that are assigned to the accelerator, so you can no
+-- longer route traffic by using them. As a best practice, ensure that you
+-- have permissions in place to avoid inadvertently deleting accelerators.
+-- You can use IAM policies with Global Accelerator to limit the users who
+-- have permissions to delete an accelerator. For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/auth-and-access-control.html Identity and access management>
+-- in the /Global Accelerator Developer Guide/.
+module Amazonka.GlobalAccelerator.DeleteAccelerator
+  ( -- * Creating a Request
+    DeleteAccelerator (..),
+    newDeleteAccelerator,
+
+    -- * Request Lenses
+    deleteAccelerator_acceleratorArn,
+
+    -- * Destructuring the Response
+    DeleteAcceleratorResponse (..),
+    newDeleteAcceleratorResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAccelerator' smart constructor.
+data DeleteAccelerator = DeleteAccelerator'
+  { -- | The Amazon Resource Name (ARN) of an accelerator.
+    acceleratorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAccelerator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorArn', 'deleteAccelerator_acceleratorArn' - The Amazon Resource Name (ARN) of an accelerator.
+newDeleteAccelerator ::
+  -- | 'acceleratorArn'
+  Prelude.Text ->
+  DeleteAccelerator
+newDeleteAccelerator pAcceleratorArn_ =
+  DeleteAccelerator'
+    { acceleratorArn =
+        pAcceleratorArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of an accelerator.
+deleteAccelerator_acceleratorArn :: Lens.Lens' DeleteAccelerator Prelude.Text
+deleteAccelerator_acceleratorArn = Lens.lens (\DeleteAccelerator' {acceleratorArn} -> acceleratorArn) (\s@DeleteAccelerator' {} a -> s {acceleratorArn = a} :: DeleteAccelerator)
+
+instance Core.AWSRequest DeleteAccelerator where
+  type
+    AWSResponse DeleteAccelerator =
+      DeleteAcceleratorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteAcceleratorResponse'
+
+instance Prelude.Hashable DeleteAccelerator where
+  hashWithSalt _salt DeleteAccelerator' {..} =
+    _salt `Prelude.hashWithSalt` acceleratorArn
+
+instance Prelude.NFData DeleteAccelerator where
+  rnf DeleteAccelerator' {..} =
+    Prelude.rnf acceleratorArn
+
+instance Data.ToHeaders DeleteAccelerator where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DeleteAccelerator" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteAccelerator where
+  toJSON DeleteAccelerator' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AcceleratorArn" Data..= acceleratorArn)
+          ]
+      )
+
+instance Data.ToPath DeleteAccelerator where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteAccelerator where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAcceleratorResponse' smart constructor.
+data DeleteAcceleratorResponse = DeleteAcceleratorResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAcceleratorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteAcceleratorResponse ::
+  DeleteAcceleratorResponse
+newDeleteAcceleratorResponse =
+  DeleteAcceleratorResponse'
+
+instance Prelude.NFData DeleteAcceleratorResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/GlobalAccelerator/DeleteCustomRoutingAccelerator.hs b/gen/Amazonka/GlobalAccelerator/DeleteCustomRoutingAccelerator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DeleteCustomRoutingAccelerator.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.GlobalAccelerator.DeleteCustomRoutingAccelerator
+-- 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 custom routing accelerator. Before you can delete an
+-- accelerator, you must disable it and remove all dependent resources
+-- (listeners and endpoint groups). To disable the accelerator, update the
+-- accelerator to set @Enabled@ to false.
+--
+-- When you create a custom routing accelerator, by default, Global
+-- Accelerator provides you with a set of two static IP addresses.
+--
+-- The IP addresses are assigned to your accelerator for as long as it
+-- exists, even if you disable the accelerator and it no longer accepts or
+-- routes traffic. However, when you /delete/ an accelerator, you lose the
+-- static IP addresses that are assigned to the accelerator, so you can no
+-- longer route traffic by using them. As a best practice, ensure that you
+-- have permissions in place to avoid inadvertently deleting accelerators.
+-- You can use IAM policies with Global Accelerator to limit the users who
+-- have permissions to delete an accelerator. For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/auth-and-access-control.html Identity and access management>
+-- in the /Global Accelerator Developer Guide/.
+module Amazonka.GlobalAccelerator.DeleteCustomRoutingAccelerator
+  ( -- * Creating a Request
+    DeleteCustomRoutingAccelerator (..),
+    newDeleteCustomRoutingAccelerator,
+
+    -- * Request Lenses
+    deleteCustomRoutingAccelerator_acceleratorArn,
+
+    -- * Destructuring the Response
+    DeleteCustomRoutingAcceleratorResponse (..),
+    newDeleteCustomRoutingAcceleratorResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteCustomRoutingAccelerator' smart constructor.
+data DeleteCustomRoutingAccelerator = DeleteCustomRoutingAccelerator'
+  { -- | The Amazon Resource Name (ARN) of the custom routing accelerator to
+    -- delete.
+    acceleratorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomRoutingAccelerator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorArn', 'deleteCustomRoutingAccelerator_acceleratorArn' - The Amazon Resource Name (ARN) of the custom routing accelerator to
+-- delete.
+newDeleteCustomRoutingAccelerator ::
+  -- | 'acceleratorArn'
+  Prelude.Text ->
+  DeleteCustomRoutingAccelerator
+newDeleteCustomRoutingAccelerator pAcceleratorArn_ =
+  DeleteCustomRoutingAccelerator'
+    { acceleratorArn =
+        pAcceleratorArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the custom routing accelerator to
+-- delete.
+deleteCustomRoutingAccelerator_acceleratorArn :: Lens.Lens' DeleteCustomRoutingAccelerator Prelude.Text
+deleteCustomRoutingAccelerator_acceleratorArn = Lens.lens (\DeleteCustomRoutingAccelerator' {acceleratorArn} -> acceleratorArn) (\s@DeleteCustomRoutingAccelerator' {} a -> s {acceleratorArn = a} :: DeleteCustomRoutingAccelerator)
+
+instance
+  Core.AWSRequest
+    DeleteCustomRoutingAccelerator
+  where
+  type
+    AWSResponse DeleteCustomRoutingAccelerator =
+      DeleteCustomRoutingAcceleratorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteCustomRoutingAcceleratorResponse'
+
+instance
+  Prelude.Hashable
+    DeleteCustomRoutingAccelerator
+  where
+  hashWithSalt
+    _salt
+    DeleteCustomRoutingAccelerator' {..} =
+      _salt `Prelude.hashWithSalt` acceleratorArn
+
+instance
+  Prelude.NFData
+    DeleteCustomRoutingAccelerator
+  where
+  rnf DeleteCustomRoutingAccelerator' {..} =
+    Prelude.rnf acceleratorArn
+
+instance
+  Data.ToHeaders
+    DeleteCustomRoutingAccelerator
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DeleteCustomRoutingAccelerator" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteCustomRoutingAccelerator where
+  toJSON DeleteCustomRoutingAccelerator' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AcceleratorArn" Data..= acceleratorArn)
+          ]
+      )
+
+instance Data.ToPath DeleteCustomRoutingAccelerator where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteCustomRoutingAccelerator where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteCustomRoutingAcceleratorResponse' smart constructor.
+data DeleteCustomRoutingAcceleratorResponse = DeleteCustomRoutingAcceleratorResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomRoutingAcceleratorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteCustomRoutingAcceleratorResponse ::
+  DeleteCustomRoutingAcceleratorResponse
+newDeleteCustomRoutingAcceleratorResponse =
+  DeleteCustomRoutingAcceleratorResponse'
+
+instance
+  Prelude.NFData
+    DeleteCustomRoutingAcceleratorResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/GlobalAccelerator/DeleteCustomRoutingEndpointGroup.hs b/gen/Amazonka/GlobalAccelerator/DeleteCustomRoutingEndpointGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DeleteCustomRoutingEndpointGroup.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.GlobalAccelerator.DeleteCustomRoutingEndpointGroup
+-- 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 endpoint group from a listener for a custom routing
+-- accelerator.
+module Amazonka.GlobalAccelerator.DeleteCustomRoutingEndpointGroup
+  ( -- * Creating a Request
+    DeleteCustomRoutingEndpointGroup (..),
+    newDeleteCustomRoutingEndpointGroup,
+
+    -- * Request Lenses
+    deleteCustomRoutingEndpointGroup_endpointGroupArn,
+
+    -- * Destructuring the Response
+    DeleteCustomRoutingEndpointGroupResponse (..),
+    newDeleteCustomRoutingEndpointGroupResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteCustomRoutingEndpointGroup' smart constructor.
+data DeleteCustomRoutingEndpointGroup = DeleteCustomRoutingEndpointGroup'
+  { -- | The Amazon Resource Name (ARN) of the endpoint group to delete.
+    endpointGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomRoutingEndpointGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointGroupArn', 'deleteCustomRoutingEndpointGroup_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group to delete.
+newDeleteCustomRoutingEndpointGroup ::
+  -- | 'endpointGroupArn'
+  Prelude.Text ->
+  DeleteCustomRoutingEndpointGroup
+newDeleteCustomRoutingEndpointGroup
+  pEndpointGroupArn_ =
+    DeleteCustomRoutingEndpointGroup'
+      { endpointGroupArn =
+          pEndpointGroupArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the endpoint group to delete.
+deleteCustomRoutingEndpointGroup_endpointGroupArn :: Lens.Lens' DeleteCustomRoutingEndpointGroup Prelude.Text
+deleteCustomRoutingEndpointGroup_endpointGroupArn = Lens.lens (\DeleteCustomRoutingEndpointGroup' {endpointGroupArn} -> endpointGroupArn) (\s@DeleteCustomRoutingEndpointGroup' {} a -> s {endpointGroupArn = a} :: DeleteCustomRoutingEndpointGroup)
+
+instance
+  Core.AWSRequest
+    DeleteCustomRoutingEndpointGroup
+  where
+  type
+    AWSResponse DeleteCustomRoutingEndpointGroup =
+      DeleteCustomRoutingEndpointGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteCustomRoutingEndpointGroupResponse'
+
+instance
+  Prelude.Hashable
+    DeleteCustomRoutingEndpointGroup
+  where
+  hashWithSalt
+    _salt
+    DeleteCustomRoutingEndpointGroup' {..} =
+      _salt `Prelude.hashWithSalt` endpointGroupArn
+
+instance
+  Prelude.NFData
+    DeleteCustomRoutingEndpointGroup
+  where
+  rnf DeleteCustomRoutingEndpointGroup' {..} =
+    Prelude.rnf endpointGroupArn
+
+instance
+  Data.ToHeaders
+    DeleteCustomRoutingEndpointGroup
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DeleteCustomRoutingEndpointGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteCustomRoutingEndpointGroup where
+  toJSON DeleteCustomRoutingEndpointGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("EndpointGroupArn" Data..= endpointGroupArn)
+          ]
+      )
+
+instance Data.ToPath DeleteCustomRoutingEndpointGroup where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteCustomRoutingEndpointGroup
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteCustomRoutingEndpointGroupResponse' smart constructor.
+data DeleteCustomRoutingEndpointGroupResponse = DeleteCustomRoutingEndpointGroupResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomRoutingEndpointGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteCustomRoutingEndpointGroupResponse ::
+  DeleteCustomRoutingEndpointGroupResponse
+newDeleteCustomRoutingEndpointGroupResponse =
+  DeleteCustomRoutingEndpointGroupResponse'
+
+instance
+  Prelude.NFData
+    DeleteCustomRoutingEndpointGroupResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/GlobalAccelerator/DeleteCustomRoutingListener.hs b/gen/Amazonka/GlobalAccelerator/DeleteCustomRoutingListener.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DeleteCustomRoutingListener.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.DeleteCustomRoutingListener
+-- 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 listener for a custom routing accelerator.
+module Amazonka.GlobalAccelerator.DeleteCustomRoutingListener
+  ( -- * Creating a Request
+    DeleteCustomRoutingListener (..),
+    newDeleteCustomRoutingListener,
+
+    -- * Request Lenses
+    deleteCustomRoutingListener_listenerArn,
+
+    -- * Destructuring the Response
+    DeleteCustomRoutingListenerResponse (..),
+    newDeleteCustomRoutingListenerResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteCustomRoutingListener' smart constructor.
+data DeleteCustomRoutingListener = DeleteCustomRoutingListener'
+  { -- | The Amazon Resource Name (ARN) of the listener to delete.
+    listenerArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomRoutingListener' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'listenerArn', 'deleteCustomRoutingListener_listenerArn' - The Amazon Resource Name (ARN) of the listener to delete.
+newDeleteCustomRoutingListener ::
+  -- | 'listenerArn'
+  Prelude.Text ->
+  DeleteCustomRoutingListener
+newDeleteCustomRoutingListener pListenerArn_ =
+  DeleteCustomRoutingListener'
+    { listenerArn =
+        pListenerArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the listener to delete.
+deleteCustomRoutingListener_listenerArn :: Lens.Lens' DeleteCustomRoutingListener Prelude.Text
+deleteCustomRoutingListener_listenerArn = Lens.lens (\DeleteCustomRoutingListener' {listenerArn} -> listenerArn) (\s@DeleteCustomRoutingListener' {} a -> s {listenerArn = a} :: DeleteCustomRoutingListener)
+
+instance Core.AWSRequest DeleteCustomRoutingListener where
+  type
+    AWSResponse DeleteCustomRoutingListener =
+      DeleteCustomRoutingListenerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteCustomRoutingListenerResponse'
+
+instance Prelude.Hashable DeleteCustomRoutingListener where
+  hashWithSalt _salt DeleteCustomRoutingListener' {..} =
+    _salt `Prelude.hashWithSalt` listenerArn
+
+instance Prelude.NFData DeleteCustomRoutingListener where
+  rnf DeleteCustomRoutingListener' {..} =
+    Prelude.rnf listenerArn
+
+instance Data.ToHeaders DeleteCustomRoutingListener where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DeleteCustomRoutingListener" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteCustomRoutingListener where
+  toJSON DeleteCustomRoutingListener' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ListenerArn" Data..= listenerArn)]
+      )
+
+instance Data.ToPath DeleteCustomRoutingListener where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteCustomRoutingListener where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteCustomRoutingListenerResponse' smart constructor.
+data DeleteCustomRoutingListenerResponse = DeleteCustomRoutingListenerResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomRoutingListenerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteCustomRoutingListenerResponse ::
+  DeleteCustomRoutingListenerResponse
+newDeleteCustomRoutingListenerResponse =
+  DeleteCustomRoutingListenerResponse'
+
+instance
+  Prelude.NFData
+    DeleteCustomRoutingListenerResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/GlobalAccelerator/DeleteEndpointGroup.hs b/gen/Amazonka/GlobalAccelerator/DeleteEndpointGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DeleteEndpointGroup.hs
@@ -0,0 +1,139 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.DeleteEndpointGroup
+-- 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 endpoint group from a listener.
+module Amazonka.GlobalAccelerator.DeleteEndpointGroup
+  ( -- * Creating a Request
+    DeleteEndpointGroup (..),
+    newDeleteEndpointGroup,
+
+    -- * Request Lenses
+    deleteEndpointGroup_endpointGroupArn,
+
+    -- * Destructuring the Response
+    DeleteEndpointGroupResponse (..),
+    newDeleteEndpointGroupResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteEndpointGroup' smart constructor.
+data DeleteEndpointGroup = DeleteEndpointGroup'
+  { -- | The Amazon Resource Name (ARN) of the endpoint group to delete.
+    endpointGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEndpointGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointGroupArn', 'deleteEndpointGroup_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group to delete.
+newDeleteEndpointGroup ::
+  -- | 'endpointGroupArn'
+  Prelude.Text ->
+  DeleteEndpointGroup
+newDeleteEndpointGroup pEndpointGroupArn_ =
+  DeleteEndpointGroup'
+    { endpointGroupArn =
+        pEndpointGroupArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the endpoint group to delete.
+deleteEndpointGroup_endpointGroupArn :: Lens.Lens' DeleteEndpointGroup Prelude.Text
+deleteEndpointGroup_endpointGroupArn = Lens.lens (\DeleteEndpointGroup' {endpointGroupArn} -> endpointGroupArn) (\s@DeleteEndpointGroup' {} a -> s {endpointGroupArn = a} :: DeleteEndpointGroup)
+
+instance Core.AWSRequest DeleteEndpointGroup where
+  type
+    AWSResponse DeleteEndpointGroup =
+      DeleteEndpointGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteEndpointGroupResponse'
+
+instance Prelude.Hashable DeleteEndpointGroup where
+  hashWithSalt _salt DeleteEndpointGroup' {..} =
+    _salt `Prelude.hashWithSalt` endpointGroupArn
+
+instance Prelude.NFData DeleteEndpointGroup where
+  rnf DeleteEndpointGroup' {..} =
+    Prelude.rnf endpointGroupArn
+
+instance Data.ToHeaders DeleteEndpointGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DeleteEndpointGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteEndpointGroup where
+  toJSON DeleteEndpointGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("EndpointGroupArn" Data..= endpointGroupArn)
+          ]
+      )
+
+instance Data.ToPath DeleteEndpointGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteEndpointGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteEndpointGroupResponse' smart constructor.
+data DeleteEndpointGroupResponse = DeleteEndpointGroupResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEndpointGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteEndpointGroupResponse ::
+  DeleteEndpointGroupResponse
+newDeleteEndpointGroupResponse =
+  DeleteEndpointGroupResponse'
+
+instance Prelude.NFData DeleteEndpointGroupResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/GlobalAccelerator/DeleteListener.hs b/gen/Amazonka/GlobalAccelerator/DeleteListener.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DeleteListener.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.DeleteListener
+-- 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 listener from an accelerator.
+module Amazonka.GlobalAccelerator.DeleteListener
+  ( -- * Creating a Request
+    DeleteListener (..),
+    newDeleteListener,
+
+    -- * Request Lenses
+    deleteListener_listenerArn,
+
+    -- * Destructuring the Response
+    DeleteListenerResponse (..),
+    newDeleteListenerResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteListener' smart constructor.
+data DeleteListener = DeleteListener'
+  { -- | The Amazon Resource Name (ARN) of the listener.
+    listenerArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteListener' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'listenerArn', 'deleteListener_listenerArn' - The Amazon Resource Name (ARN) of the listener.
+newDeleteListener ::
+  -- | 'listenerArn'
+  Prelude.Text ->
+  DeleteListener
+newDeleteListener pListenerArn_ =
+  DeleteListener' {listenerArn = pListenerArn_}
+
+-- | The Amazon Resource Name (ARN) of the listener.
+deleteListener_listenerArn :: Lens.Lens' DeleteListener Prelude.Text
+deleteListener_listenerArn = Lens.lens (\DeleteListener' {listenerArn} -> listenerArn) (\s@DeleteListener' {} a -> s {listenerArn = a} :: DeleteListener)
+
+instance Core.AWSRequest DeleteListener where
+  type
+    AWSResponse DeleteListener =
+      DeleteListenerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteListenerResponse'
+
+instance Prelude.Hashable DeleteListener where
+  hashWithSalt _salt DeleteListener' {..} =
+    _salt `Prelude.hashWithSalt` listenerArn
+
+instance Prelude.NFData DeleteListener where
+  rnf DeleteListener' {..} = Prelude.rnf listenerArn
+
+instance Data.ToHeaders DeleteListener where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DeleteListener" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteListener where
+  toJSON DeleteListener' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ListenerArn" Data..= listenerArn)]
+      )
+
+instance Data.ToPath DeleteListener where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteListener where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteListenerResponse' smart constructor.
+data DeleteListenerResponse = DeleteListenerResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteListenerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteListenerResponse ::
+  DeleteListenerResponse
+newDeleteListenerResponse = DeleteListenerResponse'
+
+instance Prelude.NFData DeleteListenerResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/GlobalAccelerator/DenyCustomRoutingTraffic.hs b/gen/Amazonka/GlobalAccelerator/DenyCustomRoutingTraffic.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DenyCustomRoutingTraffic.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.GlobalAccelerator.DenyCustomRoutingTraffic
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Specify the Amazon EC2 instance (destination) IP addresses and ports for
+-- a VPC subnet endpoint that cannot receive traffic for a custom routing
+-- accelerator. You can deny traffic to all destinations in the VPC
+-- endpoint, or deny traffic to a specified list of destination IP
+-- addresses and ports. Note that you cannot specify IP addresses or ports
+-- outside of the range that you configured for the endpoint group.
+--
+-- After you make changes, you can verify that the updates are complete by
+-- checking the status of your accelerator: the status changes from
+-- IN_PROGRESS to DEPLOYED.
+module Amazonka.GlobalAccelerator.DenyCustomRoutingTraffic
+  ( -- * Creating a Request
+    DenyCustomRoutingTraffic (..),
+    newDenyCustomRoutingTraffic,
+
+    -- * Request Lenses
+    denyCustomRoutingTraffic_denyAllTrafficToEndpoint,
+    denyCustomRoutingTraffic_destinationAddresses,
+    denyCustomRoutingTraffic_destinationPorts,
+    denyCustomRoutingTraffic_endpointGroupArn,
+    denyCustomRoutingTraffic_endpointId,
+
+    -- * Destructuring the Response
+    DenyCustomRoutingTrafficResponse (..),
+    newDenyCustomRoutingTrafficResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDenyCustomRoutingTraffic' smart constructor.
+data DenyCustomRoutingTraffic = DenyCustomRoutingTraffic'
+  { -- | Indicates whether all destination IP addresses and ports for a specified
+    -- VPC subnet endpoint /cannot/ receive traffic from a custom routing
+    -- accelerator. The value is TRUE or FALSE.
+    --
+    -- When set to TRUE, /no/ destinations in the custom routing VPC subnet can
+    -- receive traffic. Note that you cannot specify destination IP addresses
+    -- and ports when the value is set to TRUE.
+    --
+    -- When set to FALSE (or not specified), you /must/ specify a list of
+    -- destination IP addresses that cannot receive traffic. A list of ports is
+    -- optional. If you don\'t specify a list of ports, the ports that can
+    -- accept traffic is the same as the ports configured for the endpoint
+    -- group.
+    --
+    -- The default value is FALSE.
+    denyAllTrafficToEndpoint :: Prelude.Maybe Prelude.Bool,
+    -- | A list of specific Amazon EC2 instance IP addresses (destination
+    -- addresses) in a subnet that you want to prevent from receiving traffic.
+    -- The IP addresses must be a subset of the IP addresses allowed for the
+    -- VPC subnet associated with the endpoint group.
+    destinationAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | A list of specific Amazon EC2 instance ports (destination ports) in a
+    -- subnet endpoint that you want to prevent from receiving traffic.
+    destinationPorts :: Prelude.Maybe [Prelude.Natural],
+    -- | The Amazon Resource Name (ARN) of the endpoint group.
+    endpointGroupArn :: Prelude.Text,
+    -- | An ID for the endpoint. For custom routing accelerators, this is the
+    -- virtual private cloud (VPC) subnet ID.
+    endpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DenyCustomRoutingTraffic' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'denyAllTrafficToEndpoint', 'denyCustomRoutingTraffic_denyAllTrafficToEndpoint' - Indicates whether all destination IP addresses and ports for a specified
+-- VPC subnet endpoint /cannot/ receive traffic from a custom routing
+-- accelerator. The value is TRUE or FALSE.
+--
+-- When set to TRUE, /no/ destinations in the custom routing VPC subnet can
+-- receive traffic. Note that you cannot specify destination IP addresses
+-- and ports when the value is set to TRUE.
+--
+-- When set to FALSE (or not specified), you /must/ specify a list of
+-- destination IP addresses that cannot receive traffic. A list of ports is
+-- optional. If you don\'t specify a list of ports, the ports that can
+-- accept traffic is the same as the ports configured for the endpoint
+-- group.
+--
+-- The default value is FALSE.
+--
+-- 'destinationAddresses', 'denyCustomRoutingTraffic_destinationAddresses' - A list of specific Amazon EC2 instance IP addresses (destination
+-- addresses) in a subnet that you want to prevent from receiving traffic.
+-- The IP addresses must be a subset of the IP addresses allowed for the
+-- VPC subnet associated with the endpoint group.
+--
+-- 'destinationPorts', 'denyCustomRoutingTraffic_destinationPorts' - A list of specific Amazon EC2 instance ports (destination ports) in a
+-- subnet endpoint that you want to prevent from receiving traffic.
+--
+-- 'endpointGroupArn', 'denyCustomRoutingTraffic_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group.
+--
+-- 'endpointId', 'denyCustomRoutingTraffic_endpointId' - An ID for the endpoint. For custom routing accelerators, this is the
+-- virtual private cloud (VPC) subnet ID.
+newDenyCustomRoutingTraffic ::
+  -- | 'endpointGroupArn'
+  Prelude.Text ->
+  -- | 'endpointId'
+  Prelude.Text ->
+  DenyCustomRoutingTraffic
+newDenyCustomRoutingTraffic
+  pEndpointGroupArn_
+  pEndpointId_ =
+    DenyCustomRoutingTraffic'
+      { denyAllTrafficToEndpoint =
+          Prelude.Nothing,
+        destinationAddresses = Prelude.Nothing,
+        destinationPorts = Prelude.Nothing,
+        endpointGroupArn = pEndpointGroupArn_,
+        endpointId = pEndpointId_
+      }
+
+-- | Indicates whether all destination IP addresses and ports for a specified
+-- VPC subnet endpoint /cannot/ receive traffic from a custom routing
+-- accelerator. The value is TRUE or FALSE.
+--
+-- When set to TRUE, /no/ destinations in the custom routing VPC subnet can
+-- receive traffic. Note that you cannot specify destination IP addresses
+-- and ports when the value is set to TRUE.
+--
+-- When set to FALSE (or not specified), you /must/ specify a list of
+-- destination IP addresses that cannot receive traffic. A list of ports is
+-- optional. If you don\'t specify a list of ports, the ports that can
+-- accept traffic is the same as the ports configured for the endpoint
+-- group.
+--
+-- The default value is FALSE.
+denyCustomRoutingTraffic_denyAllTrafficToEndpoint :: Lens.Lens' DenyCustomRoutingTraffic (Prelude.Maybe Prelude.Bool)
+denyCustomRoutingTraffic_denyAllTrafficToEndpoint = Lens.lens (\DenyCustomRoutingTraffic' {denyAllTrafficToEndpoint} -> denyAllTrafficToEndpoint) (\s@DenyCustomRoutingTraffic' {} a -> s {denyAllTrafficToEndpoint = a} :: DenyCustomRoutingTraffic)
+
+-- | A list of specific Amazon EC2 instance IP addresses (destination
+-- addresses) in a subnet that you want to prevent from receiving traffic.
+-- The IP addresses must be a subset of the IP addresses allowed for the
+-- VPC subnet associated with the endpoint group.
+denyCustomRoutingTraffic_destinationAddresses :: Lens.Lens' DenyCustomRoutingTraffic (Prelude.Maybe [Prelude.Text])
+denyCustomRoutingTraffic_destinationAddresses = Lens.lens (\DenyCustomRoutingTraffic' {destinationAddresses} -> destinationAddresses) (\s@DenyCustomRoutingTraffic' {} a -> s {destinationAddresses = a} :: DenyCustomRoutingTraffic) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of specific Amazon EC2 instance ports (destination ports) in a
+-- subnet endpoint that you want to prevent from receiving traffic.
+denyCustomRoutingTraffic_destinationPorts :: Lens.Lens' DenyCustomRoutingTraffic (Prelude.Maybe [Prelude.Natural])
+denyCustomRoutingTraffic_destinationPorts = Lens.lens (\DenyCustomRoutingTraffic' {destinationPorts} -> destinationPorts) (\s@DenyCustomRoutingTraffic' {} a -> s {destinationPorts = a} :: DenyCustomRoutingTraffic) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the endpoint group.
+denyCustomRoutingTraffic_endpointGroupArn :: Lens.Lens' DenyCustomRoutingTraffic Prelude.Text
+denyCustomRoutingTraffic_endpointGroupArn = Lens.lens (\DenyCustomRoutingTraffic' {endpointGroupArn} -> endpointGroupArn) (\s@DenyCustomRoutingTraffic' {} a -> s {endpointGroupArn = a} :: DenyCustomRoutingTraffic)
+
+-- | An ID for the endpoint. For custom routing accelerators, this is the
+-- virtual private cloud (VPC) subnet ID.
+denyCustomRoutingTraffic_endpointId :: Lens.Lens' DenyCustomRoutingTraffic Prelude.Text
+denyCustomRoutingTraffic_endpointId = Lens.lens (\DenyCustomRoutingTraffic' {endpointId} -> endpointId) (\s@DenyCustomRoutingTraffic' {} a -> s {endpointId = a} :: DenyCustomRoutingTraffic)
+
+instance Core.AWSRequest DenyCustomRoutingTraffic where
+  type
+    AWSResponse DenyCustomRoutingTraffic =
+      DenyCustomRoutingTrafficResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      DenyCustomRoutingTrafficResponse'
+
+instance Prelude.Hashable DenyCustomRoutingTraffic where
+  hashWithSalt _salt DenyCustomRoutingTraffic' {..} =
+    _salt
+      `Prelude.hashWithSalt` denyAllTrafficToEndpoint
+      `Prelude.hashWithSalt` destinationAddresses
+      `Prelude.hashWithSalt` destinationPorts
+      `Prelude.hashWithSalt` endpointGroupArn
+      `Prelude.hashWithSalt` endpointId
+
+instance Prelude.NFData DenyCustomRoutingTraffic where
+  rnf DenyCustomRoutingTraffic' {..} =
+    Prelude.rnf denyAllTrafficToEndpoint
+      `Prelude.seq` Prelude.rnf destinationAddresses
+      `Prelude.seq` Prelude.rnf destinationPorts
+      `Prelude.seq` Prelude.rnf endpointGroupArn
+      `Prelude.seq` Prelude.rnf endpointId
+
+instance Data.ToHeaders DenyCustomRoutingTraffic where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DenyCustomRoutingTraffic" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DenyCustomRoutingTraffic where
+  toJSON DenyCustomRoutingTraffic' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DenyAllTrafficToEndpoint" Data..=)
+              Prelude.<$> denyAllTrafficToEndpoint,
+            ("DestinationAddresses" Data..=)
+              Prelude.<$> destinationAddresses,
+            ("DestinationPorts" Data..=)
+              Prelude.<$> destinationPorts,
+            Prelude.Just
+              ("EndpointGroupArn" Data..= endpointGroupArn),
+            Prelude.Just ("EndpointId" Data..= endpointId)
+          ]
+      )
+
+instance Data.ToPath DenyCustomRoutingTraffic where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DenyCustomRoutingTraffic where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDenyCustomRoutingTrafficResponse' smart constructor.
+data DenyCustomRoutingTrafficResponse = DenyCustomRoutingTrafficResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DenyCustomRoutingTrafficResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDenyCustomRoutingTrafficResponse ::
+  DenyCustomRoutingTrafficResponse
+newDenyCustomRoutingTrafficResponse =
+  DenyCustomRoutingTrafficResponse'
+
+instance
+  Prelude.NFData
+    DenyCustomRoutingTrafficResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/GlobalAccelerator/DeprovisionByoipCidr.hs b/gen/Amazonka/GlobalAccelerator/DeprovisionByoipCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DeprovisionByoipCidr.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.GlobalAccelerator.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 to 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 by
+-- using
+-- <https://docs.aws.amazon.com/global-accelerator/latest/api/WithdrawByoipCidr.html WithdrawByoipCidr>
+-- and you must not have any accelerators that are using static IP
+-- addresses allocated from its address range.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/using-byoip.html Bring your own IP addresses (BYOIP)>
+-- in the /Global Accelerator Developer Guide/.
+module Amazonka.GlobalAccelerator.DeprovisionByoipCidr
+  ( -- * Creating a Request
+    DeprovisionByoipCidr (..),
+    newDeprovisionByoipCidr,
+
+    -- * Request Lenses
+    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.GlobalAccelerator.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'
+  { -- | 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:
+--
+-- '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' {cidr = pCidr_}
+
+-- | 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.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \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` cidr
+
+instance Prelude.NFData DeprovisionByoipCidr where
+  rnf DeprovisionByoipCidr' {..} = Prelude.rnf cidr
+
+instance Data.ToHeaders DeprovisionByoipCidr where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DeprovisionByoipCidr" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeprovisionByoipCidr where
+  toJSON DeprovisionByoipCidr' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Cidr" Data..= cidr)]
+      )
+
+instance Data.ToPath DeprovisionByoipCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeprovisionByoipCidr where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /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/GlobalAccelerator/DescribeAccelerator.hs b/gen/Amazonka/GlobalAccelerator/DescribeAccelerator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DescribeAccelerator.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.DescribeAccelerator
+-- 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 an accelerator.
+module Amazonka.GlobalAccelerator.DescribeAccelerator
+  ( -- * Creating a Request
+    DescribeAccelerator (..),
+    newDescribeAccelerator,
+
+    -- * Request Lenses
+    describeAccelerator_acceleratorArn,
+
+    -- * Destructuring the Response
+    DescribeAcceleratorResponse (..),
+    newDescribeAcceleratorResponse,
+
+    -- * Response Lenses
+    describeAcceleratorResponse_accelerator,
+    describeAcceleratorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAccelerator' smart constructor.
+data DescribeAccelerator = DescribeAccelerator'
+  { -- | The Amazon Resource Name (ARN) of the accelerator to describe.
+    acceleratorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAccelerator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorArn', 'describeAccelerator_acceleratorArn' - The Amazon Resource Name (ARN) of the accelerator to describe.
+newDescribeAccelerator ::
+  -- | 'acceleratorArn'
+  Prelude.Text ->
+  DescribeAccelerator
+newDescribeAccelerator pAcceleratorArn_ =
+  DescribeAccelerator'
+    { acceleratorArn =
+        pAcceleratorArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the accelerator to describe.
+describeAccelerator_acceleratorArn :: Lens.Lens' DescribeAccelerator Prelude.Text
+describeAccelerator_acceleratorArn = Lens.lens (\DescribeAccelerator' {acceleratorArn} -> acceleratorArn) (\s@DescribeAccelerator' {} a -> s {acceleratorArn = a} :: DescribeAccelerator)
+
+instance Core.AWSRequest DescribeAccelerator where
+  type
+    AWSResponse DescribeAccelerator =
+      DescribeAcceleratorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAcceleratorResponse'
+            Prelude.<$> (x Data..?> "Accelerator")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAccelerator where
+  hashWithSalt _salt DescribeAccelerator' {..} =
+    _salt `Prelude.hashWithSalt` acceleratorArn
+
+instance Prelude.NFData DescribeAccelerator where
+  rnf DescribeAccelerator' {..} =
+    Prelude.rnf acceleratorArn
+
+instance Data.ToHeaders DescribeAccelerator where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DescribeAccelerator" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeAccelerator where
+  toJSON DescribeAccelerator' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AcceleratorArn" Data..= acceleratorArn)
+          ]
+      )
+
+instance Data.ToPath DescribeAccelerator where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeAccelerator where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAcceleratorResponse' smart constructor.
+data DescribeAcceleratorResponse = DescribeAcceleratorResponse'
+  { -- | The description of the accelerator.
+    accelerator :: Prelude.Maybe Accelerator,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAcceleratorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accelerator', 'describeAcceleratorResponse_accelerator' - The description of the accelerator.
+--
+-- 'httpStatus', 'describeAcceleratorResponse_httpStatus' - The response's http status code.
+newDescribeAcceleratorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAcceleratorResponse
+newDescribeAcceleratorResponse pHttpStatus_ =
+  DescribeAcceleratorResponse'
+    { accelerator =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The description of the accelerator.
+describeAcceleratorResponse_accelerator :: Lens.Lens' DescribeAcceleratorResponse (Prelude.Maybe Accelerator)
+describeAcceleratorResponse_accelerator = Lens.lens (\DescribeAcceleratorResponse' {accelerator} -> accelerator) (\s@DescribeAcceleratorResponse' {} a -> s {accelerator = a} :: DescribeAcceleratorResponse)
+
+-- | The response's http status code.
+describeAcceleratorResponse_httpStatus :: Lens.Lens' DescribeAcceleratorResponse Prelude.Int
+describeAcceleratorResponse_httpStatus = Lens.lens (\DescribeAcceleratorResponse' {httpStatus} -> httpStatus) (\s@DescribeAcceleratorResponse' {} a -> s {httpStatus = a} :: DescribeAcceleratorResponse)
+
+instance Prelude.NFData DescribeAcceleratorResponse where
+  rnf DescribeAcceleratorResponse' {..} =
+    Prelude.rnf accelerator
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/DescribeAcceleratorAttributes.hs b/gen/Amazonka/GlobalAccelerator/DescribeAcceleratorAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DescribeAcceleratorAttributes.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.GlobalAccelerator.DescribeAcceleratorAttributes
+-- 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 the attributes of an accelerator.
+module Amazonka.GlobalAccelerator.DescribeAcceleratorAttributes
+  ( -- * Creating a Request
+    DescribeAcceleratorAttributes (..),
+    newDescribeAcceleratorAttributes,
+
+    -- * Request Lenses
+    describeAcceleratorAttributes_acceleratorArn,
+
+    -- * Destructuring the Response
+    DescribeAcceleratorAttributesResponse (..),
+    newDescribeAcceleratorAttributesResponse,
+
+    -- * Response Lenses
+    describeAcceleratorAttributesResponse_acceleratorAttributes,
+    describeAcceleratorAttributesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAcceleratorAttributes' smart constructor.
+data DescribeAcceleratorAttributes = DescribeAcceleratorAttributes'
+  { -- | The Amazon Resource Name (ARN) of the accelerator with the attributes
+    -- that you want to describe.
+    acceleratorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAcceleratorAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorArn', 'describeAcceleratorAttributes_acceleratorArn' - The Amazon Resource Name (ARN) of the accelerator with the attributes
+-- that you want to describe.
+newDescribeAcceleratorAttributes ::
+  -- | 'acceleratorArn'
+  Prelude.Text ->
+  DescribeAcceleratorAttributes
+newDescribeAcceleratorAttributes pAcceleratorArn_ =
+  DescribeAcceleratorAttributes'
+    { acceleratorArn =
+        pAcceleratorArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the accelerator with the attributes
+-- that you want to describe.
+describeAcceleratorAttributes_acceleratorArn :: Lens.Lens' DescribeAcceleratorAttributes Prelude.Text
+describeAcceleratorAttributes_acceleratorArn = Lens.lens (\DescribeAcceleratorAttributes' {acceleratorArn} -> acceleratorArn) (\s@DescribeAcceleratorAttributes' {} a -> s {acceleratorArn = a} :: DescribeAcceleratorAttributes)
+
+instance
+  Core.AWSRequest
+    DescribeAcceleratorAttributes
+  where
+  type
+    AWSResponse DescribeAcceleratorAttributes =
+      DescribeAcceleratorAttributesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAcceleratorAttributesResponse'
+            Prelude.<$> (x Data..?> "AcceleratorAttributes")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeAcceleratorAttributes
+  where
+  hashWithSalt _salt DescribeAcceleratorAttributes' {..} =
+    _salt `Prelude.hashWithSalt` acceleratorArn
+
+instance Prelude.NFData DescribeAcceleratorAttributes where
+  rnf DescribeAcceleratorAttributes' {..} =
+    Prelude.rnf acceleratorArn
+
+instance Data.ToHeaders DescribeAcceleratorAttributes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DescribeAcceleratorAttributes" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeAcceleratorAttributes where
+  toJSON DescribeAcceleratorAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AcceleratorArn" Data..= acceleratorArn)
+          ]
+      )
+
+instance Data.ToPath DescribeAcceleratorAttributes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeAcceleratorAttributes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAcceleratorAttributesResponse' smart constructor.
+data DescribeAcceleratorAttributesResponse = DescribeAcceleratorAttributesResponse'
+  { -- | The attributes of the accelerator.
+    acceleratorAttributes :: Prelude.Maybe AcceleratorAttributes,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAcceleratorAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorAttributes', 'describeAcceleratorAttributesResponse_acceleratorAttributes' - The attributes of the accelerator.
+--
+-- 'httpStatus', 'describeAcceleratorAttributesResponse_httpStatus' - The response's http status code.
+newDescribeAcceleratorAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAcceleratorAttributesResponse
+newDescribeAcceleratorAttributesResponse pHttpStatus_ =
+  DescribeAcceleratorAttributesResponse'
+    { acceleratorAttributes =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The attributes of the accelerator.
+describeAcceleratorAttributesResponse_acceleratorAttributes :: Lens.Lens' DescribeAcceleratorAttributesResponse (Prelude.Maybe AcceleratorAttributes)
+describeAcceleratorAttributesResponse_acceleratorAttributes = Lens.lens (\DescribeAcceleratorAttributesResponse' {acceleratorAttributes} -> acceleratorAttributes) (\s@DescribeAcceleratorAttributesResponse' {} a -> s {acceleratorAttributes = a} :: DescribeAcceleratorAttributesResponse)
+
+-- | The response's http status code.
+describeAcceleratorAttributesResponse_httpStatus :: Lens.Lens' DescribeAcceleratorAttributesResponse Prelude.Int
+describeAcceleratorAttributesResponse_httpStatus = Lens.lens (\DescribeAcceleratorAttributesResponse' {httpStatus} -> httpStatus) (\s@DescribeAcceleratorAttributesResponse' {} a -> s {httpStatus = a} :: DescribeAcceleratorAttributesResponse)
+
+instance
+  Prelude.NFData
+    DescribeAcceleratorAttributesResponse
+  where
+  rnf DescribeAcceleratorAttributesResponse' {..} =
+    Prelude.rnf acceleratorAttributes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/DescribeCustomRoutingAccelerator.hs b/gen/Amazonka/GlobalAccelerator/DescribeCustomRoutingAccelerator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DescribeCustomRoutingAccelerator.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.GlobalAccelerator.DescribeCustomRoutingAccelerator
+-- 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 a custom routing accelerator.
+module Amazonka.GlobalAccelerator.DescribeCustomRoutingAccelerator
+  ( -- * Creating a Request
+    DescribeCustomRoutingAccelerator (..),
+    newDescribeCustomRoutingAccelerator,
+
+    -- * Request Lenses
+    describeCustomRoutingAccelerator_acceleratorArn,
+
+    -- * Destructuring the Response
+    DescribeCustomRoutingAcceleratorResponse (..),
+    newDescribeCustomRoutingAcceleratorResponse,
+
+    -- * Response Lenses
+    describeCustomRoutingAcceleratorResponse_accelerator,
+    describeCustomRoutingAcceleratorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeCustomRoutingAccelerator' smart constructor.
+data DescribeCustomRoutingAccelerator = DescribeCustomRoutingAccelerator'
+  { -- | The Amazon Resource Name (ARN) of the accelerator to describe.
+    acceleratorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomRoutingAccelerator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorArn', 'describeCustomRoutingAccelerator_acceleratorArn' - The Amazon Resource Name (ARN) of the accelerator to describe.
+newDescribeCustomRoutingAccelerator ::
+  -- | 'acceleratorArn'
+  Prelude.Text ->
+  DescribeCustomRoutingAccelerator
+newDescribeCustomRoutingAccelerator pAcceleratorArn_ =
+  DescribeCustomRoutingAccelerator'
+    { acceleratorArn =
+        pAcceleratorArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the accelerator to describe.
+describeCustomRoutingAccelerator_acceleratorArn :: Lens.Lens' DescribeCustomRoutingAccelerator Prelude.Text
+describeCustomRoutingAccelerator_acceleratorArn = Lens.lens (\DescribeCustomRoutingAccelerator' {acceleratorArn} -> acceleratorArn) (\s@DescribeCustomRoutingAccelerator' {} a -> s {acceleratorArn = a} :: DescribeCustomRoutingAccelerator)
+
+instance
+  Core.AWSRequest
+    DescribeCustomRoutingAccelerator
+  where
+  type
+    AWSResponse DescribeCustomRoutingAccelerator =
+      DescribeCustomRoutingAcceleratorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeCustomRoutingAcceleratorResponse'
+            Prelude.<$> (x Data..?> "Accelerator")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeCustomRoutingAccelerator
+  where
+  hashWithSalt
+    _salt
+    DescribeCustomRoutingAccelerator' {..} =
+      _salt `Prelude.hashWithSalt` acceleratorArn
+
+instance
+  Prelude.NFData
+    DescribeCustomRoutingAccelerator
+  where
+  rnf DescribeCustomRoutingAccelerator' {..} =
+    Prelude.rnf acceleratorArn
+
+instance
+  Data.ToHeaders
+    DescribeCustomRoutingAccelerator
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DescribeCustomRoutingAccelerator" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeCustomRoutingAccelerator where
+  toJSON DescribeCustomRoutingAccelerator' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AcceleratorArn" Data..= acceleratorArn)
+          ]
+      )
+
+instance Data.ToPath DescribeCustomRoutingAccelerator where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeCustomRoutingAccelerator
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeCustomRoutingAcceleratorResponse' smart constructor.
+data DescribeCustomRoutingAcceleratorResponse = DescribeCustomRoutingAcceleratorResponse'
+  { -- | The description of the custom routing accelerator.
+    accelerator :: Prelude.Maybe CustomRoutingAccelerator,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomRoutingAcceleratorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accelerator', 'describeCustomRoutingAcceleratorResponse_accelerator' - The description of the custom routing accelerator.
+--
+-- 'httpStatus', 'describeCustomRoutingAcceleratorResponse_httpStatus' - The response's http status code.
+newDescribeCustomRoutingAcceleratorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeCustomRoutingAcceleratorResponse
+newDescribeCustomRoutingAcceleratorResponse
+  pHttpStatus_ =
+    DescribeCustomRoutingAcceleratorResponse'
+      { accelerator =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The description of the custom routing accelerator.
+describeCustomRoutingAcceleratorResponse_accelerator :: Lens.Lens' DescribeCustomRoutingAcceleratorResponse (Prelude.Maybe CustomRoutingAccelerator)
+describeCustomRoutingAcceleratorResponse_accelerator = Lens.lens (\DescribeCustomRoutingAcceleratorResponse' {accelerator} -> accelerator) (\s@DescribeCustomRoutingAcceleratorResponse' {} a -> s {accelerator = a} :: DescribeCustomRoutingAcceleratorResponse)
+
+-- | The response's http status code.
+describeCustomRoutingAcceleratorResponse_httpStatus :: Lens.Lens' DescribeCustomRoutingAcceleratorResponse Prelude.Int
+describeCustomRoutingAcceleratorResponse_httpStatus = Lens.lens (\DescribeCustomRoutingAcceleratorResponse' {httpStatus} -> httpStatus) (\s@DescribeCustomRoutingAcceleratorResponse' {} a -> s {httpStatus = a} :: DescribeCustomRoutingAcceleratorResponse)
+
+instance
+  Prelude.NFData
+    DescribeCustomRoutingAcceleratorResponse
+  where
+  rnf DescribeCustomRoutingAcceleratorResponse' {..} =
+    Prelude.rnf accelerator
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/DescribeCustomRoutingAcceleratorAttributes.hs b/gen/Amazonka/GlobalAccelerator/DescribeCustomRoutingAcceleratorAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DescribeCustomRoutingAcceleratorAttributes.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.GlobalAccelerator.DescribeCustomRoutingAcceleratorAttributes
+-- 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 the attributes of a custom routing accelerator.
+module Amazonka.GlobalAccelerator.DescribeCustomRoutingAcceleratorAttributes
+  ( -- * Creating a Request
+    DescribeCustomRoutingAcceleratorAttributes (..),
+    newDescribeCustomRoutingAcceleratorAttributes,
+
+    -- * Request Lenses
+    describeCustomRoutingAcceleratorAttributes_acceleratorArn,
+
+    -- * Destructuring the Response
+    DescribeCustomRoutingAcceleratorAttributesResponse (..),
+    newDescribeCustomRoutingAcceleratorAttributesResponse,
+
+    -- * Response Lenses
+    describeCustomRoutingAcceleratorAttributesResponse_acceleratorAttributes,
+    describeCustomRoutingAcceleratorAttributesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeCustomRoutingAcceleratorAttributes' smart constructor.
+data DescribeCustomRoutingAcceleratorAttributes = DescribeCustomRoutingAcceleratorAttributes'
+  { -- | The Amazon Resource Name (ARN) of the custom routing accelerator to
+    -- describe the attributes for.
+    acceleratorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomRoutingAcceleratorAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorArn', 'describeCustomRoutingAcceleratorAttributes_acceleratorArn' - The Amazon Resource Name (ARN) of the custom routing accelerator to
+-- describe the attributes for.
+newDescribeCustomRoutingAcceleratorAttributes ::
+  -- | 'acceleratorArn'
+  Prelude.Text ->
+  DescribeCustomRoutingAcceleratorAttributes
+newDescribeCustomRoutingAcceleratorAttributes
+  pAcceleratorArn_ =
+    DescribeCustomRoutingAcceleratorAttributes'
+      { acceleratorArn =
+          pAcceleratorArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the custom routing accelerator to
+-- describe the attributes for.
+describeCustomRoutingAcceleratorAttributes_acceleratorArn :: Lens.Lens' DescribeCustomRoutingAcceleratorAttributes Prelude.Text
+describeCustomRoutingAcceleratorAttributes_acceleratorArn = Lens.lens (\DescribeCustomRoutingAcceleratorAttributes' {acceleratorArn} -> acceleratorArn) (\s@DescribeCustomRoutingAcceleratorAttributes' {} a -> s {acceleratorArn = a} :: DescribeCustomRoutingAcceleratorAttributes)
+
+instance
+  Core.AWSRequest
+    DescribeCustomRoutingAcceleratorAttributes
+  where
+  type
+    AWSResponse
+      DescribeCustomRoutingAcceleratorAttributes =
+      DescribeCustomRoutingAcceleratorAttributesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeCustomRoutingAcceleratorAttributesResponse'
+            Prelude.<$> (x Data..?> "AcceleratorAttributes")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeCustomRoutingAcceleratorAttributes
+  where
+  hashWithSalt
+    _salt
+    DescribeCustomRoutingAcceleratorAttributes' {..} =
+      _salt `Prelude.hashWithSalt` acceleratorArn
+
+instance
+  Prelude.NFData
+    DescribeCustomRoutingAcceleratorAttributes
+  where
+  rnf DescribeCustomRoutingAcceleratorAttributes' {..} =
+    Prelude.rnf acceleratorArn
+
+instance
+  Data.ToHeaders
+    DescribeCustomRoutingAcceleratorAttributes
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DescribeCustomRoutingAcceleratorAttributes" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribeCustomRoutingAcceleratorAttributes
+  where
+  toJSON
+    DescribeCustomRoutingAcceleratorAttributes' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ Prelude.Just
+                ("AcceleratorArn" Data..= acceleratorArn)
+            ]
+        )
+
+instance
+  Data.ToPath
+    DescribeCustomRoutingAcceleratorAttributes
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeCustomRoutingAcceleratorAttributes
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeCustomRoutingAcceleratorAttributesResponse' smart constructor.
+data DescribeCustomRoutingAcceleratorAttributesResponse = DescribeCustomRoutingAcceleratorAttributesResponse'
+  { -- | The attributes of the custom routing accelerator.
+    acceleratorAttributes :: Prelude.Maybe CustomRoutingAcceleratorAttributes,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomRoutingAcceleratorAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorAttributes', 'describeCustomRoutingAcceleratorAttributesResponse_acceleratorAttributes' - The attributes of the custom routing accelerator.
+--
+-- 'httpStatus', 'describeCustomRoutingAcceleratorAttributesResponse_httpStatus' - The response's http status code.
+newDescribeCustomRoutingAcceleratorAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeCustomRoutingAcceleratorAttributesResponse
+newDescribeCustomRoutingAcceleratorAttributesResponse
+  pHttpStatus_ =
+    DescribeCustomRoutingAcceleratorAttributesResponse'
+      { acceleratorAttributes =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | The attributes of the custom routing accelerator.
+describeCustomRoutingAcceleratorAttributesResponse_acceleratorAttributes :: Lens.Lens' DescribeCustomRoutingAcceleratorAttributesResponse (Prelude.Maybe CustomRoutingAcceleratorAttributes)
+describeCustomRoutingAcceleratorAttributesResponse_acceleratorAttributes = Lens.lens (\DescribeCustomRoutingAcceleratorAttributesResponse' {acceleratorAttributes} -> acceleratorAttributes) (\s@DescribeCustomRoutingAcceleratorAttributesResponse' {} a -> s {acceleratorAttributes = a} :: DescribeCustomRoutingAcceleratorAttributesResponse)
+
+-- | The response's http status code.
+describeCustomRoutingAcceleratorAttributesResponse_httpStatus :: Lens.Lens' DescribeCustomRoutingAcceleratorAttributesResponse Prelude.Int
+describeCustomRoutingAcceleratorAttributesResponse_httpStatus = Lens.lens (\DescribeCustomRoutingAcceleratorAttributesResponse' {httpStatus} -> httpStatus) (\s@DescribeCustomRoutingAcceleratorAttributesResponse' {} a -> s {httpStatus = a} :: DescribeCustomRoutingAcceleratorAttributesResponse)
+
+instance
+  Prelude.NFData
+    DescribeCustomRoutingAcceleratorAttributesResponse
+  where
+  rnf
+    DescribeCustomRoutingAcceleratorAttributesResponse' {..} =
+      Prelude.rnf acceleratorAttributes
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/DescribeCustomRoutingEndpointGroup.hs b/gen/Amazonka/GlobalAccelerator/DescribeCustomRoutingEndpointGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DescribeCustomRoutingEndpointGroup.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.GlobalAccelerator.DescribeCustomRoutingEndpointGroup
+-- 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 an endpoint group for a custom routing accelerator.
+module Amazonka.GlobalAccelerator.DescribeCustomRoutingEndpointGroup
+  ( -- * Creating a Request
+    DescribeCustomRoutingEndpointGroup (..),
+    newDescribeCustomRoutingEndpointGroup,
+
+    -- * Request Lenses
+    describeCustomRoutingEndpointGroup_endpointGroupArn,
+
+    -- * Destructuring the Response
+    DescribeCustomRoutingEndpointGroupResponse (..),
+    newDescribeCustomRoutingEndpointGroupResponse,
+
+    -- * Response Lenses
+    describeCustomRoutingEndpointGroupResponse_endpointGroup,
+    describeCustomRoutingEndpointGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeCustomRoutingEndpointGroup' smart constructor.
+data DescribeCustomRoutingEndpointGroup = DescribeCustomRoutingEndpointGroup'
+  { -- | The Amazon Resource Name (ARN) of the endpoint group to describe.
+    endpointGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomRoutingEndpointGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointGroupArn', 'describeCustomRoutingEndpointGroup_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group to describe.
+newDescribeCustomRoutingEndpointGroup ::
+  -- | 'endpointGroupArn'
+  Prelude.Text ->
+  DescribeCustomRoutingEndpointGroup
+newDescribeCustomRoutingEndpointGroup
+  pEndpointGroupArn_ =
+    DescribeCustomRoutingEndpointGroup'
+      { endpointGroupArn =
+          pEndpointGroupArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the endpoint group to describe.
+describeCustomRoutingEndpointGroup_endpointGroupArn :: Lens.Lens' DescribeCustomRoutingEndpointGroup Prelude.Text
+describeCustomRoutingEndpointGroup_endpointGroupArn = Lens.lens (\DescribeCustomRoutingEndpointGroup' {endpointGroupArn} -> endpointGroupArn) (\s@DescribeCustomRoutingEndpointGroup' {} a -> s {endpointGroupArn = a} :: DescribeCustomRoutingEndpointGroup)
+
+instance
+  Core.AWSRequest
+    DescribeCustomRoutingEndpointGroup
+  where
+  type
+    AWSResponse DescribeCustomRoutingEndpointGroup =
+      DescribeCustomRoutingEndpointGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeCustomRoutingEndpointGroupResponse'
+            Prelude.<$> (x Data..?> "EndpointGroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeCustomRoutingEndpointGroup
+  where
+  hashWithSalt
+    _salt
+    DescribeCustomRoutingEndpointGroup' {..} =
+      _salt `Prelude.hashWithSalt` endpointGroupArn
+
+instance
+  Prelude.NFData
+    DescribeCustomRoutingEndpointGroup
+  where
+  rnf DescribeCustomRoutingEndpointGroup' {..} =
+    Prelude.rnf endpointGroupArn
+
+instance
+  Data.ToHeaders
+    DescribeCustomRoutingEndpointGroup
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DescribeCustomRoutingEndpointGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribeCustomRoutingEndpointGroup
+  where
+  toJSON DescribeCustomRoutingEndpointGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("EndpointGroupArn" Data..= endpointGroupArn)
+          ]
+      )
+
+instance
+  Data.ToPath
+    DescribeCustomRoutingEndpointGroup
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeCustomRoutingEndpointGroup
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeCustomRoutingEndpointGroupResponse' smart constructor.
+data DescribeCustomRoutingEndpointGroupResponse = DescribeCustomRoutingEndpointGroupResponse'
+  { -- | The description of an endpoint group for a custom routing accelerator.
+    endpointGroup :: Prelude.Maybe CustomRoutingEndpointGroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomRoutingEndpointGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointGroup', 'describeCustomRoutingEndpointGroupResponse_endpointGroup' - The description of an endpoint group for a custom routing accelerator.
+--
+-- 'httpStatus', 'describeCustomRoutingEndpointGroupResponse_httpStatus' - The response's http status code.
+newDescribeCustomRoutingEndpointGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeCustomRoutingEndpointGroupResponse
+newDescribeCustomRoutingEndpointGroupResponse
+  pHttpStatus_ =
+    DescribeCustomRoutingEndpointGroupResponse'
+      { endpointGroup =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The description of an endpoint group for a custom routing accelerator.
+describeCustomRoutingEndpointGroupResponse_endpointGroup :: Lens.Lens' DescribeCustomRoutingEndpointGroupResponse (Prelude.Maybe CustomRoutingEndpointGroup)
+describeCustomRoutingEndpointGroupResponse_endpointGroup = Lens.lens (\DescribeCustomRoutingEndpointGroupResponse' {endpointGroup} -> endpointGroup) (\s@DescribeCustomRoutingEndpointGroupResponse' {} a -> s {endpointGroup = a} :: DescribeCustomRoutingEndpointGroupResponse)
+
+-- | The response's http status code.
+describeCustomRoutingEndpointGroupResponse_httpStatus :: Lens.Lens' DescribeCustomRoutingEndpointGroupResponse Prelude.Int
+describeCustomRoutingEndpointGroupResponse_httpStatus = Lens.lens (\DescribeCustomRoutingEndpointGroupResponse' {httpStatus} -> httpStatus) (\s@DescribeCustomRoutingEndpointGroupResponse' {} a -> s {httpStatus = a} :: DescribeCustomRoutingEndpointGroupResponse)
+
+instance
+  Prelude.NFData
+    DescribeCustomRoutingEndpointGroupResponse
+  where
+  rnf DescribeCustomRoutingEndpointGroupResponse' {..} =
+    Prelude.rnf endpointGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/DescribeCustomRoutingListener.hs b/gen/Amazonka/GlobalAccelerator/DescribeCustomRoutingListener.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DescribeCustomRoutingListener.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.GlobalAccelerator.DescribeCustomRoutingListener
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The description of a listener for a custom routing accelerator.
+module Amazonka.GlobalAccelerator.DescribeCustomRoutingListener
+  ( -- * Creating a Request
+    DescribeCustomRoutingListener (..),
+    newDescribeCustomRoutingListener,
+
+    -- * Request Lenses
+    describeCustomRoutingListener_listenerArn,
+
+    -- * Destructuring the Response
+    DescribeCustomRoutingListenerResponse (..),
+    newDescribeCustomRoutingListenerResponse,
+
+    -- * Response Lenses
+    describeCustomRoutingListenerResponse_listener,
+    describeCustomRoutingListenerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeCustomRoutingListener' smart constructor.
+data DescribeCustomRoutingListener = DescribeCustomRoutingListener'
+  { -- | The Amazon Resource Name (ARN) of the listener to describe.
+    listenerArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomRoutingListener' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'listenerArn', 'describeCustomRoutingListener_listenerArn' - The Amazon Resource Name (ARN) of the listener to describe.
+newDescribeCustomRoutingListener ::
+  -- | 'listenerArn'
+  Prelude.Text ->
+  DescribeCustomRoutingListener
+newDescribeCustomRoutingListener pListenerArn_ =
+  DescribeCustomRoutingListener'
+    { listenerArn =
+        pListenerArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the listener to describe.
+describeCustomRoutingListener_listenerArn :: Lens.Lens' DescribeCustomRoutingListener Prelude.Text
+describeCustomRoutingListener_listenerArn = Lens.lens (\DescribeCustomRoutingListener' {listenerArn} -> listenerArn) (\s@DescribeCustomRoutingListener' {} a -> s {listenerArn = a} :: DescribeCustomRoutingListener)
+
+instance
+  Core.AWSRequest
+    DescribeCustomRoutingListener
+  where
+  type
+    AWSResponse DescribeCustomRoutingListener =
+      DescribeCustomRoutingListenerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeCustomRoutingListenerResponse'
+            Prelude.<$> (x Data..?> "Listener")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeCustomRoutingListener
+  where
+  hashWithSalt _salt DescribeCustomRoutingListener' {..} =
+    _salt `Prelude.hashWithSalt` listenerArn
+
+instance Prelude.NFData DescribeCustomRoutingListener where
+  rnf DescribeCustomRoutingListener' {..} =
+    Prelude.rnf listenerArn
+
+instance Data.ToHeaders DescribeCustomRoutingListener where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DescribeCustomRoutingListener" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeCustomRoutingListener where
+  toJSON DescribeCustomRoutingListener' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ListenerArn" Data..= listenerArn)]
+      )
+
+instance Data.ToPath DescribeCustomRoutingListener where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeCustomRoutingListener where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeCustomRoutingListenerResponse' smart constructor.
+data DescribeCustomRoutingListenerResponse = DescribeCustomRoutingListenerResponse'
+  { -- | The description of a listener for a custom routing accelerator.
+    listener :: Prelude.Maybe CustomRoutingListener,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomRoutingListenerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'listener', 'describeCustomRoutingListenerResponse_listener' - The description of a listener for a custom routing accelerator.
+--
+-- 'httpStatus', 'describeCustomRoutingListenerResponse_httpStatus' - The response's http status code.
+newDescribeCustomRoutingListenerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeCustomRoutingListenerResponse
+newDescribeCustomRoutingListenerResponse pHttpStatus_ =
+  DescribeCustomRoutingListenerResponse'
+    { listener =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The description of a listener for a custom routing accelerator.
+describeCustomRoutingListenerResponse_listener :: Lens.Lens' DescribeCustomRoutingListenerResponse (Prelude.Maybe CustomRoutingListener)
+describeCustomRoutingListenerResponse_listener = Lens.lens (\DescribeCustomRoutingListenerResponse' {listener} -> listener) (\s@DescribeCustomRoutingListenerResponse' {} a -> s {listener = a} :: DescribeCustomRoutingListenerResponse)
+
+-- | The response's http status code.
+describeCustomRoutingListenerResponse_httpStatus :: Lens.Lens' DescribeCustomRoutingListenerResponse Prelude.Int
+describeCustomRoutingListenerResponse_httpStatus = Lens.lens (\DescribeCustomRoutingListenerResponse' {httpStatus} -> httpStatus) (\s@DescribeCustomRoutingListenerResponse' {} a -> s {httpStatus = a} :: DescribeCustomRoutingListenerResponse)
+
+instance
+  Prelude.NFData
+    DescribeCustomRoutingListenerResponse
+  where
+  rnf DescribeCustomRoutingListenerResponse' {..} =
+    Prelude.rnf listener
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/DescribeEndpointGroup.hs b/gen/Amazonka/GlobalAccelerator/DescribeEndpointGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DescribeEndpointGroup.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.DescribeEndpointGroup
+-- 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 an endpoint group.
+module Amazonka.GlobalAccelerator.DescribeEndpointGroup
+  ( -- * Creating a Request
+    DescribeEndpointGroup (..),
+    newDescribeEndpointGroup,
+
+    -- * Request Lenses
+    describeEndpointGroup_endpointGroupArn,
+
+    -- * Destructuring the Response
+    DescribeEndpointGroupResponse (..),
+    newDescribeEndpointGroupResponse,
+
+    -- * Response Lenses
+    describeEndpointGroupResponse_endpointGroup,
+    describeEndpointGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeEndpointGroup' smart constructor.
+data DescribeEndpointGroup = DescribeEndpointGroup'
+  { -- | The Amazon Resource Name (ARN) of the endpoint group to describe.
+    endpointGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeEndpointGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointGroupArn', 'describeEndpointGroup_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group to describe.
+newDescribeEndpointGroup ::
+  -- | 'endpointGroupArn'
+  Prelude.Text ->
+  DescribeEndpointGroup
+newDescribeEndpointGroup pEndpointGroupArn_ =
+  DescribeEndpointGroup'
+    { endpointGroupArn =
+        pEndpointGroupArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the endpoint group to describe.
+describeEndpointGroup_endpointGroupArn :: Lens.Lens' DescribeEndpointGroup Prelude.Text
+describeEndpointGroup_endpointGroupArn = Lens.lens (\DescribeEndpointGroup' {endpointGroupArn} -> endpointGroupArn) (\s@DescribeEndpointGroup' {} a -> s {endpointGroupArn = a} :: DescribeEndpointGroup)
+
+instance Core.AWSRequest DescribeEndpointGroup where
+  type
+    AWSResponse DescribeEndpointGroup =
+      DescribeEndpointGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeEndpointGroupResponse'
+            Prelude.<$> (x Data..?> "EndpointGroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeEndpointGroup where
+  hashWithSalt _salt DescribeEndpointGroup' {..} =
+    _salt `Prelude.hashWithSalt` endpointGroupArn
+
+instance Prelude.NFData DescribeEndpointGroup where
+  rnf DescribeEndpointGroup' {..} =
+    Prelude.rnf endpointGroupArn
+
+instance Data.ToHeaders DescribeEndpointGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DescribeEndpointGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeEndpointGroup where
+  toJSON DescribeEndpointGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("EndpointGroupArn" Data..= endpointGroupArn)
+          ]
+      )
+
+instance Data.ToPath DescribeEndpointGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeEndpointGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeEndpointGroupResponse' smart constructor.
+data DescribeEndpointGroupResponse = DescribeEndpointGroupResponse'
+  { -- | The description of an endpoint group.
+    endpointGroup :: Prelude.Maybe EndpointGroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeEndpointGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointGroup', 'describeEndpointGroupResponse_endpointGroup' - The description of an endpoint group.
+--
+-- 'httpStatus', 'describeEndpointGroupResponse_httpStatus' - The response's http status code.
+newDescribeEndpointGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeEndpointGroupResponse
+newDescribeEndpointGroupResponse pHttpStatus_ =
+  DescribeEndpointGroupResponse'
+    { endpointGroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The description of an endpoint group.
+describeEndpointGroupResponse_endpointGroup :: Lens.Lens' DescribeEndpointGroupResponse (Prelude.Maybe EndpointGroup)
+describeEndpointGroupResponse_endpointGroup = Lens.lens (\DescribeEndpointGroupResponse' {endpointGroup} -> endpointGroup) (\s@DescribeEndpointGroupResponse' {} a -> s {endpointGroup = a} :: DescribeEndpointGroupResponse)
+
+-- | The response's http status code.
+describeEndpointGroupResponse_httpStatus :: Lens.Lens' DescribeEndpointGroupResponse Prelude.Int
+describeEndpointGroupResponse_httpStatus = Lens.lens (\DescribeEndpointGroupResponse' {httpStatus} -> httpStatus) (\s@DescribeEndpointGroupResponse' {} a -> s {httpStatus = a} :: DescribeEndpointGroupResponse)
+
+instance Prelude.NFData DescribeEndpointGroupResponse where
+  rnf DescribeEndpointGroupResponse' {..} =
+    Prelude.rnf endpointGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/DescribeListener.hs b/gen/Amazonka/GlobalAccelerator/DescribeListener.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/DescribeListener.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.DescribeListener
+-- 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 a listener.
+module Amazonka.GlobalAccelerator.DescribeListener
+  ( -- * Creating a Request
+    DescribeListener (..),
+    newDescribeListener,
+
+    -- * Request Lenses
+    describeListener_listenerArn,
+
+    -- * Destructuring the Response
+    DescribeListenerResponse (..),
+    newDescribeListenerResponse,
+
+    -- * Response Lenses
+    describeListenerResponse_listener,
+    describeListenerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeListener' smart constructor.
+data DescribeListener = DescribeListener'
+  { -- | The Amazon Resource Name (ARN) of the listener to describe.
+    listenerArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeListener' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'listenerArn', 'describeListener_listenerArn' - The Amazon Resource Name (ARN) of the listener to describe.
+newDescribeListener ::
+  -- | 'listenerArn'
+  Prelude.Text ->
+  DescribeListener
+newDescribeListener pListenerArn_ =
+  DescribeListener' {listenerArn = pListenerArn_}
+
+-- | The Amazon Resource Name (ARN) of the listener to describe.
+describeListener_listenerArn :: Lens.Lens' DescribeListener Prelude.Text
+describeListener_listenerArn = Lens.lens (\DescribeListener' {listenerArn} -> listenerArn) (\s@DescribeListener' {} a -> s {listenerArn = a} :: DescribeListener)
+
+instance Core.AWSRequest DescribeListener where
+  type
+    AWSResponse DescribeListener =
+      DescribeListenerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeListenerResponse'
+            Prelude.<$> (x Data..?> "Listener")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeListener where
+  hashWithSalt _salt DescribeListener' {..} =
+    _salt `Prelude.hashWithSalt` listenerArn
+
+instance Prelude.NFData DescribeListener where
+  rnf DescribeListener' {..} = Prelude.rnf listenerArn
+
+instance Data.ToHeaders DescribeListener where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.DescribeListener" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeListener where
+  toJSON DescribeListener' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ListenerArn" Data..= listenerArn)]
+      )
+
+instance Data.ToPath DescribeListener where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeListener where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeListenerResponse' smart constructor.
+data DescribeListenerResponse = DescribeListenerResponse'
+  { -- | The description of a listener.
+    listener :: Prelude.Maybe Listener,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeListenerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'listener', 'describeListenerResponse_listener' - The description of a listener.
+--
+-- 'httpStatus', 'describeListenerResponse_httpStatus' - The response's http status code.
+newDescribeListenerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeListenerResponse
+newDescribeListenerResponse pHttpStatus_ =
+  DescribeListenerResponse'
+    { listener =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The description of a listener.
+describeListenerResponse_listener :: Lens.Lens' DescribeListenerResponse (Prelude.Maybe Listener)
+describeListenerResponse_listener = Lens.lens (\DescribeListenerResponse' {listener} -> listener) (\s@DescribeListenerResponse' {} a -> s {listener = a} :: DescribeListenerResponse)
+
+-- | The response's http status code.
+describeListenerResponse_httpStatus :: Lens.Lens' DescribeListenerResponse Prelude.Int
+describeListenerResponse_httpStatus = Lens.lens (\DescribeListenerResponse' {httpStatus} -> httpStatus) (\s@DescribeListenerResponse' {} a -> s {httpStatus = a} :: DescribeListenerResponse)
+
+instance Prelude.NFData DescribeListenerResponse where
+  rnf DescribeListenerResponse' {..} =
+    Prelude.rnf listener
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/Lens.hs b/gen/Amazonka/GlobalAccelerator/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Lens.hs
@@ -0,0 +1,564 @@
+{-# 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.GlobalAccelerator.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.GlobalAccelerator.Lens
+  ( -- * Operations
+
+    -- ** AddCustomRoutingEndpoints
+    addCustomRoutingEndpoints_endpointConfigurations,
+    addCustomRoutingEndpoints_endpointGroupArn,
+    addCustomRoutingEndpointsResponse_endpointDescriptions,
+    addCustomRoutingEndpointsResponse_endpointGroupArn,
+    addCustomRoutingEndpointsResponse_httpStatus,
+
+    -- ** AddEndpoints
+    addEndpoints_endpointConfigurations,
+    addEndpoints_endpointGroupArn,
+    addEndpointsResponse_endpointDescriptions,
+    addEndpointsResponse_endpointGroupArn,
+    addEndpointsResponse_httpStatus,
+
+    -- ** AdvertiseByoipCidr
+    advertiseByoipCidr_cidr,
+    advertiseByoipCidrResponse_byoipCidr,
+    advertiseByoipCidrResponse_httpStatus,
+
+    -- ** AllowCustomRoutingTraffic
+    allowCustomRoutingTraffic_allowAllTrafficToEndpoint,
+    allowCustomRoutingTraffic_destinationAddresses,
+    allowCustomRoutingTraffic_destinationPorts,
+    allowCustomRoutingTraffic_endpointGroupArn,
+    allowCustomRoutingTraffic_endpointId,
+
+    -- ** CreateAccelerator
+    createAccelerator_enabled,
+    createAccelerator_ipAddressType,
+    createAccelerator_ipAddresses,
+    createAccelerator_tags,
+    createAccelerator_name,
+    createAccelerator_idempotencyToken,
+    createAcceleratorResponse_accelerator,
+    createAcceleratorResponse_httpStatus,
+
+    -- ** CreateCustomRoutingAccelerator
+    createCustomRoutingAccelerator_enabled,
+    createCustomRoutingAccelerator_ipAddressType,
+    createCustomRoutingAccelerator_ipAddresses,
+    createCustomRoutingAccelerator_tags,
+    createCustomRoutingAccelerator_name,
+    createCustomRoutingAccelerator_idempotencyToken,
+    createCustomRoutingAcceleratorResponse_accelerator,
+    createCustomRoutingAcceleratorResponse_httpStatus,
+
+    -- ** CreateCustomRoutingEndpointGroup
+    createCustomRoutingEndpointGroup_listenerArn,
+    createCustomRoutingEndpointGroup_endpointGroupRegion,
+    createCustomRoutingEndpointGroup_destinationConfigurations,
+    createCustomRoutingEndpointGroup_idempotencyToken,
+    createCustomRoutingEndpointGroupResponse_endpointGroup,
+    createCustomRoutingEndpointGroupResponse_httpStatus,
+
+    -- ** CreateCustomRoutingListener
+    createCustomRoutingListener_acceleratorArn,
+    createCustomRoutingListener_portRanges,
+    createCustomRoutingListener_idempotencyToken,
+    createCustomRoutingListenerResponse_listener,
+    createCustomRoutingListenerResponse_httpStatus,
+
+    -- ** CreateEndpointGroup
+    createEndpointGroup_endpointConfigurations,
+    createEndpointGroup_healthCheckIntervalSeconds,
+    createEndpointGroup_healthCheckPath,
+    createEndpointGroup_healthCheckPort,
+    createEndpointGroup_healthCheckProtocol,
+    createEndpointGroup_portOverrides,
+    createEndpointGroup_thresholdCount,
+    createEndpointGroup_trafficDialPercentage,
+    createEndpointGroup_listenerArn,
+    createEndpointGroup_endpointGroupRegion,
+    createEndpointGroup_idempotencyToken,
+    createEndpointGroupResponse_endpointGroup,
+    createEndpointGroupResponse_httpStatus,
+
+    -- ** CreateListener
+    createListener_clientAffinity,
+    createListener_acceleratorArn,
+    createListener_portRanges,
+    createListener_protocol,
+    createListener_idempotencyToken,
+    createListenerResponse_listener,
+    createListenerResponse_httpStatus,
+
+    -- ** DeleteAccelerator
+    deleteAccelerator_acceleratorArn,
+
+    -- ** DeleteCustomRoutingAccelerator
+    deleteCustomRoutingAccelerator_acceleratorArn,
+
+    -- ** DeleteCustomRoutingEndpointGroup
+    deleteCustomRoutingEndpointGroup_endpointGroupArn,
+
+    -- ** DeleteCustomRoutingListener
+    deleteCustomRoutingListener_listenerArn,
+
+    -- ** DeleteEndpointGroup
+    deleteEndpointGroup_endpointGroupArn,
+
+    -- ** DeleteListener
+    deleteListener_listenerArn,
+
+    -- ** DenyCustomRoutingTraffic
+    denyCustomRoutingTraffic_denyAllTrafficToEndpoint,
+    denyCustomRoutingTraffic_destinationAddresses,
+    denyCustomRoutingTraffic_destinationPorts,
+    denyCustomRoutingTraffic_endpointGroupArn,
+    denyCustomRoutingTraffic_endpointId,
+
+    -- ** DeprovisionByoipCidr
+    deprovisionByoipCidr_cidr,
+    deprovisionByoipCidrResponse_byoipCidr,
+    deprovisionByoipCidrResponse_httpStatus,
+
+    -- ** DescribeAccelerator
+    describeAccelerator_acceleratorArn,
+    describeAcceleratorResponse_accelerator,
+    describeAcceleratorResponse_httpStatus,
+
+    -- ** DescribeAcceleratorAttributes
+    describeAcceleratorAttributes_acceleratorArn,
+    describeAcceleratorAttributesResponse_acceleratorAttributes,
+    describeAcceleratorAttributesResponse_httpStatus,
+
+    -- ** DescribeCustomRoutingAccelerator
+    describeCustomRoutingAccelerator_acceleratorArn,
+    describeCustomRoutingAcceleratorResponse_accelerator,
+    describeCustomRoutingAcceleratorResponse_httpStatus,
+
+    -- ** DescribeCustomRoutingAcceleratorAttributes
+    describeCustomRoutingAcceleratorAttributes_acceleratorArn,
+    describeCustomRoutingAcceleratorAttributesResponse_acceleratorAttributes,
+    describeCustomRoutingAcceleratorAttributesResponse_httpStatus,
+
+    -- ** DescribeCustomRoutingEndpointGroup
+    describeCustomRoutingEndpointGroup_endpointGroupArn,
+    describeCustomRoutingEndpointGroupResponse_endpointGroup,
+    describeCustomRoutingEndpointGroupResponse_httpStatus,
+
+    -- ** DescribeCustomRoutingListener
+    describeCustomRoutingListener_listenerArn,
+    describeCustomRoutingListenerResponse_listener,
+    describeCustomRoutingListenerResponse_httpStatus,
+
+    -- ** DescribeEndpointGroup
+    describeEndpointGroup_endpointGroupArn,
+    describeEndpointGroupResponse_endpointGroup,
+    describeEndpointGroupResponse_httpStatus,
+
+    -- ** DescribeListener
+    describeListener_listenerArn,
+    describeListenerResponse_listener,
+    describeListenerResponse_httpStatus,
+
+    -- ** ListAccelerators
+    listAccelerators_maxResults,
+    listAccelerators_nextToken,
+    listAcceleratorsResponse_accelerators,
+    listAcceleratorsResponse_nextToken,
+    listAcceleratorsResponse_httpStatus,
+
+    -- ** ListByoipCidrs
+    listByoipCidrs_maxResults,
+    listByoipCidrs_nextToken,
+    listByoipCidrsResponse_byoipCidrs,
+    listByoipCidrsResponse_nextToken,
+    listByoipCidrsResponse_httpStatus,
+
+    -- ** ListCustomRoutingAccelerators
+    listCustomRoutingAccelerators_maxResults,
+    listCustomRoutingAccelerators_nextToken,
+    listCustomRoutingAcceleratorsResponse_accelerators,
+    listCustomRoutingAcceleratorsResponse_nextToken,
+    listCustomRoutingAcceleratorsResponse_httpStatus,
+
+    -- ** ListCustomRoutingEndpointGroups
+    listCustomRoutingEndpointGroups_maxResults,
+    listCustomRoutingEndpointGroups_nextToken,
+    listCustomRoutingEndpointGroups_listenerArn,
+    listCustomRoutingEndpointGroupsResponse_endpointGroups,
+    listCustomRoutingEndpointGroupsResponse_nextToken,
+    listCustomRoutingEndpointGroupsResponse_httpStatus,
+
+    -- ** ListCustomRoutingListeners
+    listCustomRoutingListeners_maxResults,
+    listCustomRoutingListeners_nextToken,
+    listCustomRoutingListeners_acceleratorArn,
+    listCustomRoutingListenersResponse_listeners,
+    listCustomRoutingListenersResponse_nextToken,
+    listCustomRoutingListenersResponse_httpStatus,
+
+    -- ** ListCustomRoutingPortMappings
+    listCustomRoutingPortMappings_endpointGroupArn,
+    listCustomRoutingPortMappings_maxResults,
+    listCustomRoutingPortMappings_nextToken,
+    listCustomRoutingPortMappings_acceleratorArn,
+    listCustomRoutingPortMappingsResponse_nextToken,
+    listCustomRoutingPortMappingsResponse_portMappings,
+    listCustomRoutingPortMappingsResponse_httpStatus,
+
+    -- ** ListCustomRoutingPortMappingsByDestination
+    listCustomRoutingPortMappingsByDestination_maxResults,
+    listCustomRoutingPortMappingsByDestination_nextToken,
+    listCustomRoutingPortMappingsByDestination_endpointId,
+    listCustomRoutingPortMappingsByDestination_destinationAddress,
+    listCustomRoutingPortMappingsByDestinationResponse_destinationPortMappings,
+    listCustomRoutingPortMappingsByDestinationResponse_nextToken,
+    listCustomRoutingPortMappingsByDestinationResponse_httpStatus,
+
+    -- ** ListEndpointGroups
+    listEndpointGroups_maxResults,
+    listEndpointGroups_nextToken,
+    listEndpointGroups_listenerArn,
+    listEndpointGroupsResponse_endpointGroups,
+    listEndpointGroupsResponse_nextToken,
+    listEndpointGroupsResponse_httpStatus,
+
+    -- ** ListListeners
+    listListeners_maxResults,
+    listListeners_nextToken,
+    listListeners_acceleratorArn,
+    listListenersResponse_listeners,
+    listListenersResponse_nextToken,
+    listListenersResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ProvisionByoipCidr
+    provisionByoipCidr_cidr,
+    provisionByoipCidr_cidrAuthorizationContext,
+    provisionByoipCidrResponse_byoipCidr,
+    provisionByoipCidrResponse_httpStatus,
+
+    -- ** RemoveCustomRoutingEndpoints
+    removeCustomRoutingEndpoints_endpointIds,
+    removeCustomRoutingEndpoints_endpointGroupArn,
+
+    -- ** RemoveEndpoints
+    removeEndpoints_endpointIdentifiers,
+    removeEndpoints_endpointGroupArn,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateAccelerator
+    updateAccelerator_enabled,
+    updateAccelerator_ipAddressType,
+    updateAccelerator_name,
+    updateAccelerator_acceleratorArn,
+    updateAcceleratorResponse_accelerator,
+    updateAcceleratorResponse_httpStatus,
+
+    -- ** UpdateAcceleratorAttributes
+    updateAcceleratorAttributes_flowLogsEnabled,
+    updateAcceleratorAttributes_flowLogsS3Bucket,
+    updateAcceleratorAttributes_flowLogsS3Prefix,
+    updateAcceleratorAttributes_acceleratorArn,
+    updateAcceleratorAttributesResponse_acceleratorAttributes,
+    updateAcceleratorAttributesResponse_httpStatus,
+
+    -- ** UpdateCustomRoutingAccelerator
+    updateCustomRoutingAccelerator_enabled,
+    updateCustomRoutingAccelerator_ipAddressType,
+    updateCustomRoutingAccelerator_name,
+    updateCustomRoutingAccelerator_acceleratorArn,
+    updateCustomRoutingAcceleratorResponse_accelerator,
+    updateCustomRoutingAcceleratorResponse_httpStatus,
+
+    -- ** UpdateCustomRoutingAcceleratorAttributes
+    updateCustomRoutingAcceleratorAttributes_flowLogsEnabled,
+    updateCustomRoutingAcceleratorAttributes_flowLogsS3Bucket,
+    updateCustomRoutingAcceleratorAttributes_flowLogsS3Prefix,
+    updateCustomRoutingAcceleratorAttributes_acceleratorArn,
+    updateCustomRoutingAcceleratorAttributesResponse_acceleratorAttributes,
+    updateCustomRoutingAcceleratorAttributesResponse_httpStatus,
+
+    -- ** UpdateCustomRoutingListener
+    updateCustomRoutingListener_listenerArn,
+    updateCustomRoutingListener_portRanges,
+    updateCustomRoutingListenerResponse_listener,
+    updateCustomRoutingListenerResponse_httpStatus,
+
+    -- ** UpdateEndpointGroup
+    updateEndpointGroup_endpointConfigurations,
+    updateEndpointGroup_healthCheckIntervalSeconds,
+    updateEndpointGroup_healthCheckPath,
+    updateEndpointGroup_healthCheckPort,
+    updateEndpointGroup_healthCheckProtocol,
+    updateEndpointGroup_portOverrides,
+    updateEndpointGroup_thresholdCount,
+    updateEndpointGroup_trafficDialPercentage,
+    updateEndpointGroup_endpointGroupArn,
+    updateEndpointGroupResponse_endpointGroup,
+    updateEndpointGroupResponse_httpStatus,
+
+    -- ** UpdateListener
+    updateListener_clientAffinity,
+    updateListener_portRanges,
+    updateListener_protocol,
+    updateListener_listenerArn,
+    updateListenerResponse_listener,
+    updateListenerResponse_httpStatus,
+
+    -- ** WithdrawByoipCidr
+    withdrawByoipCidr_cidr,
+    withdrawByoipCidrResponse_byoipCidr,
+    withdrawByoipCidrResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Accelerator
+    accelerator_acceleratorArn,
+    accelerator_createdTime,
+    accelerator_dnsName,
+    accelerator_dualStackDnsName,
+    accelerator_enabled,
+    accelerator_events,
+    accelerator_ipAddressType,
+    accelerator_ipSets,
+    accelerator_lastModifiedTime,
+    accelerator_name,
+    accelerator_status,
+
+    -- ** AcceleratorAttributes
+    acceleratorAttributes_flowLogsEnabled,
+    acceleratorAttributes_flowLogsS3Bucket,
+    acceleratorAttributes_flowLogsS3Prefix,
+
+    -- ** AcceleratorEvent
+    acceleratorEvent_message,
+    acceleratorEvent_timestamp,
+
+    -- ** ByoipCidr
+    byoipCidr_cidr,
+    byoipCidr_events,
+    byoipCidr_state,
+
+    -- ** ByoipCidrEvent
+    byoipCidrEvent_message,
+    byoipCidrEvent_timestamp,
+
+    -- ** CidrAuthorizationContext
+    cidrAuthorizationContext_message,
+    cidrAuthorizationContext_signature,
+
+    -- ** CustomRoutingAccelerator
+    customRoutingAccelerator_acceleratorArn,
+    customRoutingAccelerator_createdTime,
+    customRoutingAccelerator_dnsName,
+    customRoutingAccelerator_enabled,
+    customRoutingAccelerator_ipAddressType,
+    customRoutingAccelerator_ipSets,
+    customRoutingAccelerator_lastModifiedTime,
+    customRoutingAccelerator_name,
+    customRoutingAccelerator_status,
+
+    -- ** CustomRoutingAcceleratorAttributes
+    customRoutingAcceleratorAttributes_flowLogsEnabled,
+    customRoutingAcceleratorAttributes_flowLogsS3Bucket,
+    customRoutingAcceleratorAttributes_flowLogsS3Prefix,
+
+    -- ** CustomRoutingDestinationConfiguration
+    customRoutingDestinationConfiguration_fromPort,
+    customRoutingDestinationConfiguration_toPort,
+    customRoutingDestinationConfiguration_protocols,
+
+    -- ** CustomRoutingDestinationDescription
+    customRoutingDestinationDescription_fromPort,
+    customRoutingDestinationDescription_protocols,
+    customRoutingDestinationDescription_toPort,
+
+    -- ** CustomRoutingEndpointConfiguration
+    customRoutingEndpointConfiguration_endpointId,
+
+    -- ** CustomRoutingEndpointDescription
+    customRoutingEndpointDescription_endpointId,
+
+    -- ** CustomRoutingEndpointGroup
+    customRoutingEndpointGroup_destinationDescriptions,
+    customRoutingEndpointGroup_endpointDescriptions,
+    customRoutingEndpointGroup_endpointGroupArn,
+    customRoutingEndpointGroup_endpointGroupRegion,
+
+    -- ** CustomRoutingListener
+    customRoutingListener_listenerArn,
+    customRoutingListener_portRanges,
+
+    -- ** DestinationPortMapping
+    destinationPortMapping_acceleratorArn,
+    destinationPortMapping_acceleratorSocketAddresses,
+    destinationPortMapping_destinationSocketAddress,
+    destinationPortMapping_destinationTrafficState,
+    destinationPortMapping_endpointGroupArn,
+    destinationPortMapping_endpointGroupRegion,
+    destinationPortMapping_endpointId,
+    destinationPortMapping_ipAddressType,
+
+    -- ** EndpointConfiguration
+    endpointConfiguration_clientIPPreservationEnabled,
+    endpointConfiguration_endpointId,
+    endpointConfiguration_weight,
+
+    -- ** EndpointDescription
+    endpointDescription_clientIPPreservationEnabled,
+    endpointDescription_endpointId,
+    endpointDescription_healthReason,
+    endpointDescription_healthState,
+    endpointDescription_weight,
+
+    -- ** EndpointGroup
+    endpointGroup_endpointDescriptions,
+    endpointGroup_endpointGroupArn,
+    endpointGroup_endpointGroupRegion,
+    endpointGroup_healthCheckIntervalSeconds,
+    endpointGroup_healthCheckPath,
+    endpointGroup_healthCheckPort,
+    endpointGroup_healthCheckProtocol,
+    endpointGroup_portOverrides,
+    endpointGroup_thresholdCount,
+    endpointGroup_trafficDialPercentage,
+
+    -- ** EndpointIdentifier
+    endpointIdentifier_clientIPPreservationEnabled,
+    endpointIdentifier_endpointId,
+
+    -- ** IpSet
+    ipSet_ipAddressFamily,
+    ipSet_ipAddresses,
+    ipSet_ipFamily,
+
+    -- ** Listener
+    listener_clientAffinity,
+    listener_listenerArn,
+    listener_portRanges,
+    listener_protocol,
+
+    -- ** PortMapping
+    portMapping_acceleratorPort,
+    portMapping_destinationSocketAddress,
+    portMapping_destinationTrafficState,
+    portMapping_endpointGroupArn,
+    portMapping_endpointId,
+    portMapping_protocols,
+
+    -- ** PortOverride
+    portOverride_endpointPort,
+    portOverride_listenerPort,
+
+    -- ** PortRange
+    portRange_fromPort,
+    portRange_toPort,
+
+    -- ** SocketAddress
+    socketAddress_ipAddress,
+    socketAddress_port,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+  )
+where
+
+import Amazonka.GlobalAccelerator.AddCustomRoutingEndpoints
+import Amazonka.GlobalAccelerator.AddEndpoints
+import Amazonka.GlobalAccelerator.AdvertiseByoipCidr
+import Amazonka.GlobalAccelerator.AllowCustomRoutingTraffic
+import Amazonka.GlobalAccelerator.CreateAccelerator
+import Amazonka.GlobalAccelerator.CreateCustomRoutingAccelerator
+import Amazonka.GlobalAccelerator.CreateCustomRoutingEndpointGroup
+import Amazonka.GlobalAccelerator.CreateCustomRoutingListener
+import Amazonka.GlobalAccelerator.CreateEndpointGroup
+import Amazonka.GlobalAccelerator.CreateListener
+import Amazonka.GlobalAccelerator.DeleteAccelerator
+import Amazonka.GlobalAccelerator.DeleteCustomRoutingAccelerator
+import Amazonka.GlobalAccelerator.DeleteCustomRoutingEndpointGroup
+import Amazonka.GlobalAccelerator.DeleteCustomRoutingListener
+import Amazonka.GlobalAccelerator.DeleteEndpointGroup
+import Amazonka.GlobalAccelerator.DeleteListener
+import Amazonka.GlobalAccelerator.DenyCustomRoutingTraffic
+import Amazonka.GlobalAccelerator.DeprovisionByoipCidr
+import Amazonka.GlobalAccelerator.DescribeAccelerator
+import Amazonka.GlobalAccelerator.DescribeAcceleratorAttributes
+import Amazonka.GlobalAccelerator.DescribeCustomRoutingAccelerator
+import Amazonka.GlobalAccelerator.DescribeCustomRoutingAcceleratorAttributes
+import Amazonka.GlobalAccelerator.DescribeCustomRoutingEndpointGroup
+import Amazonka.GlobalAccelerator.DescribeCustomRoutingListener
+import Amazonka.GlobalAccelerator.DescribeEndpointGroup
+import Amazonka.GlobalAccelerator.DescribeListener
+import Amazonka.GlobalAccelerator.ListAccelerators
+import Amazonka.GlobalAccelerator.ListByoipCidrs
+import Amazonka.GlobalAccelerator.ListCustomRoutingAccelerators
+import Amazonka.GlobalAccelerator.ListCustomRoutingEndpointGroups
+import Amazonka.GlobalAccelerator.ListCustomRoutingListeners
+import Amazonka.GlobalAccelerator.ListCustomRoutingPortMappings
+import Amazonka.GlobalAccelerator.ListCustomRoutingPortMappingsByDestination
+import Amazonka.GlobalAccelerator.ListEndpointGroups
+import Amazonka.GlobalAccelerator.ListListeners
+import Amazonka.GlobalAccelerator.ListTagsForResource
+import Amazonka.GlobalAccelerator.ProvisionByoipCidr
+import Amazonka.GlobalAccelerator.RemoveCustomRoutingEndpoints
+import Amazonka.GlobalAccelerator.RemoveEndpoints
+import Amazonka.GlobalAccelerator.TagResource
+import Amazonka.GlobalAccelerator.Types.Accelerator
+import Amazonka.GlobalAccelerator.Types.AcceleratorAttributes
+import Amazonka.GlobalAccelerator.Types.AcceleratorEvent
+import Amazonka.GlobalAccelerator.Types.ByoipCidr
+import Amazonka.GlobalAccelerator.Types.ByoipCidrEvent
+import Amazonka.GlobalAccelerator.Types.CidrAuthorizationContext
+import Amazonka.GlobalAccelerator.Types.CustomRoutingAccelerator
+import Amazonka.GlobalAccelerator.Types.CustomRoutingAcceleratorAttributes
+import Amazonka.GlobalAccelerator.Types.CustomRoutingDestinationConfiguration
+import Amazonka.GlobalAccelerator.Types.CustomRoutingDestinationDescription
+import Amazonka.GlobalAccelerator.Types.CustomRoutingEndpointConfiguration
+import Amazonka.GlobalAccelerator.Types.CustomRoutingEndpointDescription
+import Amazonka.GlobalAccelerator.Types.CustomRoutingEndpointGroup
+import Amazonka.GlobalAccelerator.Types.CustomRoutingListener
+import Amazonka.GlobalAccelerator.Types.DestinationPortMapping
+import Amazonka.GlobalAccelerator.Types.EndpointConfiguration
+import Amazonka.GlobalAccelerator.Types.EndpointDescription
+import Amazonka.GlobalAccelerator.Types.EndpointGroup
+import Amazonka.GlobalAccelerator.Types.EndpointIdentifier
+import Amazonka.GlobalAccelerator.Types.IpSet
+import Amazonka.GlobalAccelerator.Types.Listener
+import Amazonka.GlobalAccelerator.Types.PortMapping
+import Amazonka.GlobalAccelerator.Types.PortOverride
+import Amazonka.GlobalAccelerator.Types.PortRange
+import Amazonka.GlobalAccelerator.Types.SocketAddress
+import Amazonka.GlobalAccelerator.Types.Tag
+import Amazonka.GlobalAccelerator.UntagResource
+import Amazonka.GlobalAccelerator.UpdateAccelerator
+import Amazonka.GlobalAccelerator.UpdateAcceleratorAttributes
+import Amazonka.GlobalAccelerator.UpdateCustomRoutingAccelerator
+import Amazonka.GlobalAccelerator.UpdateCustomRoutingAcceleratorAttributes
+import Amazonka.GlobalAccelerator.UpdateCustomRoutingListener
+import Amazonka.GlobalAccelerator.UpdateEndpointGroup
+import Amazonka.GlobalAccelerator.UpdateListener
+import Amazonka.GlobalAccelerator.WithdrawByoipCidr
diff --git a/gen/Amazonka/GlobalAccelerator/ListAccelerators.hs b/gen/Amazonka/GlobalAccelerator/ListAccelerators.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/ListAccelerators.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.GlobalAccelerator.ListAccelerators
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the accelerators for an Amazon Web Services account.
+--
+-- This operation returns paginated results.
+module Amazonka.GlobalAccelerator.ListAccelerators
+  ( -- * Creating a Request
+    ListAccelerators (..),
+    newListAccelerators,
+
+    -- * Request Lenses
+    listAccelerators_maxResults,
+    listAccelerators_nextToken,
+
+    -- * Destructuring the Response
+    ListAcceleratorsResponse (..),
+    newListAcceleratorsResponse,
+
+    -- * Response Lenses
+    listAcceleratorsResponse_accelerators,
+    listAcceleratorsResponse_nextToken,
+    listAcceleratorsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAccelerators' smart constructor.
+data ListAccelerators = ListAccelerators'
+  { -- | The number of Global Accelerator objects that you want to return with
+    -- this call. The default value is 10.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAccelerators' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAccelerators_maxResults' - The number of Global Accelerator objects that you want to return with
+-- this call. The default value is 10.
+--
+-- 'nextToken', 'listAccelerators_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+newListAccelerators ::
+  ListAccelerators
+newListAccelerators =
+  ListAccelerators'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The number of Global Accelerator objects that you want to return with
+-- this call. The default value is 10.
+listAccelerators_maxResults :: Lens.Lens' ListAccelerators (Prelude.Maybe Prelude.Natural)
+listAccelerators_maxResults = Lens.lens (\ListAccelerators' {maxResults} -> maxResults) (\s@ListAccelerators' {} a -> s {maxResults = a} :: ListAccelerators)
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listAccelerators_nextToken :: Lens.Lens' ListAccelerators (Prelude.Maybe Prelude.Text)
+listAccelerators_nextToken = Lens.lens (\ListAccelerators' {nextToken} -> nextToken) (\s@ListAccelerators' {} a -> s {nextToken = a} :: ListAccelerators)
+
+instance Core.AWSPager ListAccelerators where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAcceleratorsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAcceleratorsResponse_accelerators
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAccelerators_nextToken
+          Lens..~ rs
+          Lens.^? listAcceleratorsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListAccelerators where
+  type
+    AWSResponse ListAccelerators =
+      ListAcceleratorsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAcceleratorsResponse'
+            Prelude.<$> (x Data..?> "Accelerators" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAccelerators where
+  hashWithSalt _salt ListAccelerators' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListAccelerators where
+  rnf ListAccelerators' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListAccelerators where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.ListAccelerators" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAccelerators where
+  toJSON ListAccelerators' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListAccelerators where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListAccelerators where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAcceleratorsResponse' smart constructor.
+data ListAcceleratorsResponse = ListAcceleratorsResponse'
+  { -- | The list of accelerators for a customer account.
+    accelerators :: Prelude.Maybe [Accelerator],
+    -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    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 'ListAcceleratorsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAcceleratorsResponse_accelerators' - The list of accelerators for a customer account.
+--
+-- 'nextToken', 'listAcceleratorsResponse_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+--
+-- 'httpStatus', 'listAcceleratorsResponse_httpStatus' - The response's http status code.
+newListAcceleratorsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAcceleratorsResponse
+newListAcceleratorsResponse pHttpStatus_ =
+  ListAcceleratorsResponse'
+    { accelerators =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of accelerators for a customer account.
+listAcceleratorsResponse_accelerators :: Lens.Lens' ListAcceleratorsResponse (Prelude.Maybe [Accelerator])
+listAcceleratorsResponse_accelerators = Lens.lens (\ListAcceleratorsResponse' {accelerators} -> accelerators) (\s@ListAcceleratorsResponse' {} a -> s {accelerators = a} :: ListAcceleratorsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listAcceleratorsResponse_nextToken :: Lens.Lens' ListAcceleratorsResponse (Prelude.Maybe Prelude.Text)
+listAcceleratorsResponse_nextToken = Lens.lens (\ListAcceleratorsResponse' {nextToken} -> nextToken) (\s@ListAcceleratorsResponse' {} a -> s {nextToken = a} :: ListAcceleratorsResponse)
+
+-- | The response's http status code.
+listAcceleratorsResponse_httpStatus :: Lens.Lens' ListAcceleratorsResponse Prelude.Int
+listAcceleratorsResponse_httpStatus = Lens.lens (\ListAcceleratorsResponse' {httpStatus} -> httpStatus) (\s@ListAcceleratorsResponse' {} a -> s {httpStatus = a} :: ListAcceleratorsResponse)
+
+instance Prelude.NFData ListAcceleratorsResponse where
+  rnf ListAcceleratorsResponse' {..} =
+    Prelude.rnf accelerators
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/ListByoipCidrs.hs b/gen/Amazonka/GlobalAccelerator/ListByoipCidrs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/ListByoipCidrs.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.GlobalAccelerator.ListByoipCidrs
+-- 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 IP address ranges that were specified in calls to
+-- <https://docs.aws.amazon.com/global-accelerator/latest/api/ProvisionByoipCidr.html ProvisionByoipCidr>,
+-- including the current state and a history of state changes.
+--
+-- This operation returns paginated results.
+module Amazonka.GlobalAccelerator.ListByoipCidrs
+  ( -- * Creating a Request
+    ListByoipCidrs (..),
+    newListByoipCidrs,
+
+    -- * Request Lenses
+    listByoipCidrs_maxResults,
+    listByoipCidrs_nextToken,
+
+    -- * Destructuring the Response
+    ListByoipCidrsResponse (..),
+    newListByoipCidrsResponse,
+
+    -- * Response Lenses
+    listByoipCidrsResponse_byoipCidrs,
+    listByoipCidrsResponse_nextToken,
+    listByoipCidrsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListByoipCidrs' smart constructor.
+data ListByoipCidrs = ListByoipCidrs'
+  { -- | 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 'ListByoipCidrs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listByoipCidrs_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', 'listByoipCidrs_nextToken' - The token for the next page of results.
+newListByoipCidrs ::
+  ListByoipCidrs
+newListByoipCidrs =
+  ListByoipCidrs'
+    { maxResults = Prelude.Nothing,
+      nextToken = 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.
+listByoipCidrs_maxResults :: Lens.Lens' ListByoipCidrs (Prelude.Maybe Prelude.Natural)
+listByoipCidrs_maxResults = Lens.lens (\ListByoipCidrs' {maxResults} -> maxResults) (\s@ListByoipCidrs' {} a -> s {maxResults = a} :: ListByoipCidrs)
+
+-- | The token for the next page of results.
+listByoipCidrs_nextToken :: Lens.Lens' ListByoipCidrs (Prelude.Maybe Prelude.Text)
+listByoipCidrs_nextToken = Lens.lens (\ListByoipCidrs' {nextToken} -> nextToken) (\s@ListByoipCidrs' {} a -> s {nextToken = a} :: ListByoipCidrs)
+
+instance Core.AWSPager ListByoipCidrs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listByoipCidrsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listByoipCidrsResponse_byoipCidrs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listByoipCidrs_nextToken
+          Lens..~ rs
+          Lens.^? listByoipCidrsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListByoipCidrs where
+  type
+    AWSResponse ListByoipCidrs =
+      ListByoipCidrsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListByoipCidrsResponse'
+            Prelude.<$> (x Data..?> "ByoipCidrs" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListByoipCidrs where
+  hashWithSalt _salt ListByoipCidrs' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListByoipCidrs where
+  rnf ListByoipCidrs' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListByoipCidrs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.ListByoipCidrs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListByoipCidrs where
+  toJSON ListByoipCidrs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListByoipCidrs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListByoipCidrs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListByoipCidrsResponse' smart constructor.
+data ListByoipCidrsResponse = ListByoipCidrsResponse'
+  { -- | Information about your address ranges.
+    byoipCidrs :: Prelude.Maybe [ByoipCidr],
+    -- | 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 'ListByoipCidrsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listByoipCidrsResponse_byoipCidrs' - Information about your address ranges.
+--
+-- 'nextToken', 'listByoipCidrsResponse_nextToken' - The token for the next page of results.
+--
+-- 'httpStatus', 'listByoipCidrsResponse_httpStatus' - The response's http status code.
+newListByoipCidrsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListByoipCidrsResponse
+newListByoipCidrsResponse pHttpStatus_ =
+  ListByoipCidrsResponse'
+    { byoipCidrs =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about your address ranges.
+listByoipCidrsResponse_byoipCidrs :: Lens.Lens' ListByoipCidrsResponse (Prelude.Maybe [ByoipCidr])
+listByoipCidrsResponse_byoipCidrs = Lens.lens (\ListByoipCidrsResponse' {byoipCidrs} -> byoipCidrs) (\s@ListByoipCidrsResponse' {} a -> s {byoipCidrs = a} :: ListByoipCidrsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next page of results.
+listByoipCidrsResponse_nextToken :: Lens.Lens' ListByoipCidrsResponse (Prelude.Maybe Prelude.Text)
+listByoipCidrsResponse_nextToken = Lens.lens (\ListByoipCidrsResponse' {nextToken} -> nextToken) (\s@ListByoipCidrsResponse' {} a -> s {nextToken = a} :: ListByoipCidrsResponse)
+
+-- | The response's http status code.
+listByoipCidrsResponse_httpStatus :: Lens.Lens' ListByoipCidrsResponse Prelude.Int
+listByoipCidrsResponse_httpStatus = Lens.lens (\ListByoipCidrsResponse' {httpStatus} -> httpStatus) (\s@ListByoipCidrsResponse' {} a -> s {httpStatus = a} :: ListByoipCidrsResponse)
+
+instance Prelude.NFData ListByoipCidrsResponse where
+  rnf ListByoipCidrsResponse' {..} =
+    Prelude.rnf byoipCidrs
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/ListCustomRoutingAccelerators.hs b/gen/Amazonka/GlobalAccelerator/ListCustomRoutingAccelerators.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/ListCustomRoutingAccelerators.hs
@@ -0,0 +1,239 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.ListCustomRoutingAccelerators
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the custom routing accelerators for an Amazon Web Services account.
+--
+-- This operation returns paginated results.
+module Amazonka.GlobalAccelerator.ListCustomRoutingAccelerators
+  ( -- * Creating a Request
+    ListCustomRoutingAccelerators (..),
+    newListCustomRoutingAccelerators,
+
+    -- * Request Lenses
+    listCustomRoutingAccelerators_maxResults,
+    listCustomRoutingAccelerators_nextToken,
+
+    -- * Destructuring the Response
+    ListCustomRoutingAcceleratorsResponse (..),
+    newListCustomRoutingAcceleratorsResponse,
+
+    -- * Response Lenses
+    listCustomRoutingAcceleratorsResponse_accelerators,
+    listCustomRoutingAcceleratorsResponse_nextToken,
+    listCustomRoutingAcceleratorsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListCustomRoutingAccelerators' smart constructor.
+data ListCustomRoutingAccelerators = ListCustomRoutingAccelerators'
+  { -- | The number of custom routing Global Accelerator objects that you want to
+    -- return with this call. The default value is 10.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCustomRoutingAccelerators' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listCustomRoutingAccelerators_maxResults' - The number of custom routing Global Accelerator objects that you want to
+-- return with this call. The default value is 10.
+--
+-- 'nextToken', 'listCustomRoutingAccelerators_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+newListCustomRoutingAccelerators ::
+  ListCustomRoutingAccelerators
+newListCustomRoutingAccelerators =
+  ListCustomRoutingAccelerators'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The number of custom routing Global Accelerator objects that you want to
+-- return with this call. The default value is 10.
+listCustomRoutingAccelerators_maxResults :: Lens.Lens' ListCustomRoutingAccelerators (Prelude.Maybe Prelude.Natural)
+listCustomRoutingAccelerators_maxResults = Lens.lens (\ListCustomRoutingAccelerators' {maxResults} -> maxResults) (\s@ListCustomRoutingAccelerators' {} a -> s {maxResults = a} :: ListCustomRoutingAccelerators)
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listCustomRoutingAccelerators_nextToken :: Lens.Lens' ListCustomRoutingAccelerators (Prelude.Maybe Prelude.Text)
+listCustomRoutingAccelerators_nextToken = Lens.lens (\ListCustomRoutingAccelerators' {nextToken} -> nextToken) (\s@ListCustomRoutingAccelerators' {} a -> s {nextToken = a} :: ListCustomRoutingAccelerators)
+
+instance Core.AWSPager ListCustomRoutingAccelerators where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listCustomRoutingAcceleratorsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listCustomRoutingAcceleratorsResponse_accelerators
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listCustomRoutingAccelerators_nextToken
+          Lens..~ rs
+          Lens.^? listCustomRoutingAcceleratorsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    ListCustomRoutingAccelerators
+  where
+  type
+    AWSResponse ListCustomRoutingAccelerators =
+      ListCustomRoutingAcceleratorsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCustomRoutingAcceleratorsResponse'
+            Prelude.<$> (x Data..?> "Accelerators" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListCustomRoutingAccelerators
+  where
+  hashWithSalt _salt ListCustomRoutingAccelerators' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListCustomRoutingAccelerators where
+  rnf ListCustomRoutingAccelerators' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListCustomRoutingAccelerators where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.ListCustomRoutingAccelerators" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListCustomRoutingAccelerators where
+  toJSON ListCustomRoutingAccelerators' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListCustomRoutingAccelerators where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListCustomRoutingAccelerators where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListCustomRoutingAcceleratorsResponse' smart constructor.
+data ListCustomRoutingAcceleratorsResponse = ListCustomRoutingAcceleratorsResponse'
+  { -- | The list of custom routing accelerators for a customer account.
+    accelerators :: Prelude.Maybe [CustomRoutingAccelerator],
+    -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    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 'ListCustomRoutingAcceleratorsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listCustomRoutingAcceleratorsResponse_accelerators' - The list of custom routing accelerators for a customer account.
+--
+-- 'nextToken', 'listCustomRoutingAcceleratorsResponse_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+--
+-- 'httpStatus', 'listCustomRoutingAcceleratorsResponse_httpStatus' - The response's http status code.
+newListCustomRoutingAcceleratorsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCustomRoutingAcceleratorsResponse
+newListCustomRoutingAcceleratorsResponse pHttpStatus_ =
+  ListCustomRoutingAcceleratorsResponse'
+    { accelerators =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of custom routing accelerators for a customer account.
+listCustomRoutingAcceleratorsResponse_accelerators :: Lens.Lens' ListCustomRoutingAcceleratorsResponse (Prelude.Maybe [CustomRoutingAccelerator])
+listCustomRoutingAcceleratorsResponse_accelerators = Lens.lens (\ListCustomRoutingAcceleratorsResponse' {accelerators} -> accelerators) (\s@ListCustomRoutingAcceleratorsResponse' {} a -> s {accelerators = a} :: ListCustomRoutingAcceleratorsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listCustomRoutingAcceleratorsResponse_nextToken :: Lens.Lens' ListCustomRoutingAcceleratorsResponse (Prelude.Maybe Prelude.Text)
+listCustomRoutingAcceleratorsResponse_nextToken = Lens.lens (\ListCustomRoutingAcceleratorsResponse' {nextToken} -> nextToken) (\s@ListCustomRoutingAcceleratorsResponse' {} a -> s {nextToken = a} :: ListCustomRoutingAcceleratorsResponse)
+
+-- | The response's http status code.
+listCustomRoutingAcceleratorsResponse_httpStatus :: Lens.Lens' ListCustomRoutingAcceleratorsResponse Prelude.Int
+listCustomRoutingAcceleratorsResponse_httpStatus = Lens.lens (\ListCustomRoutingAcceleratorsResponse' {httpStatus} -> httpStatus) (\s@ListCustomRoutingAcceleratorsResponse' {} a -> s {httpStatus = a} :: ListCustomRoutingAcceleratorsResponse)
+
+instance
+  Prelude.NFData
+    ListCustomRoutingAcceleratorsResponse
+  where
+  rnf ListCustomRoutingAcceleratorsResponse' {..} =
+    Prelude.rnf accelerators
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/ListCustomRoutingEndpointGroups.hs b/gen/Amazonka/GlobalAccelerator/ListCustomRoutingEndpointGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/ListCustomRoutingEndpointGroups.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.GlobalAccelerator.ListCustomRoutingEndpointGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the endpoint groups that are associated with a listener for a
+-- custom routing accelerator.
+module Amazonka.GlobalAccelerator.ListCustomRoutingEndpointGroups
+  ( -- * Creating a Request
+    ListCustomRoutingEndpointGroups (..),
+    newListCustomRoutingEndpointGroups,
+
+    -- * Request Lenses
+    listCustomRoutingEndpointGroups_maxResults,
+    listCustomRoutingEndpointGroups_nextToken,
+    listCustomRoutingEndpointGroups_listenerArn,
+
+    -- * Destructuring the Response
+    ListCustomRoutingEndpointGroupsResponse (..),
+    newListCustomRoutingEndpointGroupsResponse,
+
+    -- * Response Lenses
+    listCustomRoutingEndpointGroupsResponse_endpointGroups,
+    listCustomRoutingEndpointGroupsResponse_nextToken,
+    listCustomRoutingEndpointGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListCustomRoutingEndpointGroups' smart constructor.
+data ListCustomRoutingEndpointGroups = ListCustomRoutingEndpointGroups'
+  { -- | The number of endpoint group objects that you want to return with this
+    -- call. The default value is 10.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the listener to list endpoint groups
+    -- for.
+    listenerArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCustomRoutingEndpointGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listCustomRoutingEndpointGroups_maxResults' - The number of endpoint group objects that you want to return with this
+-- call. The default value is 10.
+--
+-- 'nextToken', 'listCustomRoutingEndpointGroups_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+--
+-- 'listenerArn', 'listCustomRoutingEndpointGroups_listenerArn' - The Amazon Resource Name (ARN) of the listener to list endpoint groups
+-- for.
+newListCustomRoutingEndpointGroups ::
+  -- | 'listenerArn'
+  Prelude.Text ->
+  ListCustomRoutingEndpointGroups
+newListCustomRoutingEndpointGroups pListenerArn_ =
+  ListCustomRoutingEndpointGroups'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      listenerArn = pListenerArn_
+    }
+
+-- | The number of endpoint group objects that you want to return with this
+-- call. The default value is 10.
+listCustomRoutingEndpointGroups_maxResults :: Lens.Lens' ListCustomRoutingEndpointGroups (Prelude.Maybe Prelude.Natural)
+listCustomRoutingEndpointGroups_maxResults = Lens.lens (\ListCustomRoutingEndpointGroups' {maxResults} -> maxResults) (\s@ListCustomRoutingEndpointGroups' {} a -> s {maxResults = a} :: ListCustomRoutingEndpointGroups)
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listCustomRoutingEndpointGroups_nextToken :: Lens.Lens' ListCustomRoutingEndpointGroups (Prelude.Maybe Prelude.Text)
+listCustomRoutingEndpointGroups_nextToken = Lens.lens (\ListCustomRoutingEndpointGroups' {nextToken} -> nextToken) (\s@ListCustomRoutingEndpointGroups' {} a -> s {nextToken = a} :: ListCustomRoutingEndpointGroups)
+
+-- | The Amazon Resource Name (ARN) of the listener to list endpoint groups
+-- for.
+listCustomRoutingEndpointGroups_listenerArn :: Lens.Lens' ListCustomRoutingEndpointGroups Prelude.Text
+listCustomRoutingEndpointGroups_listenerArn = Lens.lens (\ListCustomRoutingEndpointGroups' {listenerArn} -> listenerArn) (\s@ListCustomRoutingEndpointGroups' {} a -> s {listenerArn = a} :: ListCustomRoutingEndpointGroups)
+
+instance
+  Core.AWSRequest
+    ListCustomRoutingEndpointGroups
+  where
+  type
+    AWSResponse ListCustomRoutingEndpointGroups =
+      ListCustomRoutingEndpointGroupsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCustomRoutingEndpointGroupsResponse'
+            Prelude.<$> (x Data..?> "EndpointGroups" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListCustomRoutingEndpointGroups
+  where
+  hashWithSalt
+    _salt
+    ListCustomRoutingEndpointGroups' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` listenerArn
+
+instance
+  Prelude.NFData
+    ListCustomRoutingEndpointGroups
+  where
+  rnf ListCustomRoutingEndpointGroups' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf listenerArn
+
+instance
+  Data.ToHeaders
+    ListCustomRoutingEndpointGroups
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.ListCustomRoutingEndpointGroups" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListCustomRoutingEndpointGroups where
+  toJSON ListCustomRoutingEndpointGroups' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("ListenerArn" Data..= listenerArn)
+          ]
+      )
+
+instance Data.ToPath ListCustomRoutingEndpointGroups where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListCustomRoutingEndpointGroups where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListCustomRoutingEndpointGroupsResponse' smart constructor.
+data ListCustomRoutingEndpointGroupsResponse = ListCustomRoutingEndpointGroupsResponse'
+  { -- | The list of the endpoint groups associated with a listener for a custom
+    -- routing accelerator.
+    endpointGroups :: Prelude.Maybe [CustomRoutingEndpointGroup],
+    -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    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 'ListCustomRoutingEndpointGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointGroups', 'listCustomRoutingEndpointGroupsResponse_endpointGroups' - The list of the endpoint groups associated with a listener for a custom
+-- routing accelerator.
+--
+-- 'nextToken', 'listCustomRoutingEndpointGroupsResponse_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+--
+-- 'httpStatus', 'listCustomRoutingEndpointGroupsResponse_httpStatus' - The response's http status code.
+newListCustomRoutingEndpointGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCustomRoutingEndpointGroupsResponse
+newListCustomRoutingEndpointGroupsResponse
+  pHttpStatus_ =
+    ListCustomRoutingEndpointGroupsResponse'
+      { endpointGroups =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The list of the endpoint groups associated with a listener for a custom
+-- routing accelerator.
+listCustomRoutingEndpointGroupsResponse_endpointGroups :: Lens.Lens' ListCustomRoutingEndpointGroupsResponse (Prelude.Maybe [CustomRoutingEndpointGroup])
+listCustomRoutingEndpointGroupsResponse_endpointGroups = Lens.lens (\ListCustomRoutingEndpointGroupsResponse' {endpointGroups} -> endpointGroups) (\s@ListCustomRoutingEndpointGroupsResponse' {} a -> s {endpointGroups = a} :: ListCustomRoutingEndpointGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listCustomRoutingEndpointGroupsResponse_nextToken :: Lens.Lens' ListCustomRoutingEndpointGroupsResponse (Prelude.Maybe Prelude.Text)
+listCustomRoutingEndpointGroupsResponse_nextToken = Lens.lens (\ListCustomRoutingEndpointGroupsResponse' {nextToken} -> nextToken) (\s@ListCustomRoutingEndpointGroupsResponse' {} a -> s {nextToken = a} :: ListCustomRoutingEndpointGroupsResponse)
+
+-- | The response's http status code.
+listCustomRoutingEndpointGroupsResponse_httpStatus :: Lens.Lens' ListCustomRoutingEndpointGroupsResponse Prelude.Int
+listCustomRoutingEndpointGroupsResponse_httpStatus = Lens.lens (\ListCustomRoutingEndpointGroupsResponse' {httpStatus} -> httpStatus) (\s@ListCustomRoutingEndpointGroupsResponse' {} a -> s {httpStatus = a} :: ListCustomRoutingEndpointGroupsResponse)
+
+instance
+  Prelude.NFData
+    ListCustomRoutingEndpointGroupsResponse
+  where
+  rnf ListCustomRoutingEndpointGroupsResponse' {..} =
+    Prelude.rnf endpointGroups
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/ListCustomRoutingListeners.hs b/gen/Amazonka/GlobalAccelerator/ListCustomRoutingListeners.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/ListCustomRoutingListeners.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.GlobalAccelerator.ListCustomRoutingListeners
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the listeners for a custom routing accelerator.
+--
+-- This operation returns paginated results.
+module Amazonka.GlobalAccelerator.ListCustomRoutingListeners
+  ( -- * Creating a Request
+    ListCustomRoutingListeners (..),
+    newListCustomRoutingListeners,
+
+    -- * Request Lenses
+    listCustomRoutingListeners_maxResults,
+    listCustomRoutingListeners_nextToken,
+    listCustomRoutingListeners_acceleratorArn,
+
+    -- * Destructuring the Response
+    ListCustomRoutingListenersResponse (..),
+    newListCustomRoutingListenersResponse,
+
+    -- * Response Lenses
+    listCustomRoutingListenersResponse_listeners,
+    listCustomRoutingListenersResponse_nextToken,
+    listCustomRoutingListenersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListCustomRoutingListeners' smart constructor.
+data ListCustomRoutingListeners = ListCustomRoutingListeners'
+  { -- | The number of listener objects that you want to return with this call.
+    -- The default value is 10.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the accelerator to list listeners for.
+    acceleratorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCustomRoutingListeners' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listCustomRoutingListeners_maxResults' - The number of listener objects that you want to return with this call.
+-- The default value is 10.
+--
+-- 'nextToken', 'listCustomRoutingListeners_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+--
+-- 'acceleratorArn', 'listCustomRoutingListeners_acceleratorArn' - The Amazon Resource Name (ARN) of the accelerator to list listeners for.
+newListCustomRoutingListeners ::
+  -- | 'acceleratorArn'
+  Prelude.Text ->
+  ListCustomRoutingListeners
+newListCustomRoutingListeners pAcceleratorArn_ =
+  ListCustomRoutingListeners'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      acceleratorArn = pAcceleratorArn_
+    }
+
+-- | The number of listener objects that you want to return with this call.
+-- The default value is 10.
+listCustomRoutingListeners_maxResults :: Lens.Lens' ListCustomRoutingListeners (Prelude.Maybe Prelude.Natural)
+listCustomRoutingListeners_maxResults = Lens.lens (\ListCustomRoutingListeners' {maxResults} -> maxResults) (\s@ListCustomRoutingListeners' {} a -> s {maxResults = a} :: ListCustomRoutingListeners)
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listCustomRoutingListeners_nextToken :: Lens.Lens' ListCustomRoutingListeners (Prelude.Maybe Prelude.Text)
+listCustomRoutingListeners_nextToken = Lens.lens (\ListCustomRoutingListeners' {nextToken} -> nextToken) (\s@ListCustomRoutingListeners' {} a -> s {nextToken = a} :: ListCustomRoutingListeners)
+
+-- | The Amazon Resource Name (ARN) of the accelerator to list listeners for.
+listCustomRoutingListeners_acceleratorArn :: Lens.Lens' ListCustomRoutingListeners Prelude.Text
+listCustomRoutingListeners_acceleratorArn = Lens.lens (\ListCustomRoutingListeners' {acceleratorArn} -> acceleratorArn) (\s@ListCustomRoutingListeners' {} a -> s {acceleratorArn = a} :: ListCustomRoutingListeners)
+
+instance Core.AWSPager ListCustomRoutingListeners where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listCustomRoutingListenersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listCustomRoutingListenersResponse_listeners
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listCustomRoutingListeners_nextToken
+          Lens..~ rs
+          Lens.^? listCustomRoutingListenersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListCustomRoutingListeners where
+  type
+    AWSResponse ListCustomRoutingListeners =
+      ListCustomRoutingListenersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCustomRoutingListenersResponse'
+            Prelude.<$> (x Data..?> "Listeners" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListCustomRoutingListeners where
+  hashWithSalt _salt ListCustomRoutingListeners' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` acceleratorArn
+
+instance Prelude.NFData ListCustomRoutingListeners where
+  rnf ListCustomRoutingListeners' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf acceleratorArn
+
+instance Data.ToHeaders ListCustomRoutingListeners where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.ListCustomRoutingListeners" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListCustomRoutingListeners where
+  toJSON ListCustomRoutingListeners' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("AcceleratorArn" Data..= acceleratorArn)
+          ]
+      )
+
+instance Data.ToPath ListCustomRoutingListeners where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListCustomRoutingListeners where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListCustomRoutingListenersResponse' smart constructor.
+data ListCustomRoutingListenersResponse = ListCustomRoutingListenersResponse'
+  { -- | The list of listeners for a custom routing accelerator.
+    listeners :: Prelude.Maybe [CustomRoutingListener],
+    -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    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 'ListCustomRoutingListenersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'listeners', 'listCustomRoutingListenersResponse_listeners' - The list of listeners for a custom routing accelerator.
+--
+-- 'nextToken', 'listCustomRoutingListenersResponse_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+--
+-- 'httpStatus', 'listCustomRoutingListenersResponse_httpStatus' - The response's http status code.
+newListCustomRoutingListenersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCustomRoutingListenersResponse
+newListCustomRoutingListenersResponse pHttpStatus_ =
+  ListCustomRoutingListenersResponse'
+    { listeners =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of listeners for a custom routing accelerator.
+listCustomRoutingListenersResponse_listeners :: Lens.Lens' ListCustomRoutingListenersResponse (Prelude.Maybe [CustomRoutingListener])
+listCustomRoutingListenersResponse_listeners = Lens.lens (\ListCustomRoutingListenersResponse' {listeners} -> listeners) (\s@ListCustomRoutingListenersResponse' {} a -> s {listeners = a} :: ListCustomRoutingListenersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listCustomRoutingListenersResponse_nextToken :: Lens.Lens' ListCustomRoutingListenersResponse (Prelude.Maybe Prelude.Text)
+listCustomRoutingListenersResponse_nextToken = Lens.lens (\ListCustomRoutingListenersResponse' {nextToken} -> nextToken) (\s@ListCustomRoutingListenersResponse' {} a -> s {nextToken = a} :: ListCustomRoutingListenersResponse)
+
+-- | The response's http status code.
+listCustomRoutingListenersResponse_httpStatus :: Lens.Lens' ListCustomRoutingListenersResponse Prelude.Int
+listCustomRoutingListenersResponse_httpStatus = Lens.lens (\ListCustomRoutingListenersResponse' {httpStatus} -> httpStatus) (\s@ListCustomRoutingListenersResponse' {} a -> s {httpStatus = a} :: ListCustomRoutingListenersResponse)
+
+instance
+  Prelude.NFData
+    ListCustomRoutingListenersResponse
+  where
+  rnf ListCustomRoutingListenersResponse' {..} =
+    Prelude.rnf listeners
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/ListCustomRoutingPortMappings.hs b/gen/Amazonka/GlobalAccelerator/ListCustomRoutingPortMappings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/ListCustomRoutingPortMappings.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.GlobalAccelerator.ListCustomRoutingPortMappings
+-- 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 a complete mapping from the public accelerator IP address and
+-- port to destination EC2 instance IP addresses and ports in the virtual
+-- public cloud (VPC) subnet endpoint for a custom routing accelerator. For
+-- each subnet endpoint that you add, Global Accelerator creates a new
+-- static port mapping for the accelerator. The port mappings don\'t change
+-- after Global Accelerator generates them, so you can retrieve and cache
+-- the full mapping on your servers.
+--
+-- If you remove a subnet from your accelerator, Global Accelerator removes
+-- (reclaims) the port mappings. If you add a subnet to your accelerator,
+-- Global Accelerator creates new port mappings (the existing ones don\'t
+-- change). If you add or remove EC2 instances in your subnet, the port
+-- mappings don\'t change, because the mappings are created when you add
+-- the subnet to Global Accelerator.
+--
+-- The mappings also include a flag for each destination denoting which
+-- destination IP addresses and ports are allowed or denied traffic.
+--
+-- This operation returns paginated results.
+module Amazonka.GlobalAccelerator.ListCustomRoutingPortMappings
+  ( -- * Creating a Request
+    ListCustomRoutingPortMappings (..),
+    newListCustomRoutingPortMappings,
+
+    -- * Request Lenses
+    listCustomRoutingPortMappings_endpointGroupArn,
+    listCustomRoutingPortMappings_maxResults,
+    listCustomRoutingPortMappings_nextToken,
+    listCustomRoutingPortMappings_acceleratorArn,
+
+    -- * Destructuring the Response
+    ListCustomRoutingPortMappingsResponse (..),
+    newListCustomRoutingPortMappingsResponse,
+
+    -- * Response Lenses
+    listCustomRoutingPortMappingsResponse_nextToken,
+    listCustomRoutingPortMappingsResponse_portMappings,
+    listCustomRoutingPortMappingsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListCustomRoutingPortMappings' smart constructor.
+data ListCustomRoutingPortMappings = ListCustomRoutingPortMappings'
+  { -- | The Amazon Resource Name (ARN) of the endpoint group to list the custom
+    -- routing port mappings for.
+    endpointGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The number of destination port mappings that you want to return with
+    -- this call. The default value is 10.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the accelerator to list the custom
+    -- routing port mappings for.
+    acceleratorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCustomRoutingPortMappings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointGroupArn', 'listCustomRoutingPortMappings_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group to list the custom
+-- routing port mappings for.
+--
+-- 'maxResults', 'listCustomRoutingPortMappings_maxResults' - The number of destination port mappings that you want to return with
+-- this call. The default value is 10.
+--
+-- 'nextToken', 'listCustomRoutingPortMappings_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+--
+-- 'acceleratorArn', 'listCustomRoutingPortMappings_acceleratorArn' - The Amazon Resource Name (ARN) of the accelerator to list the custom
+-- routing port mappings for.
+newListCustomRoutingPortMappings ::
+  -- | 'acceleratorArn'
+  Prelude.Text ->
+  ListCustomRoutingPortMappings
+newListCustomRoutingPortMappings pAcceleratorArn_ =
+  ListCustomRoutingPortMappings'
+    { endpointGroupArn =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      acceleratorArn = pAcceleratorArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the endpoint group to list the custom
+-- routing port mappings for.
+listCustomRoutingPortMappings_endpointGroupArn :: Lens.Lens' ListCustomRoutingPortMappings (Prelude.Maybe Prelude.Text)
+listCustomRoutingPortMappings_endpointGroupArn = Lens.lens (\ListCustomRoutingPortMappings' {endpointGroupArn} -> endpointGroupArn) (\s@ListCustomRoutingPortMappings' {} a -> s {endpointGroupArn = a} :: ListCustomRoutingPortMappings)
+
+-- | The number of destination port mappings that you want to return with
+-- this call. The default value is 10.
+listCustomRoutingPortMappings_maxResults :: Lens.Lens' ListCustomRoutingPortMappings (Prelude.Maybe Prelude.Natural)
+listCustomRoutingPortMappings_maxResults = Lens.lens (\ListCustomRoutingPortMappings' {maxResults} -> maxResults) (\s@ListCustomRoutingPortMappings' {} a -> s {maxResults = a} :: ListCustomRoutingPortMappings)
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listCustomRoutingPortMappings_nextToken :: Lens.Lens' ListCustomRoutingPortMappings (Prelude.Maybe Prelude.Text)
+listCustomRoutingPortMappings_nextToken = Lens.lens (\ListCustomRoutingPortMappings' {nextToken} -> nextToken) (\s@ListCustomRoutingPortMappings' {} a -> s {nextToken = a} :: ListCustomRoutingPortMappings)
+
+-- | The Amazon Resource Name (ARN) of the accelerator to list the custom
+-- routing port mappings for.
+listCustomRoutingPortMappings_acceleratorArn :: Lens.Lens' ListCustomRoutingPortMappings Prelude.Text
+listCustomRoutingPortMappings_acceleratorArn = Lens.lens (\ListCustomRoutingPortMappings' {acceleratorArn} -> acceleratorArn) (\s@ListCustomRoutingPortMappings' {} a -> s {acceleratorArn = a} :: ListCustomRoutingPortMappings)
+
+instance Core.AWSPager ListCustomRoutingPortMappings where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listCustomRoutingPortMappingsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listCustomRoutingPortMappingsResponse_portMappings
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listCustomRoutingPortMappings_nextToken
+          Lens..~ rs
+          Lens.^? listCustomRoutingPortMappingsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    ListCustomRoutingPortMappings
+  where
+  type
+    AWSResponse ListCustomRoutingPortMappings =
+      ListCustomRoutingPortMappingsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCustomRoutingPortMappingsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "PortMappings" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListCustomRoutingPortMappings
+  where
+  hashWithSalt _salt ListCustomRoutingPortMappings' {..} =
+    _salt
+      `Prelude.hashWithSalt` endpointGroupArn
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` acceleratorArn
+
+instance Prelude.NFData ListCustomRoutingPortMappings where
+  rnf ListCustomRoutingPortMappings' {..} =
+    Prelude.rnf endpointGroupArn
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf acceleratorArn
+
+instance Data.ToHeaders ListCustomRoutingPortMappings where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.ListCustomRoutingPortMappings" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListCustomRoutingPortMappings where
+  toJSON ListCustomRoutingPortMappings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EndpointGroupArn" Data..=)
+              Prelude.<$> endpointGroupArn,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("AcceleratorArn" Data..= acceleratorArn)
+          ]
+      )
+
+instance Data.ToPath ListCustomRoutingPortMappings where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListCustomRoutingPortMappings where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListCustomRoutingPortMappingsResponse' smart constructor.
+data ListCustomRoutingPortMappingsResponse = ListCustomRoutingPortMappingsResponse'
+  { -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The port mappings for a custom routing accelerator.
+    portMappings :: Prelude.Maybe [PortMapping],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCustomRoutingPortMappingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listCustomRoutingPortMappingsResponse_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+--
+-- 'portMappings', 'listCustomRoutingPortMappingsResponse_portMappings' - The port mappings for a custom routing accelerator.
+--
+-- 'httpStatus', 'listCustomRoutingPortMappingsResponse_httpStatus' - The response's http status code.
+newListCustomRoutingPortMappingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCustomRoutingPortMappingsResponse
+newListCustomRoutingPortMappingsResponse pHttpStatus_ =
+  ListCustomRoutingPortMappingsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      portMappings = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listCustomRoutingPortMappingsResponse_nextToken :: Lens.Lens' ListCustomRoutingPortMappingsResponse (Prelude.Maybe Prelude.Text)
+listCustomRoutingPortMappingsResponse_nextToken = Lens.lens (\ListCustomRoutingPortMappingsResponse' {nextToken} -> nextToken) (\s@ListCustomRoutingPortMappingsResponse' {} a -> s {nextToken = a} :: ListCustomRoutingPortMappingsResponse)
+
+-- | The port mappings for a custom routing accelerator.
+listCustomRoutingPortMappingsResponse_portMappings :: Lens.Lens' ListCustomRoutingPortMappingsResponse (Prelude.Maybe [PortMapping])
+listCustomRoutingPortMappingsResponse_portMappings = Lens.lens (\ListCustomRoutingPortMappingsResponse' {portMappings} -> portMappings) (\s@ListCustomRoutingPortMappingsResponse' {} a -> s {portMappings = a} :: ListCustomRoutingPortMappingsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listCustomRoutingPortMappingsResponse_httpStatus :: Lens.Lens' ListCustomRoutingPortMappingsResponse Prelude.Int
+listCustomRoutingPortMappingsResponse_httpStatus = Lens.lens (\ListCustomRoutingPortMappingsResponse' {httpStatus} -> httpStatus) (\s@ListCustomRoutingPortMappingsResponse' {} a -> s {httpStatus = a} :: ListCustomRoutingPortMappingsResponse)
+
+instance
+  Prelude.NFData
+    ListCustomRoutingPortMappingsResponse
+  where
+  rnf ListCustomRoutingPortMappingsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf portMappings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/ListCustomRoutingPortMappingsByDestination.hs b/gen/Amazonka/GlobalAccelerator/ListCustomRoutingPortMappingsByDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/ListCustomRoutingPortMappingsByDestination.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.GlobalAccelerator.ListCustomRoutingPortMappingsByDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the port mappings for a specific EC2 instance (destination) in a
+-- VPC subnet endpoint. The response is the mappings for one destination IP
+-- address. This is useful when your subnet endpoint has mappings that span
+-- multiple custom routing accelerators in your account, or for scenarios
+-- where you only want to list the port mappings for a specific destination
+-- instance.
+--
+-- This operation returns paginated results.
+module Amazonka.GlobalAccelerator.ListCustomRoutingPortMappingsByDestination
+  ( -- * Creating a Request
+    ListCustomRoutingPortMappingsByDestination (..),
+    newListCustomRoutingPortMappingsByDestination,
+
+    -- * Request Lenses
+    listCustomRoutingPortMappingsByDestination_maxResults,
+    listCustomRoutingPortMappingsByDestination_nextToken,
+    listCustomRoutingPortMappingsByDestination_endpointId,
+    listCustomRoutingPortMappingsByDestination_destinationAddress,
+
+    -- * Destructuring the Response
+    ListCustomRoutingPortMappingsByDestinationResponse (..),
+    newListCustomRoutingPortMappingsByDestinationResponse,
+
+    -- * Response Lenses
+    listCustomRoutingPortMappingsByDestinationResponse_destinationPortMappings,
+    listCustomRoutingPortMappingsByDestinationResponse_nextToken,
+    listCustomRoutingPortMappingsByDestinationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListCustomRoutingPortMappingsByDestination' smart constructor.
+data ListCustomRoutingPortMappingsByDestination = ListCustomRoutingPortMappingsByDestination'
+  { -- | The number of destination port mappings that you want to return with
+    -- this call. The default value is 10.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID for the virtual private cloud (VPC) subnet.
+    endpointId :: Prelude.Text,
+    -- | The endpoint IP address in a virtual private cloud (VPC) subnet for
+    -- which you want to receive back port mappings.
+    destinationAddress :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCustomRoutingPortMappingsByDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listCustomRoutingPortMappingsByDestination_maxResults' - The number of destination port mappings that you want to return with
+-- this call. The default value is 10.
+--
+-- 'nextToken', 'listCustomRoutingPortMappingsByDestination_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+--
+-- 'endpointId', 'listCustomRoutingPortMappingsByDestination_endpointId' - The ID for the virtual private cloud (VPC) subnet.
+--
+-- 'destinationAddress', 'listCustomRoutingPortMappingsByDestination_destinationAddress' - The endpoint IP address in a virtual private cloud (VPC) subnet for
+-- which you want to receive back port mappings.
+newListCustomRoutingPortMappingsByDestination ::
+  -- | 'endpointId'
+  Prelude.Text ->
+  -- | 'destinationAddress'
+  Prelude.Text ->
+  ListCustomRoutingPortMappingsByDestination
+newListCustomRoutingPortMappingsByDestination
+  pEndpointId_
+  pDestinationAddress_ =
+    ListCustomRoutingPortMappingsByDestination'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        endpointId = pEndpointId_,
+        destinationAddress =
+          pDestinationAddress_
+      }
+
+-- | The number of destination port mappings that you want to return with
+-- this call. The default value is 10.
+listCustomRoutingPortMappingsByDestination_maxResults :: Lens.Lens' ListCustomRoutingPortMappingsByDestination (Prelude.Maybe Prelude.Natural)
+listCustomRoutingPortMappingsByDestination_maxResults = Lens.lens (\ListCustomRoutingPortMappingsByDestination' {maxResults} -> maxResults) (\s@ListCustomRoutingPortMappingsByDestination' {} a -> s {maxResults = a} :: ListCustomRoutingPortMappingsByDestination)
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listCustomRoutingPortMappingsByDestination_nextToken :: Lens.Lens' ListCustomRoutingPortMappingsByDestination (Prelude.Maybe Prelude.Text)
+listCustomRoutingPortMappingsByDestination_nextToken = Lens.lens (\ListCustomRoutingPortMappingsByDestination' {nextToken} -> nextToken) (\s@ListCustomRoutingPortMappingsByDestination' {} a -> s {nextToken = a} :: ListCustomRoutingPortMappingsByDestination)
+
+-- | The ID for the virtual private cloud (VPC) subnet.
+listCustomRoutingPortMappingsByDestination_endpointId :: Lens.Lens' ListCustomRoutingPortMappingsByDestination Prelude.Text
+listCustomRoutingPortMappingsByDestination_endpointId = Lens.lens (\ListCustomRoutingPortMappingsByDestination' {endpointId} -> endpointId) (\s@ListCustomRoutingPortMappingsByDestination' {} a -> s {endpointId = a} :: ListCustomRoutingPortMappingsByDestination)
+
+-- | The endpoint IP address in a virtual private cloud (VPC) subnet for
+-- which you want to receive back port mappings.
+listCustomRoutingPortMappingsByDestination_destinationAddress :: Lens.Lens' ListCustomRoutingPortMappingsByDestination Prelude.Text
+listCustomRoutingPortMappingsByDestination_destinationAddress = Lens.lens (\ListCustomRoutingPortMappingsByDestination' {destinationAddress} -> destinationAddress) (\s@ListCustomRoutingPortMappingsByDestination' {} a -> s {destinationAddress = a} :: ListCustomRoutingPortMappingsByDestination)
+
+instance
+  Core.AWSPager
+    ListCustomRoutingPortMappingsByDestination
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listCustomRoutingPortMappingsByDestinationResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listCustomRoutingPortMappingsByDestinationResponse_destinationPortMappings
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listCustomRoutingPortMappingsByDestination_nextToken
+          Lens..~ rs
+          Lens.^? listCustomRoutingPortMappingsByDestinationResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    ListCustomRoutingPortMappingsByDestination
+  where
+  type
+    AWSResponse
+      ListCustomRoutingPortMappingsByDestination =
+      ListCustomRoutingPortMappingsByDestinationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCustomRoutingPortMappingsByDestinationResponse'
+            Prelude.<$> ( x
+                            Data..?> "DestinationPortMappings"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListCustomRoutingPortMappingsByDestination
+  where
+  hashWithSalt
+    _salt
+    ListCustomRoutingPortMappingsByDestination' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` endpointId
+        `Prelude.hashWithSalt` destinationAddress
+
+instance
+  Prelude.NFData
+    ListCustomRoutingPortMappingsByDestination
+  where
+  rnf ListCustomRoutingPortMappingsByDestination' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf endpointId
+      `Prelude.seq` Prelude.rnf destinationAddress
+
+instance
+  Data.ToHeaders
+    ListCustomRoutingPortMappingsByDestination
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.ListCustomRoutingPortMappingsByDestination" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    ListCustomRoutingPortMappingsByDestination
+  where
+  toJSON
+    ListCustomRoutingPortMappingsByDestination' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+              ("NextToken" Data..=) Prelude.<$> nextToken,
+              Prelude.Just ("EndpointId" Data..= endpointId),
+              Prelude.Just
+                ("DestinationAddress" Data..= destinationAddress)
+            ]
+        )
+
+instance
+  Data.ToPath
+    ListCustomRoutingPortMappingsByDestination
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ListCustomRoutingPortMappingsByDestination
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListCustomRoutingPortMappingsByDestinationResponse' smart constructor.
+data ListCustomRoutingPortMappingsByDestinationResponse = ListCustomRoutingPortMappingsByDestinationResponse'
+  { -- | The port mappings for the endpoint IP address that you specified in the
+    -- request.
+    destinationPortMappings :: Prelude.Maybe [DestinationPortMapping],
+    -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    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 'ListCustomRoutingPortMappingsByDestinationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationPortMappings', 'listCustomRoutingPortMappingsByDestinationResponse_destinationPortMappings' - The port mappings for the endpoint IP address that you specified in the
+-- request.
+--
+-- 'nextToken', 'listCustomRoutingPortMappingsByDestinationResponse_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+--
+-- 'httpStatus', 'listCustomRoutingPortMappingsByDestinationResponse_httpStatus' - The response's http status code.
+newListCustomRoutingPortMappingsByDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCustomRoutingPortMappingsByDestinationResponse
+newListCustomRoutingPortMappingsByDestinationResponse
+  pHttpStatus_ =
+    ListCustomRoutingPortMappingsByDestinationResponse'
+      { destinationPortMappings =
+          Prelude.Nothing,
+        nextToken =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | The port mappings for the endpoint IP address that you specified in the
+-- request.
+listCustomRoutingPortMappingsByDestinationResponse_destinationPortMappings :: Lens.Lens' ListCustomRoutingPortMappingsByDestinationResponse (Prelude.Maybe [DestinationPortMapping])
+listCustomRoutingPortMappingsByDestinationResponse_destinationPortMappings = Lens.lens (\ListCustomRoutingPortMappingsByDestinationResponse' {destinationPortMappings} -> destinationPortMappings) (\s@ListCustomRoutingPortMappingsByDestinationResponse' {} a -> s {destinationPortMappings = a} :: ListCustomRoutingPortMappingsByDestinationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listCustomRoutingPortMappingsByDestinationResponse_nextToken :: Lens.Lens' ListCustomRoutingPortMappingsByDestinationResponse (Prelude.Maybe Prelude.Text)
+listCustomRoutingPortMappingsByDestinationResponse_nextToken = Lens.lens (\ListCustomRoutingPortMappingsByDestinationResponse' {nextToken} -> nextToken) (\s@ListCustomRoutingPortMappingsByDestinationResponse' {} a -> s {nextToken = a} :: ListCustomRoutingPortMappingsByDestinationResponse)
+
+-- | The response's http status code.
+listCustomRoutingPortMappingsByDestinationResponse_httpStatus :: Lens.Lens' ListCustomRoutingPortMappingsByDestinationResponse Prelude.Int
+listCustomRoutingPortMappingsByDestinationResponse_httpStatus = Lens.lens (\ListCustomRoutingPortMappingsByDestinationResponse' {httpStatus} -> httpStatus) (\s@ListCustomRoutingPortMappingsByDestinationResponse' {} a -> s {httpStatus = a} :: ListCustomRoutingPortMappingsByDestinationResponse)
+
+instance
+  Prelude.NFData
+    ListCustomRoutingPortMappingsByDestinationResponse
+  where
+  rnf
+    ListCustomRoutingPortMappingsByDestinationResponse' {..} =
+      Prelude.rnf destinationPortMappings
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/ListEndpointGroups.hs b/gen/Amazonka/GlobalAccelerator/ListEndpointGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/ListEndpointGroups.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.GlobalAccelerator.ListEndpointGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the endpoint groups that are associated with a listener.
+--
+-- This operation returns paginated results.
+module Amazonka.GlobalAccelerator.ListEndpointGroups
+  ( -- * Creating a Request
+    ListEndpointGroups (..),
+    newListEndpointGroups,
+
+    -- * Request Lenses
+    listEndpointGroups_maxResults,
+    listEndpointGroups_nextToken,
+    listEndpointGroups_listenerArn,
+
+    -- * Destructuring the Response
+    ListEndpointGroupsResponse (..),
+    newListEndpointGroupsResponse,
+
+    -- * Response Lenses
+    listEndpointGroupsResponse_endpointGroups,
+    listEndpointGroupsResponse_nextToken,
+    listEndpointGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListEndpointGroups' smart constructor.
+data ListEndpointGroups = ListEndpointGroups'
+  { -- | The number of endpoint group objects that you want to return with this
+    -- call. The default value is 10.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the listener.
+    listenerArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEndpointGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listEndpointGroups_maxResults' - The number of endpoint group objects that you want to return with this
+-- call. The default value is 10.
+--
+-- 'nextToken', 'listEndpointGroups_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+--
+-- 'listenerArn', 'listEndpointGroups_listenerArn' - The Amazon Resource Name (ARN) of the listener.
+newListEndpointGroups ::
+  -- | 'listenerArn'
+  Prelude.Text ->
+  ListEndpointGroups
+newListEndpointGroups pListenerArn_ =
+  ListEndpointGroups'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      listenerArn = pListenerArn_
+    }
+
+-- | The number of endpoint group objects that you want to return with this
+-- call. The default value is 10.
+listEndpointGroups_maxResults :: Lens.Lens' ListEndpointGroups (Prelude.Maybe Prelude.Natural)
+listEndpointGroups_maxResults = Lens.lens (\ListEndpointGroups' {maxResults} -> maxResults) (\s@ListEndpointGroups' {} a -> s {maxResults = a} :: ListEndpointGroups)
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listEndpointGroups_nextToken :: Lens.Lens' ListEndpointGroups (Prelude.Maybe Prelude.Text)
+listEndpointGroups_nextToken = Lens.lens (\ListEndpointGroups' {nextToken} -> nextToken) (\s@ListEndpointGroups' {} a -> s {nextToken = a} :: ListEndpointGroups)
+
+-- | The Amazon Resource Name (ARN) of the listener.
+listEndpointGroups_listenerArn :: Lens.Lens' ListEndpointGroups Prelude.Text
+listEndpointGroups_listenerArn = Lens.lens (\ListEndpointGroups' {listenerArn} -> listenerArn) (\s@ListEndpointGroups' {} a -> s {listenerArn = a} :: ListEndpointGroups)
+
+instance Core.AWSPager ListEndpointGroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listEndpointGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listEndpointGroupsResponse_endpointGroups
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listEndpointGroups_nextToken
+          Lens..~ rs
+          Lens.^? listEndpointGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListEndpointGroups where
+  type
+    AWSResponse ListEndpointGroups =
+      ListEndpointGroupsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEndpointGroupsResponse'
+            Prelude.<$> (x Data..?> "EndpointGroups" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEndpointGroups where
+  hashWithSalt _salt ListEndpointGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` listenerArn
+
+instance Prelude.NFData ListEndpointGroups where
+  rnf ListEndpointGroups' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf listenerArn
+
+instance Data.ToHeaders ListEndpointGroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.ListEndpointGroups" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListEndpointGroups where
+  toJSON ListEndpointGroups' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("ListenerArn" Data..= listenerArn)
+          ]
+      )
+
+instance Data.ToPath ListEndpointGroups where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListEndpointGroups where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListEndpointGroupsResponse' smart constructor.
+data ListEndpointGroupsResponse = ListEndpointGroupsResponse'
+  { -- | The list of the endpoint groups associated with a listener.
+    endpointGroups :: Prelude.Maybe [EndpointGroup],
+    -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    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 'ListEndpointGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointGroups', 'listEndpointGroupsResponse_endpointGroups' - The list of the endpoint groups associated with a listener.
+--
+-- 'nextToken', 'listEndpointGroupsResponse_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+--
+-- 'httpStatus', 'listEndpointGroupsResponse_httpStatus' - The response's http status code.
+newListEndpointGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEndpointGroupsResponse
+newListEndpointGroupsResponse pHttpStatus_ =
+  ListEndpointGroupsResponse'
+    { endpointGroups =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of the endpoint groups associated with a listener.
+listEndpointGroupsResponse_endpointGroups :: Lens.Lens' ListEndpointGroupsResponse (Prelude.Maybe [EndpointGroup])
+listEndpointGroupsResponse_endpointGroups = Lens.lens (\ListEndpointGroupsResponse' {endpointGroups} -> endpointGroups) (\s@ListEndpointGroupsResponse' {} a -> s {endpointGroups = a} :: ListEndpointGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listEndpointGroupsResponse_nextToken :: Lens.Lens' ListEndpointGroupsResponse (Prelude.Maybe Prelude.Text)
+listEndpointGroupsResponse_nextToken = Lens.lens (\ListEndpointGroupsResponse' {nextToken} -> nextToken) (\s@ListEndpointGroupsResponse' {} a -> s {nextToken = a} :: ListEndpointGroupsResponse)
+
+-- | The response's http status code.
+listEndpointGroupsResponse_httpStatus :: Lens.Lens' ListEndpointGroupsResponse Prelude.Int
+listEndpointGroupsResponse_httpStatus = Lens.lens (\ListEndpointGroupsResponse' {httpStatus} -> httpStatus) (\s@ListEndpointGroupsResponse' {} a -> s {httpStatus = a} :: ListEndpointGroupsResponse)
+
+instance Prelude.NFData ListEndpointGroupsResponse where
+  rnf ListEndpointGroupsResponse' {..} =
+    Prelude.rnf endpointGroups
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/ListListeners.hs b/gen/Amazonka/GlobalAccelerator/ListListeners.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/ListListeners.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.GlobalAccelerator.ListListeners
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the listeners for an accelerator.
+--
+-- This operation returns paginated results.
+module Amazonka.GlobalAccelerator.ListListeners
+  ( -- * Creating a Request
+    ListListeners (..),
+    newListListeners,
+
+    -- * Request Lenses
+    listListeners_maxResults,
+    listListeners_nextToken,
+    listListeners_acceleratorArn,
+
+    -- * Destructuring the Response
+    ListListenersResponse (..),
+    newListListenersResponse,
+
+    -- * Response Lenses
+    listListenersResponse_listeners,
+    listListenersResponse_nextToken,
+    listListenersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListListeners' smart constructor.
+data ListListeners = ListListeners'
+  { -- | The number of listener objects that you want to return with this call.
+    -- The default value is 10.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the accelerator for which you want to
+    -- list listener objects.
+    acceleratorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListListeners' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listListeners_maxResults' - The number of listener objects that you want to return with this call.
+-- The default value is 10.
+--
+-- 'nextToken', 'listListeners_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+--
+-- 'acceleratorArn', 'listListeners_acceleratorArn' - The Amazon Resource Name (ARN) of the accelerator for which you want to
+-- list listener objects.
+newListListeners ::
+  -- | 'acceleratorArn'
+  Prelude.Text ->
+  ListListeners
+newListListeners pAcceleratorArn_ =
+  ListListeners'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      acceleratorArn = pAcceleratorArn_
+    }
+
+-- | The number of listener objects that you want to return with this call.
+-- The default value is 10.
+listListeners_maxResults :: Lens.Lens' ListListeners (Prelude.Maybe Prelude.Natural)
+listListeners_maxResults = Lens.lens (\ListListeners' {maxResults} -> maxResults) (\s@ListListeners' {} a -> s {maxResults = a} :: ListListeners)
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listListeners_nextToken :: Lens.Lens' ListListeners (Prelude.Maybe Prelude.Text)
+listListeners_nextToken = Lens.lens (\ListListeners' {nextToken} -> nextToken) (\s@ListListeners' {} a -> s {nextToken = a} :: ListListeners)
+
+-- | The Amazon Resource Name (ARN) of the accelerator for which you want to
+-- list listener objects.
+listListeners_acceleratorArn :: Lens.Lens' ListListeners Prelude.Text
+listListeners_acceleratorArn = Lens.lens (\ListListeners' {acceleratorArn} -> acceleratorArn) (\s@ListListeners' {} a -> s {acceleratorArn = a} :: ListListeners)
+
+instance Core.AWSPager ListListeners where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listListenersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listListenersResponse_listeners
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listListeners_nextToken
+          Lens..~ rs
+          Lens.^? listListenersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListListeners where
+  type
+    AWSResponse ListListeners =
+      ListListenersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListListenersResponse'
+            Prelude.<$> (x Data..?> "Listeners" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListListeners where
+  hashWithSalt _salt ListListeners' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` acceleratorArn
+
+instance Prelude.NFData ListListeners where
+  rnf ListListeners' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf acceleratorArn
+
+instance Data.ToHeaders ListListeners where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.ListListeners" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListListeners where
+  toJSON ListListeners' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("AcceleratorArn" Data..= acceleratorArn)
+          ]
+      )
+
+instance Data.ToPath ListListeners where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListListeners where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListListenersResponse' smart constructor.
+data ListListenersResponse = ListListenersResponse'
+  { -- | The list of listeners for an accelerator.
+    listeners :: Prelude.Maybe [Listener],
+    -- | The token for the next set of results. You receive this token from a
+    -- previous call.
+    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 'ListListenersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'listeners', 'listListenersResponse_listeners' - The list of listeners for an accelerator.
+--
+-- 'nextToken', 'listListenersResponse_nextToken' - The token for the next set of results. You receive this token from a
+-- previous call.
+--
+-- 'httpStatus', 'listListenersResponse_httpStatus' - The response's http status code.
+newListListenersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListListenersResponse
+newListListenersResponse pHttpStatus_ =
+  ListListenersResponse'
+    { listeners = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of listeners for an accelerator.
+listListenersResponse_listeners :: Lens.Lens' ListListenersResponse (Prelude.Maybe [Listener])
+listListenersResponse_listeners = Lens.lens (\ListListenersResponse' {listeners} -> listeners) (\s@ListListenersResponse' {} a -> s {listeners = a} :: ListListenersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results. You receive this token from a
+-- previous call.
+listListenersResponse_nextToken :: Lens.Lens' ListListenersResponse (Prelude.Maybe Prelude.Text)
+listListenersResponse_nextToken = Lens.lens (\ListListenersResponse' {nextToken} -> nextToken) (\s@ListListenersResponse' {} a -> s {nextToken = a} :: ListListenersResponse)
+
+-- | The response's http status code.
+listListenersResponse_httpStatus :: Lens.Lens' ListListenersResponse Prelude.Int
+listListenersResponse_httpStatus = Lens.lens (\ListListenersResponse' {httpStatus} -> httpStatus) (\s@ListListenersResponse' {} a -> s {httpStatus = a} :: ListListenersResponse)
+
+instance Prelude.NFData ListListenersResponse where
+  rnf ListListenersResponse' {..} =
+    Prelude.rnf listeners
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/ListTagsForResource.hs b/gen/Amazonka/GlobalAccelerator/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/ListTagsForResource.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.GlobalAccelerator.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List all tags for an accelerator.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/tagging-in-global-accelerator.html Tagging in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+module Amazonka.GlobalAccelerator.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) of the accelerator to list tags for. An
+    -- ARN uniquely identifies an accelerator.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) of the accelerator to list tags for. An
+-- ARN uniquely identifies an accelerator.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the accelerator to list tags for. An
+-- ARN uniquely identifies an accelerator.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.ListTagsForResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTagsForResource where
+  toJSON ListTagsForResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ResourceArn" Data..= resourceArn)]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | Root level tag for the Tags parameters.
+    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 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTagsForResourceResponse_tags' - Root level tag for the Tags parameters.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Root level tag for the Tags parameters.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe [Tag])
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/ProvisionByoipCidr.hs b/gen/Amazonka/GlobalAccelerator/ProvisionByoipCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/ProvisionByoipCidr.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.GlobalAccelerator.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 IP address range to 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
+-- <https://docs.aws.amazon.com/global-accelerator/latest/api/AdvertiseByoipCidr.html AdvertiseByoipCidr>.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/using-byoip.html Bring your own IP addresses (BYOIP)>
+-- in the /Global Accelerator Developer Guide/.
+module Amazonka.GlobalAccelerator.ProvisionByoipCidr
+  ( -- * Creating a Request
+    ProvisionByoipCidr (..),
+    newProvisionByoipCidr,
+
+    -- * Request Lenses
+    provisionByoipCidr_cidr,
+    provisionByoipCidr_cidrAuthorizationContext,
+
+    -- * 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.GlobalAccelerator.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'
+  { -- | The public IPv4 address range, in CIDR notation. The most specific IP
+    -- prefix that you can specify is \/24. The address range cannot overlap
+    -- with another address range that you\'ve brought to this or another
+    -- Region.
+    cidr :: Prelude.Text,
+    -- | A signed document that proves that you are authorized to bring the
+    -- specified IP address range to Amazon using BYOIP.
+    cidrAuthorizationContext :: CidrAuthorizationContext
+  }
+  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:
+--
+-- 'cidr', 'provisionByoipCidr_cidr' - The public IPv4 address range, in CIDR notation. The most specific IP
+-- prefix that you can specify is \/24. The address range cannot overlap
+-- with another address range that you\'ve brought to this or another
+-- Region.
+--
+-- 'cidrAuthorizationContext', 'provisionByoipCidr_cidrAuthorizationContext' - A signed document that proves that you are authorized to bring the
+-- specified IP address range to Amazon using BYOIP.
+newProvisionByoipCidr ::
+  -- | 'cidr'
+  Prelude.Text ->
+  -- | 'cidrAuthorizationContext'
+  CidrAuthorizationContext ->
+  ProvisionByoipCidr
+newProvisionByoipCidr
+  pCidr_
+  pCidrAuthorizationContext_ =
+    ProvisionByoipCidr'
+      { cidr = pCidr_,
+        cidrAuthorizationContext =
+          pCidrAuthorizationContext_
+      }
+
+-- | The public IPv4 address range, in CIDR notation. The most specific IP
+-- prefix that you can specify is \/24. 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)
+
+-- | 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 CidrAuthorizationContext
+provisionByoipCidr_cidrAuthorizationContext = Lens.lens (\ProvisionByoipCidr' {cidrAuthorizationContext} -> cidrAuthorizationContext) (\s@ProvisionByoipCidr' {} a -> s {cidrAuthorizationContext = a} :: ProvisionByoipCidr)
+
+instance Core.AWSRequest ProvisionByoipCidr where
+  type
+    AWSResponse ProvisionByoipCidr =
+      ProvisionByoipCidrResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \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` cidr
+      `Prelude.hashWithSalt` cidrAuthorizationContext
+
+instance Prelude.NFData ProvisionByoipCidr where
+  rnf ProvisionByoipCidr' {..} =
+    Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf cidrAuthorizationContext
+
+instance Data.ToHeaders ProvisionByoipCidr where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.ProvisionByoipCidr" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ProvisionByoipCidr where
+  toJSON ProvisionByoipCidr' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Cidr" Data..= cidr),
+            Prelude.Just
+              ( "CidrAuthorizationContext"
+                  Data..= cidrAuthorizationContext
+              )
+          ]
+      )
+
+instance Data.ToPath ProvisionByoipCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ProvisionByoipCidr where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /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/GlobalAccelerator/RemoveCustomRoutingEndpoints.hs b/gen/Amazonka/GlobalAccelerator/RemoveCustomRoutingEndpoints.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/RemoveCustomRoutingEndpoints.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.RemoveCustomRoutingEndpoints
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Remove endpoints from a custom routing accelerator.
+module Amazonka.GlobalAccelerator.RemoveCustomRoutingEndpoints
+  ( -- * Creating a Request
+    RemoveCustomRoutingEndpoints (..),
+    newRemoveCustomRoutingEndpoints,
+
+    -- * Request Lenses
+    removeCustomRoutingEndpoints_endpointIds,
+    removeCustomRoutingEndpoints_endpointGroupArn,
+
+    -- * Destructuring the Response
+    RemoveCustomRoutingEndpointsResponse (..),
+    newRemoveCustomRoutingEndpointsResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRemoveCustomRoutingEndpoints' smart constructor.
+data RemoveCustomRoutingEndpoints = RemoveCustomRoutingEndpoints'
+  { -- | The IDs for the endpoints. For custom routing accelerators, endpoint IDs
+    -- are the virtual private cloud (VPC) subnet IDs.
+    endpointIds :: [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) of the endpoint group to remove endpoints
+    -- from.
+    endpointGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveCustomRoutingEndpoints' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointIds', 'removeCustomRoutingEndpoints_endpointIds' - The IDs for the endpoints. For custom routing accelerators, endpoint IDs
+-- are the virtual private cloud (VPC) subnet IDs.
+--
+-- 'endpointGroupArn', 'removeCustomRoutingEndpoints_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group to remove endpoints
+-- from.
+newRemoveCustomRoutingEndpoints ::
+  -- | 'endpointGroupArn'
+  Prelude.Text ->
+  RemoveCustomRoutingEndpoints
+newRemoveCustomRoutingEndpoints pEndpointGroupArn_ =
+  RemoveCustomRoutingEndpoints'
+    { endpointIds =
+        Prelude.mempty,
+      endpointGroupArn = pEndpointGroupArn_
+    }
+
+-- | The IDs for the endpoints. For custom routing accelerators, endpoint IDs
+-- are the virtual private cloud (VPC) subnet IDs.
+removeCustomRoutingEndpoints_endpointIds :: Lens.Lens' RemoveCustomRoutingEndpoints [Prelude.Text]
+removeCustomRoutingEndpoints_endpointIds = Lens.lens (\RemoveCustomRoutingEndpoints' {endpointIds} -> endpointIds) (\s@RemoveCustomRoutingEndpoints' {} a -> s {endpointIds = a} :: RemoveCustomRoutingEndpoints) Prelude.. Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the endpoint group to remove endpoints
+-- from.
+removeCustomRoutingEndpoints_endpointGroupArn :: Lens.Lens' RemoveCustomRoutingEndpoints Prelude.Text
+removeCustomRoutingEndpoints_endpointGroupArn = Lens.lens (\RemoveCustomRoutingEndpoints' {endpointGroupArn} -> endpointGroupArn) (\s@RemoveCustomRoutingEndpoints' {} a -> s {endpointGroupArn = a} :: RemoveCustomRoutingEndpoints)
+
+instance Core.AWSRequest RemoveCustomRoutingEndpoints where
+  type
+    AWSResponse RemoveCustomRoutingEndpoints =
+      RemoveCustomRoutingEndpointsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      RemoveCustomRoutingEndpointsResponse'
+
+instance
+  Prelude.Hashable
+    RemoveCustomRoutingEndpoints
+  where
+  hashWithSalt _salt RemoveCustomRoutingEndpoints' {..} =
+    _salt
+      `Prelude.hashWithSalt` endpointIds
+      `Prelude.hashWithSalt` endpointGroupArn
+
+instance Prelude.NFData RemoveCustomRoutingEndpoints where
+  rnf RemoveCustomRoutingEndpoints' {..} =
+    Prelude.rnf endpointIds
+      `Prelude.seq` Prelude.rnf endpointGroupArn
+
+instance Data.ToHeaders RemoveCustomRoutingEndpoints where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.RemoveCustomRoutingEndpoints" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RemoveCustomRoutingEndpoints where
+  toJSON RemoveCustomRoutingEndpoints' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("EndpointIds" Data..= endpointIds),
+            Prelude.Just
+              ("EndpointGroupArn" Data..= endpointGroupArn)
+          ]
+      )
+
+instance Data.ToPath RemoveCustomRoutingEndpoints where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RemoveCustomRoutingEndpoints where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRemoveCustomRoutingEndpointsResponse' smart constructor.
+data RemoveCustomRoutingEndpointsResponse = RemoveCustomRoutingEndpointsResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveCustomRoutingEndpointsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newRemoveCustomRoutingEndpointsResponse ::
+  RemoveCustomRoutingEndpointsResponse
+newRemoveCustomRoutingEndpointsResponse =
+  RemoveCustomRoutingEndpointsResponse'
+
+instance
+  Prelude.NFData
+    RemoveCustomRoutingEndpointsResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/GlobalAccelerator/RemoveEndpoints.hs b/gen/Amazonka/GlobalAccelerator/RemoveEndpoints.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/RemoveEndpoints.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.RemoveEndpoints
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Remove endpoints from an endpoint group.
+--
+-- The @RemoveEndpoints@ API operation is the recommended option for
+-- removing endpoints. The alternative is to remove endpoints by updating
+-- an endpoint group by using the
+-- <https://docs.aws.amazon.com/global-accelerator/latest/api/API_UpdateEndpointGroup.html UpdateEndpointGroup>
+-- API operation. There are two advantages to using @AddEndpoints@ to
+-- remove endpoints instead:
+--
+-- -   It\'s more convenient, because you only need to specify the
+--     endpoints that you want to remove. With the @UpdateEndpointGroup@
+--     API operation, you must specify all of the endpoints in the endpoint
+--     group except the ones that you want to remove from the group.
+--
+-- -   It\'s faster, because Global Accelerator doesn\'t need to resolve
+--     any endpoints. With the @UpdateEndpointGroup@ API operation, Global
+--     Accelerator must resolve all of the endpoints that remain in the
+--     group.
+module Amazonka.GlobalAccelerator.RemoveEndpoints
+  ( -- * Creating a Request
+    RemoveEndpoints (..),
+    newRemoveEndpoints,
+
+    -- * Request Lenses
+    removeEndpoints_endpointIdentifiers,
+    removeEndpoints_endpointGroupArn,
+
+    -- * Destructuring the Response
+    RemoveEndpointsResponse (..),
+    newRemoveEndpointsResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRemoveEndpoints' smart constructor.
+data RemoveEndpoints = RemoveEndpoints'
+  { -- | The identifiers of the endpoints that you want to remove.
+    endpointIdentifiers :: Prelude.NonEmpty EndpointIdentifier,
+    -- | The Amazon Resource Name (ARN) of the endpoint group.
+    endpointGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveEndpoints' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointIdentifiers', 'removeEndpoints_endpointIdentifiers' - The identifiers of the endpoints that you want to remove.
+--
+-- 'endpointGroupArn', 'removeEndpoints_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group.
+newRemoveEndpoints ::
+  -- | 'endpointIdentifiers'
+  Prelude.NonEmpty EndpointIdentifier ->
+  -- | 'endpointGroupArn'
+  Prelude.Text ->
+  RemoveEndpoints
+newRemoveEndpoints
+  pEndpointIdentifiers_
+  pEndpointGroupArn_ =
+    RemoveEndpoints'
+      { endpointIdentifiers =
+          Lens.coerced Lens.# pEndpointIdentifiers_,
+        endpointGroupArn = pEndpointGroupArn_
+      }
+
+-- | The identifiers of the endpoints that you want to remove.
+removeEndpoints_endpointIdentifiers :: Lens.Lens' RemoveEndpoints (Prelude.NonEmpty EndpointIdentifier)
+removeEndpoints_endpointIdentifiers = Lens.lens (\RemoveEndpoints' {endpointIdentifiers} -> endpointIdentifiers) (\s@RemoveEndpoints' {} a -> s {endpointIdentifiers = a} :: RemoveEndpoints) Prelude.. Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the endpoint group.
+removeEndpoints_endpointGroupArn :: Lens.Lens' RemoveEndpoints Prelude.Text
+removeEndpoints_endpointGroupArn = Lens.lens (\RemoveEndpoints' {endpointGroupArn} -> endpointGroupArn) (\s@RemoveEndpoints' {} a -> s {endpointGroupArn = a} :: RemoveEndpoints)
+
+instance Core.AWSRequest RemoveEndpoints where
+  type
+    AWSResponse RemoveEndpoints =
+      RemoveEndpointsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull RemoveEndpointsResponse'
+
+instance Prelude.Hashable RemoveEndpoints where
+  hashWithSalt _salt RemoveEndpoints' {..} =
+    _salt
+      `Prelude.hashWithSalt` endpointIdentifiers
+      `Prelude.hashWithSalt` endpointGroupArn
+
+instance Prelude.NFData RemoveEndpoints where
+  rnf RemoveEndpoints' {..} =
+    Prelude.rnf endpointIdentifiers
+      `Prelude.seq` Prelude.rnf endpointGroupArn
+
+instance Data.ToHeaders RemoveEndpoints where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.RemoveEndpoints" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RemoveEndpoints where
+  toJSON RemoveEndpoints' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("EndpointIdentifiers" Data..= endpointIdentifiers),
+            Prelude.Just
+              ("EndpointGroupArn" Data..= endpointGroupArn)
+          ]
+      )
+
+instance Data.ToPath RemoveEndpoints where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RemoveEndpoints where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRemoveEndpointsResponse' smart constructor.
+data RemoveEndpointsResponse = RemoveEndpointsResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveEndpointsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newRemoveEndpointsResponse ::
+  RemoveEndpointsResponse
+newRemoveEndpointsResponse = RemoveEndpointsResponse'
+
+instance Prelude.NFData RemoveEndpointsResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/GlobalAccelerator/TagResource.hs b/gen/Amazonka/GlobalAccelerator/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/TagResource.hs
@@ -0,0 +1,178 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Add tags to an accelerator resource.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/tagging-in-global-accelerator.html Tagging in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+module Amazonka.GlobalAccelerator.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) of the Global Accelerator resource to add
+    -- tags to. An ARN uniquely identifies a resource.
+    resourceArn :: Prelude.Text,
+    -- | The tags to add to a resource. A tag consists of a key and a value that
+    -- you define.
+    tags :: [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the Global Accelerator resource to add
+-- tags to. An ARN uniquely identifies a resource.
+--
+-- 'tags', 'tagResource_tags' - The tags to add to a resource. A tag consists of a key and a value that
+-- you define.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the Global Accelerator resource to add
+-- tags to. An ARN uniquely identifies a resource.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The tags to add to a resource. A tag consists of a key and a value that
+-- you define.
+tagResource_tags :: Lens.Lens' TagResource [Tag]
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.TagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceArn" Data..= resourceArn),
+            Prelude.Just ("Tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/Types.hs b/gen/Amazonka/GlobalAccelerator/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types.hs
@@ -0,0 +1,529 @@
+{-# 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.GlobalAccelerator.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.GlobalAccelerator.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AcceleratorNotDisabledException,
+    _AcceleratorNotFoundException,
+    _AccessDeniedException,
+    _AssociatedEndpointGroupFoundException,
+    _AssociatedListenerFoundException,
+    _ByoipCidrNotFoundException,
+    _ConflictException,
+    _EndpointAlreadyExistsException,
+    _EndpointGroupAlreadyExistsException,
+    _EndpointGroupNotFoundException,
+    _EndpointNotFoundException,
+    _IncorrectCidrStateException,
+    _InternalServiceErrorException,
+    _InvalidArgumentException,
+    _InvalidNextTokenException,
+    _InvalidPortRangeException,
+    _LimitExceededException,
+    _ListenerNotFoundException,
+    _TransactionInProgressException,
+
+    -- * AcceleratorStatus
+    AcceleratorStatus (..),
+
+    -- * ByoipCidrState
+    ByoipCidrState (..),
+
+    -- * ClientAffinity
+    ClientAffinity (..),
+
+    -- * CustomRoutingAcceleratorStatus
+    CustomRoutingAcceleratorStatus (..),
+
+    -- * CustomRoutingDestinationTrafficState
+    CustomRoutingDestinationTrafficState (..),
+
+    -- * CustomRoutingProtocol
+    CustomRoutingProtocol (..),
+
+    -- * HealthCheckProtocol
+    HealthCheckProtocol (..),
+
+    -- * HealthState
+    HealthState (..),
+
+    -- * IpAddressFamily
+    IpAddressFamily (..),
+
+    -- * IpAddressType
+    IpAddressType (..),
+
+    -- * Protocol
+    Protocol (..),
+
+    -- * Accelerator
+    Accelerator (..),
+    newAccelerator,
+    accelerator_acceleratorArn,
+    accelerator_createdTime,
+    accelerator_dnsName,
+    accelerator_dualStackDnsName,
+    accelerator_enabled,
+    accelerator_events,
+    accelerator_ipAddressType,
+    accelerator_ipSets,
+    accelerator_lastModifiedTime,
+    accelerator_name,
+    accelerator_status,
+
+    -- * AcceleratorAttributes
+    AcceleratorAttributes (..),
+    newAcceleratorAttributes,
+    acceleratorAttributes_flowLogsEnabled,
+    acceleratorAttributes_flowLogsS3Bucket,
+    acceleratorAttributes_flowLogsS3Prefix,
+
+    -- * AcceleratorEvent
+    AcceleratorEvent (..),
+    newAcceleratorEvent,
+    acceleratorEvent_message,
+    acceleratorEvent_timestamp,
+
+    -- * ByoipCidr
+    ByoipCidr (..),
+    newByoipCidr,
+    byoipCidr_cidr,
+    byoipCidr_events,
+    byoipCidr_state,
+
+    -- * ByoipCidrEvent
+    ByoipCidrEvent (..),
+    newByoipCidrEvent,
+    byoipCidrEvent_message,
+    byoipCidrEvent_timestamp,
+
+    -- * CidrAuthorizationContext
+    CidrAuthorizationContext (..),
+    newCidrAuthorizationContext,
+    cidrAuthorizationContext_message,
+    cidrAuthorizationContext_signature,
+
+    -- * CustomRoutingAccelerator
+    CustomRoutingAccelerator (..),
+    newCustomRoutingAccelerator,
+    customRoutingAccelerator_acceleratorArn,
+    customRoutingAccelerator_createdTime,
+    customRoutingAccelerator_dnsName,
+    customRoutingAccelerator_enabled,
+    customRoutingAccelerator_ipAddressType,
+    customRoutingAccelerator_ipSets,
+    customRoutingAccelerator_lastModifiedTime,
+    customRoutingAccelerator_name,
+    customRoutingAccelerator_status,
+
+    -- * CustomRoutingAcceleratorAttributes
+    CustomRoutingAcceleratorAttributes (..),
+    newCustomRoutingAcceleratorAttributes,
+    customRoutingAcceleratorAttributes_flowLogsEnabled,
+    customRoutingAcceleratorAttributes_flowLogsS3Bucket,
+    customRoutingAcceleratorAttributes_flowLogsS3Prefix,
+
+    -- * CustomRoutingDestinationConfiguration
+    CustomRoutingDestinationConfiguration (..),
+    newCustomRoutingDestinationConfiguration,
+    customRoutingDestinationConfiguration_fromPort,
+    customRoutingDestinationConfiguration_toPort,
+    customRoutingDestinationConfiguration_protocols,
+
+    -- * CustomRoutingDestinationDescription
+    CustomRoutingDestinationDescription (..),
+    newCustomRoutingDestinationDescription,
+    customRoutingDestinationDescription_fromPort,
+    customRoutingDestinationDescription_protocols,
+    customRoutingDestinationDescription_toPort,
+
+    -- * CustomRoutingEndpointConfiguration
+    CustomRoutingEndpointConfiguration (..),
+    newCustomRoutingEndpointConfiguration,
+    customRoutingEndpointConfiguration_endpointId,
+
+    -- * CustomRoutingEndpointDescription
+    CustomRoutingEndpointDescription (..),
+    newCustomRoutingEndpointDescription,
+    customRoutingEndpointDescription_endpointId,
+
+    -- * CustomRoutingEndpointGroup
+    CustomRoutingEndpointGroup (..),
+    newCustomRoutingEndpointGroup,
+    customRoutingEndpointGroup_destinationDescriptions,
+    customRoutingEndpointGroup_endpointDescriptions,
+    customRoutingEndpointGroup_endpointGroupArn,
+    customRoutingEndpointGroup_endpointGroupRegion,
+
+    -- * CustomRoutingListener
+    CustomRoutingListener (..),
+    newCustomRoutingListener,
+    customRoutingListener_listenerArn,
+    customRoutingListener_portRanges,
+
+    -- * DestinationPortMapping
+    DestinationPortMapping (..),
+    newDestinationPortMapping,
+    destinationPortMapping_acceleratorArn,
+    destinationPortMapping_acceleratorSocketAddresses,
+    destinationPortMapping_destinationSocketAddress,
+    destinationPortMapping_destinationTrafficState,
+    destinationPortMapping_endpointGroupArn,
+    destinationPortMapping_endpointGroupRegion,
+    destinationPortMapping_endpointId,
+    destinationPortMapping_ipAddressType,
+
+    -- * EndpointConfiguration
+    EndpointConfiguration (..),
+    newEndpointConfiguration,
+    endpointConfiguration_clientIPPreservationEnabled,
+    endpointConfiguration_endpointId,
+    endpointConfiguration_weight,
+
+    -- * EndpointDescription
+    EndpointDescription (..),
+    newEndpointDescription,
+    endpointDescription_clientIPPreservationEnabled,
+    endpointDescription_endpointId,
+    endpointDescription_healthReason,
+    endpointDescription_healthState,
+    endpointDescription_weight,
+
+    -- * EndpointGroup
+    EndpointGroup (..),
+    newEndpointGroup,
+    endpointGroup_endpointDescriptions,
+    endpointGroup_endpointGroupArn,
+    endpointGroup_endpointGroupRegion,
+    endpointGroup_healthCheckIntervalSeconds,
+    endpointGroup_healthCheckPath,
+    endpointGroup_healthCheckPort,
+    endpointGroup_healthCheckProtocol,
+    endpointGroup_portOverrides,
+    endpointGroup_thresholdCount,
+    endpointGroup_trafficDialPercentage,
+
+    -- * EndpointIdentifier
+    EndpointIdentifier (..),
+    newEndpointIdentifier,
+    endpointIdentifier_clientIPPreservationEnabled,
+    endpointIdentifier_endpointId,
+
+    -- * IpSet
+    IpSet (..),
+    newIpSet,
+    ipSet_ipAddressFamily,
+    ipSet_ipAddresses,
+    ipSet_ipFamily,
+
+    -- * Listener
+    Listener (..),
+    newListener,
+    listener_clientAffinity,
+    listener_listenerArn,
+    listener_portRanges,
+    listener_protocol,
+
+    -- * PortMapping
+    PortMapping (..),
+    newPortMapping,
+    portMapping_acceleratorPort,
+    portMapping_destinationSocketAddress,
+    portMapping_destinationTrafficState,
+    portMapping_endpointGroupArn,
+    portMapping_endpointId,
+    portMapping_protocols,
+
+    -- * PortOverride
+    PortOverride (..),
+    newPortOverride,
+    portOverride_endpointPort,
+    portOverride_listenerPort,
+
+    -- * PortRange
+    PortRange (..),
+    newPortRange,
+    portRange_fromPort,
+    portRange_toPort,
+
+    -- * SocketAddress
+    SocketAddress (..),
+    newSocketAddress,
+    socketAddress_ipAddress,
+    socketAddress_port,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.GlobalAccelerator.Types.Accelerator
+import Amazonka.GlobalAccelerator.Types.AcceleratorAttributes
+import Amazonka.GlobalAccelerator.Types.AcceleratorEvent
+import Amazonka.GlobalAccelerator.Types.AcceleratorStatus
+import Amazonka.GlobalAccelerator.Types.ByoipCidr
+import Amazonka.GlobalAccelerator.Types.ByoipCidrEvent
+import Amazonka.GlobalAccelerator.Types.ByoipCidrState
+import Amazonka.GlobalAccelerator.Types.CidrAuthorizationContext
+import Amazonka.GlobalAccelerator.Types.ClientAffinity
+import Amazonka.GlobalAccelerator.Types.CustomRoutingAccelerator
+import Amazonka.GlobalAccelerator.Types.CustomRoutingAcceleratorAttributes
+import Amazonka.GlobalAccelerator.Types.CustomRoutingAcceleratorStatus
+import Amazonka.GlobalAccelerator.Types.CustomRoutingDestinationConfiguration
+import Amazonka.GlobalAccelerator.Types.CustomRoutingDestinationDescription
+import Amazonka.GlobalAccelerator.Types.CustomRoutingDestinationTrafficState
+import Amazonka.GlobalAccelerator.Types.CustomRoutingEndpointConfiguration
+import Amazonka.GlobalAccelerator.Types.CustomRoutingEndpointDescription
+import Amazonka.GlobalAccelerator.Types.CustomRoutingEndpointGroup
+import Amazonka.GlobalAccelerator.Types.CustomRoutingListener
+import Amazonka.GlobalAccelerator.Types.CustomRoutingProtocol
+import Amazonka.GlobalAccelerator.Types.DestinationPortMapping
+import Amazonka.GlobalAccelerator.Types.EndpointConfiguration
+import Amazonka.GlobalAccelerator.Types.EndpointDescription
+import Amazonka.GlobalAccelerator.Types.EndpointGroup
+import Amazonka.GlobalAccelerator.Types.EndpointIdentifier
+import Amazonka.GlobalAccelerator.Types.HealthCheckProtocol
+import Amazonka.GlobalAccelerator.Types.HealthState
+import Amazonka.GlobalAccelerator.Types.IpAddressFamily
+import Amazonka.GlobalAccelerator.Types.IpAddressType
+import Amazonka.GlobalAccelerator.Types.IpSet
+import Amazonka.GlobalAccelerator.Types.Listener
+import Amazonka.GlobalAccelerator.Types.PortMapping
+import Amazonka.GlobalAccelerator.Types.PortOverride
+import Amazonka.GlobalAccelerator.Types.PortRange
+import Amazonka.GlobalAccelerator.Types.Protocol
+import Amazonka.GlobalAccelerator.Types.SocketAddress
+import Amazonka.GlobalAccelerator.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2018-08-08@ of the Amazon Global Accelerator SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "GlobalAccelerator",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "globalaccelerator",
+      Core.signingName = "globalaccelerator",
+      Core.version = "2018-08-08",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "GlobalAccelerator",
+      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.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 "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
+
+-- | The accelerator that you specified could not be disabled.
+_AcceleratorNotDisabledException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AcceleratorNotDisabledException =
+  Core._MatchServiceError
+    defaultService
+    "AcceleratorNotDisabledException"
+
+-- | The accelerator that you specified doesn\'t exist.
+_AcceleratorNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AcceleratorNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "AcceleratorNotFoundException"
+
+-- | You don\'t have access permission.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+
+-- | The listener that you specified has an endpoint group associated with
+-- it. You must remove all dependent resources from a listener before you
+-- can delete it.
+_AssociatedEndpointGroupFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AssociatedEndpointGroupFoundException =
+  Core._MatchServiceError
+    defaultService
+    "AssociatedEndpointGroupFoundException"
+
+-- | The accelerator that you specified has a listener associated with it.
+-- You must remove all dependent resources from an accelerator before you
+-- can delete it.
+_AssociatedListenerFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AssociatedListenerFoundException =
+  Core._MatchServiceError
+    defaultService
+    "AssociatedListenerFoundException"
+
+-- | The CIDR that you specified was not found or is incorrect.
+_ByoipCidrNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ByoipCidrNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ByoipCidrNotFoundException"
+
+-- | You can\'t use both of those options.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+
+-- | The endpoint that you specified doesn\'t exist.
+_EndpointAlreadyExistsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_EndpointAlreadyExistsException =
+  Core._MatchServiceError
+    defaultService
+    "EndpointAlreadyExistsException"
+
+-- | The endpoint group that you specified already exists.
+_EndpointGroupAlreadyExistsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_EndpointGroupAlreadyExistsException =
+  Core._MatchServiceError
+    defaultService
+    "EndpointGroupAlreadyExistsException"
+
+-- | The endpoint group that you specified doesn\'t exist.
+_EndpointGroupNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_EndpointGroupNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "EndpointGroupNotFoundException"
+
+-- | The endpoint that you specified doesn\'t exist.
+_EndpointNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_EndpointNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "EndpointNotFoundException"
+
+-- | The CIDR that you specified is not valid for this action. For example,
+-- the state of the CIDR might be incorrect for this action.
+_IncorrectCidrStateException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_IncorrectCidrStateException =
+  Core._MatchServiceError
+    defaultService
+    "IncorrectCidrStateException"
+
+-- | There was an internal error for Global Accelerator.
+_InternalServiceErrorException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServiceErrorException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServiceErrorException"
+
+-- | An argument that you specified is invalid.
+_InvalidArgumentException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidArgumentException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidArgumentException"
+
+-- | There isn\'t another item to return.
+_InvalidNextTokenException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidNextTokenException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidNextTokenException"
+
+-- | The port numbers that you specified are not valid numbers or are not
+-- unique for this accelerator.
+_InvalidPortRangeException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidPortRangeException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidPortRangeException"
+
+-- | Processing your request would cause you to exceed an Global Accelerator
+-- limit.
+_LimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_LimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "LimitExceededException"
+
+-- | The listener that you specified doesn\'t exist.
+_ListenerNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ListenerNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ListenerNotFoundException"
+
+-- | There\'s already a transaction in progress. Another transaction can\'t
+-- be processed.
+_TransactionInProgressException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TransactionInProgressException =
+  Core._MatchServiceError
+    defaultService
+    "TransactionInProgressException"
diff --git a/gen/Amazonka/GlobalAccelerator/Types/Accelerator.hs b/gen/Amazonka/GlobalAccelerator/Types/Accelerator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/Accelerator.hs
@@ -0,0 +1,310 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.Types.Accelerator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.Accelerator where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types.AcceleratorEvent
+import Amazonka.GlobalAccelerator.Types.AcceleratorStatus
+import Amazonka.GlobalAccelerator.Types.IpAddressType
+import Amazonka.GlobalAccelerator.Types.IpSet
+import qualified Amazonka.Prelude as Prelude
+
+-- | An accelerator is a complex type that includes one or more listeners
+-- that process inbound connections and then direct traffic to one or more
+-- endpoint groups, each of which includes endpoints, such as load
+-- balancers.
+--
+-- /See:/ 'newAccelerator' smart constructor.
+data Accelerator = Accelerator'
+  { -- | The Amazon Resource Name (ARN) of the accelerator.
+    acceleratorArn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the accelerator was created.
+    createdTime :: Prelude.Maybe Data.POSIX,
+    -- | The Domain Name System (DNS) name that Global Accelerator creates that
+    -- points to an accelerator\'s static IPv4 addresses.
+    --
+    -- The naming convention for the DNS name for an accelerator is the
+    -- following: A lowercase letter a, followed by a 16-bit random hex string,
+    -- followed by .awsglobalaccelerator.com. For example:
+    -- a1234567890abcdef.awsglobalaccelerator.com.
+    --
+    -- If you have a dual-stack accelerator, you also have a second DNS name,
+    -- @DualStackDnsName@, that points to both the A record and the AAAA record
+    -- for all four static addresses for the accelerator: two IPv4 addresses
+    -- and two IPv6 addresses.
+    --
+    -- For more information about the default DNS name, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/dns-addressing-custom-domains.dns-addressing.html Support for DNS addressing in Global Accelerator>
+    -- in the /Global Accelerator Developer Guide/.
+    dnsName :: Prelude.Maybe Prelude.Text,
+    -- | The Domain Name System (DNS) name that Global Accelerator creates that
+    -- points to a dual-stack accelerator\'s four static IP addresses: two IPv4
+    -- addresses and two IPv6 addresses.
+    --
+    -- The naming convention for the dual-stack DNS name is the following: A
+    -- lowercase letter a, followed by a 16-bit random hex string, followed by
+    -- .dualstack.awsglobalaccelerator.com. For example:
+    -- a1234567890abcdef.dualstack.awsglobalaccelerator.com.
+    --
+    -- Note: Global Accelerator also assigns a default DNS name, @DnsName@, to
+    -- your accelerator that points just to the static IPv4 addresses.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-accelerators.html#about-accelerators.dns-addressing Support for DNS addressing in Global Accelerator>
+    -- in the /Global Accelerator Developer Guide/.
+    dualStackDnsName :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the accelerator is enabled. The value is true or
+    -- false. The default value is true.
+    --
+    -- If the value is set to true, the accelerator cannot be deleted. If set
+    -- to false, accelerator can be deleted.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | A history of changes that you make to an accelerator in Global
+    -- Accelerator.
+    events :: Prelude.Maybe [AcceleratorEvent],
+    -- | The IP address type that an accelerator supports. For a standard
+    -- accelerator, the value can be IPV4 or DUAL_STACK.
+    ipAddressType :: Prelude.Maybe IpAddressType,
+    -- | The static IP addresses that Global Accelerator associates with the
+    -- accelerator.
+    ipSets :: Prelude.Maybe [IpSet],
+    -- | The date and time that the accelerator was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the accelerator. The name must contain only alphanumeric
+    -- characters or hyphens (-), and must not begin or end with a hyphen.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Describes the deployment status of the accelerator.
+    status :: Prelude.Maybe AcceleratorStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Accelerator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorArn', 'accelerator_acceleratorArn' - The Amazon Resource Name (ARN) of the accelerator.
+--
+-- 'createdTime', 'accelerator_createdTime' - The date and time that the accelerator was created.
+--
+-- 'dnsName', 'accelerator_dnsName' - The Domain Name System (DNS) name that Global Accelerator creates that
+-- points to an accelerator\'s static IPv4 addresses.
+--
+-- The naming convention for the DNS name for an accelerator is the
+-- following: A lowercase letter a, followed by a 16-bit random hex string,
+-- followed by .awsglobalaccelerator.com. For example:
+-- a1234567890abcdef.awsglobalaccelerator.com.
+--
+-- If you have a dual-stack accelerator, you also have a second DNS name,
+-- @DualStackDnsName@, that points to both the A record and the AAAA record
+-- for all four static addresses for the accelerator: two IPv4 addresses
+-- and two IPv6 addresses.
+--
+-- For more information about the default DNS name, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/dns-addressing-custom-domains.dns-addressing.html Support for DNS addressing in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- 'dualStackDnsName', 'accelerator_dualStackDnsName' - The Domain Name System (DNS) name that Global Accelerator creates that
+-- points to a dual-stack accelerator\'s four static IP addresses: two IPv4
+-- addresses and two IPv6 addresses.
+--
+-- The naming convention for the dual-stack DNS name is the following: A
+-- lowercase letter a, followed by a 16-bit random hex string, followed by
+-- .dualstack.awsglobalaccelerator.com. For example:
+-- a1234567890abcdef.dualstack.awsglobalaccelerator.com.
+--
+-- Note: Global Accelerator also assigns a default DNS name, @DnsName@, to
+-- your accelerator that points just to the static IPv4 addresses.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-accelerators.html#about-accelerators.dns-addressing Support for DNS addressing in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- 'enabled', 'accelerator_enabled' - Indicates whether the accelerator is enabled. The value is true or
+-- false. The default value is true.
+--
+-- If the value is set to true, the accelerator cannot be deleted. If set
+-- to false, accelerator can be deleted.
+--
+-- 'events', 'accelerator_events' - A history of changes that you make to an accelerator in Global
+-- Accelerator.
+--
+-- 'ipAddressType', 'accelerator_ipAddressType' - The IP address type that an accelerator supports. For a standard
+-- accelerator, the value can be IPV4 or DUAL_STACK.
+--
+-- 'ipSets', 'accelerator_ipSets' - The static IP addresses that Global Accelerator associates with the
+-- accelerator.
+--
+-- 'lastModifiedTime', 'accelerator_lastModifiedTime' - The date and time that the accelerator was last modified.
+--
+-- 'name', 'accelerator_name' - The name of the accelerator. The name must contain only alphanumeric
+-- characters or hyphens (-), and must not begin or end with a hyphen.
+--
+-- 'status', 'accelerator_status' - Describes the deployment status of the accelerator.
+newAccelerator ::
+  Accelerator
+newAccelerator =
+  Accelerator'
+    { acceleratorArn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      dnsName = Prelude.Nothing,
+      dualStackDnsName = Prelude.Nothing,
+      enabled = Prelude.Nothing,
+      events = Prelude.Nothing,
+      ipAddressType = Prelude.Nothing,
+      ipSets = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the accelerator.
+accelerator_acceleratorArn :: Lens.Lens' Accelerator (Prelude.Maybe Prelude.Text)
+accelerator_acceleratorArn = Lens.lens (\Accelerator' {acceleratorArn} -> acceleratorArn) (\s@Accelerator' {} a -> s {acceleratorArn = a} :: Accelerator)
+
+-- | The date and time that the accelerator was created.
+accelerator_createdTime :: Lens.Lens' Accelerator (Prelude.Maybe Prelude.UTCTime)
+accelerator_createdTime = Lens.lens (\Accelerator' {createdTime} -> createdTime) (\s@Accelerator' {} a -> s {createdTime = a} :: Accelerator) Prelude.. Lens.mapping Data._Time
+
+-- | The Domain Name System (DNS) name that Global Accelerator creates that
+-- points to an accelerator\'s static IPv4 addresses.
+--
+-- The naming convention for the DNS name for an accelerator is the
+-- following: A lowercase letter a, followed by a 16-bit random hex string,
+-- followed by .awsglobalaccelerator.com. For example:
+-- a1234567890abcdef.awsglobalaccelerator.com.
+--
+-- If you have a dual-stack accelerator, you also have a second DNS name,
+-- @DualStackDnsName@, that points to both the A record and the AAAA record
+-- for all four static addresses for the accelerator: two IPv4 addresses
+-- and two IPv6 addresses.
+--
+-- For more information about the default DNS name, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/dns-addressing-custom-domains.dns-addressing.html Support for DNS addressing in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+accelerator_dnsName :: Lens.Lens' Accelerator (Prelude.Maybe Prelude.Text)
+accelerator_dnsName = Lens.lens (\Accelerator' {dnsName} -> dnsName) (\s@Accelerator' {} a -> s {dnsName = a} :: Accelerator)
+
+-- | The Domain Name System (DNS) name that Global Accelerator creates that
+-- points to a dual-stack accelerator\'s four static IP addresses: two IPv4
+-- addresses and two IPv6 addresses.
+--
+-- The naming convention for the dual-stack DNS name is the following: A
+-- lowercase letter a, followed by a 16-bit random hex string, followed by
+-- .dualstack.awsglobalaccelerator.com. For example:
+-- a1234567890abcdef.dualstack.awsglobalaccelerator.com.
+--
+-- Note: Global Accelerator also assigns a default DNS name, @DnsName@, to
+-- your accelerator that points just to the static IPv4 addresses.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-accelerators.html#about-accelerators.dns-addressing Support for DNS addressing in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+accelerator_dualStackDnsName :: Lens.Lens' Accelerator (Prelude.Maybe Prelude.Text)
+accelerator_dualStackDnsName = Lens.lens (\Accelerator' {dualStackDnsName} -> dualStackDnsName) (\s@Accelerator' {} a -> s {dualStackDnsName = a} :: Accelerator)
+
+-- | Indicates whether the accelerator is enabled. The value is true or
+-- false. The default value is true.
+--
+-- If the value is set to true, the accelerator cannot be deleted. If set
+-- to false, accelerator can be deleted.
+accelerator_enabled :: Lens.Lens' Accelerator (Prelude.Maybe Prelude.Bool)
+accelerator_enabled = Lens.lens (\Accelerator' {enabled} -> enabled) (\s@Accelerator' {} a -> s {enabled = a} :: Accelerator)
+
+-- | A history of changes that you make to an accelerator in Global
+-- Accelerator.
+accelerator_events :: Lens.Lens' Accelerator (Prelude.Maybe [AcceleratorEvent])
+accelerator_events = Lens.lens (\Accelerator' {events} -> events) (\s@Accelerator' {} a -> s {events = a} :: Accelerator) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IP address type that an accelerator supports. For a standard
+-- accelerator, the value can be IPV4 or DUAL_STACK.
+accelerator_ipAddressType :: Lens.Lens' Accelerator (Prelude.Maybe IpAddressType)
+accelerator_ipAddressType = Lens.lens (\Accelerator' {ipAddressType} -> ipAddressType) (\s@Accelerator' {} a -> s {ipAddressType = a} :: Accelerator)
+
+-- | The static IP addresses that Global Accelerator associates with the
+-- accelerator.
+accelerator_ipSets :: Lens.Lens' Accelerator (Prelude.Maybe [IpSet])
+accelerator_ipSets = Lens.lens (\Accelerator' {ipSets} -> ipSets) (\s@Accelerator' {} a -> s {ipSets = a} :: Accelerator) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date and time that the accelerator was last modified.
+accelerator_lastModifiedTime :: Lens.Lens' Accelerator (Prelude.Maybe Prelude.UTCTime)
+accelerator_lastModifiedTime = Lens.lens (\Accelerator' {lastModifiedTime} -> lastModifiedTime) (\s@Accelerator' {} a -> s {lastModifiedTime = a} :: Accelerator) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the accelerator. The name must contain only alphanumeric
+-- characters or hyphens (-), and must not begin or end with a hyphen.
+accelerator_name :: Lens.Lens' Accelerator (Prelude.Maybe Prelude.Text)
+accelerator_name = Lens.lens (\Accelerator' {name} -> name) (\s@Accelerator' {} a -> s {name = a} :: Accelerator)
+
+-- | Describes the deployment status of the accelerator.
+accelerator_status :: Lens.Lens' Accelerator (Prelude.Maybe AcceleratorStatus)
+accelerator_status = Lens.lens (\Accelerator' {status} -> status) (\s@Accelerator' {} a -> s {status = a} :: Accelerator)
+
+instance Data.FromJSON Accelerator where
+  parseJSON =
+    Data.withObject
+      "Accelerator"
+      ( \x ->
+          Accelerator'
+            Prelude.<$> (x Data..:? "AcceleratorArn")
+            Prelude.<*> (x Data..:? "CreatedTime")
+            Prelude.<*> (x Data..:? "DnsName")
+            Prelude.<*> (x Data..:? "DualStackDnsName")
+            Prelude.<*> (x Data..:? "Enabled")
+            Prelude.<*> (x Data..:? "Events" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "IpAddressType")
+            Prelude.<*> (x Data..:? "IpSets" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "LastModifiedTime")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable Accelerator where
+  hashWithSalt _salt Accelerator' {..} =
+    _salt
+      `Prelude.hashWithSalt` acceleratorArn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` dnsName
+      `Prelude.hashWithSalt` dualStackDnsName
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` events
+      `Prelude.hashWithSalt` ipAddressType
+      `Prelude.hashWithSalt` ipSets
+      `Prelude.hashWithSalt` lastModifiedTime
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData Accelerator where
+  rnf Accelerator' {..} =
+    Prelude.rnf acceleratorArn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf dnsName
+      `Prelude.seq` Prelude.rnf dualStackDnsName
+      `Prelude.seq` Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf events
+      `Prelude.seq` Prelude.rnf ipAddressType
+      `Prelude.seq` Prelude.rnf ipSets
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/GlobalAccelerator/Types/AcceleratorAttributes.hs b/gen/Amazonka/GlobalAccelerator/Types/AcceleratorAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/AcceleratorAttributes.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.GlobalAccelerator.Types.AcceleratorAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.AcceleratorAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Attributes of an accelerator.
+--
+-- /See:/ 'newAcceleratorAttributes' smart constructor.
+data AcceleratorAttributes = AcceleratorAttributes'
+  { -- | Indicates whether flow logs are enabled. The default value is false. If
+    -- the value is true, @FlowLogsS3Bucket@ and @FlowLogsS3Prefix@ must be
+    -- specified.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/monitoring-global-accelerator.flow-logs.html Flow logs>
+    -- in the /Global Accelerator Developer Guide/.
+    flowLogsEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the Amazon S3 bucket for the flow logs. Attribute is
+    -- required if @FlowLogsEnabled@ is @true@. The bucket must exist and have
+    -- a bucket policy that grants Global Accelerator permission to write to
+    -- the bucket.
+    flowLogsS3Bucket :: Prelude.Maybe Prelude.Text,
+    -- | The prefix for the location in the Amazon S3 bucket for the flow logs.
+    -- Attribute is required if @FlowLogsEnabled@ is @true@.
+    --
+    -- If you specify slash (\/) for the S3 bucket prefix, the log file bucket
+    -- folder structure will include a double slash (\/\/), like the following:
+    --
+    -- s3-bucket_name\/\/AWSLogs\/aws_account_id
+    flowLogsS3Prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceleratorAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'flowLogsEnabled', 'acceleratorAttributes_flowLogsEnabled' - Indicates whether flow logs are enabled. The default value is false. If
+-- the value is true, @FlowLogsS3Bucket@ and @FlowLogsS3Prefix@ must be
+-- specified.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/monitoring-global-accelerator.flow-logs.html Flow logs>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- 'flowLogsS3Bucket', 'acceleratorAttributes_flowLogsS3Bucket' - The name of the Amazon S3 bucket for the flow logs. Attribute is
+-- required if @FlowLogsEnabled@ is @true@. The bucket must exist and have
+-- a bucket policy that grants Global Accelerator permission to write to
+-- the bucket.
+--
+-- 'flowLogsS3Prefix', 'acceleratorAttributes_flowLogsS3Prefix' - The prefix for the location in the Amazon S3 bucket for the flow logs.
+-- Attribute is required if @FlowLogsEnabled@ is @true@.
+--
+-- If you specify slash (\/) for the S3 bucket prefix, the log file bucket
+-- folder structure will include a double slash (\/\/), like the following:
+--
+-- s3-bucket_name\/\/AWSLogs\/aws_account_id
+newAcceleratorAttributes ::
+  AcceleratorAttributes
+newAcceleratorAttributes =
+  AcceleratorAttributes'
+    { flowLogsEnabled =
+        Prelude.Nothing,
+      flowLogsS3Bucket = Prelude.Nothing,
+      flowLogsS3Prefix = Prelude.Nothing
+    }
+
+-- | Indicates whether flow logs are enabled. The default value is false. If
+-- the value is true, @FlowLogsS3Bucket@ and @FlowLogsS3Prefix@ must be
+-- specified.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/monitoring-global-accelerator.flow-logs.html Flow logs>
+-- in the /Global Accelerator Developer Guide/.
+acceleratorAttributes_flowLogsEnabled :: Lens.Lens' AcceleratorAttributes (Prelude.Maybe Prelude.Bool)
+acceleratorAttributes_flowLogsEnabled = Lens.lens (\AcceleratorAttributes' {flowLogsEnabled} -> flowLogsEnabled) (\s@AcceleratorAttributes' {} a -> s {flowLogsEnabled = a} :: AcceleratorAttributes)
+
+-- | The name of the Amazon S3 bucket for the flow logs. Attribute is
+-- required if @FlowLogsEnabled@ is @true@. The bucket must exist and have
+-- a bucket policy that grants Global Accelerator permission to write to
+-- the bucket.
+acceleratorAttributes_flowLogsS3Bucket :: Lens.Lens' AcceleratorAttributes (Prelude.Maybe Prelude.Text)
+acceleratorAttributes_flowLogsS3Bucket = Lens.lens (\AcceleratorAttributes' {flowLogsS3Bucket} -> flowLogsS3Bucket) (\s@AcceleratorAttributes' {} a -> s {flowLogsS3Bucket = a} :: AcceleratorAttributes)
+
+-- | The prefix for the location in the Amazon S3 bucket for the flow logs.
+-- Attribute is required if @FlowLogsEnabled@ is @true@.
+--
+-- If you specify slash (\/) for the S3 bucket prefix, the log file bucket
+-- folder structure will include a double slash (\/\/), like the following:
+--
+-- s3-bucket_name\/\/AWSLogs\/aws_account_id
+acceleratorAttributes_flowLogsS3Prefix :: Lens.Lens' AcceleratorAttributes (Prelude.Maybe Prelude.Text)
+acceleratorAttributes_flowLogsS3Prefix = Lens.lens (\AcceleratorAttributes' {flowLogsS3Prefix} -> flowLogsS3Prefix) (\s@AcceleratorAttributes' {} a -> s {flowLogsS3Prefix = a} :: AcceleratorAttributes)
+
+instance Data.FromJSON AcceleratorAttributes where
+  parseJSON =
+    Data.withObject
+      "AcceleratorAttributes"
+      ( \x ->
+          AcceleratorAttributes'
+            Prelude.<$> (x Data..:? "FlowLogsEnabled")
+            Prelude.<*> (x Data..:? "FlowLogsS3Bucket")
+            Prelude.<*> (x Data..:? "FlowLogsS3Prefix")
+      )
+
+instance Prelude.Hashable AcceleratorAttributes where
+  hashWithSalt _salt AcceleratorAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` flowLogsEnabled
+      `Prelude.hashWithSalt` flowLogsS3Bucket
+      `Prelude.hashWithSalt` flowLogsS3Prefix
+
+instance Prelude.NFData AcceleratorAttributes where
+  rnf AcceleratorAttributes' {..} =
+    Prelude.rnf flowLogsEnabled
+      `Prelude.seq` Prelude.rnf flowLogsS3Bucket
+      `Prelude.seq` Prelude.rnf flowLogsS3Prefix
diff --git a/gen/Amazonka/GlobalAccelerator/Types/AcceleratorEvent.hs b/gen/Amazonka/GlobalAccelerator/Types/AcceleratorEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/AcceleratorEvent.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.GlobalAccelerator.Types.AcceleratorEvent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.AcceleratorEvent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A complex type that contains a @Timestamp@ value and @Message@ for
+-- changes that you make to an accelerator in Global Accelerator. Messages
+-- stored here provide progress or error information when you update an
+-- accelerator from IPv4 to dual-stack, or from dual-stack to IPv4. Global
+-- Accelerator stores a maximum of ten event messages.
+--
+-- /See:/ 'newAcceleratorEvent' smart constructor.
+data AcceleratorEvent = AcceleratorEvent'
+  { -- | A string that contains an @Event@ message describing changes or errors
+    -- when you update an accelerator in Global Accelerator from IPv4 to
+    -- dual-stack, or dual-stack to IPv4.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp for when you update an accelerator in Global Accelerator
+    -- from IPv4 to dual-stack, or dual-stack to IPv4.
+    timestamp :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceleratorEvent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'acceleratorEvent_message' - A string that contains an @Event@ message describing changes or errors
+-- when you update an accelerator in Global Accelerator from IPv4 to
+-- dual-stack, or dual-stack to IPv4.
+--
+-- 'timestamp', 'acceleratorEvent_timestamp' - A timestamp for when you update an accelerator in Global Accelerator
+-- from IPv4 to dual-stack, or dual-stack to IPv4.
+newAcceleratorEvent ::
+  AcceleratorEvent
+newAcceleratorEvent =
+  AcceleratorEvent'
+    { message = Prelude.Nothing,
+      timestamp = Prelude.Nothing
+    }
+
+-- | A string that contains an @Event@ message describing changes or errors
+-- when you update an accelerator in Global Accelerator from IPv4 to
+-- dual-stack, or dual-stack to IPv4.
+acceleratorEvent_message :: Lens.Lens' AcceleratorEvent (Prelude.Maybe Prelude.Text)
+acceleratorEvent_message = Lens.lens (\AcceleratorEvent' {message} -> message) (\s@AcceleratorEvent' {} a -> s {message = a} :: AcceleratorEvent)
+
+-- | A timestamp for when you update an accelerator in Global Accelerator
+-- from IPv4 to dual-stack, or dual-stack to IPv4.
+acceleratorEvent_timestamp :: Lens.Lens' AcceleratorEvent (Prelude.Maybe Prelude.UTCTime)
+acceleratorEvent_timestamp = Lens.lens (\AcceleratorEvent' {timestamp} -> timestamp) (\s@AcceleratorEvent' {} a -> s {timestamp = a} :: AcceleratorEvent) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON AcceleratorEvent where
+  parseJSON =
+    Data.withObject
+      "AcceleratorEvent"
+      ( \x ->
+          AcceleratorEvent'
+            Prelude.<$> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "Timestamp")
+      )
+
+instance Prelude.Hashable AcceleratorEvent where
+  hashWithSalt _salt AcceleratorEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` timestamp
+
+instance Prelude.NFData AcceleratorEvent where
+  rnf AcceleratorEvent' {..} =
+    Prelude.rnf message
+      `Prelude.seq` Prelude.rnf timestamp
diff --git a/gen/Amazonka/GlobalAccelerator/Types/AcceleratorStatus.hs b/gen/Amazonka/GlobalAccelerator/Types/AcceleratorStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/AcceleratorStatus.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.Types.AcceleratorStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.AcceleratorStatus
+  ( AcceleratorStatus
+      ( ..,
+        AcceleratorStatus_DEPLOYED,
+        AcceleratorStatus_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AcceleratorStatus = AcceleratorStatus'
+  { fromAcceleratorStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AcceleratorStatus_DEPLOYED :: AcceleratorStatus
+pattern AcceleratorStatus_DEPLOYED = AcceleratorStatus' "DEPLOYED"
+
+pattern AcceleratorStatus_IN_PROGRESS :: AcceleratorStatus
+pattern AcceleratorStatus_IN_PROGRESS = AcceleratorStatus' "IN_PROGRESS"
+
+{-# COMPLETE
+  AcceleratorStatus_DEPLOYED,
+  AcceleratorStatus_IN_PROGRESS,
+  AcceleratorStatus'
+  #-}
diff --git a/gen/Amazonka/GlobalAccelerator/Types/ByoipCidr.hs b/gen/Amazonka/GlobalAccelerator/Types/ByoipCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/ByoipCidr.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.GlobalAccelerator.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.GlobalAccelerator.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.GlobalAccelerator.Types.ByoipCidrEvent
+import Amazonka.GlobalAccelerator.Types.ByoipCidrState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an IP address range that is provisioned for use with
+-- your Amazon Web Services resources through bring your own IP address
+-- (BYOIP).
+--
+-- The following describes each BYOIP @State@ that your IP address range
+-- can be in.
+--
+-- -   __PENDING_PROVISIONING__ — You’ve submitted a request to provision
+--     an IP address range but it is not yet provisioned with Global
+--     Accelerator.
+--
+-- -   __READY__ — The address range is provisioned with Global Accelerator
+--     and can be advertised.
+--
+-- -   __PENDING_ADVERTISING__ — You’ve submitted a request for Global
+--     Accelerator to advertise an address range but it is not yet being
+--     advertised.
+--
+-- -   __ADVERTISING__ — The address range is being advertised by Global
+--     Accelerator.
+--
+-- -   __PENDING_WITHDRAWING__ — You’ve submitted a request to withdraw an
+--     address range from being advertised but it is still being advertised
+--     by Global Accelerator.
+--
+-- -   __PENDING_DEPROVISIONING__ — You’ve submitted a request to
+--     deprovision an address range from Global Accelerator but it is still
+--     provisioned.
+--
+-- -   __DEPROVISIONED__ — The address range is deprovisioned from Global
+--     Accelerator.
+--
+-- -   __FAILED_PROVISION__ — The request to provision the address range
+--     from Global Accelerator was not successful. Please make sure that
+--     you provide all of the correct information, and try again. If the
+--     request fails a second time, contact Amazon Web Services support.
+--
+-- -   __FAILED_ADVERTISING__ — The request for Global Accelerator to
+--     advertise the address range was not successful. Please make sure
+--     that you provide all of the correct information, and try again. If
+--     the request fails a second time, contact Amazon Web Services
+--     support.
+--
+-- -   __FAILED_WITHDRAW__ — The request to withdraw the address range from
+--     advertising by Global Accelerator was not successful. Please make
+--     sure that you provide all of the correct information, and try again.
+--     If the request fails a second time, contact Amazon Web Services
+--     support.
+--
+-- -   __FAILED_DEPROVISION__ — The request to deprovision the address
+--     range from Global Accelerator was not successful. Please make sure
+--     that you provide all of the correct information, and try again. If
+--     the request fails a second time, contact Amazon Web Services
+--     support.
+--
+-- /See:/ 'newByoipCidr' smart constructor.
+data ByoipCidr = ByoipCidr'
+  { -- | The address range, in CIDR notation.
+    cidr :: Prelude.Maybe Prelude.Text,
+    -- | A history of status changes for an IP address range that you bring to
+    -- Global Accelerator through bring your own IP address (BYOIP).
+    events :: Prelude.Maybe [ByoipCidrEvent],
+    -- | The state of the address pool.
+    state :: Prelude.Maybe ByoipCidrState
+  }
+  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.
+--
+-- 'events', 'byoipCidr_events' - A history of status changes for an IP address range that you bring to
+-- Global Accelerator through bring your own IP address (BYOIP).
+--
+-- 'state', 'byoipCidr_state' - The state of the address pool.
+newByoipCidr ::
+  ByoipCidr
+newByoipCidr =
+  ByoipCidr'
+    { cidr = Prelude.Nothing,
+      events = Prelude.Nothing,
+      state = 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)
+
+-- | A history of status changes for an IP address range that you bring to
+-- Global Accelerator through bring your own IP address (BYOIP).
+byoipCidr_events :: Lens.Lens' ByoipCidr (Prelude.Maybe [ByoipCidrEvent])
+byoipCidr_events = Lens.lens (\ByoipCidr' {events} -> events) (\s@ByoipCidr' {} a -> s {events = a} :: ByoipCidr) Prelude.. Lens.mapping Lens.coerced
+
+-- | 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)
+
+instance Data.FromJSON ByoipCidr where
+  parseJSON =
+    Data.withObject
+      "ByoipCidr"
+      ( \x ->
+          ByoipCidr'
+            Prelude.<$> (x Data..:? "Cidr")
+            Prelude.<*> (x Data..:? "Events" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "State")
+      )
+
+instance Prelude.Hashable ByoipCidr where
+  hashWithSalt _salt ByoipCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` events
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData ByoipCidr where
+  rnf ByoipCidr' {..} =
+    Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf events
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/GlobalAccelerator/Types/ByoipCidrEvent.hs b/gen/Amazonka/GlobalAccelerator/Types/ByoipCidrEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/ByoipCidrEvent.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.GlobalAccelerator.Types.ByoipCidrEvent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.ByoipCidrEvent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A complex type that contains a @Message@ and a @Timestamp@ value for
+-- changes that you make in the status of an IP address range that you
+-- bring to Global Accelerator through bring your own IP address (BYOIP).
+--
+-- /See:/ 'newByoipCidrEvent' smart constructor.
+data ByoipCidrEvent = ByoipCidrEvent'
+  { -- | A string that contains an @Event@ message describing changes that you
+    -- make in the status of an IP address range that you bring to Global
+    -- Accelerator through bring your own IP address (BYOIP).
+    message :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp for when you make a status change for an IP address range
+    -- that you bring to Global Accelerator through bring your own IP address
+    -- (BYOIP).
+    timestamp :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ByoipCidrEvent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'byoipCidrEvent_message' - A string that contains an @Event@ message describing changes that you
+-- make in the status of an IP address range that you bring to Global
+-- Accelerator through bring your own IP address (BYOIP).
+--
+-- 'timestamp', 'byoipCidrEvent_timestamp' - A timestamp for when you make a status change for an IP address range
+-- that you bring to Global Accelerator through bring your own IP address
+-- (BYOIP).
+newByoipCidrEvent ::
+  ByoipCidrEvent
+newByoipCidrEvent =
+  ByoipCidrEvent'
+    { message = Prelude.Nothing,
+      timestamp = Prelude.Nothing
+    }
+
+-- | A string that contains an @Event@ message describing changes that you
+-- make in the status of an IP address range that you bring to Global
+-- Accelerator through bring your own IP address (BYOIP).
+byoipCidrEvent_message :: Lens.Lens' ByoipCidrEvent (Prelude.Maybe Prelude.Text)
+byoipCidrEvent_message = Lens.lens (\ByoipCidrEvent' {message} -> message) (\s@ByoipCidrEvent' {} a -> s {message = a} :: ByoipCidrEvent)
+
+-- | A timestamp for when you make a status change for an IP address range
+-- that you bring to Global Accelerator through bring your own IP address
+-- (BYOIP).
+byoipCidrEvent_timestamp :: Lens.Lens' ByoipCidrEvent (Prelude.Maybe Prelude.UTCTime)
+byoipCidrEvent_timestamp = Lens.lens (\ByoipCidrEvent' {timestamp} -> timestamp) (\s@ByoipCidrEvent' {} a -> s {timestamp = a} :: ByoipCidrEvent) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON ByoipCidrEvent where
+  parseJSON =
+    Data.withObject
+      "ByoipCidrEvent"
+      ( \x ->
+          ByoipCidrEvent'
+            Prelude.<$> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "Timestamp")
+      )
+
+instance Prelude.Hashable ByoipCidrEvent where
+  hashWithSalt _salt ByoipCidrEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` timestamp
+
+instance Prelude.NFData ByoipCidrEvent where
+  rnf ByoipCidrEvent' {..} =
+    Prelude.rnf message
+      `Prelude.seq` Prelude.rnf timestamp
diff --git a/gen/Amazonka/GlobalAccelerator/Types/ByoipCidrState.hs b/gen/Amazonka/GlobalAccelerator/Types/ByoipCidrState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/ByoipCidrState.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.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.GlobalAccelerator.Types.ByoipCidrState
+  ( ByoipCidrState
+      ( ..,
+        ByoipCidrState_ADVERTISING,
+        ByoipCidrState_DEPROVISIONED,
+        ByoipCidrState_FAILED_ADVERTISING,
+        ByoipCidrState_FAILED_DEPROVISION,
+        ByoipCidrState_FAILED_PROVISION,
+        ByoipCidrState_FAILED_WITHDRAW,
+        ByoipCidrState_PENDING_ADVERTISING,
+        ByoipCidrState_PENDING_DEPROVISIONING,
+        ByoipCidrState_PENDING_PROVISIONING,
+        ByoipCidrState_PENDING_WITHDRAWING,
+        ByoipCidrState_READY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+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_ADVERTISING :: ByoipCidrState
+pattern ByoipCidrState_ADVERTISING = ByoipCidrState' "ADVERTISING"
+
+pattern ByoipCidrState_DEPROVISIONED :: ByoipCidrState
+pattern ByoipCidrState_DEPROVISIONED = ByoipCidrState' "DEPROVISIONED"
+
+pattern ByoipCidrState_FAILED_ADVERTISING :: ByoipCidrState
+pattern ByoipCidrState_FAILED_ADVERTISING = ByoipCidrState' "FAILED_ADVERTISING"
+
+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_FAILED_WITHDRAW :: ByoipCidrState
+pattern ByoipCidrState_FAILED_WITHDRAW = ByoipCidrState' "FAILED_WITHDRAW"
+
+pattern ByoipCidrState_PENDING_ADVERTISING :: ByoipCidrState
+pattern ByoipCidrState_PENDING_ADVERTISING = ByoipCidrState' "PENDING_ADVERTISING"
+
+pattern ByoipCidrState_PENDING_DEPROVISIONING :: ByoipCidrState
+pattern ByoipCidrState_PENDING_DEPROVISIONING = ByoipCidrState' "PENDING_DEPROVISIONING"
+
+pattern ByoipCidrState_PENDING_PROVISIONING :: ByoipCidrState
+pattern ByoipCidrState_PENDING_PROVISIONING = ByoipCidrState' "PENDING_PROVISIONING"
+
+pattern ByoipCidrState_PENDING_WITHDRAWING :: ByoipCidrState
+pattern ByoipCidrState_PENDING_WITHDRAWING = ByoipCidrState' "PENDING_WITHDRAWING"
+
+pattern ByoipCidrState_READY :: ByoipCidrState
+pattern ByoipCidrState_READY = ByoipCidrState' "READY"
+
+{-# COMPLETE
+  ByoipCidrState_ADVERTISING,
+  ByoipCidrState_DEPROVISIONED,
+  ByoipCidrState_FAILED_ADVERTISING,
+  ByoipCidrState_FAILED_DEPROVISION,
+  ByoipCidrState_FAILED_PROVISION,
+  ByoipCidrState_FAILED_WITHDRAW,
+  ByoipCidrState_PENDING_ADVERTISING,
+  ByoipCidrState_PENDING_DEPROVISIONING,
+  ByoipCidrState_PENDING_PROVISIONING,
+  ByoipCidrState_PENDING_WITHDRAWING,
+  ByoipCidrState_READY,
+  ByoipCidrState'
+  #-}
diff --git a/gen/Amazonka/GlobalAccelerator/Types/CidrAuthorizationContext.hs b/gen/Amazonka/GlobalAccelerator/Types/CidrAuthorizationContext.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/CidrAuthorizationContext.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.GlobalAccelerator.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.GlobalAccelerator.Types.CidrAuthorizationContext where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+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/global-accelerator/latest/dg/using-byoip.html Bring your own IP addresses (BYOIP)>
+-- in the /Global Accelerator Developer 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.ToJSON CidrAuthorizationContext where
+  toJSON CidrAuthorizationContext' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Message" Data..= message),
+            Prelude.Just ("Signature" Data..= signature)
+          ]
+      )
diff --git a/gen/Amazonka/GlobalAccelerator/Types/ClientAffinity.hs b/gen/Amazonka/GlobalAccelerator/Types/ClientAffinity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/ClientAffinity.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.Types.ClientAffinity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.ClientAffinity
+  ( ClientAffinity
+      ( ..,
+        ClientAffinity_NONE,
+        ClientAffinity_SOURCE_IP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ClientAffinity = ClientAffinity'
+  { fromClientAffinity ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ClientAffinity_NONE :: ClientAffinity
+pattern ClientAffinity_NONE = ClientAffinity' "NONE"
+
+pattern ClientAffinity_SOURCE_IP :: ClientAffinity
+pattern ClientAffinity_SOURCE_IP = ClientAffinity' "SOURCE_IP"
+
+{-# COMPLETE
+  ClientAffinity_NONE,
+  ClientAffinity_SOURCE_IP,
+  ClientAffinity'
+  #-}
diff --git a/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingAccelerator.hs b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingAccelerator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingAccelerator.hs
@@ -0,0 +1,238 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.Types.CustomRoutingAccelerator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.CustomRoutingAccelerator where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types.CustomRoutingAcceleratorStatus
+import Amazonka.GlobalAccelerator.Types.IpAddressType
+import Amazonka.GlobalAccelerator.Types.IpSet
+import qualified Amazonka.Prelude as Prelude
+
+-- | Attributes of a custom routing accelerator.
+--
+-- /See:/ 'newCustomRoutingAccelerator' smart constructor.
+data CustomRoutingAccelerator = CustomRoutingAccelerator'
+  { -- | The Amazon Resource Name (ARN) of the custom routing accelerator.
+    acceleratorArn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the accelerator was created.
+    createdTime :: Prelude.Maybe Data.POSIX,
+    -- | The Domain Name System (DNS) name that Global Accelerator creates that
+    -- points to an accelerator\'s static IPv4 addresses.
+    --
+    -- The naming convention for the DNS name is the following: A lowercase
+    -- letter a, followed by a 16-bit random hex string, followed by
+    -- .awsglobalaccelerator.com. For example:
+    -- a1234567890abcdef.awsglobalaccelerator.com.
+    --
+    -- If you have a dual-stack accelerator, you also have a second DNS name,
+    -- @DualStackDnsName@, that points to both the A record and the AAAA record
+    -- for all four static addresses for the accelerator: two IPv4 addresses
+    -- and two IPv6 addresses.
+    --
+    -- For more information about the default DNS name, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/dns-addressing-custom-domains.dns-addressing.html Support for DNS addressing in Global Accelerator>
+    -- in the /Global Accelerator Developer Guide/.
+    dnsName :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the accelerator is enabled. The value is true or
+    -- false. The default value is true.
+    --
+    -- If the value is set to true, the accelerator cannot be deleted. If set
+    -- to false, accelerator can be deleted.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The IP address type that an accelerator supports. For a custom routing
+    -- accelerator, the value must be IPV4.
+    ipAddressType :: Prelude.Maybe IpAddressType,
+    -- | The static IP addresses that Global Accelerator associates with the
+    -- accelerator.
+    ipSets :: Prelude.Maybe [IpSet],
+    -- | The date and time that the accelerator was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the accelerator. The name must contain only alphanumeric
+    -- characters or hyphens (-), and must not begin or end with a hyphen.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Describes the deployment status of the accelerator.
+    status :: Prelude.Maybe CustomRoutingAcceleratorStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomRoutingAccelerator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorArn', 'customRoutingAccelerator_acceleratorArn' - The Amazon Resource Name (ARN) of the custom routing accelerator.
+--
+-- 'createdTime', 'customRoutingAccelerator_createdTime' - The date and time that the accelerator was created.
+--
+-- 'dnsName', 'customRoutingAccelerator_dnsName' - The Domain Name System (DNS) name that Global Accelerator creates that
+-- points to an accelerator\'s static IPv4 addresses.
+--
+-- The naming convention for the DNS name is the following: A lowercase
+-- letter a, followed by a 16-bit random hex string, followed by
+-- .awsglobalaccelerator.com. For example:
+-- a1234567890abcdef.awsglobalaccelerator.com.
+--
+-- If you have a dual-stack accelerator, you also have a second DNS name,
+-- @DualStackDnsName@, that points to both the A record and the AAAA record
+-- for all four static addresses for the accelerator: two IPv4 addresses
+-- and two IPv6 addresses.
+--
+-- For more information about the default DNS name, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/dns-addressing-custom-domains.dns-addressing.html Support for DNS addressing in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- 'enabled', 'customRoutingAccelerator_enabled' - Indicates whether the accelerator is enabled. The value is true or
+-- false. The default value is true.
+--
+-- If the value is set to true, the accelerator cannot be deleted. If set
+-- to false, accelerator can be deleted.
+--
+-- 'ipAddressType', 'customRoutingAccelerator_ipAddressType' - The IP address type that an accelerator supports. For a custom routing
+-- accelerator, the value must be IPV4.
+--
+-- 'ipSets', 'customRoutingAccelerator_ipSets' - The static IP addresses that Global Accelerator associates with the
+-- accelerator.
+--
+-- 'lastModifiedTime', 'customRoutingAccelerator_lastModifiedTime' - The date and time that the accelerator was last modified.
+--
+-- 'name', 'customRoutingAccelerator_name' - The name of the accelerator. The name must contain only alphanumeric
+-- characters or hyphens (-), and must not begin or end with a hyphen.
+--
+-- 'status', 'customRoutingAccelerator_status' - Describes the deployment status of the accelerator.
+newCustomRoutingAccelerator ::
+  CustomRoutingAccelerator
+newCustomRoutingAccelerator =
+  CustomRoutingAccelerator'
+    { acceleratorArn =
+        Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      dnsName = Prelude.Nothing,
+      enabled = Prelude.Nothing,
+      ipAddressType = Prelude.Nothing,
+      ipSets = Prelude.Nothing,
+      lastModifiedTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the custom routing accelerator.
+customRoutingAccelerator_acceleratorArn :: Lens.Lens' CustomRoutingAccelerator (Prelude.Maybe Prelude.Text)
+customRoutingAccelerator_acceleratorArn = Lens.lens (\CustomRoutingAccelerator' {acceleratorArn} -> acceleratorArn) (\s@CustomRoutingAccelerator' {} a -> s {acceleratorArn = a} :: CustomRoutingAccelerator)
+
+-- | The date and time that the accelerator was created.
+customRoutingAccelerator_createdTime :: Lens.Lens' CustomRoutingAccelerator (Prelude.Maybe Prelude.UTCTime)
+customRoutingAccelerator_createdTime = Lens.lens (\CustomRoutingAccelerator' {createdTime} -> createdTime) (\s@CustomRoutingAccelerator' {} a -> s {createdTime = a} :: CustomRoutingAccelerator) Prelude.. Lens.mapping Data._Time
+
+-- | The Domain Name System (DNS) name that Global Accelerator creates that
+-- points to an accelerator\'s static IPv4 addresses.
+--
+-- The naming convention for the DNS name is the following: A lowercase
+-- letter a, followed by a 16-bit random hex string, followed by
+-- .awsglobalaccelerator.com. For example:
+-- a1234567890abcdef.awsglobalaccelerator.com.
+--
+-- If you have a dual-stack accelerator, you also have a second DNS name,
+-- @DualStackDnsName@, that points to both the A record and the AAAA record
+-- for all four static addresses for the accelerator: two IPv4 addresses
+-- and two IPv6 addresses.
+--
+-- For more information about the default DNS name, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/dns-addressing-custom-domains.dns-addressing.html Support for DNS addressing in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+customRoutingAccelerator_dnsName :: Lens.Lens' CustomRoutingAccelerator (Prelude.Maybe Prelude.Text)
+customRoutingAccelerator_dnsName = Lens.lens (\CustomRoutingAccelerator' {dnsName} -> dnsName) (\s@CustomRoutingAccelerator' {} a -> s {dnsName = a} :: CustomRoutingAccelerator)
+
+-- | Indicates whether the accelerator is enabled. The value is true or
+-- false. The default value is true.
+--
+-- If the value is set to true, the accelerator cannot be deleted. If set
+-- to false, accelerator can be deleted.
+customRoutingAccelerator_enabled :: Lens.Lens' CustomRoutingAccelerator (Prelude.Maybe Prelude.Bool)
+customRoutingAccelerator_enabled = Lens.lens (\CustomRoutingAccelerator' {enabled} -> enabled) (\s@CustomRoutingAccelerator' {} a -> s {enabled = a} :: CustomRoutingAccelerator)
+
+-- | The IP address type that an accelerator supports. For a custom routing
+-- accelerator, the value must be IPV4.
+customRoutingAccelerator_ipAddressType :: Lens.Lens' CustomRoutingAccelerator (Prelude.Maybe IpAddressType)
+customRoutingAccelerator_ipAddressType = Lens.lens (\CustomRoutingAccelerator' {ipAddressType} -> ipAddressType) (\s@CustomRoutingAccelerator' {} a -> s {ipAddressType = a} :: CustomRoutingAccelerator)
+
+-- | The static IP addresses that Global Accelerator associates with the
+-- accelerator.
+customRoutingAccelerator_ipSets :: Lens.Lens' CustomRoutingAccelerator (Prelude.Maybe [IpSet])
+customRoutingAccelerator_ipSets = Lens.lens (\CustomRoutingAccelerator' {ipSets} -> ipSets) (\s@CustomRoutingAccelerator' {} a -> s {ipSets = a} :: CustomRoutingAccelerator) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date and time that the accelerator was last modified.
+customRoutingAccelerator_lastModifiedTime :: Lens.Lens' CustomRoutingAccelerator (Prelude.Maybe Prelude.UTCTime)
+customRoutingAccelerator_lastModifiedTime = Lens.lens (\CustomRoutingAccelerator' {lastModifiedTime} -> lastModifiedTime) (\s@CustomRoutingAccelerator' {} a -> s {lastModifiedTime = a} :: CustomRoutingAccelerator) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the accelerator. The name must contain only alphanumeric
+-- characters or hyphens (-), and must not begin or end with a hyphen.
+customRoutingAccelerator_name :: Lens.Lens' CustomRoutingAccelerator (Prelude.Maybe Prelude.Text)
+customRoutingAccelerator_name = Lens.lens (\CustomRoutingAccelerator' {name} -> name) (\s@CustomRoutingAccelerator' {} a -> s {name = a} :: CustomRoutingAccelerator)
+
+-- | Describes the deployment status of the accelerator.
+customRoutingAccelerator_status :: Lens.Lens' CustomRoutingAccelerator (Prelude.Maybe CustomRoutingAcceleratorStatus)
+customRoutingAccelerator_status = Lens.lens (\CustomRoutingAccelerator' {status} -> status) (\s@CustomRoutingAccelerator' {} a -> s {status = a} :: CustomRoutingAccelerator)
+
+instance Data.FromJSON CustomRoutingAccelerator where
+  parseJSON =
+    Data.withObject
+      "CustomRoutingAccelerator"
+      ( \x ->
+          CustomRoutingAccelerator'
+            Prelude.<$> (x Data..:? "AcceleratorArn")
+            Prelude.<*> (x Data..:? "CreatedTime")
+            Prelude.<*> (x Data..:? "DnsName")
+            Prelude.<*> (x Data..:? "Enabled")
+            Prelude.<*> (x Data..:? "IpAddressType")
+            Prelude.<*> (x Data..:? "IpSets" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "LastModifiedTime")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable CustomRoutingAccelerator where
+  hashWithSalt _salt CustomRoutingAccelerator' {..} =
+    _salt
+      `Prelude.hashWithSalt` acceleratorArn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` dnsName
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` ipAddressType
+      `Prelude.hashWithSalt` ipSets
+      `Prelude.hashWithSalt` lastModifiedTime
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData CustomRoutingAccelerator where
+  rnf CustomRoutingAccelerator' {..} =
+    Prelude.rnf acceleratorArn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf dnsName
+      `Prelude.seq` Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf ipAddressType
+      `Prelude.seq` Prelude.rnf ipSets
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingAcceleratorAttributes.hs b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingAcceleratorAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingAcceleratorAttributes.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.GlobalAccelerator.Types.CustomRoutingAcceleratorAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.CustomRoutingAcceleratorAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Attributes of a custom routing accelerator.
+--
+-- /See:/ 'newCustomRoutingAcceleratorAttributes' smart constructor.
+data CustomRoutingAcceleratorAttributes = CustomRoutingAcceleratorAttributes'
+  { -- | Indicates whether flow logs are enabled. The default value is false. If
+    -- the value is true, @FlowLogsS3Bucket@ and @FlowLogsS3Prefix@ must be
+    -- specified.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/monitoring-global-accelerator.flow-logs.html Flow logs>
+    -- in the /Global Accelerator Developer Guide/.
+    flowLogsEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the Amazon S3 bucket for the flow logs. Attribute is
+    -- required if @FlowLogsEnabled@ is @true@. The bucket must exist and have
+    -- a bucket policy that grants Global Accelerator permission to write to
+    -- the bucket.
+    flowLogsS3Bucket :: Prelude.Maybe Prelude.Text,
+    -- | The prefix for the location in the Amazon S3 bucket for the flow logs.
+    -- Attribute is required if @FlowLogsEnabled@ is @true@.
+    --
+    -- If you don’t specify a prefix, the flow logs are stored in the root of
+    -- the bucket. If you specify slash (\/) for the S3 bucket prefix, the log
+    -- file bucket folder structure will include a double slash (\/\/), like
+    -- the following:
+    --
+    -- DOC-EXAMPLE-BUCKET\/\/AWSLogs\/aws_account_id
+    flowLogsS3Prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomRoutingAcceleratorAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'flowLogsEnabled', 'customRoutingAcceleratorAttributes_flowLogsEnabled' - Indicates whether flow logs are enabled. The default value is false. If
+-- the value is true, @FlowLogsS3Bucket@ and @FlowLogsS3Prefix@ must be
+-- specified.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/monitoring-global-accelerator.flow-logs.html Flow logs>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- 'flowLogsS3Bucket', 'customRoutingAcceleratorAttributes_flowLogsS3Bucket' - The name of the Amazon S3 bucket for the flow logs. Attribute is
+-- required if @FlowLogsEnabled@ is @true@. The bucket must exist and have
+-- a bucket policy that grants Global Accelerator permission to write to
+-- the bucket.
+--
+-- 'flowLogsS3Prefix', 'customRoutingAcceleratorAttributes_flowLogsS3Prefix' - The prefix for the location in the Amazon S3 bucket for the flow logs.
+-- Attribute is required if @FlowLogsEnabled@ is @true@.
+--
+-- If you don’t specify a prefix, the flow logs are stored in the root of
+-- the bucket. If you specify slash (\/) for the S3 bucket prefix, the log
+-- file bucket folder structure will include a double slash (\/\/), like
+-- the following:
+--
+-- DOC-EXAMPLE-BUCKET\/\/AWSLogs\/aws_account_id
+newCustomRoutingAcceleratorAttributes ::
+  CustomRoutingAcceleratorAttributes
+newCustomRoutingAcceleratorAttributes =
+  CustomRoutingAcceleratorAttributes'
+    { flowLogsEnabled =
+        Prelude.Nothing,
+      flowLogsS3Bucket = Prelude.Nothing,
+      flowLogsS3Prefix = Prelude.Nothing
+    }
+
+-- | Indicates whether flow logs are enabled. The default value is false. If
+-- the value is true, @FlowLogsS3Bucket@ and @FlowLogsS3Prefix@ must be
+-- specified.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/monitoring-global-accelerator.flow-logs.html Flow logs>
+-- in the /Global Accelerator Developer Guide/.
+customRoutingAcceleratorAttributes_flowLogsEnabled :: Lens.Lens' CustomRoutingAcceleratorAttributes (Prelude.Maybe Prelude.Bool)
+customRoutingAcceleratorAttributes_flowLogsEnabled = Lens.lens (\CustomRoutingAcceleratorAttributes' {flowLogsEnabled} -> flowLogsEnabled) (\s@CustomRoutingAcceleratorAttributes' {} a -> s {flowLogsEnabled = a} :: CustomRoutingAcceleratorAttributes)
+
+-- | The name of the Amazon S3 bucket for the flow logs. Attribute is
+-- required if @FlowLogsEnabled@ is @true@. The bucket must exist and have
+-- a bucket policy that grants Global Accelerator permission to write to
+-- the bucket.
+customRoutingAcceleratorAttributes_flowLogsS3Bucket :: Lens.Lens' CustomRoutingAcceleratorAttributes (Prelude.Maybe Prelude.Text)
+customRoutingAcceleratorAttributes_flowLogsS3Bucket = Lens.lens (\CustomRoutingAcceleratorAttributes' {flowLogsS3Bucket} -> flowLogsS3Bucket) (\s@CustomRoutingAcceleratorAttributes' {} a -> s {flowLogsS3Bucket = a} :: CustomRoutingAcceleratorAttributes)
+
+-- | The prefix for the location in the Amazon S3 bucket for the flow logs.
+-- Attribute is required if @FlowLogsEnabled@ is @true@.
+--
+-- If you don’t specify a prefix, the flow logs are stored in the root of
+-- the bucket. If you specify slash (\/) for the S3 bucket prefix, the log
+-- file bucket folder structure will include a double slash (\/\/), like
+-- the following:
+--
+-- DOC-EXAMPLE-BUCKET\/\/AWSLogs\/aws_account_id
+customRoutingAcceleratorAttributes_flowLogsS3Prefix :: Lens.Lens' CustomRoutingAcceleratorAttributes (Prelude.Maybe Prelude.Text)
+customRoutingAcceleratorAttributes_flowLogsS3Prefix = Lens.lens (\CustomRoutingAcceleratorAttributes' {flowLogsS3Prefix} -> flowLogsS3Prefix) (\s@CustomRoutingAcceleratorAttributes' {} a -> s {flowLogsS3Prefix = a} :: CustomRoutingAcceleratorAttributes)
+
+instance
+  Data.FromJSON
+    CustomRoutingAcceleratorAttributes
+  where
+  parseJSON =
+    Data.withObject
+      "CustomRoutingAcceleratorAttributes"
+      ( \x ->
+          CustomRoutingAcceleratorAttributes'
+            Prelude.<$> (x Data..:? "FlowLogsEnabled")
+            Prelude.<*> (x Data..:? "FlowLogsS3Bucket")
+            Prelude.<*> (x Data..:? "FlowLogsS3Prefix")
+      )
+
+instance
+  Prelude.Hashable
+    CustomRoutingAcceleratorAttributes
+  where
+  hashWithSalt
+    _salt
+    CustomRoutingAcceleratorAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` flowLogsEnabled
+        `Prelude.hashWithSalt` flowLogsS3Bucket
+        `Prelude.hashWithSalt` flowLogsS3Prefix
+
+instance
+  Prelude.NFData
+    CustomRoutingAcceleratorAttributes
+  where
+  rnf CustomRoutingAcceleratorAttributes' {..} =
+    Prelude.rnf flowLogsEnabled
+      `Prelude.seq` Prelude.rnf flowLogsS3Bucket
+      `Prelude.seq` Prelude.rnf flowLogsS3Prefix
diff --git a/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingAcceleratorStatus.hs b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingAcceleratorStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingAcceleratorStatus.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.Types.CustomRoutingAcceleratorStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.CustomRoutingAcceleratorStatus
+  ( CustomRoutingAcceleratorStatus
+      ( ..,
+        CustomRoutingAcceleratorStatus_DEPLOYED,
+        CustomRoutingAcceleratorStatus_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CustomRoutingAcceleratorStatus = CustomRoutingAcceleratorStatus'
+  { fromCustomRoutingAcceleratorStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CustomRoutingAcceleratorStatus_DEPLOYED :: CustomRoutingAcceleratorStatus
+pattern CustomRoutingAcceleratorStatus_DEPLOYED = CustomRoutingAcceleratorStatus' "DEPLOYED"
+
+pattern CustomRoutingAcceleratorStatus_IN_PROGRESS :: CustomRoutingAcceleratorStatus
+pattern CustomRoutingAcceleratorStatus_IN_PROGRESS = CustomRoutingAcceleratorStatus' "IN_PROGRESS"
+
+{-# COMPLETE
+  CustomRoutingAcceleratorStatus_DEPLOYED,
+  CustomRoutingAcceleratorStatus_IN_PROGRESS,
+  CustomRoutingAcceleratorStatus'
+  #-}
diff --git a/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingDestinationConfiguration.hs b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingDestinationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingDestinationConfiguration.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.GlobalAccelerator.Types.CustomRoutingDestinationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.CustomRoutingDestinationConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types.CustomRoutingProtocol
+import qualified Amazonka.Prelude as Prelude
+
+-- | For a custom routing accelerator, sets the port range and protocol for
+-- all endpoints (virtual private cloud subnets) in an endpoint group to
+-- accept client traffic on.
+--
+-- /See:/ 'newCustomRoutingDestinationConfiguration' smart constructor.
+data CustomRoutingDestinationConfiguration = CustomRoutingDestinationConfiguration'
+  { -- | The first port, inclusive, in the range of ports for the endpoint group
+    -- that is associated with a custom routing accelerator.
+    fromPort :: Prelude.Natural,
+    -- | The last port, inclusive, in the range of ports for the endpoint group
+    -- that is associated with a custom routing accelerator.
+    toPort :: Prelude.Natural,
+    -- | The protocol for the endpoint group that is associated with a custom
+    -- routing accelerator. The protocol can be either TCP or UDP.
+    protocols :: Prelude.NonEmpty CustomRoutingProtocol
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomRoutingDestinationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'customRoutingDestinationConfiguration_fromPort' - The first port, inclusive, in the range of ports for the endpoint group
+-- that is associated with a custom routing accelerator.
+--
+-- 'toPort', 'customRoutingDestinationConfiguration_toPort' - The last port, inclusive, in the range of ports for the endpoint group
+-- that is associated with a custom routing accelerator.
+--
+-- 'protocols', 'customRoutingDestinationConfiguration_protocols' - The protocol for the endpoint group that is associated with a custom
+-- routing accelerator. The protocol can be either TCP or UDP.
+newCustomRoutingDestinationConfiguration ::
+  -- | 'fromPort'
+  Prelude.Natural ->
+  -- | 'toPort'
+  Prelude.Natural ->
+  -- | 'protocols'
+  Prelude.NonEmpty CustomRoutingProtocol ->
+  CustomRoutingDestinationConfiguration
+newCustomRoutingDestinationConfiguration
+  pFromPort_
+  pToPort_
+  pProtocols_ =
+    CustomRoutingDestinationConfiguration'
+      { fromPort =
+          pFromPort_,
+        toPort = pToPort_,
+        protocols =
+          Lens.coerced Lens.# pProtocols_
+      }
+
+-- | The first port, inclusive, in the range of ports for the endpoint group
+-- that is associated with a custom routing accelerator.
+customRoutingDestinationConfiguration_fromPort :: Lens.Lens' CustomRoutingDestinationConfiguration Prelude.Natural
+customRoutingDestinationConfiguration_fromPort = Lens.lens (\CustomRoutingDestinationConfiguration' {fromPort} -> fromPort) (\s@CustomRoutingDestinationConfiguration' {} a -> s {fromPort = a} :: CustomRoutingDestinationConfiguration)
+
+-- | The last port, inclusive, in the range of ports for the endpoint group
+-- that is associated with a custom routing accelerator.
+customRoutingDestinationConfiguration_toPort :: Lens.Lens' CustomRoutingDestinationConfiguration Prelude.Natural
+customRoutingDestinationConfiguration_toPort = Lens.lens (\CustomRoutingDestinationConfiguration' {toPort} -> toPort) (\s@CustomRoutingDestinationConfiguration' {} a -> s {toPort = a} :: CustomRoutingDestinationConfiguration)
+
+-- | The protocol for the endpoint group that is associated with a custom
+-- routing accelerator. The protocol can be either TCP or UDP.
+customRoutingDestinationConfiguration_protocols :: Lens.Lens' CustomRoutingDestinationConfiguration (Prelude.NonEmpty CustomRoutingProtocol)
+customRoutingDestinationConfiguration_protocols = Lens.lens (\CustomRoutingDestinationConfiguration' {protocols} -> protocols) (\s@CustomRoutingDestinationConfiguration' {} a -> s {protocols = a} :: CustomRoutingDestinationConfiguration) Prelude.. Lens.coerced
+
+instance
+  Prelude.Hashable
+    CustomRoutingDestinationConfiguration
+  where
+  hashWithSalt
+    _salt
+    CustomRoutingDestinationConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` fromPort
+        `Prelude.hashWithSalt` toPort
+        `Prelude.hashWithSalt` protocols
+
+instance
+  Prelude.NFData
+    CustomRoutingDestinationConfiguration
+  where
+  rnf CustomRoutingDestinationConfiguration' {..} =
+    Prelude.rnf fromPort
+      `Prelude.seq` Prelude.rnf toPort
+      `Prelude.seq` Prelude.rnf protocols
+
+instance
+  Data.ToJSON
+    CustomRoutingDestinationConfiguration
+  where
+  toJSON CustomRoutingDestinationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("FromPort" Data..= fromPort),
+            Prelude.Just ("ToPort" Data..= toPort),
+            Prelude.Just ("Protocols" Data..= protocols)
+          ]
+      )
diff --git a/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingDestinationDescription.hs b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingDestinationDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingDestinationDescription.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.GlobalAccelerator.Types.CustomRoutingDestinationDescription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.CustomRoutingDestinationDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types.Protocol
+import qualified Amazonka.Prelude as Prelude
+
+-- | For a custom routing accelerator, describes the port range and protocol
+-- for all endpoints (virtual private cloud subnets) in an endpoint group
+-- to accept client traffic on.
+--
+-- /See:/ 'newCustomRoutingDestinationDescription' smart constructor.
+data CustomRoutingDestinationDescription = CustomRoutingDestinationDescription'
+  { -- | The first port, inclusive, in the range of ports for the endpoint group
+    -- that is associated with a custom routing accelerator.
+    fromPort :: Prelude.Maybe Prelude.Natural,
+    -- | The protocol for the endpoint group that is associated with a custom
+    -- routing accelerator. The protocol can be either TCP or UDP.
+    protocols :: Prelude.Maybe [Protocol],
+    -- | The last port, inclusive, in the range of ports for the endpoint group
+    -- that is associated with a custom routing accelerator.
+    toPort :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomRoutingDestinationDescription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'customRoutingDestinationDescription_fromPort' - The first port, inclusive, in the range of ports for the endpoint group
+-- that is associated with a custom routing accelerator.
+--
+-- 'protocols', 'customRoutingDestinationDescription_protocols' - The protocol for the endpoint group that is associated with a custom
+-- routing accelerator. The protocol can be either TCP or UDP.
+--
+-- 'toPort', 'customRoutingDestinationDescription_toPort' - The last port, inclusive, in the range of ports for the endpoint group
+-- that is associated with a custom routing accelerator.
+newCustomRoutingDestinationDescription ::
+  CustomRoutingDestinationDescription
+newCustomRoutingDestinationDescription =
+  CustomRoutingDestinationDescription'
+    { fromPort =
+        Prelude.Nothing,
+      protocols = Prelude.Nothing,
+      toPort = Prelude.Nothing
+    }
+
+-- | The first port, inclusive, in the range of ports for the endpoint group
+-- that is associated with a custom routing accelerator.
+customRoutingDestinationDescription_fromPort :: Lens.Lens' CustomRoutingDestinationDescription (Prelude.Maybe Prelude.Natural)
+customRoutingDestinationDescription_fromPort = Lens.lens (\CustomRoutingDestinationDescription' {fromPort} -> fromPort) (\s@CustomRoutingDestinationDescription' {} a -> s {fromPort = a} :: CustomRoutingDestinationDescription)
+
+-- | The protocol for the endpoint group that is associated with a custom
+-- routing accelerator. The protocol can be either TCP or UDP.
+customRoutingDestinationDescription_protocols :: Lens.Lens' CustomRoutingDestinationDescription (Prelude.Maybe [Protocol])
+customRoutingDestinationDescription_protocols = Lens.lens (\CustomRoutingDestinationDescription' {protocols} -> protocols) (\s@CustomRoutingDestinationDescription' {} a -> s {protocols = a} :: CustomRoutingDestinationDescription) Prelude.. Lens.mapping Lens.coerced
+
+-- | The last port, inclusive, in the range of ports for the endpoint group
+-- that is associated with a custom routing accelerator.
+customRoutingDestinationDescription_toPort :: Lens.Lens' CustomRoutingDestinationDescription (Prelude.Maybe Prelude.Natural)
+customRoutingDestinationDescription_toPort = Lens.lens (\CustomRoutingDestinationDescription' {toPort} -> toPort) (\s@CustomRoutingDestinationDescription' {} a -> s {toPort = a} :: CustomRoutingDestinationDescription)
+
+instance
+  Data.FromJSON
+    CustomRoutingDestinationDescription
+  where
+  parseJSON =
+    Data.withObject
+      "CustomRoutingDestinationDescription"
+      ( \x ->
+          CustomRoutingDestinationDescription'
+            Prelude.<$> (x Data..:? "FromPort")
+            Prelude.<*> (x Data..:? "Protocols" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "ToPort")
+      )
+
+instance
+  Prelude.Hashable
+    CustomRoutingDestinationDescription
+  where
+  hashWithSalt
+    _salt
+    CustomRoutingDestinationDescription' {..} =
+      _salt
+        `Prelude.hashWithSalt` fromPort
+        `Prelude.hashWithSalt` protocols
+        `Prelude.hashWithSalt` toPort
+
+instance
+  Prelude.NFData
+    CustomRoutingDestinationDescription
+  where
+  rnf CustomRoutingDestinationDescription' {..} =
+    Prelude.rnf fromPort
+      `Prelude.seq` Prelude.rnf protocols
+      `Prelude.seq` Prelude.rnf toPort
diff --git a/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingDestinationTrafficState.hs b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingDestinationTrafficState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingDestinationTrafficState.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.Types.CustomRoutingDestinationTrafficState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.CustomRoutingDestinationTrafficState
+  ( CustomRoutingDestinationTrafficState
+      ( ..,
+        CustomRoutingDestinationTrafficState_ALLOW,
+        CustomRoutingDestinationTrafficState_DENY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CustomRoutingDestinationTrafficState = CustomRoutingDestinationTrafficState'
+  { fromCustomRoutingDestinationTrafficState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CustomRoutingDestinationTrafficState_ALLOW :: CustomRoutingDestinationTrafficState
+pattern CustomRoutingDestinationTrafficState_ALLOW = CustomRoutingDestinationTrafficState' "ALLOW"
+
+pattern CustomRoutingDestinationTrafficState_DENY :: CustomRoutingDestinationTrafficState
+pattern CustomRoutingDestinationTrafficState_DENY = CustomRoutingDestinationTrafficState' "DENY"
+
+{-# COMPLETE
+  CustomRoutingDestinationTrafficState_ALLOW,
+  CustomRoutingDestinationTrafficState_DENY,
+  CustomRoutingDestinationTrafficState'
+  #-}
diff --git a/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingEndpointConfiguration.hs b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingEndpointConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingEndpointConfiguration.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.GlobalAccelerator.Types.CustomRoutingEndpointConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.CustomRoutingEndpointConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The list of endpoint objects. For custom routing, this is a list of
+-- virtual private cloud (VPC) subnet IDs.
+--
+-- /See:/ 'newCustomRoutingEndpointConfiguration' smart constructor.
+data CustomRoutingEndpointConfiguration = CustomRoutingEndpointConfiguration'
+  { -- | An ID for the endpoint. For custom routing accelerators, this is the
+    -- virtual private cloud (VPC) subnet ID.
+    endpointId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomRoutingEndpointConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointId', 'customRoutingEndpointConfiguration_endpointId' - An ID for the endpoint. For custom routing accelerators, this is the
+-- virtual private cloud (VPC) subnet ID.
+newCustomRoutingEndpointConfiguration ::
+  CustomRoutingEndpointConfiguration
+newCustomRoutingEndpointConfiguration =
+  CustomRoutingEndpointConfiguration'
+    { endpointId =
+        Prelude.Nothing
+    }
+
+-- | An ID for the endpoint. For custom routing accelerators, this is the
+-- virtual private cloud (VPC) subnet ID.
+customRoutingEndpointConfiguration_endpointId :: Lens.Lens' CustomRoutingEndpointConfiguration (Prelude.Maybe Prelude.Text)
+customRoutingEndpointConfiguration_endpointId = Lens.lens (\CustomRoutingEndpointConfiguration' {endpointId} -> endpointId) (\s@CustomRoutingEndpointConfiguration' {} a -> s {endpointId = a} :: CustomRoutingEndpointConfiguration)
+
+instance
+  Prelude.Hashable
+    CustomRoutingEndpointConfiguration
+  where
+  hashWithSalt
+    _salt
+    CustomRoutingEndpointConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` endpointId
+
+instance
+  Prelude.NFData
+    CustomRoutingEndpointConfiguration
+  where
+  rnf CustomRoutingEndpointConfiguration' {..} =
+    Prelude.rnf endpointId
+
+instance
+  Data.ToJSON
+    CustomRoutingEndpointConfiguration
+  where
+  toJSON CustomRoutingEndpointConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("EndpointId" Data..=) Prelude.<$> endpointId]
+      )
diff --git a/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingEndpointDescription.hs b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingEndpointDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingEndpointDescription.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.GlobalAccelerator.Types.CustomRoutingEndpointDescription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.CustomRoutingEndpointDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A complex type for an endpoint for a custom routing accelerator. Each
+-- endpoint group can include one or more endpoints, which are virtual
+-- private cloud (VPC) subnets.
+--
+-- /See:/ 'newCustomRoutingEndpointDescription' smart constructor.
+data CustomRoutingEndpointDescription = CustomRoutingEndpointDescription'
+  { -- | An ID for the endpoint. For custom routing accelerators, this is the
+    -- virtual private cloud (VPC) subnet ID.
+    endpointId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomRoutingEndpointDescription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointId', 'customRoutingEndpointDescription_endpointId' - An ID for the endpoint. For custom routing accelerators, this is the
+-- virtual private cloud (VPC) subnet ID.
+newCustomRoutingEndpointDescription ::
+  CustomRoutingEndpointDescription
+newCustomRoutingEndpointDescription =
+  CustomRoutingEndpointDescription'
+    { endpointId =
+        Prelude.Nothing
+    }
+
+-- | An ID for the endpoint. For custom routing accelerators, this is the
+-- virtual private cloud (VPC) subnet ID.
+customRoutingEndpointDescription_endpointId :: Lens.Lens' CustomRoutingEndpointDescription (Prelude.Maybe Prelude.Text)
+customRoutingEndpointDescription_endpointId = Lens.lens (\CustomRoutingEndpointDescription' {endpointId} -> endpointId) (\s@CustomRoutingEndpointDescription' {} a -> s {endpointId = a} :: CustomRoutingEndpointDescription)
+
+instance
+  Data.FromJSON
+    CustomRoutingEndpointDescription
+  where
+  parseJSON =
+    Data.withObject
+      "CustomRoutingEndpointDescription"
+      ( \x ->
+          CustomRoutingEndpointDescription'
+            Prelude.<$> (x Data..:? "EndpointId")
+      )
+
+instance
+  Prelude.Hashable
+    CustomRoutingEndpointDescription
+  where
+  hashWithSalt
+    _salt
+    CustomRoutingEndpointDescription' {..} =
+      _salt `Prelude.hashWithSalt` endpointId
+
+instance
+  Prelude.NFData
+    CustomRoutingEndpointDescription
+  where
+  rnf CustomRoutingEndpointDescription' {..} =
+    Prelude.rnf endpointId
diff --git a/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingEndpointGroup.hs b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingEndpointGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingEndpointGroup.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.GlobalAccelerator.Types.CustomRoutingEndpointGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.CustomRoutingEndpointGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types.CustomRoutingDestinationDescription
+import Amazonka.GlobalAccelerator.Types.CustomRoutingEndpointDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | A complex type for the endpoint group for a custom routing accelerator.
+-- An Amazon Web Services Region can have only one endpoint group for a
+-- specific listener.
+--
+-- /See:/ 'newCustomRoutingEndpointGroup' smart constructor.
+data CustomRoutingEndpointGroup = CustomRoutingEndpointGroup'
+  { -- | For a custom routing accelerator, describes the port range and protocol
+    -- for all endpoints (virtual private cloud subnets) in an endpoint group
+    -- to accept client traffic on.
+    destinationDescriptions :: Prelude.Maybe [CustomRoutingDestinationDescription],
+    -- | For a custom routing accelerator, describes the endpoints (virtual
+    -- private cloud subnets) in an endpoint group to accept client traffic on.
+    endpointDescriptions :: Prelude.Maybe [CustomRoutingEndpointDescription],
+    -- | The Amazon Resource Name (ARN) of the endpoint group.
+    endpointGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services Region where the endpoint group is located.
+    endpointGroupRegion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomRoutingEndpointGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationDescriptions', 'customRoutingEndpointGroup_destinationDescriptions' - For a custom routing accelerator, describes the port range and protocol
+-- for all endpoints (virtual private cloud subnets) in an endpoint group
+-- to accept client traffic on.
+--
+-- 'endpointDescriptions', 'customRoutingEndpointGroup_endpointDescriptions' - For a custom routing accelerator, describes the endpoints (virtual
+-- private cloud subnets) in an endpoint group to accept client traffic on.
+--
+-- 'endpointGroupArn', 'customRoutingEndpointGroup_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group.
+--
+-- 'endpointGroupRegion', 'customRoutingEndpointGroup_endpointGroupRegion' - The Amazon Web Services Region where the endpoint group is located.
+newCustomRoutingEndpointGroup ::
+  CustomRoutingEndpointGroup
+newCustomRoutingEndpointGroup =
+  CustomRoutingEndpointGroup'
+    { destinationDescriptions =
+        Prelude.Nothing,
+      endpointDescriptions = Prelude.Nothing,
+      endpointGroupArn = Prelude.Nothing,
+      endpointGroupRegion = Prelude.Nothing
+    }
+
+-- | For a custom routing accelerator, describes the port range and protocol
+-- for all endpoints (virtual private cloud subnets) in an endpoint group
+-- to accept client traffic on.
+customRoutingEndpointGroup_destinationDescriptions :: Lens.Lens' CustomRoutingEndpointGroup (Prelude.Maybe [CustomRoutingDestinationDescription])
+customRoutingEndpointGroup_destinationDescriptions = Lens.lens (\CustomRoutingEndpointGroup' {destinationDescriptions} -> destinationDescriptions) (\s@CustomRoutingEndpointGroup' {} a -> s {destinationDescriptions = a} :: CustomRoutingEndpointGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | For a custom routing accelerator, describes the endpoints (virtual
+-- private cloud subnets) in an endpoint group to accept client traffic on.
+customRoutingEndpointGroup_endpointDescriptions :: Lens.Lens' CustomRoutingEndpointGroup (Prelude.Maybe [CustomRoutingEndpointDescription])
+customRoutingEndpointGroup_endpointDescriptions = Lens.lens (\CustomRoutingEndpointGroup' {endpointDescriptions} -> endpointDescriptions) (\s@CustomRoutingEndpointGroup' {} a -> s {endpointDescriptions = a} :: CustomRoutingEndpointGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the endpoint group.
+customRoutingEndpointGroup_endpointGroupArn :: Lens.Lens' CustomRoutingEndpointGroup (Prelude.Maybe Prelude.Text)
+customRoutingEndpointGroup_endpointGroupArn = Lens.lens (\CustomRoutingEndpointGroup' {endpointGroupArn} -> endpointGroupArn) (\s@CustomRoutingEndpointGroup' {} a -> s {endpointGroupArn = a} :: CustomRoutingEndpointGroup)
+
+-- | The Amazon Web Services Region where the endpoint group is located.
+customRoutingEndpointGroup_endpointGroupRegion :: Lens.Lens' CustomRoutingEndpointGroup (Prelude.Maybe Prelude.Text)
+customRoutingEndpointGroup_endpointGroupRegion = Lens.lens (\CustomRoutingEndpointGroup' {endpointGroupRegion} -> endpointGroupRegion) (\s@CustomRoutingEndpointGroup' {} a -> s {endpointGroupRegion = a} :: CustomRoutingEndpointGroup)
+
+instance Data.FromJSON CustomRoutingEndpointGroup where
+  parseJSON =
+    Data.withObject
+      "CustomRoutingEndpointGroup"
+      ( \x ->
+          CustomRoutingEndpointGroup'
+            Prelude.<$> ( x
+                            Data..:? "DestinationDescriptions"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "EndpointDescriptions"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "EndpointGroupArn")
+            Prelude.<*> (x Data..:? "EndpointGroupRegion")
+      )
+
+instance Prelude.Hashable CustomRoutingEndpointGroup where
+  hashWithSalt _salt CustomRoutingEndpointGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationDescriptions
+      `Prelude.hashWithSalt` endpointDescriptions
+      `Prelude.hashWithSalt` endpointGroupArn
+      `Prelude.hashWithSalt` endpointGroupRegion
+
+instance Prelude.NFData CustomRoutingEndpointGroup where
+  rnf CustomRoutingEndpointGroup' {..} =
+    Prelude.rnf destinationDescriptions
+      `Prelude.seq` Prelude.rnf endpointDescriptions
+      `Prelude.seq` Prelude.rnf endpointGroupArn
+      `Prelude.seq` Prelude.rnf endpointGroupRegion
diff --git a/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingListener.hs b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingListener.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingListener.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.GlobalAccelerator.Types.CustomRoutingListener
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.CustomRoutingListener where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types.PortRange
+import qualified Amazonka.Prelude as Prelude
+
+-- | A complex type for a listener for a custom routing accelerator.
+--
+-- /See:/ 'newCustomRoutingListener' smart constructor.
+data CustomRoutingListener = CustomRoutingListener'
+  { -- | The Amazon Resource Name (ARN) of the listener.
+    listenerArn :: Prelude.Maybe Prelude.Text,
+    -- | The port range to support for connections from clients to your
+    -- accelerator.
+    --
+    -- Separately, you set port ranges for endpoints. For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-custom-routing-endpoints.html About endpoints for custom routing accelerators>.
+    portRanges :: Prelude.Maybe (Prelude.NonEmpty PortRange)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomRoutingListener' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'listenerArn', 'customRoutingListener_listenerArn' - The Amazon Resource Name (ARN) of the listener.
+--
+-- 'portRanges', 'customRoutingListener_portRanges' - The port range to support for connections from clients to your
+-- accelerator.
+--
+-- Separately, you set port ranges for endpoints. For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-custom-routing-endpoints.html About endpoints for custom routing accelerators>.
+newCustomRoutingListener ::
+  CustomRoutingListener
+newCustomRoutingListener =
+  CustomRoutingListener'
+    { listenerArn =
+        Prelude.Nothing,
+      portRanges = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the listener.
+customRoutingListener_listenerArn :: Lens.Lens' CustomRoutingListener (Prelude.Maybe Prelude.Text)
+customRoutingListener_listenerArn = Lens.lens (\CustomRoutingListener' {listenerArn} -> listenerArn) (\s@CustomRoutingListener' {} a -> s {listenerArn = a} :: CustomRoutingListener)
+
+-- | The port range to support for connections from clients to your
+-- accelerator.
+--
+-- Separately, you set port ranges for endpoints. For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-custom-routing-endpoints.html About endpoints for custom routing accelerators>.
+customRoutingListener_portRanges :: Lens.Lens' CustomRoutingListener (Prelude.Maybe (Prelude.NonEmpty PortRange))
+customRoutingListener_portRanges = Lens.lens (\CustomRoutingListener' {portRanges} -> portRanges) (\s@CustomRoutingListener' {} a -> s {portRanges = a} :: CustomRoutingListener) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON CustomRoutingListener where
+  parseJSON =
+    Data.withObject
+      "CustomRoutingListener"
+      ( \x ->
+          CustomRoutingListener'
+            Prelude.<$> (x Data..:? "ListenerArn")
+            Prelude.<*> (x Data..:? "PortRanges")
+      )
+
+instance Prelude.Hashable CustomRoutingListener where
+  hashWithSalt _salt CustomRoutingListener' {..} =
+    _salt
+      `Prelude.hashWithSalt` listenerArn
+      `Prelude.hashWithSalt` portRanges
+
+instance Prelude.NFData CustomRoutingListener where
+  rnf CustomRoutingListener' {..} =
+    Prelude.rnf listenerArn
+      `Prelude.seq` Prelude.rnf portRanges
diff --git a/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingProtocol.hs b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingProtocol.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/CustomRoutingProtocol.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.Types.CustomRoutingProtocol
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.CustomRoutingProtocol
+  ( CustomRoutingProtocol
+      ( ..,
+        CustomRoutingProtocol_TCP,
+        CustomRoutingProtocol_UDP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CustomRoutingProtocol = CustomRoutingProtocol'
+  { fromCustomRoutingProtocol ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CustomRoutingProtocol_TCP :: CustomRoutingProtocol
+pattern CustomRoutingProtocol_TCP = CustomRoutingProtocol' "TCP"
+
+pattern CustomRoutingProtocol_UDP :: CustomRoutingProtocol
+pattern CustomRoutingProtocol_UDP = CustomRoutingProtocol' "UDP"
+
+{-# COMPLETE
+  CustomRoutingProtocol_TCP,
+  CustomRoutingProtocol_UDP,
+  CustomRoutingProtocol'
+  #-}
diff --git a/gen/Amazonka/GlobalAccelerator/Types/DestinationPortMapping.hs b/gen/Amazonka/GlobalAccelerator/Types/DestinationPortMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/DestinationPortMapping.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.GlobalAccelerator.Types.DestinationPortMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.DestinationPortMapping where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types.CustomRoutingDestinationTrafficState
+import Amazonka.GlobalAccelerator.Types.IpAddressType
+import Amazonka.GlobalAccelerator.Types.SocketAddress
+import qualified Amazonka.Prelude as Prelude
+
+-- | The port mappings for a specified endpoint IP address (destination).
+--
+-- /See:/ 'newDestinationPortMapping' smart constructor.
+data DestinationPortMapping = DestinationPortMapping'
+  { -- | The Amazon Resource Name (ARN) of the custom routing accelerator that
+    -- you have port mappings for.
+    acceleratorArn :: Prelude.Maybe Prelude.Text,
+    -- | The IP address\/port combinations (sockets) that map to a given
+    -- destination socket address.
+    acceleratorSocketAddresses :: Prelude.Maybe [SocketAddress],
+    -- | The endpoint IP address\/port combination for traffic received on the
+    -- accelerator socket address.
+    destinationSocketAddress :: Prelude.Maybe SocketAddress,
+    -- | Indicates whether or not a port mapping destination can receive traffic.
+    -- The value is either ALLOW, if traffic is allowed to the destination, or
+    -- DENY, if traffic is not allowed to the destination.
+    destinationTrafficState :: Prelude.Maybe CustomRoutingDestinationTrafficState,
+    -- | The Amazon Resource Name (ARN) of the endpoint group.
+    endpointGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services Region for the endpoint group.
+    endpointGroupRegion :: Prelude.Maybe Prelude.Text,
+    -- | The ID for the virtual private cloud (VPC) subnet.
+    endpointId :: Prelude.Maybe Prelude.Text,
+    -- | The IP address type that an accelerator supports. For a custom routing
+    -- accelerator, the value must be IPV4.
+    ipAddressType :: Prelude.Maybe IpAddressType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DestinationPortMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorArn', 'destinationPortMapping_acceleratorArn' - The Amazon Resource Name (ARN) of the custom routing accelerator that
+-- you have port mappings for.
+--
+-- 'acceleratorSocketAddresses', 'destinationPortMapping_acceleratorSocketAddresses' - The IP address\/port combinations (sockets) that map to a given
+-- destination socket address.
+--
+-- 'destinationSocketAddress', 'destinationPortMapping_destinationSocketAddress' - The endpoint IP address\/port combination for traffic received on the
+-- accelerator socket address.
+--
+-- 'destinationTrafficState', 'destinationPortMapping_destinationTrafficState' - Indicates whether or not a port mapping destination can receive traffic.
+-- The value is either ALLOW, if traffic is allowed to the destination, or
+-- DENY, if traffic is not allowed to the destination.
+--
+-- 'endpointGroupArn', 'destinationPortMapping_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group.
+--
+-- 'endpointGroupRegion', 'destinationPortMapping_endpointGroupRegion' - The Amazon Web Services Region for the endpoint group.
+--
+-- 'endpointId', 'destinationPortMapping_endpointId' - The ID for the virtual private cloud (VPC) subnet.
+--
+-- 'ipAddressType', 'destinationPortMapping_ipAddressType' - The IP address type that an accelerator supports. For a custom routing
+-- accelerator, the value must be IPV4.
+newDestinationPortMapping ::
+  DestinationPortMapping
+newDestinationPortMapping =
+  DestinationPortMapping'
+    { acceleratorArn =
+        Prelude.Nothing,
+      acceleratorSocketAddresses = Prelude.Nothing,
+      destinationSocketAddress = Prelude.Nothing,
+      destinationTrafficState = Prelude.Nothing,
+      endpointGroupArn = Prelude.Nothing,
+      endpointGroupRegion = Prelude.Nothing,
+      endpointId = Prelude.Nothing,
+      ipAddressType = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the custom routing accelerator that
+-- you have port mappings for.
+destinationPortMapping_acceleratorArn :: Lens.Lens' DestinationPortMapping (Prelude.Maybe Prelude.Text)
+destinationPortMapping_acceleratorArn = Lens.lens (\DestinationPortMapping' {acceleratorArn} -> acceleratorArn) (\s@DestinationPortMapping' {} a -> s {acceleratorArn = a} :: DestinationPortMapping)
+
+-- | The IP address\/port combinations (sockets) that map to a given
+-- destination socket address.
+destinationPortMapping_acceleratorSocketAddresses :: Lens.Lens' DestinationPortMapping (Prelude.Maybe [SocketAddress])
+destinationPortMapping_acceleratorSocketAddresses = Lens.lens (\DestinationPortMapping' {acceleratorSocketAddresses} -> acceleratorSocketAddresses) (\s@DestinationPortMapping' {} a -> s {acceleratorSocketAddresses = a} :: DestinationPortMapping) Prelude.. Lens.mapping Lens.coerced
+
+-- | The endpoint IP address\/port combination for traffic received on the
+-- accelerator socket address.
+destinationPortMapping_destinationSocketAddress :: Lens.Lens' DestinationPortMapping (Prelude.Maybe SocketAddress)
+destinationPortMapping_destinationSocketAddress = Lens.lens (\DestinationPortMapping' {destinationSocketAddress} -> destinationSocketAddress) (\s@DestinationPortMapping' {} a -> s {destinationSocketAddress = a} :: DestinationPortMapping)
+
+-- | Indicates whether or not a port mapping destination can receive traffic.
+-- The value is either ALLOW, if traffic is allowed to the destination, or
+-- DENY, if traffic is not allowed to the destination.
+destinationPortMapping_destinationTrafficState :: Lens.Lens' DestinationPortMapping (Prelude.Maybe CustomRoutingDestinationTrafficState)
+destinationPortMapping_destinationTrafficState = Lens.lens (\DestinationPortMapping' {destinationTrafficState} -> destinationTrafficState) (\s@DestinationPortMapping' {} a -> s {destinationTrafficState = a} :: DestinationPortMapping)
+
+-- | The Amazon Resource Name (ARN) of the endpoint group.
+destinationPortMapping_endpointGroupArn :: Lens.Lens' DestinationPortMapping (Prelude.Maybe Prelude.Text)
+destinationPortMapping_endpointGroupArn = Lens.lens (\DestinationPortMapping' {endpointGroupArn} -> endpointGroupArn) (\s@DestinationPortMapping' {} a -> s {endpointGroupArn = a} :: DestinationPortMapping)
+
+-- | The Amazon Web Services Region for the endpoint group.
+destinationPortMapping_endpointGroupRegion :: Lens.Lens' DestinationPortMapping (Prelude.Maybe Prelude.Text)
+destinationPortMapping_endpointGroupRegion = Lens.lens (\DestinationPortMapping' {endpointGroupRegion} -> endpointGroupRegion) (\s@DestinationPortMapping' {} a -> s {endpointGroupRegion = a} :: DestinationPortMapping)
+
+-- | The ID for the virtual private cloud (VPC) subnet.
+destinationPortMapping_endpointId :: Lens.Lens' DestinationPortMapping (Prelude.Maybe Prelude.Text)
+destinationPortMapping_endpointId = Lens.lens (\DestinationPortMapping' {endpointId} -> endpointId) (\s@DestinationPortMapping' {} a -> s {endpointId = a} :: DestinationPortMapping)
+
+-- | The IP address type that an accelerator supports. For a custom routing
+-- accelerator, the value must be IPV4.
+destinationPortMapping_ipAddressType :: Lens.Lens' DestinationPortMapping (Prelude.Maybe IpAddressType)
+destinationPortMapping_ipAddressType = Lens.lens (\DestinationPortMapping' {ipAddressType} -> ipAddressType) (\s@DestinationPortMapping' {} a -> s {ipAddressType = a} :: DestinationPortMapping)
+
+instance Data.FromJSON DestinationPortMapping where
+  parseJSON =
+    Data.withObject
+      "DestinationPortMapping"
+      ( \x ->
+          DestinationPortMapping'
+            Prelude.<$> (x Data..:? "AcceleratorArn")
+            Prelude.<*> ( x
+                            Data..:? "AcceleratorSocketAddresses"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "DestinationSocketAddress")
+            Prelude.<*> (x Data..:? "DestinationTrafficState")
+            Prelude.<*> (x Data..:? "EndpointGroupArn")
+            Prelude.<*> (x Data..:? "EndpointGroupRegion")
+            Prelude.<*> (x Data..:? "EndpointId")
+            Prelude.<*> (x Data..:? "IpAddressType")
+      )
+
+instance Prelude.Hashable DestinationPortMapping where
+  hashWithSalt _salt DestinationPortMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` acceleratorArn
+      `Prelude.hashWithSalt` acceleratorSocketAddresses
+      `Prelude.hashWithSalt` destinationSocketAddress
+      `Prelude.hashWithSalt` destinationTrafficState
+      `Prelude.hashWithSalt` endpointGroupArn
+      `Prelude.hashWithSalt` endpointGroupRegion
+      `Prelude.hashWithSalt` endpointId
+      `Prelude.hashWithSalt` ipAddressType
+
+instance Prelude.NFData DestinationPortMapping where
+  rnf DestinationPortMapping' {..} =
+    Prelude.rnf acceleratorArn
+      `Prelude.seq` Prelude.rnf acceleratorSocketAddresses
+      `Prelude.seq` Prelude.rnf destinationSocketAddress
+      `Prelude.seq` Prelude.rnf destinationTrafficState
+      `Prelude.seq` Prelude.rnf endpointGroupArn
+      `Prelude.seq` Prelude.rnf endpointGroupRegion
+      `Prelude.seq` Prelude.rnf endpointId
+      `Prelude.seq` Prelude.rnf ipAddressType
diff --git a/gen/Amazonka/GlobalAccelerator/Types/EndpointConfiguration.hs b/gen/Amazonka/GlobalAccelerator/Types/EndpointConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/EndpointConfiguration.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.GlobalAccelerator.Types.EndpointConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.EndpointConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A complex type for endpoints. A resource must be valid and active when
+-- you add it as an endpoint.
+--
+-- /See:/ 'newEndpointConfiguration' smart constructor.
+data EndpointConfiguration = EndpointConfiguration'
+  { -- | Indicates whether client IP address preservation is enabled for an
+    -- endpoint. The value is true or false. The default value is true for new
+    -- accelerators.
+    --
+    -- If the value is set to true, the client\'s IP address is preserved in
+    -- the @X-Forwarded-For@ request header as traffic travels to applications
+    -- on the endpoint fronted by the accelerator.
+    --
+    -- Client IP address preservation is supported, in specific Amazon Web
+    -- Services Regions, for endpoints that are Application Load Balancers and
+    -- Amazon EC2 instances.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/preserve-client-ip-address.html Preserve client IP addresses in Global Accelerator>
+    -- in the /Global Accelerator Developer Guide/.
+    clientIPPreservationEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | An ID for the endpoint. If the endpoint is a Network Load Balancer or
+    -- Application Load Balancer, this is the Amazon Resource Name (ARN) of the
+    -- resource. If the endpoint is an Elastic IP address, this is the Elastic
+    -- IP address allocation ID. For Amazon EC2 instances, this is the EC2
+    -- instance ID. A resource must be valid and active when you add it as an
+    -- endpoint.
+    --
+    -- An Application Load Balancer can be either internal or internet-facing.
+    endpointId :: Prelude.Maybe Prelude.Text,
+    -- | The weight associated with the endpoint. When you add weights to
+    -- endpoints, you configure Global Accelerator to route traffic based on
+    -- proportions that you specify. For example, you might specify endpoint
+    -- weights of 4, 5, 5, and 6 (sum=20). The result is that 4\/20 of your
+    -- traffic, on average, is routed to the first endpoint, 5\/20 is routed
+    -- both to the second and third endpoints, and 6\/20 is routed to the last
+    -- endpoint. For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-endpoints-endpoint-weights.html Endpoint weights>
+    -- in the /Global Accelerator Developer Guide/.
+    weight :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EndpointConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientIPPreservationEnabled', 'endpointConfiguration_clientIPPreservationEnabled' - Indicates whether client IP address preservation is enabled for an
+-- endpoint. The value is true or false. The default value is true for new
+-- accelerators.
+--
+-- If the value is set to true, the client\'s IP address is preserved in
+-- the @X-Forwarded-For@ request header as traffic travels to applications
+-- on the endpoint fronted by the accelerator.
+--
+-- Client IP address preservation is supported, in specific Amazon Web
+-- Services Regions, for endpoints that are Application Load Balancers and
+-- Amazon EC2 instances.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/preserve-client-ip-address.html Preserve client IP addresses in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- 'endpointId', 'endpointConfiguration_endpointId' - An ID for the endpoint. If the endpoint is a Network Load Balancer or
+-- Application Load Balancer, this is the Amazon Resource Name (ARN) of the
+-- resource. If the endpoint is an Elastic IP address, this is the Elastic
+-- IP address allocation ID. For Amazon EC2 instances, this is the EC2
+-- instance ID. A resource must be valid and active when you add it as an
+-- endpoint.
+--
+-- An Application Load Balancer can be either internal or internet-facing.
+--
+-- 'weight', 'endpointConfiguration_weight' - The weight associated with the endpoint. When you add weights to
+-- endpoints, you configure Global Accelerator to route traffic based on
+-- proportions that you specify. For example, you might specify endpoint
+-- weights of 4, 5, 5, and 6 (sum=20). The result is that 4\/20 of your
+-- traffic, on average, is routed to the first endpoint, 5\/20 is routed
+-- both to the second and third endpoints, and 6\/20 is routed to the last
+-- endpoint. For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-endpoints-endpoint-weights.html Endpoint weights>
+-- in the /Global Accelerator Developer Guide/.
+newEndpointConfiguration ::
+  EndpointConfiguration
+newEndpointConfiguration =
+  EndpointConfiguration'
+    { clientIPPreservationEnabled =
+        Prelude.Nothing,
+      endpointId = Prelude.Nothing,
+      weight = Prelude.Nothing
+    }
+
+-- | Indicates whether client IP address preservation is enabled for an
+-- endpoint. The value is true or false. The default value is true for new
+-- accelerators.
+--
+-- If the value is set to true, the client\'s IP address is preserved in
+-- the @X-Forwarded-For@ request header as traffic travels to applications
+-- on the endpoint fronted by the accelerator.
+--
+-- Client IP address preservation is supported, in specific Amazon Web
+-- Services Regions, for endpoints that are Application Load Balancers and
+-- Amazon EC2 instances.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/preserve-client-ip-address.html Preserve client IP addresses in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+endpointConfiguration_clientIPPreservationEnabled :: Lens.Lens' EndpointConfiguration (Prelude.Maybe Prelude.Bool)
+endpointConfiguration_clientIPPreservationEnabled = Lens.lens (\EndpointConfiguration' {clientIPPreservationEnabled} -> clientIPPreservationEnabled) (\s@EndpointConfiguration' {} a -> s {clientIPPreservationEnabled = a} :: EndpointConfiguration)
+
+-- | An ID for the endpoint. If the endpoint is a Network Load Balancer or
+-- Application Load Balancer, this is the Amazon Resource Name (ARN) of the
+-- resource. If the endpoint is an Elastic IP address, this is the Elastic
+-- IP address allocation ID. For Amazon EC2 instances, this is the EC2
+-- instance ID. A resource must be valid and active when you add it as an
+-- endpoint.
+--
+-- An Application Load Balancer can be either internal or internet-facing.
+endpointConfiguration_endpointId :: Lens.Lens' EndpointConfiguration (Prelude.Maybe Prelude.Text)
+endpointConfiguration_endpointId = Lens.lens (\EndpointConfiguration' {endpointId} -> endpointId) (\s@EndpointConfiguration' {} a -> s {endpointId = a} :: EndpointConfiguration)
+
+-- | The weight associated with the endpoint. When you add weights to
+-- endpoints, you configure Global Accelerator to route traffic based on
+-- proportions that you specify. For example, you might specify endpoint
+-- weights of 4, 5, 5, and 6 (sum=20). The result is that 4\/20 of your
+-- traffic, on average, is routed to the first endpoint, 5\/20 is routed
+-- both to the second and third endpoints, and 6\/20 is routed to the last
+-- endpoint. For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-endpoints-endpoint-weights.html Endpoint weights>
+-- in the /Global Accelerator Developer Guide/.
+endpointConfiguration_weight :: Lens.Lens' EndpointConfiguration (Prelude.Maybe Prelude.Natural)
+endpointConfiguration_weight = Lens.lens (\EndpointConfiguration' {weight} -> weight) (\s@EndpointConfiguration' {} a -> s {weight = a} :: EndpointConfiguration)
+
+instance Prelude.Hashable EndpointConfiguration where
+  hashWithSalt _salt EndpointConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientIPPreservationEnabled
+      `Prelude.hashWithSalt` endpointId
+      `Prelude.hashWithSalt` weight
+
+instance Prelude.NFData EndpointConfiguration where
+  rnf EndpointConfiguration' {..} =
+    Prelude.rnf clientIPPreservationEnabled
+      `Prelude.seq` Prelude.rnf endpointId
+      `Prelude.seq` Prelude.rnf weight
+
+instance Data.ToJSON EndpointConfiguration where
+  toJSON EndpointConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientIPPreservationEnabled" Data..=)
+              Prelude.<$> clientIPPreservationEnabled,
+            ("EndpointId" Data..=) Prelude.<$> endpointId,
+            ("Weight" Data..=) Prelude.<$> weight
+          ]
+      )
diff --git a/gen/Amazonka/GlobalAccelerator/Types/EndpointDescription.hs b/gen/Amazonka/GlobalAccelerator/Types/EndpointDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/EndpointDescription.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.GlobalAccelerator.Types.EndpointDescription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.EndpointDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types.HealthState
+import qualified Amazonka.Prelude as Prelude
+
+-- | A complex type for an endpoint. Each endpoint group can include one or
+-- more endpoints, such as load balancers.
+--
+-- /See:/ 'newEndpointDescription' smart constructor.
+data EndpointDescription = EndpointDescription'
+  { -- | Indicates whether client IP address preservation is enabled for an
+    -- endpoint. The value is true or false. The default value is true for new
+    -- accelerators.
+    --
+    -- If the value is set to true, the client\'s IP address is preserved in
+    -- the @X-Forwarded-For@ request header as traffic travels to applications
+    -- on the endpoint fronted by the accelerator.
+    --
+    -- Client IP address preservation is supported, in specific Amazon Web
+    -- Services Regions, for endpoints that are Application Load Balancers and
+    -- Amazon EC2 instances.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/preserve-client-ip-address.html Preserve client IP addresses in Global Accelerator>
+    -- in the /Global Accelerator Developer Guide/.
+    clientIPPreservationEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | An ID for the endpoint. If the endpoint is a Network Load Balancer or
+    -- Application Load Balancer, this is the Amazon Resource Name (ARN) of the
+    -- resource. If the endpoint is an Elastic IP address, this is the Elastic
+    -- IP address allocation ID. For Amazon EC2 instances, this is the EC2
+    -- instance ID.
+    --
+    -- An Application Load Balancer can be either internal or internet-facing.
+    endpointId :: Prelude.Maybe Prelude.Text,
+    -- | Returns a null result.
+    healthReason :: Prelude.Maybe Prelude.Text,
+    -- | The health status of the endpoint.
+    healthState :: Prelude.Maybe HealthState,
+    -- | The weight associated with the endpoint. When you add weights to
+    -- endpoints, you configure Global Accelerator to route traffic based on
+    -- proportions that you specify. For example, you might specify endpoint
+    -- weights of 4, 5, 5, and 6 (sum=20). The result is that 4\/20 of your
+    -- traffic, on average, is routed to the first endpoint, 5\/20 is routed
+    -- both to the second and third endpoints, and 6\/20 is routed to the last
+    -- endpoint. For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-endpoints-endpoint-weights.html Endpoint weights>
+    -- in the /Global Accelerator Developer Guide/.
+    weight :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EndpointDescription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientIPPreservationEnabled', 'endpointDescription_clientIPPreservationEnabled' - Indicates whether client IP address preservation is enabled for an
+-- endpoint. The value is true or false. The default value is true for new
+-- accelerators.
+--
+-- If the value is set to true, the client\'s IP address is preserved in
+-- the @X-Forwarded-For@ request header as traffic travels to applications
+-- on the endpoint fronted by the accelerator.
+--
+-- Client IP address preservation is supported, in specific Amazon Web
+-- Services Regions, for endpoints that are Application Load Balancers and
+-- Amazon EC2 instances.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/preserve-client-ip-address.html Preserve client IP addresses in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- 'endpointId', 'endpointDescription_endpointId' - An ID for the endpoint. If the endpoint is a Network Load Balancer or
+-- Application Load Balancer, this is the Amazon Resource Name (ARN) of the
+-- resource. If the endpoint is an Elastic IP address, this is the Elastic
+-- IP address allocation ID. For Amazon EC2 instances, this is the EC2
+-- instance ID.
+--
+-- An Application Load Balancer can be either internal or internet-facing.
+--
+-- 'healthReason', 'endpointDescription_healthReason' - Returns a null result.
+--
+-- 'healthState', 'endpointDescription_healthState' - The health status of the endpoint.
+--
+-- 'weight', 'endpointDescription_weight' - The weight associated with the endpoint. When you add weights to
+-- endpoints, you configure Global Accelerator to route traffic based on
+-- proportions that you specify. For example, you might specify endpoint
+-- weights of 4, 5, 5, and 6 (sum=20). The result is that 4\/20 of your
+-- traffic, on average, is routed to the first endpoint, 5\/20 is routed
+-- both to the second and third endpoints, and 6\/20 is routed to the last
+-- endpoint. For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-endpoints-endpoint-weights.html Endpoint weights>
+-- in the /Global Accelerator Developer Guide/.
+newEndpointDescription ::
+  EndpointDescription
+newEndpointDescription =
+  EndpointDescription'
+    { clientIPPreservationEnabled =
+        Prelude.Nothing,
+      endpointId = Prelude.Nothing,
+      healthReason = Prelude.Nothing,
+      healthState = Prelude.Nothing,
+      weight = Prelude.Nothing
+    }
+
+-- | Indicates whether client IP address preservation is enabled for an
+-- endpoint. The value is true or false. The default value is true for new
+-- accelerators.
+--
+-- If the value is set to true, the client\'s IP address is preserved in
+-- the @X-Forwarded-For@ request header as traffic travels to applications
+-- on the endpoint fronted by the accelerator.
+--
+-- Client IP address preservation is supported, in specific Amazon Web
+-- Services Regions, for endpoints that are Application Load Balancers and
+-- Amazon EC2 instances.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/preserve-client-ip-address.html Preserve client IP addresses in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+endpointDescription_clientIPPreservationEnabled :: Lens.Lens' EndpointDescription (Prelude.Maybe Prelude.Bool)
+endpointDescription_clientIPPreservationEnabled = Lens.lens (\EndpointDescription' {clientIPPreservationEnabled} -> clientIPPreservationEnabled) (\s@EndpointDescription' {} a -> s {clientIPPreservationEnabled = a} :: EndpointDescription)
+
+-- | An ID for the endpoint. If the endpoint is a Network Load Balancer or
+-- Application Load Balancer, this is the Amazon Resource Name (ARN) of the
+-- resource. If the endpoint is an Elastic IP address, this is the Elastic
+-- IP address allocation ID. For Amazon EC2 instances, this is the EC2
+-- instance ID.
+--
+-- An Application Load Balancer can be either internal or internet-facing.
+endpointDescription_endpointId :: Lens.Lens' EndpointDescription (Prelude.Maybe Prelude.Text)
+endpointDescription_endpointId = Lens.lens (\EndpointDescription' {endpointId} -> endpointId) (\s@EndpointDescription' {} a -> s {endpointId = a} :: EndpointDescription)
+
+-- | Returns a null result.
+endpointDescription_healthReason :: Lens.Lens' EndpointDescription (Prelude.Maybe Prelude.Text)
+endpointDescription_healthReason = Lens.lens (\EndpointDescription' {healthReason} -> healthReason) (\s@EndpointDescription' {} a -> s {healthReason = a} :: EndpointDescription)
+
+-- | The health status of the endpoint.
+endpointDescription_healthState :: Lens.Lens' EndpointDescription (Prelude.Maybe HealthState)
+endpointDescription_healthState = Lens.lens (\EndpointDescription' {healthState} -> healthState) (\s@EndpointDescription' {} a -> s {healthState = a} :: EndpointDescription)
+
+-- | The weight associated with the endpoint. When you add weights to
+-- endpoints, you configure Global Accelerator to route traffic based on
+-- proportions that you specify. For example, you might specify endpoint
+-- weights of 4, 5, 5, and 6 (sum=20). The result is that 4\/20 of your
+-- traffic, on average, is routed to the first endpoint, 5\/20 is routed
+-- both to the second and third endpoints, and 6\/20 is routed to the last
+-- endpoint. For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-endpoints-endpoint-weights.html Endpoint weights>
+-- in the /Global Accelerator Developer Guide/.
+endpointDescription_weight :: Lens.Lens' EndpointDescription (Prelude.Maybe Prelude.Natural)
+endpointDescription_weight = Lens.lens (\EndpointDescription' {weight} -> weight) (\s@EndpointDescription' {} a -> s {weight = a} :: EndpointDescription)
+
+instance Data.FromJSON EndpointDescription where
+  parseJSON =
+    Data.withObject
+      "EndpointDescription"
+      ( \x ->
+          EndpointDescription'
+            Prelude.<$> (x Data..:? "ClientIPPreservationEnabled")
+            Prelude.<*> (x Data..:? "EndpointId")
+            Prelude.<*> (x Data..:? "HealthReason")
+            Prelude.<*> (x Data..:? "HealthState")
+            Prelude.<*> (x Data..:? "Weight")
+      )
+
+instance Prelude.Hashable EndpointDescription where
+  hashWithSalt _salt EndpointDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientIPPreservationEnabled
+      `Prelude.hashWithSalt` endpointId
+      `Prelude.hashWithSalt` healthReason
+      `Prelude.hashWithSalt` healthState
+      `Prelude.hashWithSalt` weight
+
+instance Prelude.NFData EndpointDescription where
+  rnf EndpointDescription' {..} =
+    Prelude.rnf clientIPPreservationEnabled
+      `Prelude.seq` Prelude.rnf endpointId
+      `Prelude.seq` Prelude.rnf healthReason
+      `Prelude.seq` Prelude.rnf healthState
+      `Prelude.seq` Prelude.rnf weight
diff --git a/gen/Amazonka/GlobalAccelerator/Types/EndpointGroup.hs b/gen/Amazonka/GlobalAccelerator/Types/EndpointGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/EndpointGroup.hs
@@ -0,0 +1,260 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.Types.EndpointGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.EndpointGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types.EndpointDescription
+import Amazonka.GlobalAccelerator.Types.HealthCheckProtocol
+import Amazonka.GlobalAccelerator.Types.PortOverride
+import qualified Amazonka.Prelude as Prelude
+
+-- | A complex type for the endpoint group. An Amazon Web Services Region can
+-- have only one endpoint group for a specific listener.
+--
+-- /See:/ 'newEndpointGroup' smart constructor.
+data EndpointGroup = EndpointGroup'
+  { -- | The list of endpoint objects.
+    endpointDescriptions :: Prelude.Maybe [EndpointDescription],
+    -- | The Amazon Resource Name (ARN) of the endpoint group.
+    endpointGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services Region where the endpoint group is located.
+    endpointGroupRegion :: Prelude.Maybe Prelude.Text,
+    -- | The time—10 seconds or 30 seconds—between health checks for each
+    -- endpoint. The default value is 30.
+    healthCheckIntervalSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | If the protocol is HTTP\/S, then this value provides the ping path that
+    -- Global Accelerator uses for the destination on the endpoints for health
+    -- checks. The default is slash (\/).
+    healthCheckPath :: Prelude.Maybe Prelude.Text,
+    -- | The port that Global Accelerator uses to perform health checks on
+    -- endpoints that are part of this endpoint group.
+    --
+    -- The default port is the port for the listener that this endpoint group
+    -- is associated with. If the listener port is a list, Global Accelerator
+    -- uses the first specified port in the list of ports.
+    healthCheckPort :: Prelude.Maybe Prelude.Natural,
+    -- | The protocol that Global Accelerator uses to perform health checks on
+    -- endpoints that are part of this endpoint group. The default value is
+    -- TCP.
+    healthCheckProtocol :: Prelude.Maybe HealthCheckProtocol,
+    -- | Allows you to override the destination ports used to route traffic to an
+    -- endpoint. Using a port override lets you map a list of external
+    -- destination ports (that your users send traffic to) to a list of
+    -- internal destination ports that you want an application endpoint to
+    -- receive traffic on.
+    portOverrides :: Prelude.Maybe [PortOverride],
+    -- | The number of consecutive health checks required to set the state of a
+    -- healthy endpoint to unhealthy, or to set an unhealthy endpoint to
+    -- healthy. The default value is 3.
+    thresholdCount :: Prelude.Maybe Prelude.Natural,
+    -- | The percentage of traffic to send to an Amazon Web Services Region.
+    -- Additional traffic is distributed to other endpoint groups for this
+    -- listener.
+    --
+    -- Use this action to increase (dial up) or decrease (dial down) traffic to
+    -- a specific Region. The percentage is applied to the traffic that would
+    -- otherwise have been routed to the Region based on optimal routing.
+    --
+    -- The default value is 100.
+    trafficDialPercentage :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EndpointGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointDescriptions', 'endpointGroup_endpointDescriptions' - The list of endpoint objects.
+--
+-- 'endpointGroupArn', 'endpointGroup_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group.
+--
+-- 'endpointGroupRegion', 'endpointGroup_endpointGroupRegion' - The Amazon Web Services Region where the endpoint group is located.
+--
+-- 'healthCheckIntervalSeconds', 'endpointGroup_healthCheckIntervalSeconds' - The time—10 seconds or 30 seconds—between health checks for each
+-- endpoint. The default value is 30.
+--
+-- 'healthCheckPath', 'endpointGroup_healthCheckPath' - If the protocol is HTTP\/S, then this value provides the ping path that
+-- Global Accelerator uses for the destination on the endpoints for health
+-- checks. The default is slash (\/).
+--
+-- 'healthCheckPort', 'endpointGroup_healthCheckPort' - The port that Global Accelerator uses to perform health checks on
+-- endpoints that are part of this endpoint group.
+--
+-- The default port is the port for the listener that this endpoint group
+-- is associated with. If the listener port is a list, Global Accelerator
+-- uses the first specified port in the list of ports.
+--
+-- 'healthCheckProtocol', 'endpointGroup_healthCheckProtocol' - The protocol that Global Accelerator uses to perform health checks on
+-- endpoints that are part of this endpoint group. The default value is
+-- TCP.
+--
+-- 'portOverrides', 'endpointGroup_portOverrides' - Allows you to override the destination ports used to route traffic to an
+-- endpoint. Using a port override lets you map a list of external
+-- destination ports (that your users send traffic to) to a list of
+-- internal destination ports that you want an application endpoint to
+-- receive traffic on.
+--
+-- 'thresholdCount', 'endpointGroup_thresholdCount' - The number of consecutive health checks required to set the state of a
+-- healthy endpoint to unhealthy, or to set an unhealthy endpoint to
+-- healthy. The default value is 3.
+--
+-- 'trafficDialPercentage', 'endpointGroup_trafficDialPercentage' - The percentage of traffic to send to an Amazon Web Services Region.
+-- Additional traffic is distributed to other endpoint groups for this
+-- listener.
+--
+-- Use this action to increase (dial up) or decrease (dial down) traffic to
+-- a specific Region. The percentage is applied to the traffic that would
+-- otherwise have been routed to the Region based on optimal routing.
+--
+-- The default value is 100.
+newEndpointGroup ::
+  EndpointGroup
+newEndpointGroup =
+  EndpointGroup'
+    { endpointDescriptions =
+        Prelude.Nothing,
+      endpointGroupArn = Prelude.Nothing,
+      endpointGroupRegion = Prelude.Nothing,
+      healthCheckIntervalSeconds = Prelude.Nothing,
+      healthCheckPath = Prelude.Nothing,
+      healthCheckPort = Prelude.Nothing,
+      healthCheckProtocol = Prelude.Nothing,
+      portOverrides = Prelude.Nothing,
+      thresholdCount = Prelude.Nothing,
+      trafficDialPercentage = Prelude.Nothing
+    }
+
+-- | The list of endpoint objects.
+endpointGroup_endpointDescriptions :: Lens.Lens' EndpointGroup (Prelude.Maybe [EndpointDescription])
+endpointGroup_endpointDescriptions = Lens.lens (\EndpointGroup' {endpointDescriptions} -> endpointDescriptions) (\s@EndpointGroup' {} a -> s {endpointDescriptions = a} :: EndpointGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the endpoint group.
+endpointGroup_endpointGroupArn :: Lens.Lens' EndpointGroup (Prelude.Maybe Prelude.Text)
+endpointGroup_endpointGroupArn = Lens.lens (\EndpointGroup' {endpointGroupArn} -> endpointGroupArn) (\s@EndpointGroup' {} a -> s {endpointGroupArn = a} :: EndpointGroup)
+
+-- | The Amazon Web Services Region where the endpoint group is located.
+endpointGroup_endpointGroupRegion :: Lens.Lens' EndpointGroup (Prelude.Maybe Prelude.Text)
+endpointGroup_endpointGroupRegion = Lens.lens (\EndpointGroup' {endpointGroupRegion} -> endpointGroupRegion) (\s@EndpointGroup' {} a -> s {endpointGroupRegion = a} :: EndpointGroup)
+
+-- | The time—10 seconds or 30 seconds—between health checks for each
+-- endpoint. The default value is 30.
+endpointGroup_healthCheckIntervalSeconds :: Lens.Lens' EndpointGroup (Prelude.Maybe Prelude.Natural)
+endpointGroup_healthCheckIntervalSeconds = Lens.lens (\EndpointGroup' {healthCheckIntervalSeconds} -> healthCheckIntervalSeconds) (\s@EndpointGroup' {} a -> s {healthCheckIntervalSeconds = a} :: EndpointGroup)
+
+-- | If the protocol is HTTP\/S, then this value provides the ping path that
+-- Global Accelerator uses for the destination on the endpoints for health
+-- checks. The default is slash (\/).
+endpointGroup_healthCheckPath :: Lens.Lens' EndpointGroup (Prelude.Maybe Prelude.Text)
+endpointGroup_healthCheckPath = Lens.lens (\EndpointGroup' {healthCheckPath} -> healthCheckPath) (\s@EndpointGroup' {} a -> s {healthCheckPath = a} :: EndpointGroup)
+
+-- | The port that Global Accelerator uses to perform health checks on
+-- endpoints that are part of this endpoint group.
+--
+-- The default port is the port for the listener that this endpoint group
+-- is associated with. If the listener port is a list, Global Accelerator
+-- uses the first specified port in the list of ports.
+endpointGroup_healthCheckPort :: Lens.Lens' EndpointGroup (Prelude.Maybe Prelude.Natural)
+endpointGroup_healthCheckPort = Lens.lens (\EndpointGroup' {healthCheckPort} -> healthCheckPort) (\s@EndpointGroup' {} a -> s {healthCheckPort = a} :: EndpointGroup)
+
+-- | The protocol that Global Accelerator uses to perform health checks on
+-- endpoints that are part of this endpoint group. The default value is
+-- TCP.
+endpointGroup_healthCheckProtocol :: Lens.Lens' EndpointGroup (Prelude.Maybe HealthCheckProtocol)
+endpointGroup_healthCheckProtocol = Lens.lens (\EndpointGroup' {healthCheckProtocol} -> healthCheckProtocol) (\s@EndpointGroup' {} a -> s {healthCheckProtocol = a} :: EndpointGroup)
+
+-- | Allows you to override the destination ports used to route traffic to an
+-- endpoint. Using a port override lets you map a list of external
+-- destination ports (that your users send traffic to) to a list of
+-- internal destination ports that you want an application endpoint to
+-- receive traffic on.
+endpointGroup_portOverrides :: Lens.Lens' EndpointGroup (Prelude.Maybe [PortOverride])
+endpointGroup_portOverrides = Lens.lens (\EndpointGroup' {portOverrides} -> portOverrides) (\s@EndpointGroup' {} a -> s {portOverrides = a} :: EndpointGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of consecutive health checks required to set the state of a
+-- healthy endpoint to unhealthy, or to set an unhealthy endpoint to
+-- healthy. The default value is 3.
+endpointGroup_thresholdCount :: Lens.Lens' EndpointGroup (Prelude.Maybe Prelude.Natural)
+endpointGroup_thresholdCount = Lens.lens (\EndpointGroup' {thresholdCount} -> thresholdCount) (\s@EndpointGroup' {} a -> s {thresholdCount = a} :: EndpointGroup)
+
+-- | The percentage of traffic to send to an Amazon Web Services Region.
+-- Additional traffic is distributed to other endpoint groups for this
+-- listener.
+--
+-- Use this action to increase (dial up) or decrease (dial down) traffic to
+-- a specific Region. The percentage is applied to the traffic that would
+-- otherwise have been routed to the Region based on optimal routing.
+--
+-- The default value is 100.
+endpointGroup_trafficDialPercentage :: Lens.Lens' EndpointGroup (Prelude.Maybe Prelude.Double)
+endpointGroup_trafficDialPercentage = Lens.lens (\EndpointGroup' {trafficDialPercentage} -> trafficDialPercentage) (\s@EndpointGroup' {} a -> s {trafficDialPercentage = a} :: EndpointGroup)
+
+instance Data.FromJSON EndpointGroup where
+  parseJSON =
+    Data.withObject
+      "EndpointGroup"
+      ( \x ->
+          EndpointGroup'
+            Prelude.<$> ( x
+                            Data..:? "EndpointDescriptions"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "EndpointGroupArn")
+            Prelude.<*> (x Data..:? "EndpointGroupRegion")
+            Prelude.<*> (x Data..:? "HealthCheckIntervalSeconds")
+            Prelude.<*> (x Data..:? "HealthCheckPath")
+            Prelude.<*> (x Data..:? "HealthCheckPort")
+            Prelude.<*> (x Data..:? "HealthCheckProtocol")
+            Prelude.<*> (x Data..:? "PortOverrides" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "ThresholdCount")
+            Prelude.<*> (x Data..:? "TrafficDialPercentage")
+      )
+
+instance Prelude.Hashable EndpointGroup where
+  hashWithSalt _salt EndpointGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` endpointDescriptions
+      `Prelude.hashWithSalt` endpointGroupArn
+      `Prelude.hashWithSalt` endpointGroupRegion
+      `Prelude.hashWithSalt` healthCheckIntervalSeconds
+      `Prelude.hashWithSalt` healthCheckPath
+      `Prelude.hashWithSalt` healthCheckPort
+      `Prelude.hashWithSalt` healthCheckProtocol
+      `Prelude.hashWithSalt` portOverrides
+      `Prelude.hashWithSalt` thresholdCount
+      `Prelude.hashWithSalt` trafficDialPercentage
+
+instance Prelude.NFData EndpointGroup where
+  rnf EndpointGroup' {..} =
+    Prelude.rnf endpointDescriptions
+      `Prelude.seq` Prelude.rnf endpointGroupArn
+      `Prelude.seq` Prelude.rnf endpointGroupRegion
+      `Prelude.seq` Prelude.rnf healthCheckIntervalSeconds
+      `Prelude.seq` Prelude.rnf healthCheckPath
+      `Prelude.seq` Prelude.rnf healthCheckPort
+      `Prelude.seq` Prelude.rnf healthCheckProtocol
+      `Prelude.seq` Prelude.rnf portOverrides
+      `Prelude.seq` Prelude.rnf thresholdCount
+      `Prelude.seq` Prelude.rnf trafficDialPercentage
diff --git a/gen/Amazonka/GlobalAccelerator/Types/EndpointIdentifier.hs b/gen/Amazonka/GlobalAccelerator/Types/EndpointIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/EndpointIdentifier.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.GlobalAccelerator.Types.EndpointIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.EndpointIdentifier where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A complex type for an endpoint. Specifies information about the endpoint
+-- to remove from the endpoint group.
+--
+-- /See:/ 'newEndpointIdentifier' smart constructor.
+data EndpointIdentifier = EndpointIdentifier'
+  { -- | Indicates whether client IP address preservation is enabled for an
+    -- endpoint. The value is true or false.
+    --
+    -- If the value is set to true, the client\'s IP address is preserved in
+    -- the @X-Forwarded-For@ request header as traffic travels to applications
+    -- on the endpoint fronted by the accelerator.
+    clientIPPreservationEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | An ID for the endpoint. If the endpoint is a Network Load Balancer or
+    -- Application Load Balancer, this is the Amazon Resource Name (ARN) of the
+    -- resource. If the endpoint is an Elastic IP address, this is the Elastic
+    -- IP address allocation ID. For Amazon EC2 instances, this is the EC2
+    -- instance ID.
+    --
+    -- An Application Load Balancer can be either internal or internet-facing.
+    endpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EndpointIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientIPPreservationEnabled', 'endpointIdentifier_clientIPPreservationEnabled' - Indicates whether client IP address preservation is enabled for an
+-- endpoint. The value is true or false.
+--
+-- If the value is set to true, the client\'s IP address is preserved in
+-- the @X-Forwarded-For@ request header as traffic travels to applications
+-- on the endpoint fronted by the accelerator.
+--
+-- 'endpointId', 'endpointIdentifier_endpointId' - An ID for the endpoint. If the endpoint is a Network Load Balancer or
+-- Application Load Balancer, this is the Amazon Resource Name (ARN) of the
+-- resource. If the endpoint is an Elastic IP address, this is the Elastic
+-- IP address allocation ID. For Amazon EC2 instances, this is the EC2
+-- instance ID.
+--
+-- An Application Load Balancer can be either internal or internet-facing.
+newEndpointIdentifier ::
+  -- | 'endpointId'
+  Prelude.Text ->
+  EndpointIdentifier
+newEndpointIdentifier pEndpointId_ =
+  EndpointIdentifier'
+    { clientIPPreservationEnabled =
+        Prelude.Nothing,
+      endpointId = pEndpointId_
+    }
+
+-- | Indicates whether client IP address preservation is enabled for an
+-- endpoint. The value is true or false.
+--
+-- If the value is set to true, the client\'s IP address is preserved in
+-- the @X-Forwarded-For@ request header as traffic travels to applications
+-- on the endpoint fronted by the accelerator.
+endpointIdentifier_clientIPPreservationEnabled :: Lens.Lens' EndpointIdentifier (Prelude.Maybe Prelude.Bool)
+endpointIdentifier_clientIPPreservationEnabled = Lens.lens (\EndpointIdentifier' {clientIPPreservationEnabled} -> clientIPPreservationEnabled) (\s@EndpointIdentifier' {} a -> s {clientIPPreservationEnabled = a} :: EndpointIdentifier)
+
+-- | An ID for the endpoint. If the endpoint is a Network Load Balancer or
+-- Application Load Balancer, this is the Amazon Resource Name (ARN) of the
+-- resource. If the endpoint is an Elastic IP address, this is the Elastic
+-- IP address allocation ID. For Amazon EC2 instances, this is the EC2
+-- instance ID.
+--
+-- An Application Load Balancer can be either internal or internet-facing.
+endpointIdentifier_endpointId :: Lens.Lens' EndpointIdentifier Prelude.Text
+endpointIdentifier_endpointId = Lens.lens (\EndpointIdentifier' {endpointId} -> endpointId) (\s@EndpointIdentifier' {} a -> s {endpointId = a} :: EndpointIdentifier)
+
+instance Prelude.Hashable EndpointIdentifier where
+  hashWithSalt _salt EndpointIdentifier' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientIPPreservationEnabled
+      `Prelude.hashWithSalt` endpointId
+
+instance Prelude.NFData EndpointIdentifier where
+  rnf EndpointIdentifier' {..} =
+    Prelude.rnf clientIPPreservationEnabled
+      `Prelude.seq` Prelude.rnf endpointId
+
+instance Data.ToJSON EndpointIdentifier where
+  toJSON EndpointIdentifier' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientIPPreservationEnabled" Data..=)
+              Prelude.<$> clientIPPreservationEnabled,
+            Prelude.Just ("EndpointId" Data..= endpointId)
+          ]
+      )
diff --git a/gen/Amazonka/GlobalAccelerator/Types/HealthCheckProtocol.hs b/gen/Amazonka/GlobalAccelerator/Types/HealthCheckProtocol.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/HealthCheckProtocol.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.Types.HealthCheckProtocol
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.HealthCheckProtocol
+  ( HealthCheckProtocol
+      ( ..,
+        HealthCheckProtocol_HTTP,
+        HealthCheckProtocol_HTTPS,
+        HealthCheckProtocol_TCP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype HealthCheckProtocol = HealthCheckProtocol'
+  { fromHealthCheckProtocol ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern HealthCheckProtocol_HTTP :: HealthCheckProtocol
+pattern HealthCheckProtocol_HTTP = HealthCheckProtocol' "HTTP"
+
+pattern HealthCheckProtocol_HTTPS :: HealthCheckProtocol
+pattern HealthCheckProtocol_HTTPS = HealthCheckProtocol' "HTTPS"
+
+pattern HealthCheckProtocol_TCP :: HealthCheckProtocol
+pattern HealthCheckProtocol_TCP = HealthCheckProtocol' "TCP"
+
+{-# COMPLETE
+  HealthCheckProtocol_HTTP,
+  HealthCheckProtocol_HTTPS,
+  HealthCheckProtocol_TCP,
+  HealthCheckProtocol'
+  #-}
diff --git a/gen/Amazonka/GlobalAccelerator/Types/HealthState.hs b/gen/Amazonka/GlobalAccelerator/Types/HealthState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/HealthState.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.Types.HealthState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.HealthState
+  ( HealthState
+      ( ..,
+        HealthState_HEALTHY,
+        HealthState_INITIAL,
+        HealthState_UNHEALTHY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype HealthState = HealthState'
+  { fromHealthState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern HealthState_HEALTHY :: HealthState
+pattern HealthState_HEALTHY = HealthState' "HEALTHY"
+
+pattern HealthState_INITIAL :: HealthState
+pattern HealthState_INITIAL = HealthState' "INITIAL"
+
+pattern HealthState_UNHEALTHY :: HealthState
+pattern HealthState_UNHEALTHY = HealthState' "UNHEALTHY"
+
+{-# COMPLETE
+  HealthState_HEALTHY,
+  HealthState_INITIAL,
+  HealthState_UNHEALTHY,
+  HealthState'
+  #-}
diff --git a/gen/Amazonka/GlobalAccelerator/Types/IpAddressFamily.hs b/gen/Amazonka/GlobalAccelerator/Types/IpAddressFamily.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/IpAddressFamily.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.Types.IpAddressFamily
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.IpAddressFamily
+  ( IpAddressFamily
+      ( ..,
+        IpAddressFamily_IPv4,
+        IpAddressFamily_IPv6
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpAddressFamily = IpAddressFamily'
+  { fromIpAddressFamily ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpAddressFamily_IPv4 :: IpAddressFamily
+pattern IpAddressFamily_IPv4 = IpAddressFamily' "IPv4"
+
+pattern IpAddressFamily_IPv6 :: IpAddressFamily
+pattern IpAddressFamily_IPv6 = IpAddressFamily' "IPv6"
+
+{-# COMPLETE
+  IpAddressFamily_IPv4,
+  IpAddressFamily_IPv6,
+  IpAddressFamily'
+  #-}
diff --git a/gen/Amazonka/GlobalAccelerator/Types/IpAddressType.hs b/gen/Amazonka/GlobalAccelerator/Types/IpAddressType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/IpAddressType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.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.GlobalAccelerator.Types.IpAddressType
+  ( IpAddressType
+      ( ..,
+        IpAddressType_DUAL_STACK,
+        IpAddressType_IPV4
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+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_DUAL_STACK :: IpAddressType
+pattern IpAddressType_DUAL_STACK = IpAddressType' "DUAL_STACK"
+
+pattern IpAddressType_IPV4 :: IpAddressType
+pattern IpAddressType_IPV4 = IpAddressType' "IPV4"
+
+{-# COMPLETE
+  IpAddressType_DUAL_STACK,
+  IpAddressType_IPV4,
+  IpAddressType'
+  #-}
diff --git a/gen/Amazonka/GlobalAccelerator/Types/IpSet.hs b/gen/Amazonka/GlobalAccelerator/Types/IpSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/IpSet.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.GlobalAccelerator.Types.IpSet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.IpSet where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types.IpAddressFamily
+import qualified Amazonka.Prelude as Prelude
+
+-- | A complex type for the set of IP addresses for an accelerator.
+--
+-- /See:/ 'newIpSet' smart constructor.
+data IpSet = IpSet'
+  { -- | The types of IP addresses included in this IP set.
+    ipAddressFamily :: Prelude.Maybe IpAddressFamily,
+    -- | The array of IP addresses in the IP address set. An IP address set can
+    -- have a maximum of two IP addresses.
+    ipAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | IpFamily is deprecated and has been replaced by IpAddressFamily.
+    ipFamily :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipAddressFamily', 'ipSet_ipAddressFamily' - The types of IP addresses included in this IP set.
+--
+-- 'ipAddresses', 'ipSet_ipAddresses' - The array of IP addresses in the IP address set. An IP address set can
+-- have a maximum of two IP addresses.
+--
+-- 'ipFamily', 'ipSet_ipFamily' - IpFamily is deprecated and has been replaced by IpAddressFamily.
+newIpSet ::
+  IpSet
+newIpSet =
+  IpSet'
+    { ipAddressFamily = Prelude.Nothing,
+      ipAddresses = Prelude.Nothing,
+      ipFamily = Prelude.Nothing
+    }
+
+-- | The types of IP addresses included in this IP set.
+ipSet_ipAddressFamily :: Lens.Lens' IpSet (Prelude.Maybe IpAddressFamily)
+ipSet_ipAddressFamily = Lens.lens (\IpSet' {ipAddressFamily} -> ipAddressFamily) (\s@IpSet' {} a -> s {ipAddressFamily = a} :: IpSet)
+
+-- | The array of IP addresses in the IP address set. An IP address set can
+-- have a maximum of two IP addresses.
+ipSet_ipAddresses :: Lens.Lens' IpSet (Prelude.Maybe [Prelude.Text])
+ipSet_ipAddresses = Lens.lens (\IpSet' {ipAddresses} -> ipAddresses) (\s@IpSet' {} a -> s {ipAddresses = a} :: IpSet) Prelude.. Lens.mapping Lens.coerced
+
+-- | IpFamily is deprecated and has been replaced by IpAddressFamily.
+ipSet_ipFamily :: Lens.Lens' IpSet (Prelude.Maybe Prelude.Text)
+ipSet_ipFamily = Lens.lens (\IpSet' {ipFamily} -> ipFamily) (\s@IpSet' {} a -> s {ipFamily = a} :: IpSet)
+
+instance Data.FromJSON IpSet where
+  parseJSON =
+    Data.withObject
+      "IpSet"
+      ( \x ->
+          IpSet'
+            Prelude.<$> (x Data..:? "IpAddressFamily")
+            Prelude.<*> (x Data..:? "IpAddresses" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "IpFamily")
+      )
+
+instance Prelude.Hashable IpSet where
+  hashWithSalt _salt IpSet' {..} =
+    _salt
+      `Prelude.hashWithSalt` ipAddressFamily
+      `Prelude.hashWithSalt` ipAddresses
+      `Prelude.hashWithSalt` ipFamily
+
+instance Prelude.NFData IpSet where
+  rnf IpSet' {..} =
+    Prelude.rnf ipAddressFamily
+      `Prelude.seq` Prelude.rnf ipAddresses
+      `Prelude.seq` Prelude.rnf ipFamily
diff --git a/gen/Amazonka/GlobalAccelerator/Types/Listener.hs b/gen/Amazonka/GlobalAccelerator/Types/Listener.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/Listener.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.GlobalAccelerator.Types.Listener
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.Listener where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types.ClientAffinity
+import Amazonka.GlobalAccelerator.Types.PortRange
+import Amazonka.GlobalAccelerator.Types.Protocol
+import qualified Amazonka.Prelude as Prelude
+
+-- | A complex type for a listener.
+--
+-- /See:/ 'newListener' smart constructor.
+data Listener = Listener'
+  { -- | Client affinity lets you direct all requests from a user to the same
+    -- endpoint, if you have stateful applications, regardless of the port and
+    -- protocol of the client request. Client affinity gives you control over
+    -- whether to always route each client to the same specific endpoint.
+    --
+    -- Global Accelerator uses a consistent-flow hashing algorithm to choose
+    -- the optimal endpoint for a connection. If client affinity is @NONE@,
+    -- Global Accelerator uses the \"five-tuple\" (5-tuple) properties—source
+    -- IP address, source port, destination IP address, destination port, and
+    -- protocol—to select the hash value, and then chooses the best endpoint.
+    -- However, with this setting, if someone uses different ports to connect
+    -- to Global Accelerator, their connections might not be always routed to
+    -- the same endpoint because the hash value changes.
+    --
+    -- If you want a given client to always be routed to the same endpoint, set
+    -- client affinity to @SOURCE_IP@ instead. When you use the @SOURCE_IP@
+    -- setting, Global Accelerator uses the \"two-tuple\" (2-tuple) properties—
+    -- source (client) IP address and destination IP address—to select the hash
+    -- value.
+    --
+    -- The default value is @NONE@.
+    clientAffinity :: Prelude.Maybe ClientAffinity,
+    -- | The Amazon Resource Name (ARN) of the listener.
+    listenerArn :: Prelude.Maybe Prelude.Text,
+    -- | The list of port ranges for the connections from clients to the
+    -- accelerator.
+    portRanges :: Prelude.Maybe (Prelude.NonEmpty PortRange),
+    -- | The protocol for the connections from clients to the accelerator.
+    protocol :: Prelude.Maybe Protocol
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Listener' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientAffinity', 'listener_clientAffinity' - Client affinity lets you direct all requests from a user to the same
+-- endpoint, if you have stateful applications, regardless of the port and
+-- protocol of the client request. Client affinity gives you control over
+-- whether to always route each client to the same specific endpoint.
+--
+-- Global Accelerator uses a consistent-flow hashing algorithm to choose
+-- the optimal endpoint for a connection. If client affinity is @NONE@,
+-- Global Accelerator uses the \"five-tuple\" (5-tuple) properties—source
+-- IP address, source port, destination IP address, destination port, and
+-- protocol—to select the hash value, and then chooses the best endpoint.
+-- However, with this setting, if someone uses different ports to connect
+-- to Global Accelerator, their connections might not be always routed to
+-- the same endpoint because the hash value changes.
+--
+-- If you want a given client to always be routed to the same endpoint, set
+-- client affinity to @SOURCE_IP@ instead. When you use the @SOURCE_IP@
+-- setting, Global Accelerator uses the \"two-tuple\" (2-tuple) properties—
+-- source (client) IP address and destination IP address—to select the hash
+-- value.
+--
+-- The default value is @NONE@.
+--
+-- 'listenerArn', 'listener_listenerArn' - The Amazon Resource Name (ARN) of the listener.
+--
+-- 'portRanges', 'listener_portRanges' - The list of port ranges for the connections from clients to the
+-- accelerator.
+--
+-- 'protocol', 'listener_protocol' - The protocol for the connections from clients to the accelerator.
+newListener ::
+  Listener
+newListener =
+  Listener'
+    { clientAffinity = Prelude.Nothing,
+      listenerArn = Prelude.Nothing,
+      portRanges = Prelude.Nothing,
+      protocol = Prelude.Nothing
+    }
+
+-- | Client affinity lets you direct all requests from a user to the same
+-- endpoint, if you have stateful applications, regardless of the port and
+-- protocol of the client request. Client affinity gives you control over
+-- whether to always route each client to the same specific endpoint.
+--
+-- Global Accelerator uses a consistent-flow hashing algorithm to choose
+-- the optimal endpoint for a connection. If client affinity is @NONE@,
+-- Global Accelerator uses the \"five-tuple\" (5-tuple) properties—source
+-- IP address, source port, destination IP address, destination port, and
+-- protocol—to select the hash value, and then chooses the best endpoint.
+-- However, with this setting, if someone uses different ports to connect
+-- to Global Accelerator, their connections might not be always routed to
+-- the same endpoint because the hash value changes.
+--
+-- If you want a given client to always be routed to the same endpoint, set
+-- client affinity to @SOURCE_IP@ instead. When you use the @SOURCE_IP@
+-- setting, Global Accelerator uses the \"two-tuple\" (2-tuple) properties—
+-- source (client) IP address and destination IP address—to select the hash
+-- value.
+--
+-- The default value is @NONE@.
+listener_clientAffinity :: Lens.Lens' Listener (Prelude.Maybe ClientAffinity)
+listener_clientAffinity = Lens.lens (\Listener' {clientAffinity} -> clientAffinity) (\s@Listener' {} a -> s {clientAffinity = a} :: Listener)
+
+-- | The Amazon Resource Name (ARN) of the listener.
+listener_listenerArn :: Lens.Lens' Listener (Prelude.Maybe Prelude.Text)
+listener_listenerArn = Lens.lens (\Listener' {listenerArn} -> listenerArn) (\s@Listener' {} a -> s {listenerArn = a} :: Listener)
+
+-- | The list of port ranges for the connections from clients to the
+-- accelerator.
+listener_portRanges :: Lens.Lens' Listener (Prelude.Maybe (Prelude.NonEmpty PortRange))
+listener_portRanges = Lens.lens (\Listener' {portRanges} -> portRanges) (\s@Listener' {} a -> s {portRanges = a} :: Listener) Prelude.. Lens.mapping Lens.coerced
+
+-- | The protocol for the connections from clients to the accelerator.
+listener_protocol :: Lens.Lens' Listener (Prelude.Maybe Protocol)
+listener_protocol = Lens.lens (\Listener' {protocol} -> protocol) (\s@Listener' {} a -> s {protocol = a} :: Listener)
+
+instance Data.FromJSON Listener where
+  parseJSON =
+    Data.withObject
+      "Listener"
+      ( \x ->
+          Listener'
+            Prelude.<$> (x Data..:? "ClientAffinity")
+            Prelude.<*> (x Data..:? "ListenerArn")
+            Prelude.<*> (x Data..:? "PortRanges")
+            Prelude.<*> (x Data..:? "Protocol")
+      )
+
+instance Prelude.Hashable Listener where
+  hashWithSalt _salt Listener' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientAffinity
+      `Prelude.hashWithSalt` listenerArn
+      `Prelude.hashWithSalt` portRanges
+      `Prelude.hashWithSalt` protocol
+
+instance Prelude.NFData Listener where
+  rnf Listener' {..} =
+    Prelude.rnf clientAffinity
+      `Prelude.seq` Prelude.rnf listenerArn
+      `Prelude.seq` Prelude.rnf portRanges
+      `Prelude.seq` Prelude.rnf protocol
diff --git a/gen/Amazonka/GlobalAccelerator/Types/PortMapping.hs b/gen/Amazonka/GlobalAccelerator/Types/PortMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/PortMapping.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.GlobalAccelerator.Types.PortMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.PortMapping where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types.CustomRoutingDestinationTrafficState
+import Amazonka.GlobalAccelerator.Types.CustomRoutingProtocol
+import Amazonka.GlobalAccelerator.Types.SocketAddress
+import qualified Amazonka.Prelude as Prelude
+
+-- | Returns the ports and associated IP addresses and ports of Amazon EC2
+-- instances in your virtual private cloud (VPC) subnets. Custom routing is
+-- a port mapping protocol in Global Accelerator that statically associates
+-- port ranges with VPC subnets, which allows Global Accelerator to route
+-- to specific instances and ports within one or more subnets.
+--
+-- /See:/ 'newPortMapping' smart constructor.
+data PortMapping = PortMapping'
+  { -- | The accelerator port.
+    acceleratorPort :: Prelude.Maybe Prelude.Natural,
+    -- | The EC2 instance IP address and port number in the virtual private cloud
+    -- (VPC) subnet.
+    destinationSocketAddress :: Prelude.Maybe SocketAddress,
+    -- | Indicates whether or not a port mapping destination can receive traffic.
+    -- The value is either ALLOW, if traffic is allowed to the destination, or
+    -- DENY, if traffic is not allowed to the destination.
+    destinationTrafficState :: Prelude.Maybe CustomRoutingDestinationTrafficState,
+    -- | The Amazon Resource Name (ARN) of the endpoint group.
+    endpointGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The IP address of the VPC subnet (the subnet ID).
+    endpointId :: Prelude.Maybe Prelude.Text,
+    -- | The protocols supported by the endpoint group.
+    protocols :: Prelude.Maybe (Prelude.NonEmpty CustomRoutingProtocol)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PortMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorPort', 'portMapping_acceleratorPort' - The accelerator port.
+--
+-- 'destinationSocketAddress', 'portMapping_destinationSocketAddress' - The EC2 instance IP address and port number in the virtual private cloud
+-- (VPC) subnet.
+--
+-- 'destinationTrafficState', 'portMapping_destinationTrafficState' - Indicates whether or not a port mapping destination can receive traffic.
+-- The value is either ALLOW, if traffic is allowed to the destination, or
+-- DENY, if traffic is not allowed to the destination.
+--
+-- 'endpointGroupArn', 'portMapping_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group.
+--
+-- 'endpointId', 'portMapping_endpointId' - The IP address of the VPC subnet (the subnet ID).
+--
+-- 'protocols', 'portMapping_protocols' - The protocols supported by the endpoint group.
+newPortMapping ::
+  PortMapping
+newPortMapping =
+  PortMapping'
+    { acceleratorPort = Prelude.Nothing,
+      destinationSocketAddress = Prelude.Nothing,
+      destinationTrafficState = Prelude.Nothing,
+      endpointGroupArn = Prelude.Nothing,
+      endpointId = Prelude.Nothing,
+      protocols = Prelude.Nothing
+    }
+
+-- | The accelerator port.
+portMapping_acceleratorPort :: Lens.Lens' PortMapping (Prelude.Maybe Prelude.Natural)
+portMapping_acceleratorPort = Lens.lens (\PortMapping' {acceleratorPort} -> acceleratorPort) (\s@PortMapping' {} a -> s {acceleratorPort = a} :: PortMapping)
+
+-- | The EC2 instance IP address and port number in the virtual private cloud
+-- (VPC) subnet.
+portMapping_destinationSocketAddress :: Lens.Lens' PortMapping (Prelude.Maybe SocketAddress)
+portMapping_destinationSocketAddress = Lens.lens (\PortMapping' {destinationSocketAddress} -> destinationSocketAddress) (\s@PortMapping' {} a -> s {destinationSocketAddress = a} :: PortMapping)
+
+-- | Indicates whether or not a port mapping destination can receive traffic.
+-- The value is either ALLOW, if traffic is allowed to the destination, or
+-- DENY, if traffic is not allowed to the destination.
+portMapping_destinationTrafficState :: Lens.Lens' PortMapping (Prelude.Maybe CustomRoutingDestinationTrafficState)
+portMapping_destinationTrafficState = Lens.lens (\PortMapping' {destinationTrafficState} -> destinationTrafficState) (\s@PortMapping' {} a -> s {destinationTrafficState = a} :: PortMapping)
+
+-- | The Amazon Resource Name (ARN) of the endpoint group.
+portMapping_endpointGroupArn :: Lens.Lens' PortMapping (Prelude.Maybe Prelude.Text)
+portMapping_endpointGroupArn = Lens.lens (\PortMapping' {endpointGroupArn} -> endpointGroupArn) (\s@PortMapping' {} a -> s {endpointGroupArn = a} :: PortMapping)
+
+-- | The IP address of the VPC subnet (the subnet ID).
+portMapping_endpointId :: Lens.Lens' PortMapping (Prelude.Maybe Prelude.Text)
+portMapping_endpointId = Lens.lens (\PortMapping' {endpointId} -> endpointId) (\s@PortMapping' {} a -> s {endpointId = a} :: PortMapping)
+
+-- | The protocols supported by the endpoint group.
+portMapping_protocols :: Lens.Lens' PortMapping (Prelude.Maybe (Prelude.NonEmpty CustomRoutingProtocol))
+portMapping_protocols = Lens.lens (\PortMapping' {protocols} -> protocols) (\s@PortMapping' {} a -> s {protocols = a} :: PortMapping) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON PortMapping where
+  parseJSON =
+    Data.withObject
+      "PortMapping"
+      ( \x ->
+          PortMapping'
+            Prelude.<$> (x Data..:? "AcceleratorPort")
+            Prelude.<*> (x Data..:? "DestinationSocketAddress")
+            Prelude.<*> (x Data..:? "DestinationTrafficState")
+            Prelude.<*> (x Data..:? "EndpointGroupArn")
+            Prelude.<*> (x Data..:? "EndpointId")
+            Prelude.<*> (x Data..:? "Protocols")
+      )
+
+instance Prelude.Hashable PortMapping where
+  hashWithSalt _salt PortMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` acceleratorPort
+      `Prelude.hashWithSalt` destinationSocketAddress
+      `Prelude.hashWithSalt` destinationTrafficState
+      `Prelude.hashWithSalt` endpointGroupArn
+      `Prelude.hashWithSalt` endpointId
+      `Prelude.hashWithSalt` protocols
+
+instance Prelude.NFData PortMapping where
+  rnf PortMapping' {..} =
+    Prelude.rnf acceleratorPort
+      `Prelude.seq` Prelude.rnf destinationSocketAddress
+      `Prelude.seq` Prelude.rnf destinationTrafficState
+      `Prelude.seq` Prelude.rnf endpointGroupArn
+      `Prelude.seq` Prelude.rnf endpointId
+      `Prelude.seq` Prelude.rnf protocols
diff --git a/gen/Amazonka/GlobalAccelerator/Types/PortOverride.hs b/gen/Amazonka/GlobalAccelerator/Types/PortOverride.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/PortOverride.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.GlobalAccelerator.Types.PortOverride
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.PortOverride where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Override specific listener ports used to route traffic to endpoints that
+-- are part of an endpoint group. For example, you can create a port
+-- override in which the listener receives user traffic on ports 80 and
+-- 443, but your accelerator routes that traffic to ports 1080 and 1443,
+-- respectively, on the endpoints.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-endpoint-groups-port-override.html Overriding listener ports>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- /See:/ 'newPortOverride' smart constructor.
+data PortOverride = PortOverride'
+  { -- | The endpoint port that you want a listener port to be mapped to. This is
+    -- the port on the endpoint, such as the Application Load Balancer or
+    -- Amazon EC2 instance.
+    endpointPort :: Prelude.Maybe Prelude.Natural,
+    -- | The listener port that you want to map to a specific endpoint port. This
+    -- is the port that user traffic arrives to the Global Accelerator on.
+    listenerPort :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PortOverride' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointPort', 'portOverride_endpointPort' - The endpoint port that you want a listener port to be mapped to. This is
+-- the port on the endpoint, such as the Application Load Balancer or
+-- Amazon EC2 instance.
+--
+-- 'listenerPort', 'portOverride_listenerPort' - The listener port that you want to map to a specific endpoint port. This
+-- is the port that user traffic arrives to the Global Accelerator on.
+newPortOverride ::
+  PortOverride
+newPortOverride =
+  PortOverride'
+    { endpointPort = Prelude.Nothing,
+      listenerPort = Prelude.Nothing
+    }
+
+-- | The endpoint port that you want a listener port to be mapped to. This is
+-- the port on the endpoint, such as the Application Load Balancer or
+-- Amazon EC2 instance.
+portOverride_endpointPort :: Lens.Lens' PortOverride (Prelude.Maybe Prelude.Natural)
+portOverride_endpointPort = Lens.lens (\PortOverride' {endpointPort} -> endpointPort) (\s@PortOverride' {} a -> s {endpointPort = a} :: PortOverride)
+
+-- | The listener port that you want to map to a specific endpoint port. This
+-- is the port that user traffic arrives to the Global Accelerator on.
+portOverride_listenerPort :: Lens.Lens' PortOverride (Prelude.Maybe Prelude.Natural)
+portOverride_listenerPort = Lens.lens (\PortOverride' {listenerPort} -> listenerPort) (\s@PortOverride' {} a -> s {listenerPort = a} :: PortOverride)
+
+instance Data.FromJSON PortOverride where
+  parseJSON =
+    Data.withObject
+      "PortOverride"
+      ( \x ->
+          PortOverride'
+            Prelude.<$> (x Data..:? "EndpointPort")
+            Prelude.<*> (x Data..:? "ListenerPort")
+      )
+
+instance Prelude.Hashable PortOverride where
+  hashWithSalt _salt PortOverride' {..} =
+    _salt
+      `Prelude.hashWithSalt` endpointPort
+      `Prelude.hashWithSalt` listenerPort
+
+instance Prelude.NFData PortOverride where
+  rnf PortOverride' {..} =
+    Prelude.rnf endpointPort
+      `Prelude.seq` Prelude.rnf listenerPort
+
+instance Data.ToJSON PortOverride where
+  toJSON PortOverride' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EndpointPort" Data..=) Prelude.<$> endpointPort,
+            ("ListenerPort" Data..=) Prelude.<$> listenerPort
+          ]
+      )
diff --git a/gen/Amazonka/GlobalAccelerator/Types/PortRange.hs b/gen/Amazonka/GlobalAccelerator/Types/PortRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/PortRange.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.GlobalAccelerator.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.GlobalAccelerator.Types.PortRange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A complex type for a range of ports for a listener.
+--
+-- /See:/ 'newPortRange' smart constructor.
+data PortRange = PortRange'
+  { -- | The first port in the range of ports, inclusive.
+    fromPort :: Prelude.Maybe Prelude.Natural,
+    -- | The last port in the range of ports, inclusive.
+    toPort :: Prelude.Maybe Prelude.Natural
+  }
+  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:
+--
+-- 'fromPort', 'portRange_fromPort' - The first port in the range of ports, inclusive.
+--
+-- 'toPort', 'portRange_toPort' - The last port in the range of ports, inclusive.
+newPortRange ::
+  PortRange
+newPortRange =
+  PortRange'
+    { fromPort = Prelude.Nothing,
+      toPort = Prelude.Nothing
+    }
+
+-- | The first port in the range of ports, inclusive.
+portRange_fromPort :: Lens.Lens' PortRange (Prelude.Maybe Prelude.Natural)
+portRange_fromPort = Lens.lens (\PortRange' {fromPort} -> fromPort) (\s@PortRange' {} a -> s {fromPort = a} :: PortRange)
+
+-- | The last port in the range of ports, inclusive.
+portRange_toPort :: Lens.Lens' PortRange (Prelude.Maybe Prelude.Natural)
+portRange_toPort = Lens.lens (\PortRange' {toPort} -> toPort) (\s@PortRange' {} a -> s {toPort = a} :: PortRange)
+
+instance Data.FromJSON PortRange where
+  parseJSON =
+    Data.withObject
+      "PortRange"
+      ( \x ->
+          PortRange'
+            Prelude.<$> (x Data..:? "FromPort")
+            Prelude.<*> (x Data..:? "ToPort")
+      )
+
+instance Prelude.Hashable PortRange where
+  hashWithSalt _salt PortRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` fromPort
+      `Prelude.hashWithSalt` toPort
+
+instance Prelude.NFData PortRange where
+  rnf PortRange' {..} =
+    Prelude.rnf fromPort
+      `Prelude.seq` Prelude.rnf toPort
+
+instance Data.ToJSON PortRange where
+  toJSON PortRange' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FromPort" Data..=) Prelude.<$> fromPort,
+            ("ToPort" Data..=) Prelude.<$> toPort
+          ]
+      )
diff --git a/gen/Amazonka/GlobalAccelerator/Types/Protocol.hs b/gen/Amazonka/GlobalAccelerator/Types/Protocol.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/Protocol.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.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.GlobalAccelerator.Types.Protocol
+  ( Protocol
+      ( ..,
+        Protocol_TCP,
+        Protocol_UDP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+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/GlobalAccelerator/Types/SocketAddress.hs b/gen/Amazonka/GlobalAccelerator/Types/SocketAddress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/SocketAddress.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.GlobalAccelerator.Types.SocketAddress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.GlobalAccelerator.Types.SocketAddress where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An IP address\/port combination.
+--
+-- /See:/ 'newSocketAddress' smart constructor.
+data SocketAddress = SocketAddress'
+  { -- | The IP address for the socket address.
+    ipAddress :: Prelude.Maybe Prelude.Text,
+    -- | The port for the socket address.
+    port :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SocketAddress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipAddress', 'socketAddress_ipAddress' - The IP address for the socket address.
+--
+-- 'port', 'socketAddress_port' - The port for the socket address.
+newSocketAddress ::
+  SocketAddress
+newSocketAddress =
+  SocketAddress'
+    { ipAddress = Prelude.Nothing,
+      port = Prelude.Nothing
+    }
+
+-- | The IP address for the socket address.
+socketAddress_ipAddress :: Lens.Lens' SocketAddress (Prelude.Maybe Prelude.Text)
+socketAddress_ipAddress = Lens.lens (\SocketAddress' {ipAddress} -> ipAddress) (\s@SocketAddress' {} a -> s {ipAddress = a} :: SocketAddress)
+
+-- | The port for the socket address.
+socketAddress_port :: Lens.Lens' SocketAddress (Prelude.Maybe Prelude.Natural)
+socketAddress_port = Lens.lens (\SocketAddress' {port} -> port) (\s@SocketAddress' {} a -> s {port = a} :: SocketAddress)
+
+instance Data.FromJSON SocketAddress where
+  parseJSON =
+    Data.withObject
+      "SocketAddress"
+      ( \x ->
+          SocketAddress'
+            Prelude.<$> (x Data..:? "IpAddress")
+            Prelude.<*> (x Data..:? "Port")
+      )
+
+instance Prelude.Hashable SocketAddress where
+  hashWithSalt _salt SocketAddress' {..} =
+    _salt
+      `Prelude.hashWithSalt` ipAddress
+      `Prelude.hashWithSalt` port
+
+instance Prelude.NFData SocketAddress where
+  rnf SocketAddress' {..} =
+    Prelude.rnf ipAddress
+      `Prelude.seq` Prelude.rnf port
diff --git a/gen/Amazonka/GlobalAccelerator/Types/Tag.hs b/gen/Amazonka/GlobalAccelerator/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Types/Tag.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.GlobalAccelerator.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.GlobalAccelerator.Types.Tag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A complex type that contains a @Tag@ key and @Tag@ value.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | A string that contains a @Tag@ key.
+    key :: Prelude.Text,
+    -- | A string that contains a @Tag@ value.
+    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' - A string that contains a @Tag@ key.
+--
+-- 'value', 'tag_value' - A string that contains a @Tag@ value.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag' {key = pKey_, value = pValue_}
+
+-- | A string that contains a @Tag@ key.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+-- | A string that contains a @Tag@ value.
+tag_value :: Lens.Lens' Tag Prelude.Text
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag)
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \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.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Key" Data..= key),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/GlobalAccelerator/UntagResource.hs b/gen/Amazonka/GlobalAccelerator/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/UntagResource.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.GlobalAccelerator.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Remove tags from a Global Accelerator resource. When you specify a tag
+-- key, the action removes both that key and its associated value. The
+-- operation succeeds even if you attempt to remove tags from an
+-- accelerator that was already removed.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/tagging-in-global-accelerator.html Tagging in Global Accelerator>
+-- in the /Global Accelerator Developer Guide/.
+module Amazonka.GlobalAccelerator.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) of the Global Accelerator resource to
+    -- remove tags from. An ARN uniquely identifies a resource.
+    resourceArn :: Prelude.Text,
+    -- | The tag key pairs that you want to remove from the specified resources.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the Global Accelerator resource to
+-- remove tags from. An ARN uniquely identifies a resource.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tag key pairs that you want to remove from the specified resources.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the Global Accelerator resource to
+-- remove tags from. An ARN uniquely identifies a resource.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The tag key pairs that you want to remove from the specified resources.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.UntagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UntagResource where
+  toJSON UntagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceArn" Data..= resourceArn),
+            Prelude.Just ("TagKeys" Data..= tagKeys)
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UntagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/UpdateAccelerator.hs b/gen/Amazonka/GlobalAccelerator/UpdateAccelerator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/UpdateAccelerator.hs
@@ -0,0 +1,239 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GlobalAccelerator.UpdateAccelerator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update an accelerator.
+--
+-- Global Accelerator is a global service that supports endpoints in
+-- multiple Amazon Web Services Regions but you must specify the US West
+-- (Oregon) Region to create, update, or otherwise work with accelerators.
+-- That is, for example, specify @--region us-west-2@ on AWS CLI commands.
+module Amazonka.GlobalAccelerator.UpdateAccelerator
+  ( -- * Creating a Request
+    UpdateAccelerator (..),
+    newUpdateAccelerator,
+
+    -- * Request Lenses
+    updateAccelerator_enabled,
+    updateAccelerator_ipAddressType,
+    updateAccelerator_name,
+    updateAccelerator_acceleratorArn,
+
+    -- * Destructuring the Response
+    UpdateAcceleratorResponse (..),
+    newUpdateAcceleratorResponse,
+
+    -- * Response Lenses
+    updateAcceleratorResponse_accelerator,
+    updateAcceleratorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateAccelerator' smart constructor.
+data UpdateAccelerator = UpdateAccelerator'
+  { -- | Indicates whether an accelerator is enabled. The value is true or false.
+    -- The default value is true.
+    --
+    -- If the value is set to true, the accelerator cannot be deleted. If set
+    -- to false, the accelerator can be deleted.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The IP address type that an accelerator supports. For a standard
+    -- accelerator, the value can be IPV4 or DUAL_STACK.
+    ipAddressType :: Prelude.Maybe IpAddressType,
+    -- | The name of the accelerator. The name can have a maximum of 64
+    -- characters, must contain only alphanumeric characters, periods (.), or
+    -- hyphens (-), and must not begin or end with a hyphen or period.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the accelerator to update.
+    acceleratorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAccelerator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateAccelerator_enabled' - Indicates whether an accelerator is enabled. The value is true or false.
+-- The default value is true.
+--
+-- If the value is set to true, the accelerator cannot be deleted. If set
+-- to false, the accelerator can be deleted.
+--
+-- 'ipAddressType', 'updateAccelerator_ipAddressType' - The IP address type that an accelerator supports. For a standard
+-- accelerator, the value can be IPV4 or DUAL_STACK.
+--
+-- 'name', 'updateAccelerator_name' - The name of the accelerator. The name can have a maximum of 64
+-- characters, must contain only alphanumeric characters, periods (.), or
+-- hyphens (-), and must not begin or end with a hyphen or period.
+--
+-- 'acceleratorArn', 'updateAccelerator_acceleratorArn' - The Amazon Resource Name (ARN) of the accelerator to update.
+newUpdateAccelerator ::
+  -- | 'acceleratorArn'
+  Prelude.Text ->
+  UpdateAccelerator
+newUpdateAccelerator pAcceleratorArn_ =
+  UpdateAccelerator'
+    { enabled = Prelude.Nothing,
+      ipAddressType = Prelude.Nothing,
+      name = Prelude.Nothing,
+      acceleratorArn = pAcceleratorArn_
+    }
+
+-- | Indicates whether an accelerator is enabled. The value is true or false.
+-- The default value is true.
+--
+-- If the value is set to true, the accelerator cannot be deleted. If set
+-- to false, the accelerator can be deleted.
+updateAccelerator_enabled :: Lens.Lens' UpdateAccelerator (Prelude.Maybe Prelude.Bool)
+updateAccelerator_enabled = Lens.lens (\UpdateAccelerator' {enabled} -> enabled) (\s@UpdateAccelerator' {} a -> s {enabled = a} :: UpdateAccelerator)
+
+-- | The IP address type that an accelerator supports. For a standard
+-- accelerator, the value can be IPV4 or DUAL_STACK.
+updateAccelerator_ipAddressType :: Lens.Lens' UpdateAccelerator (Prelude.Maybe IpAddressType)
+updateAccelerator_ipAddressType = Lens.lens (\UpdateAccelerator' {ipAddressType} -> ipAddressType) (\s@UpdateAccelerator' {} a -> s {ipAddressType = a} :: UpdateAccelerator)
+
+-- | The name of the accelerator. The name can have a maximum of 64
+-- characters, must contain only alphanumeric characters, periods (.), or
+-- hyphens (-), and must not begin or end with a hyphen or period.
+updateAccelerator_name :: Lens.Lens' UpdateAccelerator (Prelude.Maybe Prelude.Text)
+updateAccelerator_name = Lens.lens (\UpdateAccelerator' {name} -> name) (\s@UpdateAccelerator' {} a -> s {name = a} :: UpdateAccelerator)
+
+-- | The Amazon Resource Name (ARN) of the accelerator to update.
+updateAccelerator_acceleratorArn :: Lens.Lens' UpdateAccelerator Prelude.Text
+updateAccelerator_acceleratorArn = Lens.lens (\UpdateAccelerator' {acceleratorArn} -> acceleratorArn) (\s@UpdateAccelerator' {} a -> s {acceleratorArn = a} :: UpdateAccelerator)
+
+instance Core.AWSRequest UpdateAccelerator where
+  type
+    AWSResponse UpdateAccelerator =
+      UpdateAcceleratorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAcceleratorResponse'
+            Prelude.<$> (x Data..?> "Accelerator")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAccelerator where
+  hashWithSalt _salt UpdateAccelerator' {..} =
+    _salt
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` ipAddressType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` acceleratorArn
+
+instance Prelude.NFData UpdateAccelerator where
+  rnf UpdateAccelerator' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf ipAddressType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf acceleratorArn
+
+instance Data.ToHeaders UpdateAccelerator where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.UpdateAccelerator" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateAccelerator where
+  toJSON UpdateAccelerator' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Enabled" Data..=) Prelude.<$> enabled,
+            ("IpAddressType" Data..=) Prelude.<$> ipAddressType,
+            ("Name" Data..=) Prelude.<$> name,
+            Prelude.Just
+              ("AcceleratorArn" Data..= acceleratorArn)
+          ]
+      )
+
+instance Data.ToPath UpdateAccelerator where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateAccelerator where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAcceleratorResponse' smart constructor.
+data UpdateAcceleratorResponse = UpdateAcceleratorResponse'
+  { -- | Information about the updated accelerator.
+    accelerator :: Prelude.Maybe Accelerator,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAcceleratorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accelerator', 'updateAcceleratorResponse_accelerator' - Information about the updated accelerator.
+--
+-- 'httpStatus', 'updateAcceleratorResponse_httpStatus' - The response's http status code.
+newUpdateAcceleratorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAcceleratorResponse
+newUpdateAcceleratorResponse pHttpStatus_ =
+  UpdateAcceleratorResponse'
+    { accelerator =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the updated accelerator.
+updateAcceleratorResponse_accelerator :: Lens.Lens' UpdateAcceleratorResponse (Prelude.Maybe Accelerator)
+updateAcceleratorResponse_accelerator = Lens.lens (\UpdateAcceleratorResponse' {accelerator} -> accelerator) (\s@UpdateAcceleratorResponse' {} a -> s {accelerator = a} :: UpdateAcceleratorResponse)
+
+-- | The response's http status code.
+updateAcceleratorResponse_httpStatus :: Lens.Lens' UpdateAcceleratorResponse Prelude.Int
+updateAcceleratorResponse_httpStatus = Lens.lens (\UpdateAcceleratorResponse' {httpStatus} -> httpStatus) (\s@UpdateAcceleratorResponse' {} a -> s {httpStatus = a} :: UpdateAcceleratorResponse)
+
+instance Prelude.NFData UpdateAcceleratorResponse where
+  rnf UpdateAcceleratorResponse' {..} =
+    Prelude.rnf accelerator
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/UpdateAcceleratorAttributes.hs b/gen/Amazonka/GlobalAccelerator/UpdateAcceleratorAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/UpdateAcceleratorAttributes.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.GlobalAccelerator.UpdateAcceleratorAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update the attributes for an accelerator.
+module Amazonka.GlobalAccelerator.UpdateAcceleratorAttributes
+  ( -- * Creating a Request
+    UpdateAcceleratorAttributes (..),
+    newUpdateAcceleratorAttributes,
+
+    -- * Request Lenses
+    updateAcceleratorAttributes_flowLogsEnabled,
+    updateAcceleratorAttributes_flowLogsS3Bucket,
+    updateAcceleratorAttributes_flowLogsS3Prefix,
+    updateAcceleratorAttributes_acceleratorArn,
+
+    -- * Destructuring the Response
+    UpdateAcceleratorAttributesResponse (..),
+    newUpdateAcceleratorAttributesResponse,
+
+    -- * Response Lenses
+    updateAcceleratorAttributesResponse_acceleratorAttributes,
+    updateAcceleratorAttributesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateAcceleratorAttributes' smart constructor.
+data UpdateAcceleratorAttributes = UpdateAcceleratorAttributes'
+  { -- | Update whether flow logs are enabled. The default value is false. If the
+    -- value is true, @FlowLogsS3Bucket@ and @FlowLogsS3Prefix@ must be
+    -- specified.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/monitoring-global-accelerator.flow-logs.html Flow Logs>
+    -- in the /Global Accelerator Developer Guide/.
+    flowLogsEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the Amazon S3 bucket for the flow logs. Attribute is
+    -- required if @FlowLogsEnabled@ is @true@. The bucket must exist and have
+    -- a bucket policy that grants Global Accelerator permission to write to
+    -- the bucket.
+    flowLogsS3Bucket :: Prelude.Maybe Prelude.Text,
+    -- | Update the prefix for the location in the Amazon S3 bucket for the flow
+    -- logs. Attribute is required if @FlowLogsEnabled@ is @true@.
+    --
+    -- If you specify slash (\/) for the S3 bucket prefix, the log file bucket
+    -- folder structure will include a double slash (\/\/), like the following:
+    --
+    -- s3-bucket_name\/\/AWSLogs\/aws_account_id
+    flowLogsS3Prefix :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the accelerator that you want to
+    -- update.
+    acceleratorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAcceleratorAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'flowLogsEnabled', 'updateAcceleratorAttributes_flowLogsEnabled' - Update whether flow logs are enabled. The default value is false. If the
+-- value is true, @FlowLogsS3Bucket@ and @FlowLogsS3Prefix@ must be
+-- specified.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/monitoring-global-accelerator.flow-logs.html Flow Logs>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- 'flowLogsS3Bucket', 'updateAcceleratorAttributes_flowLogsS3Bucket' - The name of the Amazon S3 bucket for the flow logs. Attribute is
+-- required if @FlowLogsEnabled@ is @true@. The bucket must exist and have
+-- a bucket policy that grants Global Accelerator permission to write to
+-- the bucket.
+--
+-- 'flowLogsS3Prefix', 'updateAcceleratorAttributes_flowLogsS3Prefix' - Update the prefix for the location in the Amazon S3 bucket for the flow
+-- logs. Attribute is required if @FlowLogsEnabled@ is @true@.
+--
+-- If you specify slash (\/) for the S3 bucket prefix, the log file bucket
+-- folder structure will include a double slash (\/\/), like the following:
+--
+-- s3-bucket_name\/\/AWSLogs\/aws_account_id
+--
+-- 'acceleratorArn', 'updateAcceleratorAttributes_acceleratorArn' - The Amazon Resource Name (ARN) of the accelerator that you want to
+-- update.
+newUpdateAcceleratorAttributes ::
+  -- | 'acceleratorArn'
+  Prelude.Text ->
+  UpdateAcceleratorAttributes
+newUpdateAcceleratorAttributes pAcceleratorArn_ =
+  UpdateAcceleratorAttributes'
+    { flowLogsEnabled =
+        Prelude.Nothing,
+      flowLogsS3Bucket = Prelude.Nothing,
+      flowLogsS3Prefix = Prelude.Nothing,
+      acceleratorArn = pAcceleratorArn_
+    }
+
+-- | Update whether flow logs are enabled. The default value is false. If the
+-- value is true, @FlowLogsS3Bucket@ and @FlowLogsS3Prefix@ must be
+-- specified.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/monitoring-global-accelerator.flow-logs.html Flow Logs>
+-- in the /Global Accelerator Developer Guide/.
+updateAcceleratorAttributes_flowLogsEnabled :: Lens.Lens' UpdateAcceleratorAttributes (Prelude.Maybe Prelude.Bool)
+updateAcceleratorAttributes_flowLogsEnabled = Lens.lens (\UpdateAcceleratorAttributes' {flowLogsEnabled} -> flowLogsEnabled) (\s@UpdateAcceleratorAttributes' {} a -> s {flowLogsEnabled = a} :: UpdateAcceleratorAttributes)
+
+-- | The name of the Amazon S3 bucket for the flow logs. Attribute is
+-- required if @FlowLogsEnabled@ is @true@. The bucket must exist and have
+-- a bucket policy that grants Global Accelerator permission to write to
+-- the bucket.
+updateAcceleratorAttributes_flowLogsS3Bucket :: Lens.Lens' UpdateAcceleratorAttributes (Prelude.Maybe Prelude.Text)
+updateAcceleratorAttributes_flowLogsS3Bucket = Lens.lens (\UpdateAcceleratorAttributes' {flowLogsS3Bucket} -> flowLogsS3Bucket) (\s@UpdateAcceleratorAttributes' {} a -> s {flowLogsS3Bucket = a} :: UpdateAcceleratorAttributes)
+
+-- | Update the prefix for the location in the Amazon S3 bucket for the flow
+-- logs. Attribute is required if @FlowLogsEnabled@ is @true@.
+--
+-- If you specify slash (\/) for the S3 bucket prefix, the log file bucket
+-- folder structure will include a double slash (\/\/), like the following:
+--
+-- s3-bucket_name\/\/AWSLogs\/aws_account_id
+updateAcceleratorAttributes_flowLogsS3Prefix :: Lens.Lens' UpdateAcceleratorAttributes (Prelude.Maybe Prelude.Text)
+updateAcceleratorAttributes_flowLogsS3Prefix = Lens.lens (\UpdateAcceleratorAttributes' {flowLogsS3Prefix} -> flowLogsS3Prefix) (\s@UpdateAcceleratorAttributes' {} a -> s {flowLogsS3Prefix = a} :: UpdateAcceleratorAttributes)
+
+-- | The Amazon Resource Name (ARN) of the accelerator that you want to
+-- update.
+updateAcceleratorAttributes_acceleratorArn :: Lens.Lens' UpdateAcceleratorAttributes Prelude.Text
+updateAcceleratorAttributes_acceleratorArn = Lens.lens (\UpdateAcceleratorAttributes' {acceleratorArn} -> acceleratorArn) (\s@UpdateAcceleratorAttributes' {} a -> s {acceleratorArn = a} :: UpdateAcceleratorAttributes)
+
+instance Core.AWSRequest UpdateAcceleratorAttributes where
+  type
+    AWSResponse UpdateAcceleratorAttributes =
+      UpdateAcceleratorAttributesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAcceleratorAttributesResponse'
+            Prelude.<$> (x Data..?> "AcceleratorAttributes")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAcceleratorAttributes where
+  hashWithSalt _salt UpdateAcceleratorAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` flowLogsEnabled
+      `Prelude.hashWithSalt` flowLogsS3Bucket
+      `Prelude.hashWithSalt` flowLogsS3Prefix
+      `Prelude.hashWithSalt` acceleratorArn
+
+instance Prelude.NFData UpdateAcceleratorAttributes where
+  rnf UpdateAcceleratorAttributes' {..} =
+    Prelude.rnf flowLogsEnabled
+      `Prelude.seq` Prelude.rnf flowLogsS3Bucket
+      `Prelude.seq` Prelude.rnf flowLogsS3Prefix
+      `Prelude.seq` Prelude.rnf acceleratorArn
+
+instance Data.ToHeaders UpdateAcceleratorAttributes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.UpdateAcceleratorAttributes" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateAcceleratorAttributes where
+  toJSON UpdateAcceleratorAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FlowLogsEnabled" Data..=)
+              Prelude.<$> flowLogsEnabled,
+            ("FlowLogsS3Bucket" Data..=)
+              Prelude.<$> flowLogsS3Bucket,
+            ("FlowLogsS3Prefix" Data..=)
+              Prelude.<$> flowLogsS3Prefix,
+            Prelude.Just
+              ("AcceleratorArn" Data..= acceleratorArn)
+          ]
+      )
+
+instance Data.ToPath UpdateAcceleratorAttributes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateAcceleratorAttributes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAcceleratorAttributesResponse' smart constructor.
+data UpdateAcceleratorAttributesResponse = UpdateAcceleratorAttributesResponse'
+  { -- | Updated attributes for the accelerator.
+    acceleratorAttributes :: Prelude.Maybe AcceleratorAttributes,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAcceleratorAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorAttributes', 'updateAcceleratorAttributesResponse_acceleratorAttributes' - Updated attributes for the accelerator.
+--
+-- 'httpStatus', 'updateAcceleratorAttributesResponse_httpStatus' - The response's http status code.
+newUpdateAcceleratorAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAcceleratorAttributesResponse
+newUpdateAcceleratorAttributesResponse pHttpStatus_ =
+  UpdateAcceleratorAttributesResponse'
+    { acceleratorAttributes =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Updated attributes for the accelerator.
+updateAcceleratorAttributesResponse_acceleratorAttributes :: Lens.Lens' UpdateAcceleratorAttributesResponse (Prelude.Maybe AcceleratorAttributes)
+updateAcceleratorAttributesResponse_acceleratorAttributes = Lens.lens (\UpdateAcceleratorAttributesResponse' {acceleratorAttributes} -> acceleratorAttributes) (\s@UpdateAcceleratorAttributesResponse' {} a -> s {acceleratorAttributes = a} :: UpdateAcceleratorAttributesResponse)
+
+-- | The response's http status code.
+updateAcceleratorAttributesResponse_httpStatus :: Lens.Lens' UpdateAcceleratorAttributesResponse Prelude.Int
+updateAcceleratorAttributesResponse_httpStatus = Lens.lens (\UpdateAcceleratorAttributesResponse' {httpStatus} -> httpStatus) (\s@UpdateAcceleratorAttributesResponse' {} a -> s {httpStatus = a} :: UpdateAcceleratorAttributesResponse)
+
+instance
+  Prelude.NFData
+    UpdateAcceleratorAttributesResponse
+  where
+  rnf UpdateAcceleratorAttributesResponse' {..} =
+    Prelude.rnf acceleratorAttributes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/UpdateCustomRoutingAccelerator.hs b/gen/Amazonka/GlobalAccelerator/UpdateCustomRoutingAccelerator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/UpdateCustomRoutingAccelerator.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.GlobalAccelerator.UpdateCustomRoutingAccelerator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update a custom routing accelerator.
+module Amazonka.GlobalAccelerator.UpdateCustomRoutingAccelerator
+  ( -- * Creating a Request
+    UpdateCustomRoutingAccelerator (..),
+    newUpdateCustomRoutingAccelerator,
+
+    -- * Request Lenses
+    updateCustomRoutingAccelerator_enabled,
+    updateCustomRoutingAccelerator_ipAddressType,
+    updateCustomRoutingAccelerator_name,
+    updateCustomRoutingAccelerator_acceleratorArn,
+
+    -- * Destructuring the Response
+    UpdateCustomRoutingAcceleratorResponse (..),
+    newUpdateCustomRoutingAcceleratorResponse,
+
+    -- * Response Lenses
+    updateCustomRoutingAcceleratorResponse_accelerator,
+    updateCustomRoutingAcceleratorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateCustomRoutingAccelerator' smart constructor.
+data UpdateCustomRoutingAccelerator = UpdateCustomRoutingAccelerator'
+  { -- | Indicates whether an accelerator is enabled. The value is true or false.
+    -- The default value is true.
+    --
+    -- If the value is set to true, the accelerator cannot be deleted. If set
+    -- to false, the accelerator can be deleted.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The IP address type that an accelerator supports. For a custom routing
+    -- accelerator, the value must be IPV4.
+    ipAddressType :: Prelude.Maybe IpAddressType,
+    -- | The name of the accelerator. The name can have a maximum of 64
+    -- characters, must contain only alphanumeric characters, periods (.), or
+    -- hyphens (-), and must not begin or end with a hyphen or period.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the accelerator to update.
+    acceleratorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCustomRoutingAccelerator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateCustomRoutingAccelerator_enabled' - Indicates whether an accelerator is enabled. The value is true or false.
+-- The default value is true.
+--
+-- If the value is set to true, the accelerator cannot be deleted. If set
+-- to false, the accelerator can be deleted.
+--
+-- 'ipAddressType', 'updateCustomRoutingAccelerator_ipAddressType' - The IP address type that an accelerator supports. For a custom routing
+-- accelerator, the value must be IPV4.
+--
+-- 'name', 'updateCustomRoutingAccelerator_name' - The name of the accelerator. The name can have a maximum of 64
+-- characters, must contain only alphanumeric characters, periods (.), or
+-- hyphens (-), and must not begin or end with a hyphen or period.
+--
+-- 'acceleratorArn', 'updateCustomRoutingAccelerator_acceleratorArn' - The Amazon Resource Name (ARN) of the accelerator to update.
+newUpdateCustomRoutingAccelerator ::
+  -- | 'acceleratorArn'
+  Prelude.Text ->
+  UpdateCustomRoutingAccelerator
+newUpdateCustomRoutingAccelerator pAcceleratorArn_ =
+  UpdateCustomRoutingAccelerator'
+    { enabled =
+        Prelude.Nothing,
+      ipAddressType = Prelude.Nothing,
+      name = Prelude.Nothing,
+      acceleratorArn = pAcceleratorArn_
+    }
+
+-- | Indicates whether an accelerator is enabled. The value is true or false.
+-- The default value is true.
+--
+-- If the value is set to true, the accelerator cannot be deleted. If set
+-- to false, the accelerator can be deleted.
+updateCustomRoutingAccelerator_enabled :: Lens.Lens' UpdateCustomRoutingAccelerator (Prelude.Maybe Prelude.Bool)
+updateCustomRoutingAccelerator_enabled = Lens.lens (\UpdateCustomRoutingAccelerator' {enabled} -> enabled) (\s@UpdateCustomRoutingAccelerator' {} a -> s {enabled = a} :: UpdateCustomRoutingAccelerator)
+
+-- | The IP address type that an accelerator supports. For a custom routing
+-- accelerator, the value must be IPV4.
+updateCustomRoutingAccelerator_ipAddressType :: Lens.Lens' UpdateCustomRoutingAccelerator (Prelude.Maybe IpAddressType)
+updateCustomRoutingAccelerator_ipAddressType = Lens.lens (\UpdateCustomRoutingAccelerator' {ipAddressType} -> ipAddressType) (\s@UpdateCustomRoutingAccelerator' {} a -> s {ipAddressType = a} :: UpdateCustomRoutingAccelerator)
+
+-- | The name of the accelerator. The name can have a maximum of 64
+-- characters, must contain only alphanumeric characters, periods (.), or
+-- hyphens (-), and must not begin or end with a hyphen or period.
+updateCustomRoutingAccelerator_name :: Lens.Lens' UpdateCustomRoutingAccelerator (Prelude.Maybe Prelude.Text)
+updateCustomRoutingAccelerator_name = Lens.lens (\UpdateCustomRoutingAccelerator' {name} -> name) (\s@UpdateCustomRoutingAccelerator' {} a -> s {name = a} :: UpdateCustomRoutingAccelerator)
+
+-- | The Amazon Resource Name (ARN) of the accelerator to update.
+updateCustomRoutingAccelerator_acceleratorArn :: Lens.Lens' UpdateCustomRoutingAccelerator Prelude.Text
+updateCustomRoutingAccelerator_acceleratorArn = Lens.lens (\UpdateCustomRoutingAccelerator' {acceleratorArn} -> acceleratorArn) (\s@UpdateCustomRoutingAccelerator' {} a -> s {acceleratorArn = a} :: UpdateCustomRoutingAccelerator)
+
+instance
+  Core.AWSRequest
+    UpdateCustomRoutingAccelerator
+  where
+  type
+    AWSResponse UpdateCustomRoutingAccelerator =
+      UpdateCustomRoutingAcceleratorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateCustomRoutingAcceleratorResponse'
+            Prelude.<$> (x Data..?> "Accelerator")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateCustomRoutingAccelerator
+  where
+  hashWithSalt
+    _salt
+    UpdateCustomRoutingAccelerator' {..} =
+      _salt
+        `Prelude.hashWithSalt` enabled
+        `Prelude.hashWithSalt` ipAddressType
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` acceleratorArn
+
+instance
+  Prelude.NFData
+    UpdateCustomRoutingAccelerator
+  where
+  rnf UpdateCustomRoutingAccelerator' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf ipAddressType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf acceleratorArn
+
+instance
+  Data.ToHeaders
+    UpdateCustomRoutingAccelerator
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.UpdateCustomRoutingAccelerator" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateCustomRoutingAccelerator where
+  toJSON UpdateCustomRoutingAccelerator' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Enabled" Data..=) Prelude.<$> enabled,
+            ("IpAddressType" Data..=) Prelude.<$> ipAddressType,
+            ("Name" Data..=) Prelude.<$> name,
+            Prelude.Just
+              ("AcceleratorArn" Data..= acceleratorArn)
+          ]
+      )
+
+instance Data.ToPath UpdateCustomRoutingAccelerator where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateCustomRoutingAccelerator where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateCustomRoutingAcceleratorResponse' smart constructor.
+data UpdateCustomRoutingAcceleratorResponse = UpdateCustomRoutingAcceleratorResponse'
+  { -- | Information about the updated custom routing accelerator.
+    accelerator :: Prelude.Maybe CustomRoutingAccelerator,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCustomRoutingAcceleratorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accelerator', 'updateCustomRoutingAcceleratorResponse_accelerator' - Information about the updated custom routing accelerator.
+--
+-- 'httpStatus', 'updateCustomRoutingAcceleratorResponse_httpStatus' - The response's http status code.
+newUpdateCustomRoutingAcceleratorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateCustomRoutingAcceleratorResponse
+newUpdateCustomRoutingAcceleratorResponse
+  pHttpStatus_ =
+    UpdateCustomRoutingAcceleratorResponse'
+      { accelerator =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the updated custom routing accelerator.
+updateCustomRoutingAcceleratorResponse_accelerator :: Lens.Lens' UpdateCustomRoutingAcceleratorResponse (Prelude.Maybe CustomRoutingAccelerator)
+updateCustomRoutingAcceleratorResponse_accelerator = Lens.lens (\UpdateCustomRoutingAcceleratorResponse' {accelerator} -> accelerator) (\s@UpdateCustomRoutingAcceleratorResponse' {} a -> s {accelerator = a} :: UpdateCustomRoutingAcceleratorResponse)
+
+-- | The response's http status code.
+updateCustomRoutingAcceleratorResponse_httpStatus :: Lens.Lens' UpdateCustomRoutingAcceleratorResponse Prelude.Int
+updateCustomRoutingAcceleratorResponse_httpStatus = Lens.lens (\UpdateCustomRoutingAcceleratorResponse' {httpStatus} -> httpStatus) (\s@UpdateCustomRoutingAcceleratorResponse' {} a -> s {httpStatus = a} :: UpdateCustomRoutingAcceleratorResponse)
+
+instance
+  Prelude.NFData
+    UpdateCustomRoutingAcceleratorResponse
+  where
+  rnf UpdateCustomRoutingAcceleratorResponse' {..} =
+    Prelude.rnf accelerator
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/UpdateCustomRoutingAcceleratorAttributes.hs b/gen/Amazonka/GlobalAccelerator/UpdateCustomRoutingAcceleratorAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/UpdateCustomRoutingAcceleratorAttributes.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.GlobalAccelerator.UpdateCustomRoutingAcceleratorAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update the attributes for a custom routing accelerator.
+module Amazonka.GlobalAccelerator.UpdateCustomRoutingAcceleratorAttributes
+  ( -- * Creating a Request
+    UpdateCustomRoutingAcceleratorAttributes (..),
+    newUpdateCustomRoutingAcceleratorAttributes,
+
+    -- * Request Lenses
+    updateCustomRoutingAcceleratorAttributes_flowLogsEnabled,
+    updateCustomRoutingAcceleratorAttributes_flowLogsS3Bucket,
+    updateCustomRoutingAcceleratorAttributes_flowLogsS3Prefix,
+    updateCustomRoutingAcceleratorAttributes_acceleratorArn,
+
+    -- * Destructuring the Response
+    UpdateCustomRoutingAcceleratorAttributesResponse (..),
+    newUpdateCustomRoutingAcceleratorAttributesResponse,
+
+    -- * Response Lenses
+    updateCustomRoutingAcceleratorAttributesResponse_acceleratorAttributes,
+    updateCustomRoutingAcceleratorAttributesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateCustomRoutingAcceleratorAttributes' smart constructor.
+data UpdateCustomRoutingAcceleratorAttributes = UpdateCustomRoutingAcceleratorAttributes'
+  { -- | Update whether flow logs are enabled. The default value is false. If the
+    -- value is true, @FlowLogsS3Bucket@ and @FlowLogsS3Prefix@ must be
+    -- specified.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/monitoring-global-accelerator.flow-logs.html Flow logs>
+    -- in the /Global Accelerator Developer Guide/.
+    flowLogsEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the Amazon S3 bucket for the flow logs. Attribute is
+    -- required if @FlowLogsEnabled@ is @true@. The bucket must exist and have
+    -- a bucket policy that grants Global Accelerator permission to write to
+    -- the bucket.
+    flowLogsS3Bucket :: Prelude.Maybe Prelude.Text,
+    -- | Update the prefix for the location in the Amazon S3 bucket for the flow
+    -- logs. Attribute is required if @FlowLogsEnabled@ is @true@.
+    --
+    -- If you don’t specify a prefix, the flow logs are stored in the root of
+    -- the bucket. If you specify slash (\/) for the S3 bucket prefix, the log
+    -- file bucket folder structure will include a double slash (\/\/), like
+    -- the following:
+    --
+    -- DOC-EXAMPLE-BUCKET\/\/AWSLogs\/aws_account_id
+    flowLogsS3Prefix :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the custom routing accelerator to
+    -- update attributes for.
+    acceleratorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCustomRoutingAcceleratorAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'flowLogsEnabled', 'updateCustomRoutingAcceleratorAttributes_flowLogsEnabled' - Update whether flow logs are enabled. The default value is false. If the
+-- value is true, @FlowLogsS3Bucket@ and @FlowLogsS3Prefix@ must be
+-- specified.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/monitoring-global-accelerator.flow-logs.html Flow logs>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- 'flowLogsS3Bucket', 'updateCustomRoutingAcceleratorAttributes_flowLogsS3Bucket' - The name of the Amazon S3 bucket for the flow logs. Attribute is
+-- required if @FlowLogsEnabled@ is @true@. The bucket must exist and have
+-- a bucket policy that grants Global Accelerator permission to write to
+-- the bucket.
+--
+-- 'flowLogsS3Prefix', 'updateCustomRoutingAcceleratorAttributes_flowLogsS3Prefix' - Update the prefix for the location in the Amazon S3 bucket for the flow
+-- logs. Attribute is required if @FlowLogsEnabled@ is @true@.
+--
+-- If you don’t specify a prefix, the flow logs are stored in the root of
+-- the bucket. If you specify slash (\/) for the S3 bucket prefix, the log
+-- file bucket folder structure will include a double slash (\/\/), like
+-- the following:
+--
+-- DOC-EXAMPLE-BUCKET\/\/AWSLogs\/aws_account_id
+--
+-- 'acceleratorArn', 'updateCustomRoutingAcceleratorAttributes_acceleratorArn' - The Amazon Resource Name (ARN) of the custom routing accelerator to
+-- update attributes for.
+newUpdateCustomRoutingAcceleratorAttributes ::
+  -- | 'acceleratorArn'
+  Prelude.Text ->
+  UpdateCustomRoutingAcceleratorAttributes
+newUpdateCustomRoutingAcceleratorAttributes
+  pAcceleratorArn_ =
+    UpdateCustomRoutingAcceleratorAttributes'
+      { flowLogsEnabled =
+          Prelude.Nothing,
+        flowLogsS3Bucket =
+          Prelude.Nothing,
+        flowLogsS3Prefix =
+          Prelude.Nothing,
+        acceleratorArn = pAcceleratorArn_
+      }
+
+-- | Update whether flow logs are enabled. The default value is false. If the
+-- value is true, @FlowLogsS3Bucket@ and @FlowLogsS3Prefix@ must be
+-- specified.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/monitoring-global-accelerator.flow-logs.html Flow logs>
+-- in the /Global Accelerator Developer Guide/.
+updateCustomRoutingAcceleratorAttributes_flowLogsEnabled :: Lens.Lens' UpdateCustomRoutingAcceleratorAttributes (Prelude.Maybe Prelude.Bool)
+updateCustomRoutingAcceleratorAttributes_flowLogsEnabled = Lens.lens (\UpdateCustomRoutingAcceleratorAttributes' {flowLogsEnabled} -> flowLogsEnabled) (\s@UpdateCustomRoutingAcceleratorAttributes' {} a -> s {flowLogsEnabled = a} :: UpdateCustomRoutingAcceleratorAttributes)
+
+-- | The name of the Amazon S3 bucket for the flow logs. Attribute is
+-- required if @FlowLogsEnabled@ is @true@. The bucket must exist and have
+-- a bucket policy that grants Global Accelerator permission to write to
+-- the bucket.
+updateCustomRoutingAcceleratorAttributes_flowLogsS3Bucket :: Lens.Lens' UpdateCustomRoutingAcceleratorAttributes (Prelude.Maybe Prelude.Text)
+updateCustomRoutingAcceleratorAttributes_flowLogsS3Bucket = Lens.lens (\UpdateCustomRoutingAcceleratorAttributes' {flowLogsS3Bucket} -> flowLogsS3Bucket) (\s@UpdateCustomRoutingAcceleratorAttributes' {} a -> s {flowLogsS3Bucket = a} :: UpdateCustomRoutingAcceleratorAttributes)
+
+-- | Update the prefix for the location in the Amazon S3 bucket for the flow
+-- logs. Attribute is required if @FlowLogsEnabled@ is @true@.
+--
+-- If you don’t specify a prefix, the flow logs are stored in the root of
+-- the bucket. If you specify slash (\/) for the S3 bucket prefix, the log
+-- file bucket folder structure will include a double slash (\/\/), like
+-- the following:
+--
+-- DOC-EXAMPLE-BUCKET\/\/AWSLogs\/aws_account_id
+updateCustomRoutingAcceleratorAttributes_flowLogsS3Prefix :: Lens.Lens' UpdateCustomRoutingAcceleratorAttributes (Prelude.Maybe Prelude.Text)
+updateCustomRoutingAcceleratorAttributes_flowLogsS3Prefix = Lens.lens (\UpdateCustomRoutingAcceleratorAttributes' {flowLogsS3Prefix} -> flowLogsS3Prefix) (\s@UpdateCustomRoutingAcceleratorAttributes' {} a -> s {flowLogsS3Prefix = a} :: UpdateCustomRoutingAcceleratorAttributes)
+
+-- | The Amazon Resource Name (ARN) of the custom routing accelerator to
+-- update attributes for.
+updateCustomRoutingAcceleratorAttributes_acceleratorArn :: Lens.Lens' UpdateCustomRoutingAcceleratorAttributes Prelude.Text
+updateCustomRoutingAcceleratorAttributes_acceleratorArn = Lens.lens (\UpdateCustomRoutingAcceleratorAttributes' {acceleratorArn} -> acceleratorArn) (\s@UpdateCustomRoutingAcceleratorAttributes' {} a -> s {acceleratorArn = a} :: UpdateCustomRoutingAcceleratorAttributes)
+
+instance
+  Core.AWSRequest
+    UpdateCustomRoutingAcceleratorAttributes
+  where
+  type
+    AWSResponse
+      UpdateCustomRoutingAcceleratorAttributes =
+      UpdateCustomRoutingAcceleratorAttributesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateCustomRoutingAcceleratorAttributesResponse'
+            Prelude.<$> (x Data..?> "AcceleratorAttributes")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateCustomRoutingAcceleratorAttributes
+  where
+  hashWithSalt
+    _salt
+    UpdateCustomRoutingAcceleratorAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` flowLogsEnabled
+        `Prelude.hashWithSalt` flowLogsS3Bucket
+        `Prelude.hashWithSalt` flowLogsS3Prefix
+        `Prelude.hashWithSalt` acceleratorArn
+
+instance
+  Prelude.NFData
+    UpdateCustomRoutingAcceleratorAttributes
+  where
+  rnf UpdateCustomRoutingAcceleratorAttributes' {..} =
+    Prelude.rnf flowLogsEnabled
+      `Prelude.seq` Prelude.rnf flowLogsS3Bucket
+      `Prelude.seq` Prelude.rnf flowLogsS3Prefix
+      `Prelude.seq` Prelude.rnf acceleratorArn
+
+instance
+  Data.ToHeaders
+    UpdateCustomRoutingAcceleratorAttributes
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.UpdateCustomRoutingAcceleratorAttributes" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    UpdateCustomRoutingAcceleratorAttributes
+  where
+  toJSON UpdateCustomRoutingAcceleratorAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FlowLogsEnabled" Data..=)
+              Prelude.<$> flowLogsEnabled,
+            ("FlowLogsS3Bucket" Data..=)
+              Prelude.<$> flowLogsS3Bucket,
+            ("FlowLogsS3Prefix" Data..=)
+              Prelude.<$> flowLogsS3Prefix,
+            Prelude.Just
+              ("AcceleratorArn" Data..= acceleratorArn)
+          ]
+      )
+
+instance
+  Data.ToPath
+    UpdateCustomRoutingAcceleratorAttributes
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    UpdateCustomRoutingAcceleratorAttributes
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateCustomRoutingAcceleratorAttributesResponse' smart constructor.
+data UpdateCustomRoutingAcceleratorAttributesResponse = UpdateCustomRoutingAcceleratorAttributesResponse'
+  { -- | Updated custom routing accelerator.
+    acceleratorAttributes :: Prelude.Maybe CustomRoutingAcceleratorAttributes,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCustomRoutingAcceleratorAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorAttributes', 'updateCustomRoutingAcceleratorAttributesResponse_acceleratorAttributes' - Updated custom routing accelerator.
+--
+-- 'httpStatus', 'updateCustomRoutingAcceleratorAttributesResponse_httpStatus' - The response's http status code.
+newUpdateCustomRoutingAcceleratorAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateCustomRoutingAcceleratorAttributesResponse
+newUpdateCustomRoutingAcceleratorAttributesResponse
+  pHttpStatus_ =
+    UpdateCustomRoutingAcceleratorAttributesResponse'
+      { acceleratorAttributes =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Updated custom routing accelerator.
+updateCustomRoutingAcceleratorAttributesResponse_acceleratorAttributes :: Lens.Lens' UpdateCustomRoutingAcceleratorAttributesResponse (Prelude.Maybe CustomRoutingAcceleratorAttributes)
+updateCustomRoutingAcceleratorAttributesResponse_acceleratorAttributes = Lens.lens (\UpdateCustomRoutingAcceleratorAttributesResponse' {acceleratorAttributes} -> acceleratorAttributes) (\s@UpdateCustomRoutingAcceleratorAttributesResponse' {} a -> s {acceleratorAttributes = a} :: UpdateCustomRoutingAcceleratorAttributesResponse)
+
+-- | The response's http status code.
+updateCustomRoutingAcceleratorAttributesResponse_httpStatus :: Lens.Lens' UpdateCustomRoutingAcceleratorAttributesResponse Prelude.Int
+updateCustomRoutingAcceleratorAttributesResponse_httpStatus = Lens.lens (\UpdateCustomRoutingAcceleratorAttributesResponse' {httpStatus} -> httpStatus) (\s@UpdateCustomRoutingAcceleratorAttributesResponse' {} a -> s {httpStatus = a} :: UpdateCustomRoutingAcceleratorAttributesResponse)
+
+instance
+  Prelude.NFData
+    UpdateCustomRoutingAcceleratorAttributesResponse
+  where
+  rnf
+    UpdateCustomRoutingAcceleratorAttributesResponse' {..} =
+      Prelude.rnf acceleratorAttributes
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/UpdateCustomRoutingListener.hs b/gen/Amazonka/GlobalAccelerator/UpdateCustomRoutingListener.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/UpdateCustomRoutingListener.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.GlobalAccelerator.UpdateCustomRoutingListener
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update a listener for a custom routing accelerator.
+module Amazonka.GlobalAccelerator.UpdateCustomRoutingListener
+  ( -- * Creating a Request
+    UpdateCustomRoutingListener (..),
+    newUpdateCustomRoutingListener,
+
+    -- * Request Lenses
+    updateCustomRoutingListener_listenerArn,
+    updateCustomRoutingListener_portRanges,
+
+    -- * Destructuring the Response
+    UpdateCustomRoutingListenerResponse (..),
+    newUpdateCustomRoutingListenerResponse,
+
+    -- * Response Lenses
+    updateCustomRoutingListenerResponse_listener,
+    updateCustomRoutingListenerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateCustomRoutingListener' smart constructor.
+data UpdateCustomRoutingListener = UpdateCustomRoutingListener'
+  { -- | The Amazon Resource Name (ARN) of the listener to update.
+    listenerArn :: Prelude.Text,
+    -- | The updated port range to support for connections from clients to your
+    -- accelerator. If you remove ports that are currently being used by a
+    -- subnet endpoint, the call fails.
+    --
+    -- Separately, you set port ranges for endpoints. For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-custom-routing-endpoints.html About endpoints for custom routing accelerators>.
+    portRanges :: Prelude.NonEmpty PortRange
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCustomRoutingListener' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'listenerArn', 'updateCustomRoutingListener_listenerArn' - The Amazon Resource Name (ARN) of the listener to update.
+--
+-- 'portRanges', 'updateCustomRoutingListener_portRanges' - The updated port range to support for connections from clients to your
+-- accelerator. If you remove ports that are currently being used by a
+-- subnet endpoint, the call fails.
+--
+-- Separately, you set port ranges for endpoints. For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-custom-routing-endpoints.html About endpoints for custom routing accelerators>.
+newUpdateCustomRoutingListener ::
+  -- | 'listenerArn'
+  Prelude.Text ->
+  -- | 'portRanges'
+  Prelude.NonEmpty PortRange ->
+  UpdateCustomRoutingListener
+newUpdateCustomRoutingListener
+  pListenerArn_
+  pPortRanges_ =
+    UpdateCustomRoutingListener'
+      { listenerArn =
+          pListenerArn_,
+        portRanges = Lens.coerced Lens.# pPortRanges_
+      }
+
+-- | The Amazon Resource Name (ARN) of the listener to update.
+updateCustomRoutingListener_listenerArn :: Lens.Lens' UpdateCustomRoutingListener Prelude.Text
+updateCustomRoutingListener_listenerArn = Lens.lens (\UpdateCustomRoutingListener' {listenerArn} -> listenerArn) (\s@UpdateCustomRoutingListener' {} a -> s {listenerArn = a} :: UpdateCustomRoutingListener)
+
+-- | The updated port range to support for connections from clients to your
+-- accelerator. If you remove ports that are currently being used by a
+-- subnet endpoint, the call fails.
+--
+-- Separately, you set port ranges for endpoints. For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-custom-routing-endpoints.html About endpoints for custom routing accelerators>.
+updateCustomRoutingListener_portRanges :: Lens.Lens' UpdateCustomRoutingListener (Prelude.NonEmpty PortRange)
+updateCustomRoutingListener_portRanges = Lens.lens (\UpdateCustomRoutingListener' {portRanges} -> portRanges) (\s@UpdateCustomRoutingListener' {} a -> s {portRanges = a} :: UpdateCustomRoutingListener) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UpdateCustomRoutingListener where
+  type
+    AWSResponse UpdateCustomRoutingListener =
+      UpdateCustomRoutingListenerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateCustomRoutingListenerResponse'
+            Prelude.<$> (x Data..?> "Listener")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateCustomRoutingListener where
+  hashWithSalt _salt UpdateCustomRoutingListener' {..} =
+    _salt
+      `Prelude.hashWithSalt` listenerArn
+      `Prelude.hashWithSalt` portRanges
+
+instance Prelude.NFData UpdateCustomRoutingListener where
+  rnf UpdateCustomRoutingListener' {..} =
+    Prelude.rnf listenerArn
+      `Prelude.seq` Prelude.rnf portRanges
+
+instance Data.ToHeaders UpdateCustomRoutingListener where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.UpdateCustomRoutingListener" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateCustomRoutingListener where
+  toJSON UpdateCustomRoutingListener' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ListenerArn" Data..= listenerArn),
+            Prelude.Just ("PortRanges" Data..= portRanges)
+          ]
+      )
+
+instance Data.ToPath UpdateCustomRoutingListener where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateCustomRoutingListener where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateCustomRoutingListenerResponse' smart constructor.
+data UpdateCustomRoutingListenerResponse = UpdateCustomRoutingListenerResponse'
+  { -- | Information for the updated listener for a custom routing accelerator.
+    listener :: Prelude.Maybe CustomRoutingListener,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCustomRoutingListenerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'listener', 'updateCustomRoutingListenerResponse_listener' - Information for the updated listener for a custom routing accelerator.
+--
+-- 'httpStatus', 'updateCustomRoutingListenerResponse_httpStatus' - The response's http status code.
+newUpdateCustomRoutingListenerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateCustomRoutingListenerResponse
+newUpdateCustomRoutingListenerResponse pHttpStatus_ =
+  UpdateCustomRoutingListenerResponse'
+    { listener =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information for the updated listener for a custom routing accelerator.
+updateCustomRoutingListenerResponse_listener :: Lens.Lens' UpdateCustomRoutingListenerResponse (Prelude.Maybe CustomRoutingListener)
+updateCustomRoutingListenerResponse_listener = Lens.lens (\UpdateCustomRoutingListenerResponse' {listener} -> listener) (\s@UpdateCustomRoutingListenerResponse' {} a -> s {listener = a} :: UpdateCustomRoutingListenerResponse)
+
+-- | The response's http status code.
+updateCustomRoutingListenerResponse_httpStatus :: Lens.Lens' UpdateCustomRoutingListenerResponse Prelude.Int
+updateCustomRoutingListenerResponse_httpStatus = Lens.lens (\UpdateCustomRoutingListenerResponse' {httpStatus} -> httpStatus) (\s@UpdateCustomRoutingListenerResponse' {} a -> s {httpStatus = a} :: UpdateCustomRoutingListenerResponse)
+
+instance
+  Prelude.NFData
+    UpdateCustomRoutingListenerResponse
+  where
+  rnf UpdateCustomRoutingListenerResponse' {..} =
+    Prelude.rnf listener
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/UpdateEndpointGroup.hs b/gen/Amazonka/GlobalAccelerator/UpdateEndpointGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/UpdateEndpointGroup.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.GlobalAccelerator.UpdateEndpointGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update an endpoint group. A resource must be valid and active when you
+-- add it as an endpoint.
+module Amazonka.GlobalAccelerator.UpdateEndpointGroup
+  ( -- * Creating a Request
+    UpdateEndpointGroup (..),
+    newUpdateEndpointGroup,
+
+    -- * Request Lenses
+    updateEndpointGroup_endpointConfigurations,
+    updateEndpointGroup_healthCheckIntervalSeconds,
+    updateEndpointGroup_healthCheckPath,
+    updateEndpointGroup_healthCheckPort,
+    updateEndpointGroup_healthCheckProtocol,
+    updateEndpointGroup_portOverrides,
+    updateEndpointGroup_thresholdCount,
+    updateEndpointGroup_trafficDialPercentage,
+    updateEndpointGroup_endpointGroupArn,
+
+    -- * Destructuring the Response
+    UpdateEndpointGroupResponse (..),
+    newUpdateEndpointGroupResponse,
+
+    -- * Response Lenses
+    updateEndpointGroupResponse_endpointGroup,
+    updateEndpointGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateEndpointGroup' smart constructor.
+data UpdateEndpointGroup = UpdateEndpointGroup'
+  { -- | The list of endpoint objects. A resource must be valid and active when
+    -- you add it as an endpoint.
+    endpointConfigurations :: Prelude.Maybe [EndpointConfiguration],
+    -- | The time—10 seconds or 30 seconds—between each health check for an
+    -- endpoint. The default value is 30.
+    healthCheckIntervalSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | If the protocol is HTTP\/S, then this specifies the path that is the
+    -- destination for health check targets. The default value is slash (\/).
+    healthCheckPath :: Prelude.Maybe Prelude.Text,
+    -- | The port that Global Accelerator uses to check the health of endpoints
+    -- that are part of this endpoint group. The default port is the listener
+    -- port that this endpoint group is associated with. If the listener port
+    -- is a list of ports, Global Accelerator uses the first port in the list.
+    healthCheckPort :: Prelude.Maybe Prelude.Natural,
+    -- | The protocol that Global Accelerator uses to check the health of
+    -- endpoints that are part of this endpoint group. The default value is
+    -- TCP.
+    healthCheckProtocol :: Prelude.Maybe HealthCheckProtocol,
+    -- | Override specific listener ports used to route traffic to endpoints that
+    -- are part of this endpoint group. For example, you can create a port
+    -- override in which the listener receives user traffic on ports 80 and
+    -- 443, but your accelerator routes that traffic to ports 1080 and 1443,
+    -- respectively, on the endpoints.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-endpoint-groups-port-override.html Overriding listener ports>
+    -- in the /Global Accelerator Developer Guide/.
+    portOverrides :: Prelude.Maybe [PortOverride],
+    -- | The number of consecutive health checks required to set the state of a
+    -- healthy endpoint to unhealthy, or to set an unhealthy endpoint to
+    -- healthy. The default value is 3.
+    thresholdCount :: Prelude.Maybe Prelude.Natural,
+    -- | The percentage of traffic to send to an Amazon Web Services Region.
+    -- Additional traffic is distributed to other endpoint groups for this
+    -- listener.
+    --
+    -- Use this action to increase (dial up) or decrease (dial down) traffic to
+    -- a specific Region. The percentage is applied to the traffic that would
+    -- otherwise have been routed to the Region based on optimal routing.
+    --
+    -- The default value is 100.
+    trafficDialPercentage :: Prelude.Maybe Prelude.Double,
+    -- | The Amazon Resource Name (ARN) of the endpoint group.
+    endpointGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEndpointGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointConfigurations', 'updateEndpointGroup_endpointConfigurations' - The list of endpoint objects. A resource must be valid and active when
+-- you add it as an endpoint.
+--
+-- 'healthCheckIntervalSeconds', 'updateEndpointGroup_healthCheckIntervalSeconds' - The time—10 seconds or 30 seconds—between each health check for an
+-- endpoint. The default value is 30.
+--
+-- 'healthCheckPath', 'updateEndpointGroup_healthCheckPath' - If the protocol is HTTP\/S, then this specifies the path that is the
+-- destination for health check targets. The default value is slash (\/).
+--
+-- 'healthCheckPort', 'updateEndpointGroup_healthCheckPort' - The port that Global Accelerator uses to check the health of endpoints
+-- that are part of this endpoint group. The default port is the listener
+-- port that this endpoint group is associated with. If the listener port
+-- is a list of ports, Global Accelerator uses the first port in the list.
+--
+-- 'healthCheckProtocol', 'updateEndpointGroup_healthCheckProtocol' - The protocol that Global Accelerator uses to check the health of
+-- endpoints that are part of this endpoint group. The default value is
+-- TCP.
+--
+-- 'portOverrides', 'updateEndpointGroup_portOverrides' - Override specific listener ports used to route traffic to endpoints that
+-- are part of this endpoint group. For example, you can create a port
+-- override in which the listener receives user traffic on ports 80 and
+-- 443, but your accelerator routes that traffic to ports 1080 and 1443,
+-- respectively, on the endpoints.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-endpoint-groups-port-override.html Overriding listener ports>
+-- in the /Global Accelerator Developer Guide/.
+--
+-- 'thresholdCount', 'updateEndpointGroup_thresholdCount' - The number of consecutive health checks required to set the state of a
+-- healthy endpoint to unhealthy, or to set an unhealthy endpoint to
+-- healthy. The default value is 3.
+--
+-- 'trafficDialPercentage', 'updateEndpointGroup_trafficDialPercentage' - The percentage of traffic to send to an Amazon Web Services Region.
+-- Additional traffic is distributed to other endpoint groups for this
+-- listener.
+--
+-- Use this action to increase (dial up) or decrease (dial down) traffic to
+-- a specific Region. The percentage is applied to the traffic that would
+-- otherwise have been routed to the Region based on optimal routing.
+--
+-- The default value is 100.
+--
+-- 'endpointGroupArn', 'updateEndpointGroup_endpointGroupArn' - The Amazon Resource Name (ARN) of the endpoint group.
+newUpdateEndpointGroup ::
+  -- | 'endpointGroupArn'
+  Prelude.Text ->
+  UpdateEndpointGroup
+newUpdateEndpointGroup pEndpointGroupArn_ =
+  UpdateEndpointGroup'
+    { endpointConfigurations =
+        Prelude.Nothing,
+      healthCheckIntervalSeconds = Prelude.Nothing,
+      healthCheckPath = Prelude.Nothing,
+      healthCheckPort = Prelude.Nothing,
+      healthCheckProtocol = Prelude.Nothing,
+      portOverrides = Prelude.Nothing,
+      thresholdCount = Prelude.Nothing,
+      trafficDialPercentage = Prelude.Nothing,
+      endpointGroupArn = pEndpointGroupArn_
+    }
+
+-- | The list of endpoint objects. A resource must be valid and active when
+-- you add it as an endpoint.
+updateEndpointGroup_endpointConfigurations :: Lens.Lens' UpdateEndpointGroup (Prelude.Maybe [EndpointConfiguration])
+updateEndpointGroup_endpointConfigurations = Lens.lens (\UpdateEndpointGroup' {endpointConfigurations} -> endpointConfigurations) (\s@UpdateEndpointGroup' {} a -> s {endpointConfigurations = a} :: UpdateEndpointGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time—10 seconds or 30 seconds—between each health check for an
+-- endpoint. The default value is 30.
+updateEndpointGroup_healthCheckIntervalSeconds :: Lens.Lens' UpdateEndpointGroup (Prelude.Maybe Prelude.Natural)
+updateEndpointGroup_healthCheckIntervalSeconds = Lens.lens (\UpdateEndpointGroup' {healthCheckIntervalSeconds} -> healthCheckIntervalSeconds) (\s@UpdateEndpointGroup' {} a -> s {healthCheckIntervalSeconds = a} :: UpdateEndpointGroup)
+
+-- | If the protocol is HTTP\/S, then this specifies the path that is the
+-- destination for health check targets. The default value is slash (\/).
+updateEndpointGroup_healthCheckPath :: Lens.Lens' UpdateEndpointGroup (Prelude.Maybe Prelude.Text)
+updateEndpointGroup_healthCheckPath = Lens.lens (\UpdateEndpointGroup' {healthCheckPath} -> healthCheckPath) (\s@UpdateEndpointGroup' {} a -> s {healthCheckPath = a} :: UpdateEndpointGroup)
+
+-- | The port that Global Accelerator uses to check the health of endpoints
+-- that are part of this endpoint group. The default port is the listener
+-- port that this endpoint group is associated with. If the listener port
+-- is a list of ports, Global Accelerator uses the first port in the list.
+updateEndpointGroup_healthCheckPort :: Lens.Lens' UpdateEndpointGroup (Prelude.Maybe Prelude.Natural)
+updateEndpointGroup_healthCheckPort = Lens.lens (\UpdateEndpointGroup' {healthCheckPort} -> healthCheckPort) (\s@UpdateEndpointGroup' {} a -> s {healthCheckPort = a} :: UpdateEndpointGroup)
+
+-- | The protocol that Global Accelerator uses to check the health of
+-- endpoints that are part of this endpoint group. The default value is
+-- TCP.
+updateEndpointGroup_healthCheckProtocol :: Lens.Lens' UpdateEndpointGroup (Prelude.Maybe HealthCheckProtocol)
+updateEndpointGroup_healthCheckProtocol = Lens.lens (\UpdateEndpointGroup' {healthCheckProtocol} -> healthCheckProtocol) (\s@UpdateEndpointGroup' {} a -> s {healthCheckProtocol = a} :: UpdateEndpointGroup)
+
+-- | Override specific listener ports used to route traffic to endpoints that
+-- are part of this endpoint group. For example, you can create a port
+-- override in which the listener receives user traffic on ports 80 and
+-- 443, but your accelerator routes that traffic to ports 1080 and 1443,
+-- respectively, on the endpoints.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/about-endpoint-groups-port-override.html Overriding listener ports>
+-- in the /Global Accelerator Developer Guide/.
+updateEndpointGroup_portOverrides :: Lens.Lens' UpdateEndpointGroup (Prelude.Maybe [PortOverride])
+updateEndpointGroup_portOverrides = Lens.lens (\UpdateEndpointGroup' {portOverrides} -> portOverrides) (\s@UpdateEndpointGroup' {} a -> s {portOverrides = a} :: UpdateEndpointGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of consecutive health checks required to set the state of a
+-- healthy endpoint to unhealthy, or to set an unhealthy endpoint to
+-- healthy. The default value is 3.
+updateEndpointGroup_thresholdCount :: Lens.Lens' UpdateEndpointGroup (Prelude.Maybe Prelude.Natural)
+updateEndpointGroup_thresholdCount = Lens.lens (\UpdateEndpointGroup' {thresholdCount} -> thresholdCount) (\s@UpdateEndpointGroup' {} a -> s {thresholdCount = a} :: UpdateEndpointGroup)
+
+-- | The percentage of traffic to send to an Amazon Web Services Region.
+-- Additional traffic is distributed to other endpoint groups for this
+-- listener.
+--
+-- Use this action to increase (dial up) or decrease (dial down) traffic to
+-- a specific Region. The percentage is applied to the traffic that would
+-- otherwise have been routed to the Region based on optimal routing.
+--
+-- The default value is 100.
+updateEndpointGroup_trafficDialPercentage :: Lens.Lens' UpdateEndpointGroup (Prelude.Maybe Prelude.Double)
+updateEndpointGroup_trafficDialPercentage = Lens.lens (\UpdateEndpointGroup' {trafficDialPercentage} -> trafficDialPercentage) (\s@UpdateEndpointGroup' {} a -> s {trafficDialPercentage = a} :: UpdateEndpointGroup)
+
+-- | The Amazon Resource Name (ARN) of the endpoint group.
+updateEndpointGroup_endpointGroupArn :: Lens.Lens' UpdateEndpointGroup Prelude.Text
+updateEndpointGroup_endpointGroupArn = Lens.lens (\UpdateEndpointGroup' {endpointGroupArn} -> endpointGroupArn) (\s@UpdateEndpointGroup' {} a -> s {endpointGroupArn = a} :: UpdateEndpointGroup)
+
+instance Core.AWSRequest UpdateEndpointGroup where
+  type
+    AWSResponse UpdateEndpointGroup =
+      UpdateEndpointGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateEndpointGroupResponse'
+            Prelude.<$> (x Data..?> "EndpointGroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateEndpointGroup where
+  hashWithSalt _salt UpdateEndpointGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` endpointConfigurations
+      `Prelude.hashWithSalt` healthCheckIntervalSeconds
+      `Prelude.hashWithSalt` healthCheckPath
+      `Prelude.hashWithSalt` healthCheckPort
+      `Prelude.hashWithSalt` healthCheckProtocol
+      `Prelude.hashWithSalt` portOverrides
+      `Prelude.hashWithSalt` thresholdCount
+      `Prelude.hashWithSalt` trafficDialPercentage
+      `Prelude.hashWithSalt` endpointGroupArn
+
+instance Prelude.NFData UpdateEndpointGroup where
+  rnf UpdateEndpointGroup' {..} =
+    Prelude.rnf endpointConfigurations
+      `Prelude.seq` Prelude.rnf healthCheckIntervalSeconds
+      `Prelude.seq` Prelude.rnf healthCheckPath
+      `Prelude.seq` Prelude.rnf healthCheckPort
+      `Prelude.seq` Prelude.rnf healthCheckProtocol
+      `Prelude.seq` Prelude.rnf portOverrides
+      `Prelude.seq` Prelude.rnf thresholdCount
+      `Prelude.seq` Prelude.rnf trafficDialPercentage
+      `Prelude.seq` Prelude.rnf endpointGroupArn
+
+instance Data.ToHeaders UpdateEndpointGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.UpdateEndpointGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateEndpointGroup where
+  toJSON UpdateEndpointGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EndpointConfigurations" Data..=)
+              Prelude.<$> endpointConfigurations,
+            ("HealthCheckIntervalSeconds" Data..=)
+              Prelude.<$> healthCheckIntervalSeconds,
+            ("HealthCheckPath" Data..=)
+              Prelude.<$> healthCheckPath,
+            ("HealthCheckPort" Data..=)
+              Prelude.<$> healthCheckPort,
+            ("HealthCheckProtocol" Data..=)
+              Prelude.<$> healthCheckProtocol,
+            ("PortOverrides" Data..=) Prelude.<$> portOverrides,
+            ("ThresholdCount" Data..=)
+              Prelude.<$> thresholdCount,
+            ("TrafficDialPercentage" Data..=)
+              Prelude.<$> trafficDialPercentage,
+            Prelude.Just
+              ("EndpointGroupArn" Data..= endpointGroupArn)
+          ]
+      )
+
+instance Data.ToPath UpdateEndpointGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateEndpointGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateEndpointGroupResponse' smart constructor.
+data UpdateEndpointGroupResponse = UpdateEndpointGroupResponse'
+  { -- | The information about the endpoint group that was updated.
+    endpointGroup :: Prelude.Maybe EndpointGroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEndpointGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointGroup', 'updateEndpointGroupResponse_endpointGroup' - The information about the endpoint group that was updated.
+--
+-- 'httpStatus', 'updateEndpointGroupResponse_httpStatus' - The response's http status code.
+newUpdateEndpointGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateEndpointGroupResponse
+newUpdateEndpointGroupResponse pHttpStatus_ =
+  UpdateEndpointGroupResponse'
+    { endpointGroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The information about the endpoint group that was updated.
+updateEndpointGroupResponse_endpointGroup :: Lens.Lens' UpdateEndpointGroupResponse (Prelude.Maybe EndpointGroup)
+updateEndpointGroupResponse_endpointGroup = Lens.lens (\UpdateEndpointGroupResponse' {endpointGroup} -> endpointGroup) (\s@UpdateEndpointGroupResponse' {} a -> s {endpointGroup = a} :: UpdateEndpointGroupResponse)
+
+-- | The response's http status code.
+updateEndpointGroupResponse_httpStatus :: Lens.Lens' UpdateEndpointGroupResponse Prelude.Int
+updateEndpointGroupResponse_httpStatus = Lens.lens (\UpdateEndpointGroupResponse' {httpStatus} -> httpStatus) (\s@UpdateEndpointGroupResponse' {} a -> s {httpStatus = a} :: UpdateEndpointGroupResponse)
+
+instance Prelude.NFData UpdateEndpointGroupResponse where
+  rnf UpdateEndpointGroupResponse' {..} =
+    Prelude.rnf endpointGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/UpdateListener.hs b/gen/Amazonka/GlobalAccelerator/UpdateListener.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/UpdateListener.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.GlobalAccelerator.UpdateListener
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update a listener.
+module Amazonka.GlobalAccelerator.UpdateListener
+  ( -- * Creating a Request
+    UpdateListener (..),
+    newUpdateListener,
+
+    -- * Request Lenses
+    updateListener_clientAffinity,
+    updateListener_portRanges,
+    updateListener_protocol,
+    updateListener_listenerArn,
+
+    -- * Destructuring the Response
+    UpdateListenerResponse (..),
+    newUpdateListenerResponse,
+
+    -- * Response Lenses
+    updateListenerResponse_listener,
+    updateListenerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateListener' smart constructor.
+data UpdateListener = UpdateListener'
+  { -- | Client affinity lets you direct all requests from a user to the same
+    -- endpoint, if you have stateful applications, regardless of the port and
+    -- protocol of the client request. Client affinity gives you control over
+    -- whether to always route each client to the same specific endpoint.
+    --
+    -- Global Accelerator uses a consistent-flow hashing algorithm to choose
+    -- the optimal endpoint for a connection. If client affinity is @NONE@,
+    -- Global Accelerator uses the \"five-tuple\" (5-tuple) properties—source
+    -- IP address, source port, destination IP address, destination port, and
+    -- protocol—to select the hash value, and then chooses the best endpoint.
+    -- However, with this setting, if someone uses different ports to connect
+    -- to Global Accelerator, their connections might not be always routed to
+    -- the same endpoint because the hash value changes.
+    --
+    -- If you want a given client to always be routed to the same endpoint, set
+    -- client affinity to @SOURCE_IP@ instead. When you use the @SOURCE_IP@
+    -- setting, Global Accelerator uses the \"two-tuple\" (2-tuple) properties—
+    -- source (client) IP address and destination IP address—to select the hash
+    -- value.
+    --
+    -- The default value is @NONE@.
+    clientAffinity :: Prelude.Maybe ClientAffinity,
+    -- | The updated list of port ranges for the connections from clients to the
+    -- accelerator.
+    portRanges :: Prelude.Maybe (Prelude.NonEmpty PortRange),
+    -- | The updated protocol for the connections from clients to the
+    -- accelerator.
+    protocol :: Prelude.Maybe Protocol,
+    -- | The Amazon Resource Name (ARN) of the listener to update.
+    listenerArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateListener' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientAffinity', 'updateListener_clientAffinity' - Client affinity lets you direct all requests from a user to the same
+-- endpoint, if you have stateful applications, regardless of the port and
+-- protocol of the client request. Client affinity gives you control over
+-- whether to always route each client to the same specific endpoint.
+--
+-- Global Accelerator uses a consistent-flow hashing algorithm to choose
+-- the optimal endpoint for a connection. If client affinity is @NONE@,
+-- Global Accelerator uses the \"five-tuple\" (5-tuple) properties—source
+-- IP address, source port, destination IP address, destination port, and
+-- protocol—to select the hash value, and then chooses the best endpoint.
+-- However, with this setting, if someone uses different ports to connect
+-- to Global Accelerator, their connections might not be always routed to
+-- the same endpoint because the hash value changes.
+--
+-- If you want a given client to always be routed to the same endpoint, set
+-- client affinity to @SOURCE_IP@ instead. When you use the @SOURCE_IP@
+-- setting, Global Accelerator uses the \"two-tuple\" (2-tuple) properties—
+-- source (client) IP address and destination IP address—to select the hash
+-- value.
+--
+-- The default value is @NONE@.
+--
+-- 'portRanges', 'updateListener_portRanges' - The updated list of port ranges for the connections from clients to the
+-- accelerator.
+--
+-- 'protocol', 'updateListener_protocol' - The updated protocol for the connections from clients to the
+-- accelerator.
+--
+-- 'listenerArn', 'updateListener_listenerArn' - The Amazon Resource Name (ARN) of the listener to update.
+newUpdateListener ::
+  -- | 'listenerArn'
+  Prelude.Text ->
+  UpdateListener
+newUpdateListener pListenerArn_ =
+  UpdateListener'
+    { clientAffinity = Prelude.Nothing,
+      portRanges = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      listenerArn = pListenerArn_
+    }
+
+-- | Client affinity lets you direct all requests from a user to the same
+-- endpoint, if you have stateful applications, regardless of the port and
+-- protocol of the client request. Client affinity gives you control over
+-- whether to always route each client to the same specific endpoint.
+--
+-- Global Accelerator uses a consistent-flow hashing algorithm to choose
+-- the optimal endpoint for a connection. If client affinity is @NONE@,
+-- Global Accelerator uses the \"five-tuple\" (5-tuple) properties—source
+-- IP address, source port, destination IP address, destination port, and
+-- protocol—to select the hash value, and then chooses the best endpoint.
+-- However, with this setting, if someone uses different ports to connect
+-- to Global Accelerator, their connections might not be always routed to
+-- the same endpoint because the hash value changes.
+--
+-- If you want a given client to always be routed to the same endpoint, set
+-- client affinity to @SOURCE_IP@ instead. When you use the @SOURCE_IP@
+-- setting, Global Accelerator uses the \"two-tuple\" (2-tuple) properties—
+-- source (client) IP address and destination IP address—to select the hash
+-- value.
+--
+-- The default value is @NONE@.
+updateListener_clientAffinity :: Lens.Lens' UpdateListener (Prelude.Maybe ClientAffinity)
+updateListener_clientAffinity = Lens.lens (\UpdateListener' {clientAffinity} -> clientAffinity) (\s@UpdateListener' {} a -> s {clientAffinity = a} :: UpdateListener)
+
+-- | The updated list of port ranges for the connections from clients to the
+-- accelerator.
+updateListener_portRanges :: Lens.Lens' UpdateListener (Prelude.Maybe (Prelude.NonEmpty PortRange))
+updateListener_portRanges = Lens.lens (\UpdateListener' {portRanges} -> portRanges) (\s@UpdateListener' {} a -> s {portRanges = a} :: UpdateListener) Prelude.. Lens.mapping Lens.coerced
+
+-- | The updated protocol for the connections from clients to the
+-- accelerator.
+updateListener_protocol :: Lens.Lens' UpdateListener (Prelude.Maybe Protocol)
+updateListener_protocol = Lens.lens (\UpdateListener' {protocol} -> protocol) (\s@UpdateListener' {} a -> s {protocol = a} :: UpdateListener)
+
+-- | The Amazon Resource Name (ARN) of the listener to update.
+updateListener_listenerArn :: Lens.Lens' UpdateListener Prelude.Text
+updateListener_listenerArn = Lens.lens (\UpdateListener' {listenerArn} -> listenerArn) (\s@UpdateListener' {} a -> s {listenerArn = a} :: UpdateListener)
+
+instance Core.AWSRequest UpdateListener where
+  type
+    AWSResponse UpdateListener =
+      UpdateListenerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateListenerResponse'
+            Prelude.<$> (x Data..?> "Listener")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateListener where
+  hashWithSalt _salt UpdateListener' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientAffinity
+      `Prelude.hashWithSalt` portRanges
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` listenerArn
+
+instance Prelude.NFData UpdateListener where
+  rnf UpdateListener' {..} =
+    Prelude.rnf clientAffinity
+      `Prelude.seq` Prelude.rnf portRanges
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf listenerArn
+
+instance Data.ToHeaders UpdateListener where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.UpdateListener" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateListener where
+  toJSON UpdateListener' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientAffinity" Data..=)
+              Prelude.<$> clientAffinity,
+            ("PortRanges" Data..=) Prelude.<$> portRanges,
+            ("Protocol" Data..=) Prelude.<$> protocol,
+            Prelude.Just ("ListenerArn" Data..= listenerArn)
+          ]
+      )
+
+instance Data.ToPath UpdateListener where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateListener where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateListenerResponse' smart constructor.
+data UpdateListenerResponse = UpdateListenerResponse'
+  { -- | Information for the updated listener.
+    listener :: Prelude.Maybe Listener,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateListenerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'listener', 'updateListenerResponse_listener' - Information for the updated listener.
+--
+-- 'httpStatus', 'updateListenerResponse_httpStatus' - The response's http status code.
+newUpdateListenerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateListenerResponse
+newUpdateListenerResponse pHttpStatus_ =
+  UpdateListenerResponse'
+    { listener = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information for the updated listener.
+updateListenerResponse_listener :: Lens.Lens' UpdateListenerResponse (Prelude.Maybe Listener)
+updateListenerResponse_listener = Lens.lens (\UpdateListenerResponse' {listener} -> listener) (\s@UpdateListenerResponse' {} a -> s {listener = a} :: UpdateListenerResponse)
+
+-- | The response's http status code.
+updateListenerResponse_httpStatus :: Lens.Lens' UpdateListenerResponse Prelude.Int
+updateListenerResponse_httpStatus = Lens.lens (\UpdateListenerResponse' {httpStatus} -> httpStatus) (\s@UpdateListenerResponse' {} a -> s {httpStatus = a} :: UpdateListenerResponse)
+
+instance Prelude.NFData UpdateListenerResponse where
+  rnf UpdateListenerResponse' {..} =
+    Prelude.rnf listener
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GlobalAccelerator/Waiters.hs b/gen/Amazonka/GlobalAccelerator/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/Waiters.hs
@@ -0,0 +1,24 @@
+{-# 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.GlobalAccelerator.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.GlobalAccelerator.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GlobalAccelerator.Lens
+import Amazonka.GlobalAccelerator.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/gen/Amazonka/GlobalAccelerator/WithdrawByoipCidr.hs b/gen/Amazonka/GlobalAccelerator/WithdrawByoipCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GlobalAccelerator/WithdrawByoipCidr.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.GlobalAccelerator.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 propagation delays.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/global-accelerator/latest/dg/using-byoip.html Bring your own IP addresses (BYOIP)>
+-- in the /Global Accelerator Developer Guide/.
+module Amazonka.GlobalAccelerator.WithdrawByoipCidr
+  ( -- * Creating a Request
+    WithdrawByoipCidr (..),
+    newWithdrawByoipCidr,
+
+    -- * Request Lenses
+    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.GlobalAccelerator.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'
+  { -- | 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:
+--
+-- 'cidr', 'withdrawByoipCidr_cidr' - The address range, in CIDR notation.
+newWithdrawByoipCidr ::
+  -- | 'cidr'
+  Prelude.Text ->
+  WithdrawByoipCidr
+newWithdrawByoipCidr pCidr_ =
+  WithdrawByoipCidr' {cidr = pCidr_}
+
+-- | 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.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \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` cidr
+
+instance Prelude.NFData WithdrawByoipCidr where
+  rnf WithdrawByoipCidr' {..} = Prelude.rnf cidr
+
+instance Data.ToHeaders WithdrawByoipCidr where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "GlobalAccelerator_V20180706.WithdrawByoipCidr" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON WithdrawByoipCidr where
+  toJSON WithdrawByoipCidr' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Cidr" Data..= cidr)]
+      )
+
+instance Data.ToPath WithdrawByoipCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery WithdrawByoipCidr where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /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/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.GlobalAccelerator
+import Test.Amazonka.GlobalAccelerator.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "GlobalAccelerator"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/GlobalAccelerator.hs b/test/Test/Amazonka/Gen/GlobalAccelerator.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/GlobalAccelerator.hs
@@ -0,0 +1,1018 @@
+{-# 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.GlobalAccelerator
+-- Copyright   : (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.GlobalAccelerator where
+
+import Amazonka.GlobalAccelerator
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.GlobalAccelerator.Internal
+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"
+--         [ requestAddCustomRoutingEndpoints $
+--             newAddCustomRoutingEndpoints
+--
+--         , requestAddEndpoints $
+--             newAddEndpoints
+--
+--         , requestAdvertiseByoipCidr $
+--             newAdvertiseByoipCidr
+--
+--         , requestAllowCustomRoutingTraffic $
+--             newAllowCustomRoutingTraffic
+--
+--         , requestCreateAccelerator $
+--             newCreateAccelerator
+--
+--         , requestCreateCustomRoutingAccelerator $
+--             newCreateCustomRoutingAccelerator
+--
+--         , requestCreateCustomRoutingEndpointGroup $
+--             newCreateCustomRoutingEndpointGroup
+--
+--         , requestCreateCustomRoutingListener $
+--             newCreateCustomRoutingListener
+--
+--         , requestCreateEndpointGroup $
+--             newCreateEndpointGroup
+--
+--         , requestCreateListener $
+--             newCreateListener
+--
+--         , requestDeleteAccelerator $
+--             newDeleteAccelerator
+--
+--         , requestDeleteCustomRoutingAccelerator $
+--             newDeleteCustomRoutingAccelerator
+--
+--         , requestDeleteCustomRoutingEndpointGroup $
+--             newDeleteCustomRoutingEndpointGroup
+--
+--         , requestDeleteCustomRoutingListener $
+--             newDeleteCustomRoutingListener
+--
+--         , requestDeleteEndpointGroup $
+--             newDeleteEndpointGroup
+--
+--         , requestDeleteListener $
+--             newDeleteListener
+--
+--         , requestDenyCustomRoutingTraffic $
+--             newDenyCustomRoutingTraffic
+--
+--         , requestDeprovisionByoipCidr $
+--             newDeprovisionByoipCidr
+--
+--         , requestDescribeAccelerator $
+--             newDescribeAccelerator
+--
+--         , requestDescribeAcceleratorAttributes $
+--             newDescribeAcceleratorAttributes
+--
+--         , requestDescribeCustomRoutingAccelerator $
+--             newDescribeCustomRoutingAccelerator
+--
+--         , requestDescribeCustomRoutingAcceleratorAttributes $
+--             newDescribeCustomRoutingAcceleratorAttributes
+--
+--         , requestDescribeCustomRoutingEndpointGroup $
+--             newDescribeCustomRoutingEndpointGroup
+--
+--         , requestDescribeCustomRoutingListener $
+--             newDescribeCustomRoutingListener
+--
+--         , requestDescribeEndpointGroup $
+--             newDescribeEndpointGroup
+--
+--         , requestDescribeListener $
+--             newDescribeListener
+--
+--         , requestListAccelerators $
+--             newListAccelerators
+--
+--         , requestListByoipCidrs $
+--             newListByoipCidrs
+--
+--         , requestListCustomRoutingAccelerators $
+--             newListCustomRoutingAccelerators
+--
+--         , requestListCustomRoutingEndpointGroups $
+--             newListCustomRoutingEndpointGroups
+--
+--         , requestListCustomRoutingListeners $
+--             newListCustomRoutingListeners
+--
+--         , requestListCustomRoutingPortMappings $
+--             newListCustomRoutingPortMappings
+--
+--         , requestListCustomRoutingPortMappingsByDestination $
+--             newListCustomRoutingPortMappingsByDestination
+--
+--         , requestListEndpointGroups $
+--             newListEndpointGroups
+--
+--         , requestListListeners $
+--             newListListeners
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestProvisionByoipCidr $
+--             newProvisionByoipCidr
+--
+--         , requestRemoveCustomRoutingEndpoints $
+--             newRemoveCustomRoutingEndpoints
+--
+--         , requestRemoveEndpoints $
+--             newRemoveEndpoints
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateAccelerator $
+--             newUpdateAccelerator
+--
+--         , requestUpdateAcceleratorAttributes $
+--             newUpdateAcceleratorAttributes
+--
+--         , requestUpdateCustomRoutingAccelerator $
+--             newUpdateCustomRoutingAccelerator
+--
+--         , requestUpdateCustomRoutingAcceleratorAttributes $
+--             newUpdateCustomRoutingAcceleratorAttributes
+--
+--         , requestUpdateCustomRoutingListener $
+--             newUpdateCustomRoutingListener
+--
+--         , requestUpdateEndpointGroup $
+--             newUpdateEndpointGroup
+--
+--         , requestUpdateListener $
+--             newUpdateListener
+--
+--         , requestWithdrawByoipCidr $
+--             newWithdrawByoipCidr
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAddCustomRoutingEndpoints $
+--             newAddCustomRoutingEndpointsResponse
+--
+--         , responseAddEndpoints $
+--             newAddEndpointsResponse
+--
+--         , responseAdvertiseByoipCidr $
+--             newAdvertiseByoipCidrResponse
+--
+--         , responseAllowCustomRoutingTraffic $
+--             newAllowCustomRoutingTrafficResponse
+--
+--         , responseCreateAccelerator $
+--             newCreateAcceleratorResponse
+--
+--         , responseCreateCustomRoutingAccelerator $
+--             newCreateCustomRoutingAcceleratorResponse
+--
+--         , responseCreateCustomRoutingEndpointGroup $
+--             newCreateCustomRoutingEndpointGroupResponse
+--
+--         , responseCreateCustomRoutingListener $
+--             newCreateCustomRoutingListenerResponse
+--
+--         , responseCreateEndpointGroup $
+--             newCreateEndpointGroupResponse
+--
+--         , responseCreateListener $
+--             newCreateListenerResponse
+--
+--         , responseDeleteAccelerator $
+--             newDeleteAcceleratorResponse
+--
+--         , responseDeleteCustomRoutingAccelerator $
+--             newDeleteCustomRoutingAcceleratorResponse
+--
+--         , responseDeleteCustomRoutingEndpointGroup $
+--             newDeleteCustomRoutingEndpointGroupResponse
+--
+--         , responseDeleteCustomRoutingListener $
+--             newDeleteCustomRoutingListenerResponse
+--
+--         , responseDeleteEndpointGroup $
+--             newDeleteEndpointGroupResponse
+--
+--         , responseDeleteListener $
+--             newDeleteListenerResponse
+--
+--         , responseDenyCustomRoutingTraffic $
+--             newDenyCustomRoutingTrafficResponse
+--
+--         , responseDeprovisionByoipCidr $
+--             newDeprovisionByoipCidrResponse
+--
+--         , responseDescribeAccelerator $
+--             newDescribeAcceleratorResponse
+--
+--         , responseDescribeAcceleratorAttributes $
+--             newDescribeAcceleratorAttributesResponse
+--
+--         , responseDescribeCustomRoutingAccelerator $
+--             newDescribeCustomRoutingAcceleratorResponse
+--
+--         , responseDescribeCustomRoutingAcceleratorAttributes $
+--             newDescribeCustomRoutingAcceleratorAttributesResponse
+--
+--         , responseDescribeCustomRoutingEndpointGroup $
+--             newDescribeCustomRoutingEndpointGroupResponse
+--
+--         , responseDescribeCustomRoutingListener $
+--             newDescribeCustomRoutingListenerResponse
+--
+--         , responseDescribeEndpointGroup $
+--             newDescribeEndpointGroupResponse
+--
+--         , responseDescribeListener $
+--             newDescribeListenerResponse
+--
+--         , responseListAccelerators $
+--             newListAcceleratorsResponse
+--
+--         , responseListByoipCidrs $
+--             newListByoipCidrsResponse
+--
+--         , responseListCustomRoutingAccelerators $
+--             newListCustomRoutingAcceleratorsResponse
+--
+--         , responseListCustomRoutingEndpointGroups $
+--             newListCustomRoutingEndpointGroupsResponse
+--
+--         , responseListCustomRoutingListeners $
+--             newListCustomRoutingListenersResponse
+--
+--         , responseListCustomRoutingPortMappings $
+--             newListCustomRoutingPortMappingsResponse
+--
+--         , responseListCustomRoutingPortMappingsByDestination $
+--             newListCustomRoutingPortMappingsByDestinationResponse
+--
+--         , responseListEndpointGroups $
+--             newListEndpointGroupsResponse
+--
+--         , responseListListeners $
+--             newListListenersResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseProvisionByoipCidr $
+--             newProvisionByoipCidrResponse
+--
+--         , responseRemoveCustomRoutingEndpoints $
+--             newRemoveCustomRoutingEndpointsResponse
+--
+--         , responseRemoveEndpoints $
+--             newRemoveEndpointsResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateAccelerator $
+--             newUpdateAcceleratorResponse
+--
+--         , responseUpdateAcceleratorAttributes $
+--             newUpdateAcceleratorAttributesResponse
+--
+--         , responseUpdateCustomRoutingAccelerator $
+--             newUpdateCustomRoutingAcceleratorResponse
+--
+--         , responseUpdateCustomRoutingAcceleratorAttributes $
+--             newUpdateCustomRoutingAcceleratorAttributesResponse
+--
+--         , responseUpdateCustomRoutingListener $
+--             newUpdateCustomRoutingListenerResponse
+--
+--         , responseUpdateEndpointGroup $
+--             newUpdateEndpointGroupResponse
+--
+--         , responseUpdateListener $
+--             newUpdateListenerResponse
+--
+--         , responseWithdrawByoipCidr $
+--             newWithdrawByoipCidrResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAddCustomRoutingEndpoints :: AddCustomRoutingEndpoints -> TestTree
+requestAddCustomRoutingEndpoints =
+  req
+    "AddCustomRoutingEndpoints"
+    "fixture/AddCustomRoutingEndpoints.yaml"
+
+requestAddEndpoints :: AddEndpoints -> TestTree
+requestAddEndpoints =
+  req
+    "AddEndpoints"
+    "fixture/AddEndpoints.yaml"
+
+requestAdvertiseByoipCidr :: AdvertiseByoipCidr -> TestTree
+requestAdvertiseByoipCidr =
+  req
+    "AdvertiseByoipCidr"
+    "fixture/AdvertiseByoipCidr.yaml"
+
+requestAllowCustomRoutingTraffic :: AllowCustomRoutingTraffic -> TestTree
+requestAllowCustomRoutingTraffic =
+  req
+    "AllowCustomRoutingTraffic"
+    "fixture/AllowCustomRoutingTraffic.yaml"
+
+requestCreateAccelerator :: CreateAccelerator -> TestTree
+requestCreateAccelerator =
+  req
+    "CreateAccelerator"
+    "fixture/CreateAccelerator.yaml"
+
+requestCreateCustomRoutingAccelerator :: CreateCustomRoutingAccelerator -> TestTree
+requestCreateCustomRoutingAccelerator =
+  req
+    "CreateCustomRoutingAccelerator"
+    "fixture/CreateCustomRoutingAccelerator.yaml"
+
+requestCreateCustomRoutingEndpointGroup :: CreateCustomRoutingEndpointGroup -> TestTree
+requestCreateCustomRoutingEndpointGroup =
+  req
+    "CreateCustomRoutingEndpointGroup"
+    "fixture/CreateCustomRoutingEndpointGroup.yaml"
+
+requestCreateCustomRoutingListener :: CreateCustomRoutingListener -> TestTree
+requestCreateCustomRoutingListener =
+  req
+    "CreateCustomRoutingListener"
+    "fixture/CreateCustomRoutingListener.yaml"
+
+requestCreateEndpointGroup :: CreateEndpointGroup -> TestTree
+requestCreateEndpointGroup =
+  req
+    "CreateEndpointGroup"
+    "fixture/CreateEndpointGroup.yaml"
+
+requestCreateListener :: CreateListener -> TestTree
+requestCreateListener =
+  req
+    "CreateListener"
+    "fixture/CreateListener.yaml"
+
+requestDeleteAccelerator :: DeleteAccelerator -> TestTree
+requestDeleteAccelerator =
+  req
+    "DeleteAccelerator"
+    "fixture/DeleteAccelerator.yaml"
+
+requestDeleteCustomRoutingAccelerator :: DeleteCustomRoutingAccelerator -> TestTree
+requestDeleteCustomRoutingAccelerator =
+  req
+    "DeleteCustomRoutingAccelerator"
+    "fixture/DeleteCustomRoutingAccelerator.yaml"
+
+requestDeleteCustomRoutingEndpointGroup :: DeleteCustomRoutingEndpointGroup -> TestTree
+requestDeleteCustomRoutingEndpointGroup =
+  req
+    "DeleteCustomRoutingEndpointGroup"
+    "fixture/DeleteCustomRoutingEndpointGroup.yaml"
+
+requestDeleteCustomRoutingListener :: DeleteCustomRoutingListener -> TestTree
+requestDeleteCustomRoutingListener =
+  req
+    "DeleteCustomRoutingListener"
+    "fixture/DeleteCustomRoutingListener.yaml"
+
+requestDeleteEndpointGroup :: DeleteEndpointGroup -> TestTree
+requestDeleteEndpointGroup =
+  req
+    "DeleteEndpointGroup"
+    "fixture/DeleteEndpointGroup.yaml"
+
+requestDeleteListener :: DeleteListener -> TestTree
+requestDeleteListener =
+  req
+    "DeleteListener"
+    "fixture/DeleteListener.yaml"
+
+requestDenyCustomRoutingTraffic :: DenyCustomRoutingTraffic -> TestTree
+requestDenyCustomRoutingTraffic =
+  req
+    "DenyCustomRoutingTraffic"
+    "fixture/DenyCustomRoutingTraffic.yaml"
+
+requestDeprovisionByoipCidr :: DeprovisionByoipCidr -> TestTree
+requestDeprovisionByoipCidr =
+  req
+    "DeprovisionByoipCidr"
+    "fixture/DeprovisionByoipCidr.yaml"
+
+requestDescribeAccelerator :: DescribeAccelerator -> TestTree
+requestDescribeAccelerator =
+  req
+    "DescribeAccelerator"
+    "fixture/DescribeAccelerator.yaml"
+
+requestDescribeAcceleratorAttributes :: DescribeAcceleratorAttributes -> TestTree
+requestDescribeAcceleratorAttributes =
+  req
+    "DescribeAcceleratorAttributes"
+    "fixture/DescribeAcceleratorAttributes.yaml"
+
+requestDescribeCustomRoutingAccelerator :: DescribeCustomRoutingAccelerator -> TestTree
+requestDescribeCustomRoutingAccelerator =
+  req
+    "DescribeCustomRoutingAccelerator"
+    "fixture/DescribeCustomRoutingAccelerator.yaml"
+
+requestDescribeCustomRoutingAcceleratorAttributes :: DescribeCustomRoutingAcceleratorAttributes -> TestTree
+requestDescribeCustomRoutingAcceleratorAttributes =
+  req
+    "DescribeCustomRoutingAcceleratorAttributes"
+    "fixture/DescribeCustomRoutingAcceleratorAttributes.yaml"
+
+requestDescribeCustomRoutingEndpointGroup :: DescribeCustomRoutingEndpointGroup -> TestTree
+requestDescribeCustomRoutingEndpointGroup =
+  req
+    "DescribeCustomRoutingEndpointGroup"
+    "fixture/DescribeCustomRoutingEndpointGroup.yaml"
+
+requestDescribeCustomRoutingListener :: DescribeCustomRoutingListener -> TestTree
+requestDescribeCustomRoutingListener =
+  req
+    "DescribeCustomRoutingListener"
+    "fixture/DescribeCustomRoutingListener.yaml"
+
+requestDescribeEndpointGroup :: DescribeEndpointGroup -> TestTree
+requestDescribeEndpointGroup =
+  req
+    "DescribeEndpointGroup"
+    "fixture/DescribeEndpointGroup.yaml"
+
+requestDescribeListener :: DescribeListener -> TestTree
+requestDescribeListener =
+  req
+    "DescribeListener"
+    "fixture/DescribeListener.yaml"
+
+requestListAccelerators :: ListAccelerators -> TestTree
+requestListAccelerators =
+  req
+    "ListAccelerators"
+    "fixture/ListAccelerators.yaml"
+
+requestListByoipCidrs :: ListByoipCidrs -> TestTree
+requestListByoipCidrs =
+  req
+    "ListByoipCidrs"
+    "fixture/ListByoipCidrs.yaml"
+
+requestListCustomRoutingAccelerators :: ListCustomRoutingAccelerators -> TestTree
+requestListCustomRoutingAccelerators =
+  req
+    "ListCustomRoutingAccelerators"
+    "fixture/ListCustomRoutingAccelerators.yaml"
+
+requestListCustomRoutingEndpointGroups :: ListCustomRoutingEndpointGroups -> TestTree
+requestListCustomRoutingEndpointGroups =
+  req
+    "ListCustomRoutingEndpointGroups"
+    "fixture/ListCustomRoutingEndpointGroups.yaml"
+
+requestListCustomRoutingListeners :: ListCustomRoutingListeners -> TestTree
+requestListCustomRoutingListeners =
+  req
+    "ListCustomRoutingListeners"
+    "fixture/ListCustomRoutingListeners.yaml"
+
+requestListCustomRoutingPortMappings :: ListCustomRoutingPortMappings -> TestTree
+requestListCustomRoutingPortMappings =
+  req
+    "ListCustomRoutingPortMappings"
+    "fixture/ListCustomRoutingPortMappings.yaml"
+
+requestListCustomRoutingPortMappingsByDestination :: ListCustomRoutingPortMappingsByDestination -> TestTree
+requestListCustomRoutingPortMappingsByDestination =
+  req
+    "ListCustomRoutingPortMappingsByDestination"
+    "fixture/ListCustomRoutingPortMappingsByDestination.yaml"
+
+requestListEndpointGroups :: ListEndpointGroups -> TestTree
+requestListEndpointGroups =
+  req
+    "ListEndpointGroups"
+    "fixture/ListEndpointGroups.yaml"
+
+requestListListeners :: ListListeners -> TestTree
+requestListListeners =
+  req
+    "ListListeners"
+    "fixture/ListListeners.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestProvisionByoipCidr :: ProvisionByoipCidr -> TestTree
+requestProvisionByoipCidr =
+  req
+    "ProvisionByoipCidr"
+    "fixture/ProvisionByoipCidr.yaml"
+
+requestRemoveCustomRoutingEndpoints :: RemoveCustomRoutingEndpoints -> TestTree
+requestRemoveCustomRoutingEndpoints =
+  req
+    "RemoveCustomRoutingEndpoints"
+    "fixture/RemoveCustomRoutingEndpoints.yaml"
+
+requestRemoveEndpoints :: RemoveEndpoints -> TestTree
+requestRemoveEndpoints =
+  req
+    "RemoveEndpoints"
+    "fixture/RemoveEndpoints.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateAccelerator :: UpdateAccelerator -> TestTree
+requestUpdateAccelerator =
+  req
+    "UpdateAccelerator"
+    "fixture/UpdateAccelerator.yaml"
+
+requestUpdateAcceleratorAttributes :: UpdateAcceleratorAttributes -> TestTree
+requestUpdateAcceleratorAttributes =
+  req
+    "UpdateAcceleratorAttributes"
+    "fixture/UpdateAcceleratorAttributes.yaml"
+
+requestUpdateCustomRoutingAccelerator :: UpdateCustomRoutingAccelerator -> TestTree
+requestUpdateCustomRoutingAccelerator =
+  req
+    "UpdateCustomRoutingAccelerator"
+    "fixture/UpdateCustomRoutingAccelerator.yaml"
+
+requestUpdateCustomRoutingAcceleratorAttributes :: UpdateCustomRoutingAcceleratorAttributes -> TestTree
+requestUpdateCustomRoutingAcceleratorAttributes =
+  req
+    "UpdateCustomRoutingAcceleratorAttributes"
+    "fixture/UpdateCustomRoutingAcceleratorAttributes.yaml"
+
+requestUpdateCustomRoutingListener :: UpdateCustomRoutingListener -> TestTree
+requestUpdateCustomRoutingListener =
+  req
+    "UpdateCustomRoutingListener"
+    "fixture/UpdateCustomRoutingListener.yaml"
+
+requestUpdateEndpointGroup :: UpdateEndpointGroup -> TestTree
+requestUpdateEndpointGroup =
+  req
+    "UpdateEndpointGroup"
+    "fixture/UpdateEndpointGroup.yaml"
+
+requestUpdateListener :: UpdateListener -> TestTree
+requestUpdateListener =
+  req
+    "UpdateListener"
+    "fixture/UpdateListener.yaml"
+
+requestWithdrawByoipCidr :: WithdrawByoipCidr -> TestTree
+requestWithdrawByoipCidr =
+  req
+    "WithdrawByoipCidr"
+    "fixture/WithdrawByoipCidr.yaml"
+
+-- Responses
+
+responseAddCustomRoutingEndpoints :: AddCustomRoutingEndpointsResponse -> TestTree
+responseAddCustomRoutingEndpoints =
+  res
+    "AddCustomRoutingEndpointsResponse"
+    "fixture/AddCustomRoutingEndpointsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AddCustomRoutingEndpoints)
+
+responseAddEndpoints :: AddEndpointsResponse -> TestTree
+responseAddEndpoints =
+  res
+    "AddEndpointsResponse"
+    "fixture/AddEndpointsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AddEndpoints)
+
+responseAdvertiseByoipCidr :: AdvertiseByoipCidrResponse -> TestTree
+responseAdvertiseByoipCidr =
+  res
+    "AdvertiseByoipCidrResponse"
+    "fixture/AdvertiseByoipCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AdvertiseByoipCidr)
+
+responseAllowCustomRoutingTraffic :: AllowCustomRoutingTrafficResponse -> TestTree
+responseAllowCustomRoutingTraffic =
+  res
+    "AllowCustomRoutingTrafficResponse"
+    "fixture/AllowCustomRoutingTrafficResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AllowCustomRoutingTraffic)
+
+responseCreateAccelerator :: CreateAcceleratorResponse -> TestTree
+responseCreateAccelerator =
+  res
+    "CreateAcceleratorResponse"
+    "fixture/CreateAcceleratorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAccelerator)
+
+responseCreateCustomRoutingAccelerator :: CreateCustomRoutingAcceleratorResponse -> TestTree
+responseCreateCustomRoutingAccelerator =
+  res
+    "CreateCustomRoutingAcceleratorResponse"
+    "fixture/CreateCustomRoutingAcceleratorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCustomRoutingAccelerator)
+
+responseCreateCustomRoutingEndpointGroup :: CreateCustomRoutingEndpointGroupResponse -> TestTree
+responseCreateCustomRoutingEndpointGroup =
+  res
+    "CreateCustomRoutingEndpointGroupResponse"
+    "fixture/CreateCustomRoutingEndpointGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCustomRoutingEndpointGroup)
+
+responseCreateCustomRoutingListener :: CreateCustomRoutingListenerResponse -> TestTree
+responseCreateCustomRoutingListener =
+  res
+    "CreateCustomRoutingListenerResponse"
+    "fixture/CreateCustomRoutingListenerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCustomRoutingListener)
+
+responseCreateEndpointGroup :: CreateEndpointGroupResponse -> TestTree
+responseCreateEndpointGroup =
+  res
+    "CreateEndpointGroupResponse"
+    "fixture/CreateEndpointGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateEndpointGroup)
+
+responseCreateListener :: CreateListenerResponse -> TestTree
+responseCreateListener =
+  res
+    "CreateListenerResponse"
+    "fixture/CreateListenerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateListener)
+
+responseDeleteAccelerator :: DeleteAcceleratorResponse -> TestTree
+responseDeleteAccelerator =
+  res
+    "DeleteAcceleratorResponse"
+    "fixture/DeleteAcceleratorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAccelerator)
+
+responseDeleteCustomRoutingAccelerator :: DeleteCustomRoutingAcceleratorResponse -> TestTree
+responseDeleteCustomRoutingAccelerator =
+  res
+    "DeleteCustomRoutingAcceleratorResponse"
+    "fixture/DeleteCustomRoutingAcceleratorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCustomRoutingAccelerator)
+
+responseDeleteCustomRoutingEndpointGroup :: DeleteCustomRoutingEndpointGroupResponse -> TestTree
+responseDeleteCustomRoutingEndpointGroup =
+  res
+    "DeleteCustomRoutingEndpointGroupResponse"
+    "fixture/DeleteCustomRoutingEndpointGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCustomRoutingEndpointGroup)
+
+responseDeleteCustomRoutingListener :: DeleteCustomRoutingListenerResponse -> TestTree
+responseDeleteCustomRoutingListener =
+  res
+    "DeleteCustomRoutingListenerResponse"
+    "fixture/DeleteCustomRoutingListenerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCustomRoutingListener)
+
+responseDeleteEndpointGroup :: DeleteEndpointGroupResponse -> TestTree
+responseDeleteEndpointGroup =
+  res
+    "DeleteEndpointGroupResponse"
+    "fixture/DeleteEndpointGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEndpointGroup)
+
+responseDeleteListener :: DeleteListenerResponse -> TestTree
+responseDeleteListener =
+  res
+    "DeleteListenerResponse"
+    "fixture/DeleteListenerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteListener)
+
+responseDenyCustomRoutingTraffic :: DenyCustomRoutingTrafficResponse -> TestTree
+responseDenyCustomRoutingTraffic =
+  res
+    "DenyCustomRoutingTrafficResponse"
+    "fixture/DenyCustomRoutingTrafficResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DenyCustomRoutingTraffic)
+
+responseDeprovisionByoipCidr :: DeprovisionByoipCidrResponse -> TestTree
+responseDeprovisionByoipCidr =
+  res
+    "DeprovisionByoipCidrResponse"
+    "fixture/DeprovisionByoipCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeprovisionByoipCidr)
+
+responseDescribeAccelerator :: DescribeAcceleratorResponse -> TestTree
+responseDescribeAccelerator =
+  res
+    "DescribeAcceleratorResponse"
+    "fixture/DescribeAcceleratorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAccelerator)
+
+responseDescribeAcceleratorAttributes :: DescribeAcceleratorAttributesResponse -> TestTree
+responseDescribeAcceleratorAttributes =
+  res
+    "DescribeAcceleratorAttributesResponse"
+    "fixture/DescribeAcceleratorAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAcceleratorAttributes)
+
+responseDescribeCustomRoutingAccelerator :: DescribeCustomRoutingAcceleratorResponse -> TestTree
+responseDescribeCustomRoutingAccelerator =
+  res
+    "DescribeCustomRoutingAcceleratorResponse"
+    "fixture/DescribeCustomRoutingAcceleratorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeCustomRoutingAccelerator)
+
+responseDescribeCustomRoutingAcceleratorAttributes :: DescribeCustomRoutingAcceleratorAttributesResponse -> TestTree
+responseDescribeCustomRoutingAcceleratorAttributes =
+  res
+    "DescribeCustomRoutingAcceleratorAttributesResponse"
+    "fixture/DescribeCustomRoutingAcceleratorAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeCustomRoutingAcceleratorAttributes)
+
+responseDescribeCustomRoutingEndpointGroup :: DescribeCustomRoutingEndpointGroupResponse -> TestTree
+responseDescribeCustomRoutingEndpointGroup =
+  res
+    "DescribeCustomRoutingEndpointGroupResponse"
+    "fixture/DescribeCustomRoutingEndpointGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeCustomRoutingEndpointGroup)
+
+responseDescribeCustomRoutingListener :: DescribeCustomRoutingListenerResponse -> TestTree
+responseDescribeCustomRoutingListener =
+  res
+    "DescribeCustomRoutingListenerResponse"
+    "fixture/DescribeCustomRoutingListenerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeCustomRoutingListener)
+
+responseDescribeEndpointGroup :: DescribeEndpointGroupResponse -> TestTree
+responseDescribeEndpointGroup =
+  res
+    "DescribeEndpointGroupResponse"
+    "fixture/DescribeEndpointGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeEndpointGroup)
+
+responseDescribeListener :: DescribeListenerResponse -> TestTree
+responseDescribeListener =
+  res
+    "DescribeListenerResponse"
+    "fixture/DescribeListenerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeListener)
+
+responseListAccelerators :: ListAcceleratorsResponse -> TestTree
+responseListAccelerators =
+  res
+    "ListAcceleratorsResponse"
+    "fixture/ListAcceleratorsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAccelerators)
+
+responseListByoipCidrs :: ListByoipCidrsResponse -> TestTree
+responseListByoipCidrs =
+  res
+    "ListByoipCidrsResponse"
+    "fixture/ListByoipCidrsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListByoipCidrs)
+
+responseListCustomRoutingAccelerators :: ListCustomRoutingAcceleratorsResponse -> TestTree
+responseListCustomRoutingAccelerators =
+  res
+    "ListCustomRoutingAcceleratorsResponse"
+    "fixture/ListCustomRoutingAcceleratorsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCustomRoutingAccelerators)
+
+responseListCustomRoutingEndpointGroups :: ListCustomRoutingEndpointGroupsResponse -> TestTree
+responseListCustomRoutingEndpointGroups =
+  res
+    "ListCustomRoutingEndpointGroupsResponse"
+    "fixture/ListCustomRoutingEndpointGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCustomRoutingEndpointGroups)
+
+responseListCustomRoutingListeners :: ListCustomRoutingListenersResponse -> TestTree
+responseListCustomRoutingListeners =
+  res
+    "ListCustomRoutingListenersResponse"
+    "fixture/ListCustomRoutingListenersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCustomRoutingListeners)
+
+responseListCustomRoutingPortMappings :: ListCustomRoutingPortMappingsResponse -> TestTree
+responseListCustomRoutingPortMappings =
+  res
+    "ListCustomRoutingPortMappingsResponse"
+    "fixture/ListCustomRoutingPortMappingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCustomRoutingPortMappings)
+
+responseListCustomRoutingPortMappingsByDestination :: ListCustomRoutingPortMappingsByDestinationResponse -> TestTree
+responseListCustomRoutingPortMappingsByDestination =
+  res
+    "ListCustomRoutingPortMappingsByDestinationResponse"
+    "fixture/ListCustomRoutingPortMappingsByDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCustomRoutingPortMappingsByDestination)
+
+responseListEndpointGroups :: ListEndpointGroupsResponse -> TestTree
+responseListEndpointGroups =
+  res
+    "ListEndpointGroupsResponse"
+    "fixture/ListEndpointGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEndpointGroups)
+
+responseListListeners :: ListListenersResponse -> TestTree
+responseListListeners =
+  res
+    "ListListenersResponse"
+    "fixture/ListListenersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListListeners)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseProvisionByoipCidr :: ProvisionByoipCidrResponse -> TestTree
+responseProvisionByoipCidr =
+  res
+    "ProvisionByoipCidrResponse"
+    "fixture/ProvisionByoipCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ProvisionByoipCidr)
+
+responseRemoveCustomRoutingEndpoints :: RemoveCustomRoutingEndpointsResponse -> TestTree
+responseRemoveCustomRoutingEndpoints =
+  res
+    "RemoveCustomRoutingEndpointsResponse"
+    "fixture/RemoveCustomRoutingEndpointsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RemoveCustomRoutingEndpoints)
+
+responseRemoveEndpoints :: RemoveEndpointsResponse -> TestTree
+responseRemoveEndpoints =
+  res
+    "RemoveEndpointsResponse"
+    "fixture/RemoveEndpointsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RemoveEndpoints)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateAccelerator :: UpdateAcceleratorResponse -> TestTree
+responseUpdateAccelerator =
+  res
+    "UpdateAcceleratorResponse"
+    "fixture/UpdateAcceleratorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAccelerator)
+
+responseUpdateAcceleratorAttributes :: UpdateAcceleratorAttributesResponse -> TestTree
+responseUpdateAcceleratorAttributes =
+  res
+    "UpdateAcceleratorAttributesResponse"
+    "fixture/UpdateAcceleratorAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAcceleratorAttributes)
+
+responseUpdateCustomRoutingAccelerator :: UpdateCustomRoutingAcceleratorResponse -> TestTree
+responseUpdateCustomRoutingAccelerator =
+  res
+    "UpdateCustomRoutingAcceleratorResponse"
+    "fixture/UpdateCustomRoutingAcceleratorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateCustomRoutingAccelerator)
+
+responseUpdateCustomRoutingAcceleratorAttributes :: UpdateCustomRoutingAcceleratorAttributesResponse -> TestTree
+responseUpdateCustomRoutingAcceleratorAttributes =
+  res
+    "UpdateCustomRoutingAcceleratorAttributesResponse"
+    "fixture/UpdateCustomRoutingAcceleratorAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateCustomRoutingAcceleratorAttributes)
+
+responseUpdateCustomRoutingListener :: UpdateCustomRoutingListenerResponse -> TestTree
+responseUpdateCustomRoutingListener =
+  res
+    "UpdateCustomRoutingListenerResponse"
+    "fixture/UpdateCustomRoutingListenerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateCustomRoutingListener)
+
+responseUpdateEndpointGroup :: UpdateEndpointGroupResponse -> TestTree
+responseUpdateEndpointGroup =
+  res
+    "UpdateEndpointGroupResponse"
+    "fixture/UpdateEndpointGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateEndpointGroup)
+
+responseUpdateListener :: UpdateListenerResponse -> TestTree
+responseUpdateListener =
+  res
+    "UpdateListenerResponse"
+    "fixture/UpdateListenerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateListener)
+
+responseWithdrawByoipCidr :: WithdrawByoipCidrResponse -> TestTree
+responseWithdrawByoipCidr =
+  res
+    "WithdrawByoipCidrResponse"
+    "fixture/WithdrawByoipCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy WithdrawByoipCidr)
diff --git a/test/Test/Amazonka/GlobalAccelerator.hs b/test/Test/Amazonka/GlobalAccelerator.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/GlobalAccelerator.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.GlobalAccelerator
+-- Copyright   : (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.GlobalAccelerator
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/GlobalAccelerator/Internal.hs b/test/Test/Amazonka/GlobalAccelerator/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/GlobalAccelerator/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.GlobalAccelerator.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.GlobalAccelerator.Internal where
