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 Elastic Kubernetes Service SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2017-11-01@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-eks)
+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.EKS](http://hackage.haskell.org/package/amazonka-eks/docs/Amazonka-EKS.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-eks` 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-eks.cabal b/amazonka-eks.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-eks.cabal
@@ -0,0 +1,185 @@
+cabal-version:      2.2
+name:               amazonka-eks
+version:            2.0
+synopsis:           Amazon Elastic Kubernetes Service 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 @2017-11-01@ 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.EKS.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.EKS" 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-eks
+
+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.EKS
+    Amazonka.EKS.AssociateEncryptionConfig
+    Amazonka.EKS.AssociateIdentityProviderConfig
+    Amazonka.EKS.CreateAddon
+    Amazonka.EKS.CreateCluster
+    Amazonka.EKS.CreateFargateProfile
+    Amazonka.EKS.CreateNodegroup
+    Amazonka.EKS.DeleteAddon
+    Amazonka.EKS.DeleteCluster
+    Amazonka.EKS.DeleteFargateProfile
+    Amazonka.EKS.DeleteNodegroup
+    Amazonka.EKS.DeregisterCluster
+    Amazonka.EKS.DescribeAddon
+    Amazonka.EKS.DescribeAddonConfiguration
+    Amazonka.EKS.DescribeAddonVersions
+    Amazonka.EKS.DescribeCluster
+    Amazonka.EKS.DescribeFargateProfile
+    Amazonka.EKS.DescribeIdentityProviderConfig
+    Amazonka.EKS.DescribeNodegroup
+    Amazonka.EKS.DescribeUpdate
+    Amazonka.EKS.DisassociateIdentityProviderConfig
+    Amazonka.EKS.Lens
+    Amazonka.EKS.ListAddons
+    Amazonka.EKS.ListClusters
+    Amazonka.EKS.ListFargateProfiles
+    Amazonka.EKS.ListIdentityProviderConfigs
+    Amazonka.EKS.ListNodegroups
+    Amazonka.EKS.ListTagsForResource
+    Amazonka.EKS.ListUpdates
+    Amazonka.EKS.RegisterCluster
+    Amazonka.EKS.TagResource
+    Amazonka.EKS.Types
+    Amazonka.EKS.Types.Addon
+    Amazonka.EKS.Types.AddonHealth
+    Amazonka.EKS.Types.AddonInfo
+    Amazonka.EKS.Types.AddonIssue
+    Amazonka.EKS.Types.AddonIssueCode
+    Amazonka.EKS.Types.AddonStatus
+    Amazonka.EKS.Types.AddonVersionInfo
+    Amazonka.EKS.Types.AMITypes
+    Amazonka.EKS.Types.AutoScalingGroup
+    Amazonka.EKS.Types.CapacityTypes
+    Amazonka.EKS.Types.Certificate
+    Amazonka.EKS.Types.Cluster
+    Amazonka.EKS.Types.ClusterHealth
+    Amazonka.EKS.Types.ClusterIssue
+    Amazonka.EKS.Types.ClusterIssueCode
+    Amazonka.EKS.Types.ClusterStatus
+    Amazonka.EKS.Types.Compatibility
+    Amazonka.EKS.Types.ConfigStatus
+    Amazonka.EKS.Types.ConnectorConfigProvider
+    Amazonka.EKS.Types.ConnectorConfigRequest
+    Amazonka.EKS.Types.ConnectorConfigResponse
+    Amazonka.EKS.Types.ControlPlanePlacementRequest
+    Amazonka.EKS.Types.ControlPlanePlacementResponse
+    Amazonka.EKS.Types.EKSErrorCode
+    Amazonka.EKS.Types.EncryptionConfig
+    Amazonka.EKS.Types.ErrorDetail
+    Amazonka.EKS.Types.FargateProfile
+    Amazonka.EKS.Types.FargateProfileSelector
+    Amazonka.EKS.Types.FargateProfileStatus
+    Amazonka.EKS.Types.Identity
+    Amazonka.EKS.Types.IdentityProviderConfig
+    Amazonka.EKS.Types.IdentityProviderConfigResponse
+    Amazonka.EKS.Types.IpFamily
+    Amazonka.EKS.Types.Issue
+    Amazonka.EKS.Types.KubernetesNetworkConfigRequest
+    Amazonka.EKS.Types.KubernetesNetworkConfigResponse
+    Amazonka.EKS.Types.LaunchTemplateSpecification
+    Amazonka.EKS.Types.Logging
+    Amazonka.EKS.Types.LogSetup
+    Amazonka.EKS.Types.LogType
+    Amazonka.EKS.Types.MarketplaceInformation
+    Amazonka.EKS.Types.Nodegroup
+    Amazonka.EKS.Types.NodegroupHealth
+    Amazonka.EKS.Types.NodegroupIssueCode
+    Amazonka.EKS.Types.NodegroupResources
+    Amazonka.EKS.Types.NodegroupScalingConfig
+    Amazonka.EKS.Types.NodegroupStatus
+    Amazonka.EKS.Types.NodegroupUpdateConfig
+    Amazonka.EKS.Types.OIDC
+    Amazonka.EKS.Types.OidcIdentityProviderConfig
+    Amazonka.EKS.Types.OidcIdentityProviderConfigRequest
+    Amazonka.EKS.Types.OutpostConfigRequest
+    Amazonka.EKS.Types.OutpostConfigResponse
+    Amazonka.EKS.Types.Provider
+    Amazonka.EKS.Types.RemoteAccessConfig
+    Amazonka.EKS.Types.ResolveConflicts
+    Amazonka.EKS.Types.Taint
+    Amazonka.EKS.Types.TaintEffect
+    Amazonka.EKS.Types.Update
+    Amazonka.EKS.Types.UpdateLabelsPayload
+    Amazonka.EKS.Types.UpdateParam
+    Amazonka.EKS.Types.UpdateParamType
+    Amazonka.EKS.Types.UpdateStatus
+    Amazonka.EKS.Types.UpdateTaintsPayload
+    Amazonka.EKS.Types.UpdateType
+    Amazonka.EKS.Types.VpcConfigRequest
+    Amazonka.EKS.Types.VpcConfigResponse
+    Amazonka.EKS.UntagResource
+    Amazonka.EKS.UpdateAddon
+    Amazonka.EKS.UpdateClusterConfig
+    Amazonka.EKS.UpdateClusterVersion
+    Amazonka.EKS.UpdateNodegroupConfig
+    Amazonka.EKS.UpdateNodegroupVersion
+    Amazonka.EKS.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-eks-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.EKS
+    Test.Amazonka.EKS.Internal
+    Test.Amazonka.Gen.EKS
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-eks
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AssociateEncryptionConfig.yaml b/fixture/AssociateEncryptionConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateEncryptionConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateEncryptionConfigResponse.proto b/fixture/AssociateEncryptionConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateEncryptionConfigResponse.proto
diff --git a/fixture/AssociateIdentityProviderConfig.yaml b/fixture/AssociateIdentityProviderConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateIdentityProviderConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateIdentityProviderConfigResponse.proto b/fixture/AssociateIdentityProviderConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateIdentityProviderConfigResponse.proto
diff --git a/fixture/CreateAddon.yaml b/fixture/CreateAddon.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAddon.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateAddonResponse.proto b/fixture/CreateAddonResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAddonResponse.proto
diff --git a/fixture/CreateCluster.yaml b/fixture/CreateCluster.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCluster.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateClusterResponse.proto b/fixture/CreateClusterResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateClusterResponse.proto
diff --git a/fixture/CreateFargateProfile.yaml b/fixture/CreateFargateProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFargateProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateFargateProfileResponse.proto b/fixture/CreateFargateProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFargateProfileResponse.proto
diff --git a/fixture/CreateNodegroup.yaml b/fixture/CreateNodegroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNodegroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateNodegroupResponse.proto b/fixture/CreateNodegroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNodegroupResponse.proto
diff --git a/fixture/DeleteAddon.yaml b/fixture/DeleteAddon.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAddon.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteAddonResponse.proto b/fixture/DeleteAddonResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAddonResponse.proto
diff --git a/fixture/DeleteCluster.yaml b/fixture/DeleteCluster.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCluster.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteClusterResponse.proto b/fixture/DeleteClusterResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteClusterResponse.proto
diff --git a/fixture/DeleteFargateProfile.yaml b/fixture/DeleteFargateProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFargateProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteFargateProfileResponse.proto b/fixture/DeleteFargateProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFargateProfileResponse.proto
diff --git a/fixture/DeleteNodegroup.yaml b/fixture/DeleteNodegroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNodegroup.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteNodegroupResponse.proto b/fixture/DeleteNodegroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNodegroupResponse.proto
diff --git a/fixture/DeregisterCluster.yaml b/fixture/DeregisterCluster.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeregisterCluster.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeregisterClusterResponse.proto b/fixture/DeregisterClusterResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeregisterClusterResponse.proto
diff --git a/fixture/DescribeAddon.yaml b/fixture/DescribeAddon.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAddon.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAddonConfiguration.yaml b/fixture/DescribeAddonConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAddonConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAddonConfigurationResponse.proto b/fixture/DescribeAddonConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAddonConfigurationResponse.proto
diff --git a/fixture/DescribeAddonResponse.proto b/fixture/DescribeAddonResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAddonResponse.proto
diff --git a/fixture/DescribeAddonVersions.yaml b/fixture/DescribeAddonVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAddonVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAddonVersionsResponse.proto b/fixture/DescribeAddonVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAddonVersionsResponse.proto
diff --git a/fixture/DescribeCluster.yaml b/fixture/DescribeCluster.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCluster.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeClusterResponse.proto b/fixture/DescribeClusterResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClusterResponse.proto
diff --git a/fixture/DescribeFargateProfile.yaml b/fixture/DescribeFargateProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFargateProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeFargateProfileResponse.proto b/fixture/DescribeFargateProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFargateProfileResponse.proto
diff --git a/fixture/DescribeIdentityProviderConfig.yaml b/fixture/DescribeIdentityProviderConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIdentityProviderConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeIdentityProviderConfigResponse.proto b/fixture/DescribeIdentityProviderConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIdentityProviderConfigResponse.proto
diff --git a/fixture/DescribeNodegroup.yaml b/fixture/DescribeNodegroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNodegroup.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeNodegroupResponse.proto b/fixture/DescribeNodegroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNodegroupResponse.proto
diff --git a/fixture/DescribeUpdate.yaml b/fixture/DescribeUpdate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeUpdate.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeUpdateResponse.proto b/fixture/DescribeUpdateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeUpdateResponse.proto
diff --git a/fixture/DisassociateIdentityProviderConfig.yaml b/fixture/DisassociateIdentityProviderConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateIdentityProviderConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateIdentityProviderConfigResponse.proto b/fixture/DisassociateIdentityProviderConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateIdentityProviderConfigResponse.proto
diff --git a/fixture/ListAddons.yaml b/fixture/ListAddons.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAddons.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListAddonsResponse.proto b/fixture/ListAddonsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAddonsResponse.proto
diff --git a/fixture/ListClusters.yaml b/fixture/ListClusters.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListClusters.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListClustersResponse.proto b/fixture/ListClustersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListClustersResponse.proto
diff --git a/fixture/ListFargateProfiles.yaml b/fixture/ListFargateProfiles.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListFargateProfiles.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListFargateProfilesResponse.proto b/fixture/ListFargateProfilesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListFargateProfilesResponse.proto
diff --git a/fixture/ListIdentityProviderConfigs.yaml b/fixture/ListIdentityProviderConfigs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListIdentityProviderConfigs.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListIdentityProviderConfigsResponse.proto b/fixture/ListIdentityProviderConfigsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListIdentityProviderConfigsResponse.proto
diff --git a/fixture/ListNodegroups.yaml b/fixture/ListNodegroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListNodegroups.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListNodegroupsResponse.proto b/fixture/ListNodegroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListNodegroupsResponse.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: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  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/ListUpdates.yaml b/fixture/ListUpdates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListUpdates.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListUpdatesResponse.proto b/fixture/ListUpdatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListUpdatesResponse.proto
diff --git a/fixture/RegisterCluster.yaml b/fixture/RegisterCluster.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterCluster.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RegisterClusterResponse.proto b/fixture/RegisterClusterResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterClusterResponse.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/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  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: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  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/UpdateAddon.yaml b/fixture/UpdateAddon.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAddon.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateAddonResponse.proto b/fixture/UpdateAddonResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAddonResponse.proto
diff --git a/fixture/UpdateClusterConfig.yaml b/fixture/UpdateClusterConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateClusterConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateClusterConfigResponse.proto b/fixture/UpdateClusterConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateClusterConfigResponse.proto
diff --git a/fixture/UpdateClusterVersion.yaml b/fixture/UpdateClusterVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateClusterVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateClusterVersionResponse.proto b/fixture/UpdateClusterVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateClusterVersionResponse.proto
diff --git a/fixture/UpdateNodegroupConfig.yaml b/fixture/UpdateNodegroupConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateNodegroupConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateNodegroupConfigResponse.proto b/fixture/UpdateNodegroupConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateNodegroupConfigResponse.proto
diff --git a/fixture/UpdateNodegroupVersion.yaml b/fixture/UpdateNodegroupVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateNodegroupVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/eks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  eks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateNodegroupVersionResponse.proto b/fixture/UpdateNodegroupVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateNodegroupVersionResponse.proto
diff --git a/gen/Amazonka/EKS.hs b/gen/Amazonka/EKS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS.hs
@@ -0,0 +1,630 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.EKS
+-- 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 @2017-11-01@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon Elastic Kubernetes Service (Amazon EKS) is a managed service that
+-- makes it easy for you to run Kubernetes on Amazon Web Services without
+-- needing to stand up or maintain your own Kubernetes control plane.
+-- Kubernetes is an open-source system for automating the deployment,
+-- scaling, and management of containerized applications.
+--
+-- Amazon EKS runs up-to-date versions of the open-source Kubernetes
+-- software, so you can use all the existing plugins and tooling from the
+-- Kubernetes community. Applications running on Amazon EKS are fully
+-- compatible with applications running on any standard Kubernetes
+-- environment, whether running in on-premises data centers or public
+-- clouds. This means that you can easily migrate any standard Kubernetes
+-- application to Amazon EKS without any code modification required.
+module Amazonka.EKS
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** BadRequestException
+    _BadRequestException,
+
+    -- ** ClientException
+    _ClientException,
+
+    -- ** InvalidParameterException
+    _InvalidParameterException,
+
+    -- ** InvalidRequestException
+    _InvalidRequestException,
+
+    -- ** NotFoundException
+    _NotFoundException,
+
+    -- ** ResourceInUseException
+    _ResourceInUseException,
+
+    -- ** ResourceLimitExceededException
+    _ResourceLimitExceededException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ResourcePropagationDelayException
+    _ResourcePropagationDelayException,
+
+    -- ** ServerException
+    _ServerException,
+
+    -- ** ServiceUnavailableException
+    _ServiceUnavailableException,
+
+    -- ** UnsupportedAvailabilityZoneException
+    _UnsupportedAvailabilityZoneException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- ** AddonActive
+    newAddonActive,
+
+    -- ** AddonDeleted
+    newAddonDeleted,
+
+    -- ** ClusterActive
+    newClusterActive,
+
+    -- ** ClusterDeleted
+    newClusterDeleted,
+
+    -- ** FargateProfileActive
+    newFargateProfileActive,
+
+    -- ** FargateProfileDeleted
+    newFargateProfileDeleted,
+
+    -- ** NodegroupActive
+    newNodegroupActive,
+
+    -- ** NodegroupDeleted
+    newNodegroupDeleted,
+
+    -- * Operations
+    -- $operations
+
+    -- ** AssociateEncryptionConfig
+    AssociateEncryptionConfig (AssociateEncryptionConfig'),
+    newAssociateEncryptionConfig,
+    AssociateEncryptionConfigResponse (AssociateEncryptionConfigResponse'),
+    newAssociateEncryptionConfigResponse,
+
+    -- ** AssociateIdentityProviderConfig
+    AssociateIdentityProviderConfig (AssociateIdentityProviderConfig'),
+    newAssociateIdentityProviderConfig,
+    AssociateIdentityProviderConfigResponse (AssociateIdentityProviderConfigResponse'),
+    newAssociateIdentityProviderConfigResponse,
+
+    -- ** CreateAddon
+    CreateAddon (CreateAddon'),
+    newCreateAddon,
+    CreateAddonResponse (CreateAddonResponse'),
+    newCreateAddonResponse,
+
+    -- ** CreateCluster
+    CreateCluster (CreateCluster'),
+    newCreateCluster,
+    CreateClusterResponse (CreateClusterResponse'),
+    newCreateClusterResponse,
+
+    -- ** CreateFargateProfile
+    CreateFargateProfile (CreateFargateProfile'),
+    newCreateFargateProfile,
+    CreateFargateProfileResponse (CreateFargateProfileResponse'),
+    newCreateFargateProfileResponse,
+
+    -- ** CreateNodegroup
+    CreateNodegroup (CreateNodegroup'),
+    newCreateNodegroup,
+    CreateNodegroupResponse (CreateNodegroupResponse'),
+    newCreateNodegroupResponse,
+
+    -- ** DeleteAddon
+    DeleteAddon (DeleteAddon'),
+    newDeleteAddon,
+    DeleteAddonResponse (DeleteAddonResponse'),
+    newDeleteAddonResponse,
+
+    -- ** DeleteCluster
+    DeleteCluster (DeleteCluster'),
+    newDeleteCluster,
+    DeleteClusterResponse (DeleteClusterResponse'),
+    newDeleteClusterResponse,
+
+    -- ** DeleteFargateProfile
+    DeleteFargateProfile (DeleteFargateProfile'),
+    newDeleteFargateProfile,
+    DeleteFargateProfileResponse (DeleteFargateProfileResponse'),
+    newDeleteFargateProfileResponse,
+
+    -- ** DeleteNodegroup
+    DeleteNodegroup (DeleteNodegroup'),
+    newDeleteNodegroup,
+    DeleteNodegroupResponse (DeleteNodegroupResponse'),
+    newDeleteNodegroupResponse,
+
+    -- ** DeregisterCluster
+    DeregisterCluster (DeregisterCluster'),
+    newDeregisterCluster,
+    DeregisterClusterResponse (DeregisterClusterResponse'),
+    newDeregisterClusterResponse,
+
+    -- ** DescribeAddon
+    DescribeAddon (DescribeAddon'),
+    newDescribeAddon,
+    DescribeAddonResponse (DescribeAddonResponse'),
+    newDescribeAddonResponse,
+
+    -- ** DescribeAddonConfiguration
+    DescribeAddonConfiguration (DescribeAddonConfiguration'),
+    newDescribeAddonConfiguration,
+    DescribeAddonConfigurationResponse (DescribeAddonConfigurationResponse'),
+    newDescribeAddonConfigurationResponse,
+
+    -- ** DescribeAddonVersions (Paginated)
+    DescribeAddonVersions (DescribeAddonVersions'),
+    newDescribeAddonVersions,
+    DescribeAddonVersionsResponse (DescribeAddonVersionsResponse'),
+    newDescribeAddonVersionsResponse,
+
+    -- ** DescribeCluster
+    DescribeCluster (DescribeCluster'),
+    newDescribeCluster,
+    DescribeClusterResponse (DescribeClusterResponse'),
+    newDescribeClusterResponse,
+
+    -- ** DescribeFargateProfile
+    DescribeFargateProfile (DescribeFargateProfile'),
+    newDescribeFargateProfile,
+    DescribeFargateProfileResponse (DescribeFargateProfileResponse'),
+    newDescribeFargateProfileResponse,
+
+    -- ** DescribeIdentityProviderConfig
+    DescribeIdentityProviderConfig (DescribeIdentityProviderConfig'),
+    newDescribeIdentityProviderConfig,
+    DescribeIdentityProviderConfigResponse (DescribeIdentityProviderConfigResponse'),
+    newDescribeIdentityProviderConfigResponse,
+
+    -- ** DescribeNodegroup
+    DescribeNodegroup (DescribeNodegroup'),
+    newDescribeNodegroup,
+    DescribeNodegroupResponse (DescribeNodegroupResponse'),
+    newDescribeNodegroupResponse,
+
+    -- ** DescribeUpdate
+    DescribeUpdate (DescribeUpdate'),
+    newDescribeUpdate,
+    DescribeUpdateResponse (DescribeUpdateResponse'),
+    newDescribeUpdateResponse,
+
+    -- ** DisassociateIdentityProviderConfig
+    DisassociateIdentityProviderConfig (DisassociateIdentityProviderConfig'),
+    newDisassociateIdentityProviderConfig,
+    DisassociateIdentityProviderConfigResponse (DisassociateIdentityProviderConfigResponse'),
+    newDisassociateIdentityProviderConfigResponse,
+
+    -- ** ListAddons (Paginated)
+    ListAddons (ListAddons'),
+    newListAddons,
+    ListAddonsResponse (ListAddonsResponse'),
+    newListAddonsResponse,
+
+    -- ** ListClusters (Paginated)
+    ListClusters (ListClusters'),
+    newListClusters,
+    ListClustersResponse (ListClustersResponse'),
+    newListClustersResponse,
+
+    -- ** ListFargateProfiles (Paginated)
+    ListFargateProfiles (ListFargateProfiles'),
+    newListFargateProfiles,
+    ListFargateProfilesResponse (ListFargateProfilesResponse'),
+    newListFargateProfilesResponse,
+
+    -- ** ListIdentityProviderConfigs (Paginated)
+    ListIdentityProviderConfigs (ListIdentityProviderConfigs'),
+    newListIdentityProviderConfigs,
+    ListIdentityProviderConfigsResponse (ListIdentityProviderConfigsResponse'),
+    newListIdentityProviderConfigsResponse,
+
+    -- ** ListNodegroups (Paginated)
+    ListNodegroups (ListNodegroups'),
+    newListNodegroups,
+    ListNodegroupsResponse (ListNodegroupsResponse'),
+    newListNodegroupsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListUpdates (Paginated)
+    ListUpdates (ListUpdates'),
+    newListUpdates,
+    ListUpdatesResponse (ListUpdatesResponse'),
+    newListUpdatesResponse,
+
+    -- ** RegisterCluster
+    RegisterCluster (RegisterCluster'),
+    newRegisterCluster,
+    RegisterClusterResponse (RegisterClusterResponse'),
+    newRegisterClusterResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateAddon
+    UpdateAddon (UpdateAddon'),
+    newUpdateAddon,
+    UpdateAddonResponse (UpdateAddonResponse'),
+    newUpdateAddonResponse,
+
+    -- ** UpdateClusterConfig
+    UpdateClusterConfig (UpdateClusterConfig'),
+    newUpdateClusterConfig,
+    UpdateClusterConfigResponse (UpdateClusterConfigResponse'),
+    newUpdateClusterConfigResponse,
+
+    -- ** UpdateClusterVersion
+    UpdateClusterVersion (UpdateClusterVersion'),
+    newUpdateClusterVersion,
+    UpdateClusterVersionResponse (UpdateClusterVersionResponse'),
+    newUpdateClusterVersionResponse,
+
+    -- ** UpdateNodegroupConfig
+    UpdateNodegroupConfig (UpdateNodegroupConfig'),
+    newUpdateNodegroupConfig,
+    UpdateNodegroupConfigResponse (UpdateNodegroupConfigResponse'),
+    newUpdateNodegroupConfigResponse,
+
+    -- ** UpdateNodegroupVersion
+    UpdateNodegroupVersion (UpdateNodegroupVersion'),
+    newUpdateNodegroupVersion,
+    UpdateNodegroupVersionResponse (UpdateNodegroupVersionResponse'),
+    newUpdateNodegroupVersionResponse,
+
+    -- * Types
+
+    -- ** AMITypes
+    AMITypes (..),
+
+    -- ** AddonIssueCode
+    AddonIssueCode (..),
+
+    -- ** AddonStatus
+    AddonStatus (..),
+
+    -- ** CapacityTypes
+    CapacityTypes (..),
+
+    -- ** ClusterIssueCode
+    ClusterIssueCode (..),
+
+    -- ** ClusterStatus
+    ClusterStatus (..),
+
+    -- ** ConfigStatus
+    ConfigStatus (..),
+
+    -- ** ConnectorConfigProvider
+    ConnectorConfigProvider (..),
+
+    -- ** EKSErrorCode
+    EKSErrorCode (..),
+
+    -- ** FargateProfileStatus
+    FargateProfileStatus (..),
+
+    -- ** IpFamily
+    IpFamily (..),
+
+    -- ** LogType
+    LogType (..),
+
+    -- ** NodegroupIssueCode
+    NodegroupIssueCode (..),
+
+    -- ** NodegroupStatus
+    NodegroupStatus (..),
+
+    -- ** ResolveConflicts
+    ResolveConflicts (..),
+
+    -- ** TaintEffect
+    TaintEffect (..),
+
+    -- ** UpdateParamType
+    UpdateParamType (..),
+
+    -- ** UpdateStatus
+    UpdateStatus (..),
+
+    -- ** UpdateType
+    UpdateType (..),
+
+    -- ** Addon
+    Addon (Addon'),
+    newAddon,
+
+    -- ** AddonHealth
+    AddonHealth (AddonHealth'),
+    newAddonHealth,
+
+    -- ** AddonInfo
+    AddonInfo (AddonInfo'),
+    newAddonInfo,
+
+    -- ** AddonIssue
+    AddonIssue (AddonIssue'),
+    newAddonIssue,
+
+    -- ** AddonVersionInfo
+    AddonVersionInfo (AddonVersionInfo'),
+    newAddonVersionInfo,
+
+    -- ** AutoScalingGroup
+    AutoScalingGroup (AutoScalingGroup'),
+    newAutoScalingGroup,
+
+    -- ** Certificate
+    Certificate (Certificate'),
+    newCertificate,
+
+    -- ** Cluster
+    Cluster (Cluster'),
+    newCluster,
+
+    -- ** ClusterHealth
+    ClusterHealth (ClusterHealth'),
+    newClusterHealth,
+
+    -- ** ClusterIssue
+    ClusterIssue (ClusterIssue'),
+    newClusterIssue,
+
+    -- ** Compatibility
+    Compatibility (Compatibility'),
+    newCompatibility,
+
+    -- ** ConnectorConfigRequest
+    ConnectorConfigRequest (ConnectorConfigRequest'),
+    newConnectorConfigRequest,
+
+    -- ** ConnectorConfigResponse
+    ConnectorConfigResponse (ConnectorConfigResponse'),
+    newConnectorConfigResponse,
+
+    -- ** ControlPlanePlacementRequest
+    ControlPlanePlacementRequest (ControlPlanePlacementRequest'),
+    newControlPlanePlacementRequest,
+
+    -- ** ControlPlanePlacementResponse
+    ControlPlanePlacementResponse (ControlPlanePlacementResponse'),
+    newControlPlanePlacementResponse,
+
+    -- ** EncryptionConfig
+    EncryptionConfig (EncryptionConfig'),
+    newEncryptionConfig,
+
+    -- ** ErrorDetail
+    ErrorDetail (ErrorDetail'),
+    newErrorDetail,
+
+    -- ** FargateProfile
+    FargateProfile (FargateProfile'),
+    newFargateProfile,
+
+    -- ** FargateProfileSelector
+    FargateProfileSelector (FargateProfileSelector'),
+    newFargateProfileSelector,
+
+    -- ** Identity
+    Identity (Identity'),
+    newIdentity,
+
+    -- ** IdentityProviderConfig
+    IdentityProviderConfig (IdentityProviderConfig'),
+    newIdentityProviderConfig,
+
+    -- ** IdentityProviderConfigResponse
+    IdentityProviderConfigResponse (IdentityProviderConfigResponse'),
+    newIdentityProviderConfigResponse,
+
+    -- ** Issue
+    Issue (Issue'),
+    newIssue,
+
+    -- ** KubernetesNetworkConfigRequest
+    KubernetesNetworkConfigRequest (KubernetesNetworkConfigRequest'),
+    newKubernetesNetworkConfigRequest,
+
+    -- ** KubernetesNetworkConfigResponse
+    KubernetesNetworkConfigResponse (KubernetesNetworkConfigResponse'),
+    newKubernetesNetworkConfigResponse,
+
+    -- ** LaunchTemplateSpecification
+    LaunchTemplateSpecification (LaunchTemplateSpecification'),
+    newLaunchTemplateSpecification,
+
+    -- ** LogSetup
+    LogSetup (LogSetup'),
+    newLogSetup,
+
+    -- ** Logging
+    Logging (Logging'),
+    newLogging,
+
+    -- ** MarketplaceInformation
+    MarketplaceInformation (MarketplaceInformation'),
+    newMarketplaceInformation,
+
+    -- ** Nodegroup
+    Nodegroup (Nodegroup'),
+    newNodegroup,
+
+    -- ** NodegroupHealth
+    NodegroupHealth (NodegroupHealth'),
+    newNodegroupHealth,
+
+    -- ** NodegroupResources
+    NodegroupResources (NodegroupResources'),
+    newNodegroupResources,
+
+    -- ** NodegroupScalingConfig
+    NodegroupScalingConfig (NodegroupScalingConfig'),
+    newNodegroupScalingConfig,
+
+    -- ** NodegroupUpdateConfig
+    NodegroupUpdateConfig (NodegroupUpdateConfig'),
+    newNodegroupUpdateConfig,
+
+    -- ** OIDC
+    OIDC (OIDC'),
+    newOIDC,
+
+    -- ** OidcIdentityProviderConfig
+    OidcIdentityProviderConfig (OidcIdentityProviderConfig'),
+    newOidcIdentityProviderConfig,
+
+    -- ** OidcIdentityProviderConfigRequest
+    OidcIdentityProviderConfigRequest (OidcIdentityProviderConfigRequest'),
+    newOidcIdentityProviderConfigRequest,
+
+    -- ** OutpostConfigRequest
+    OutpostConfigRequest (OutpostConfigRequest'),
+    newOutpostConfigRequest,
+
+    -- ** OutpostConfigResponse
+    OutpostConfigResponse (OutpostConfigResponse'),
+    newOutpostConfigResponse,
+
+    -- ** Provider
+    Provider (Provider'),
+    newProvider,
+
+    -- ** RemoteAccessConfig
+    RemoteAccessConfig (RemoteAccessConfig'),
+    newRemoteAccessConfig,
+
+    -- ** Taint
+    Taint (Taint'),
+    newTaint,
+
+    -- ** Update
+    Update (Update'),
+    newUpdate,
+
+    -- ** UpdateLabelsPayload
+    UpdateLabelsPayload (UpdateLabelsPayload'),
+    newUpdateLabelsPayload,
+
+    -- ** UpdateParam
+    UpdateParam (UpdateParam'),
+    newUpdateParam,
+
+    -- ** UpdateTaintsPayload
+    UpdateTaintsPayload (UpdateTaintsPayload'),
+    newUpdateTaintsPayload,
+
+    -- ** VpcConfigRequest
+    VpcConfigRequest (VpcConfigRequest'),
+    newVpcConfigRequest,
+
+    -- ** VpcConfigResponse
+    VpcConfigResponse (VpcConfigResponse'),
+    newVpcConfigResponse,
+  )
+where
+
+import Amazonka.EKS.AssociateEncryptionConfig
+import Amazonka.EKS.AssociateIdentityProviderConfig
+import Amazonka.EKS.CreateAddon
+import Amazonka.EKS.CreateCluster
+import Amazonka.EKS.CreateFargateProfile
+import Amazonka.EKS.CreateNodegroup
+import Amazonka.EKS.DeleteAddon
+import Amazonka.EKS.DeleteCluster
+import Amazonka.EKS.DeleteFargateProfile
+import Amazonka.EKS.DeleteNodegroup
+import Amazonka.EKS.DeregisterCluster
+import Amazonka.EKS.DescribeAddon
+import Amazonka.EKS.DescribeAddonConfiguration
+import Amazonka.EKS.DescribeAddonVersions
+import Amazonka.EKS.DescribeCluster
+import Amazonka.EKS.DescribeFargateProfile
+import Amazonka.EKS.DescribeIdentityProviderConfig
+import Amazonka.EKS.DescribeNodegroup
+import Amazonka.EKS.DescribeUpdate
+import Amazonka.EKS.DisassociateIdentityProviderConfig
+import Amazonka.EKS.Lens
+import Amazonka.EKS.ListAddons
+import Amazonka.EKS.ListClusters
+import Amazonka.EKS.ListFargateProfiles
+import Amazonka.EKS.ListIdentityProviderConfigs
+import Amazonka.EKS.ListNodegroups
+import Amazonka.EKS.ListTagsForResource
+import Amazonka.EKS.ListUpdates
+import Amazonka.EKS.RegisterCluster
+import Amazonka.EKS.TagResource
+import Amazonka.EKS.Types
+import Amazonka.EKS.UntagResource
+import Amazonka.EKS.UpdateAddon
+import Amazonka.EKS.UpdateClusterConfig
+import Amazonka.EKS.UpdateClusterVersion
+import Amazonka.EKS.UpdateNodegroupConfig
+import Amazonka.EKS.UpdateNodegroupVersion
+import Amazonka.EKS.Waiters
+
+-- $errors
+-- Error matchers are designed for use with the functions provided by
+-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+-- This allows catching (and rethrowing) service specific errors returned
+-- by 'EKS'.
+
+-- $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/EKS/AssociateEncryptionConfig.hs b/gen/Amazonka/EKS/AssociateEncryptionConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/AssociateEncryptionConfig.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.AssociateEncryptionConfig
+-- 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 encryption configuration to an existing cluster.
+--
+-- You can use this API to enable encryption on existing clusters which do
+-- not have encryption already enabled. This allows you to implement a
+-- defense-in-depth security strategy without migrating applications to new
+-- Amazon EKS clusters.
+module Amazonka.EKS.AssociateEncryptionConfig
+  ( -- * Creating a Request
+    AssociateEncryptionConfig (..),
+    newAssociateEncryptionConfig,
+
+    -- * Request Lenses
+    associateEncryptionConfig_clientRequestToken,
+    associateEncryptionConfig_clusterName,
+    associateEncryptionConfig_encryptionConfig,
+
+    -- * Destructuring the Response
+    AssociateEncryptionConfigResponse (..),
+    newAssociateEncryptionConfigResponse,
+
+    -- * Response Lenses
+    associateEncryptionConfigResponse_update,
+    associateEncryptionConfigResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateEncryptionConfig' smart constructor.
+data AssociateEncryptionConfig = AssociateEncryptionConfig'
+  { -- | The client request token you are using with the encryption
+    -- configuration.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the cluster that you are associating with encryption
+    -- configuration.
+    clusterName :: Prelude.Text,
+    -- | The configuration you are using for encryption.
+    encryptionConfig :: [EncryptionConfig]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateEncryptionConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'associateEncryptionConfig_clientRequestToken' - The client request token you are using with the encryption
+-- configuration.
+--
+-- 'clusterName', 'associateEncryptionConfig_clusterName' - The name of the cluster that you are associating with encryption
+-- configuration.
+--
+-- 'encryptionConfig', 'associateEncryptionConfig_encryptionConfig' - The configuration you are using for encryption.
+newAssociateEncryptionConfig ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  AssociateEncryptionConfig
+newAssociateEncryptionConfig pClusterName_ =
+  AssociateEncryptionConfig'
+    { clientRequestToken =
+        Prelude.Nothing,
+      clusterName = pClusterName_,
+      encryptionConfig = Prelude.mempty
+    }
+
+-- | The client request token you are using with the encryption
+-- configuration.
+associateEncryptionConfig_clientRequestToken :: Lens.Lens' AssociateEncryptionConfig (Prelude.Maybe Prelude.Text)
+associateEncryptionConfig_clientRequestToken = Lens.lens (\AssociateEncryptionConfig' {clientRequestToken} -> clientRequestToken) (\s@AssociateEncryptionConfig' {} a -> s {clientRequestToken = a} :: AssociateEncryptionConfig)
+
+-- | The name of the cluster that you are associating with encryption
+-- configuration.
+associateEncryptionConfig_clusterName :: Lens.Lens' AssociateEncryptionConfig Prelude.Text
+associateEncryptionConfig_clusterName = Lens.lens (\AssociateEncryptionConfig' {clusterName} -> clusterName) (\s@AssociateEncryptionConfig' {} a -> s {clusterName = a} :: AssociateEncryptionConfig)
+
+-- | The configuration you are using for encryption.
+associateEncryptionConfig_encryptionConfig :: Lens.Lens' AssociateEncryptionConfig [EncryptionConfig]
+associateEncryptionConfig_encryptionConfig = Lens.lens (\AssociateEncryptionConfig' {encryptionConfig} -> encryptionConfig) (\s@AssociateEncryptionConfig' {} a -> s {encryptionConfig = a} :: AssociateEncryptionConfig) Prelude.. Lens.coerced
+
+instance Core.AWSRequest AssociateEncryptionConfig where
+  type
+    AWSResponse AssociateEncryptionConfig =
+      AssociateEncryptionConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AssociateEncryptionConfigResponse'
+            Prelude.<$> (x Data..?> "update")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateEncryptionConfig where
+  hashWithSalt _salt AssociateEncryptionConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` encryptionConfig
+
+instance Prelude.NFData AssociateEncryptionConfig where
+  rnf AssociateEncryptionConfig' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf encryptionConfig
+
+instance Data.ToHeaders AssociateEncryptionConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateEncryptionConfig where
+  toJSON AssociateEncryptionConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            Prelude.Just
+              ("encryptionConfig" Data..= encryptionConfig)
+          ]
+      )
+
+instance Data.ToPath AssociateEncryptionConfig where
+  toPath AssociateEncryptionConfig' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/encryption-config/associate"
+      ]
+
+instance Data.ToQuery AssociateEncryptionConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateEncryptionConfigResponse' smart constructor.
+data AssociateEncryptionConfigResponse = AssociateEncryptionConfigResponse'
+  { update :: Prelude.Maybe Update,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateEncryptionConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'update', 'associateEncryptionConfigResponse_update' - Undocumented member.
+--
+-- 'httpStatus', 'associateEncryptionConfigResponse_httpStatus' - The response's http status code.
+newAssociateEncryptionConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateEncryptionConfigResponse
+newAssociateEncryptionConfigResponse pHttpStatus_ =
+  AssociateEncryptionConfigResponse'
+    { update =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+associateEncryptionConfigResponse_update :: Lens.Lens' AssociateEncryptionConfigResponse (Prelude.Maybe Update)
+associateEncryptionConfigResponse_update = Lens.lens (\AssociateEncryptionConfigResponse' {update} -> update) (\s@AssociateEncryptionConfigResponse' {} a -> s {update = a} :: AssociateEncryptionConfigResponse)
+
+-- | The response's http status code.
+associateEncryptionConfigResponse_httpStatus :: Lens.Lens' AssociateEncryptionConfigResponse Prelude.Int
+associateEncryptionConfigResponse_httpStatus = Lens.lens (\AssociateEncryptionConfigResponse' {httpStatus} -> httpStatus) (\s@AssociateEncryptionConfigResponse' {} a -> s {httpStatus = a} :: AssociateEncryptionConfigResponse)
+
+instance
+  Prelude.NFData
+    AssociateEncryptionConfigResponse
+  where
+  rnf AssociateEncryptionConfigResponse' {..} =
+    Prelude.rnf update
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/AssociateIdentityProviderConfig.hs b/gen/Amazonka/EKS/AssociateIdentityProviderConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/AssociateIdentityProviderConfig.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.EKS.AssociateIdentityProviderConfig
+-- 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 an identity provider configuration to a cluster.
+--
+-- If you want to authenticate identities using an identity provider, you
+-- can create an identity provider configuration and associate it to your
+-- cluster. After configuring authentication to your cluster you can create
+-- Kubernetes @roles@ and @clusterroles@ to assign permissions to the
+-- roles, and then bind the roles to the identities using Kubernetes
+-- @rolebindings@ and @clusterrolebindings@. For more information see
+-- <https://kubernetes.io/docs/reference/access-authn-authz/rbac/ Using RBAC Authorization>
+-- in the Kubernetes documentation.
+module Amazonka.EKS.AssociateIdentityProviderConfig
+  ( -- * Creating a Request
+    AssociateIdentityProviderConfig (..),
+    newAssociateIdentityProviderConfig,
+
+    -- * Request Lenses
+    associateIdentityProviderConfig_clientRequestToken,
+    associateIdentityProviderConfig_tags,
+    associateIdentityProviderConfig_clusterName,
+    associateIdentityProviderConfig_oidc,
+
+    -- * Destructuring the Response
+    AssociateIdentityProviderConfigResponse (..),
+    newAssociateIdentityProviderConfigResponse,
+
+    -- * Response Lenses
+    associateIdentityProviderConfigResponse_tags,
+    associateIdentityProviderConfigResponse_update,
+    associateIdentityProviderConfigResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateIdentityProviderConfig' smart constructor.
+data AssociateIdentityProviderConfig = AssociateIdentityProviderConfig'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The metadata to apply to the configuration to assist with categorization
+    -- and organization. Each tag consists of a key and an optional value. You
+    -- define both.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the cluster to associate the configuration to.
+    clusterName :: Prelude.Text,
+    -- | An object representing an OpenID Connect (OIDC) identity provider
+    -- configuration.
+    oidc :: OidcIdentityProviderConfigRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateIdentityProviderConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'associateIdentityProviderConfig_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'tags', 'associateIdentityProviderConfig_tags' - The metadata to apply to the configuration to assist with categorization
+-- and organization. Each tag consists of a key and an optional value. You
+-- define both.
+--
+-- 'clusterName', 'associateIdentityProviderConfig_clusterName' - The name of the cluster to associate the configuration to.
+--
+-- 'oidc', 'associateIdentityProviderConfig_oidc' - An object representing an OpenID Connect (OIDC) identity provider
+-- configuration.
+newAssociateIdentityProviderConfig ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  -- | 'oidc'
+  OidcIdentityProviderConfigRequest ->
+  AssociateIdentityProviderConfig
+newAssociateIdentityProviderConfig
+  pClusterName_
+  pOidc_ =
+    AssociateIdentityProviderConfig'
+      { clientRequestToken =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        clusterName = pClusterName_,
+        oidc = pOidc_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+associateIdentityProviderConfig_clientRequestToken :: Lens.Lens' AssociateIdentityProviderConfig (Prelude.Maybe Prelude.Text)
+associateIdentityProviderConfig_clientRequestToken = Lens.lens (\AssociateIdentityProviderConfig' {clientRequestToken} -> clientRequestToken) (\s@AssociateIdentityProviderConfig' {} a -> s {clientRequestToken = a} :: AssociateIdentityProviderConfig)
+
+-- | The metadata to apply to the configuration to assist with categorization
+-- and organization. Each tag consists of a key and an optional value. You
+-- define both.
+associateIdentityProviderConfig_tags :: Lens.Lens' AssociateIdentityProviderConfig (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+associateIdentityProviderConfig_tags = Lens.lens (\AssociateIdentityProviderConfig' {tags} -> tags) (\s@AssociateIdentityProviderConfig' {} a -> s {tags = a} :: AssociateIdentityProviderConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the cluster to associate the configuration to.
+associateIdentityProviderConfig_clusterName :: Lens.Lens' AssociateIdentityProviderConfig Prelude.Text
+associateIdentityProviderConfig_clusterName = Lens.lens (\AssociateIdentityProviderConfig' {clusterName} -> clusterName) (\s@AssociateIdentityProviderConfig' {} a -> s {clusterName = a} :: AssociateIdentityProviderConfig)
+
+-- | An object representing an OpenID Connect (OIDC) identity provider
+-- configuration.
+associateIdentityProviderConfig_oidc :: Lens.Lens' AssociateIdentityProviderConfig OidcIdentityProviderConfigRequest
+associateIdentityProviderConfig_oidc = Lens.lens (\AssociateIdentityProviderConfig' {oidc} -> oidc) (\s@AssociateIdentityProviderConfig' {} a -> s {oidc = a} :: AssociateIdentityProviderConfig)
+
+instance
+  Core.AWSRequest
+    AssociateIdentityProviderConfig
+  where
+  type
+    AWSResponse AssociateIdentityProviderConfig =
+      AssociateIdentityProviderConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AssociateIdentityProviderConfigResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "update")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateIdentityProviderConfig
+  where
+  hashWithSalt
+    _salt
+    AssociateIdentityProviderConfig' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientRequestToken
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` clusterName
+        `Prelude.hashWithSalt` oidc
+
+instance
+  Prelude.NFData
+    AssociateIdentityProviderConfig
+  where
+  rnf AssociateIdentityProviderConfig' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf oidc
+
+instance
+  Data.ToHeaders
+    AssociateIdentityProviderConfig
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateIdentityProviderConfig where
+  toJSON AssociateIdentityProviderConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("oidc" Data..= oidc)
+          ]
+      )
+
+instance Data.ToPath AssociateIdentityProviderConfig where
+  toPath AssociateIdentityProviderConfig' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/identity-provider-configs/associate"
+      ]
+
+instance Data.ToQuery AssociateIdentityProviderConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateIdentityProviderConfigResponse' smart constructor.
+data AssociateIdentityProviderConfigResponse = AssociateIdentityProviderConfigResponse'
+  { -- | The tags for the resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    update :: Prelude.Maybe Update,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateIdentityProviderConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'associateIdentityProviderConfigResponse_tags' - The tags for the resource.
+--
+-- 'update', 'associateIdentityProviderConfigResponse_update' - Undocumented member.
+--
+-- 'httpStatus', 'associateIdentityProviderConfigResponse_httpStatus' - The response's http status code.
+newAssociateIdentityProviderConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateIdentityProviderConfigResponse
+newAssociateIdentityProviderConfigResponse
+  pHttpStatus_ =
+    AssociateIdentityProviderConfigResponse'
+      { tags =
+          Prelude.Nothing,
+        update = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The tags for the resource.
+associateIdentityProviderConfigResponse_tags :: Lens.Lens' AssociateIdentityProviderConfigResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+associateIdentityProviderConfigResponse_tags = Lens.lens (\AssociateIdentityProviderConfigResponse' {tags} -> tags) (\s@AssociateIdentityProviderConfigResponse' {} a -> s {tags = a} :: AssociateIdentityProviderConfigResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+associateIdentityProviderConfigResponse_update :: Lens.Lens' AssociateIdentityProviderConfigResponse (Prelude.Maybe Update)
+associateIdentityProviderConfigResponse_update = Lens.lens (\AssociateIdentityProviderConfigResponse' {update} -> update) (\s@AssociateIdentityProviderConfigResponse' {} a -> s {update = a} :: AssociateIdentityProviderConfigResponse)
+
+-- | The response's http status code.
+associateIdentityProviderConfigResponse_httpStatus :: Lens.Lens' AssociateIdentityProviderConfigResponse Prelude.Int
+associateIdentityProviderConfigResponse_httpStatus = Lens.lens (\AssociateIdentityProviderConfigResponse' {httpStatus} -> httpStatus) (\s@AssociateIdentityProviderConfigResponse' {} a -> s {httpStatus = a} :: AssociateIdentityProviderConfigResponse)
+
+instance
+  Prelude.NFData
+    AssociateIdentityProviderConfigResponse
+  where
+  rnf AssociateIdentityProviderConfigResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf update
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/CreateAddon.hs b/gen/Amazonka/EKS/CreateAddon.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/CreateAddon.hs
@@ -0,0 +1,392 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.CreateAddon
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an Amazon EKS add-on.
+--
+-- Amazon EKS add-ons help to automate the provisioning and lifecycle
+-- management of common operational software for Amazon EKS clusters. For
+-- more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-add-ons.html Amazon EKS add-ons>
+-- in the /Amazon EKS User Guide/.
+module Amazonka.EKS.CreateAddon
+  ( -- * Creating a Request
+    CreateAddon (..),
+    newCreateAddon,
+
+    -- * Request Lenses
+    createAddon_addonVersion,
+    createAddon_clientRequestToken,
+    createAddon_configurationValues,
+    createAddon_resolveConflicts,
+    createAddon_serviceAccountRoleArn,
+    createAddon_tags,
+    createAddon_clusterName,
+    createAddon_addonName,
+
+    -- * Destructuring the Response
+    CreateAddonResponse (..),
+    newCreateAddonResponse,
+
+    -- * Response Lenses
+    createAddonResponse_addon,
+    createAddonResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateAddon' smart constructor.
+data CreateAddon = CreateAddon'
+  { -- | The version of the add-on. The version must match one of the versions
+    -- returned by
+    -- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+    -- .
+    addonVersion :: Prelude.Maybe Prelude.Text,
+    -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The set of configuration values for the add-on that\'s created. The
+    -- values that you provide are validated against the schema in
+    -- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonConfiguration.html DescribeAddonConfiguration>
+    -- .
+    configurationValues :: Prelude.Maybe Prelude.Text,
+    -- | How to resolve field value conflicts for an Amazon EKS add-on. Conflicts
+    -- are handled based on the value you choose:
+    --
+    -- -   __None__ – If the self-managed version of the add-on is installed on
+    --     your cluster, Amazon EKS doesn\'t change the value. Creation of the
+    --     add-on might fail.
+    --
+    -- -   __Overwrite__ – If the self-managed version of the add-on is
+    --     installed on your cluster and the Amazon EKS default value is
+    --     different than the existing value, Amazon EKS changes the value to
+    --     the Amazon EKS default value.
+    --
+    -- -   __Preserve__ – Not supported. You can set this value when updating
+    --     an add-on though. For more information, see
+    --     <https://docs.aws.amazon.com/eks/latest/APIReference/API_UpdateAddon.html UpdateAddon>.
+    --
+    -- If you don\'t currently have the self-managed version of the add-on
+    -- installed on your cluster, the Amazon EKS add-on is installed. Amazon
+    -- EKS sets all values to default values, regardless of the option that you
+    -- specify.
+    resolveConflicts :: Prelude.Maybe ResolveConflicts,
+    -- | The Amazon Resource Name (ARN) of an existing IAM role to bind to the
+    -- add-on\'s service account. The role must be assigned the IAM permissions
+    -- required by the add-on. If you don\'t specify an existing IAM role, then
+    -- the add-on uses the permissions assigned to the node IAM role. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html Amazon EKS node IAM role>
+    -- in the /Amazon EKS User Guide/.
+    --
+    -- To specify an existing IAM role, you must have an IAM OpenID Connect
+    -- (OIDC) provider created for your cluster. For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html Enabling IAM roles for service accounts on your cluster>
+    -- in the /Amazon EKS User Guide/.
+    serviceAccountRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The metadata to apply to the cluster to assist with categorization and
+    -- organization. Each tag consists of a key and an optional value. You
+    -- define both.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the cluster to create the add-on for.
+    clusterName :: Prelude.Text,
+    -- | The name of the add-on. The name must match one of the names that
+    -- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+    -- returns.
+    addonName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAddon' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addonVersion', 'createAddon_addonVersion' - The version of the add-on. The version must match one of the versions
+-- returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+-- .
+--
+-- 'clientRequestToken', 'createAddon_clientRequestToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'configurationValues', 'createAddon_configurationValues' - The set of configuration values for the add-on that\'s created. The
+-- values that you provide are validated against the schema in
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonConfiguration.html DescribeAddonConfiguration>
+-- .
+--
+-- 'resolveConflicts', 'createAddon_resolveConflicts' - How to resolve field value conflicts for an Amazon EKS add-on. Conflicts
+-- are handled based on the value you choose:
+--
+-- -   __None__ – If the self-managed version of the add-on is installed on
+--     your cluster, Amazon EKS doesn\'t change the value. Creation of the
+--     add-on might fail.
+--
+-- -   __Overwrite__ – If the self-managed version of the add-on is
+--     installed on your cluster and the Amazon EKS default value is
+--     different than the existing value, Amazon EKS changes the value to
+--     the Amazon EKS default value.
+--
+-- -   __Preserve__ – Not supported. You can set this value when updating
+--     an add-on though. For more information, see
+--     <https://docs.aws.amazon.com/eks/latest/APIReference/API_UpdateAddon.html UpdateAddon>.
+--
+-- If you don\'t currently have the self-managed version of the add-on
+-- installed on your cluster, the Amazon EKS add-on is installed. Amazon
+-- EKS sets all values to default values, regardless of the option that you
+-- specify.
+--
+-- 'serviceAccountRoleArn', 'createAddon_serviceAccountRoleArn' - The Amazon Resource Name (ARN) of an existing IAM role to bind to the
+-- add-on\'s service account. The role must be assigned the IAM permissions
+-- required by the add-on. If you don\'t specify an existing IAM role, then
+-- the add-on uses the permissions assigned to the node IAM role. For more
+-- information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html Amazon EKS node IAM role>
+-- in the /Amazon EKS User Guide/.
+--
+-- To specify an existing IAM role, you must have an IAM OpenID Connect
+-- (OIDC) provider created for your cluster. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html Enabling IAM roles for service accounts on your cluster>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'tags', 'createAddon_tags' - The metadata to apply to the cluster to assist with categorization and
+-- organization. Each tag consists of a key and an optional value. You
+-- define both.
+--
+-- 'clusterName', 'createAddon_clusterName' - The name of the cluster to create the add-on for.
+--
+-- 'addonName', 'createAddon_addonName' - The name of the add-on. The name must match one of the names that
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+-- returns.
+newCreateAddon ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  -- | 'addonName'
+  Prelude.Text ->
+  CreateAddon
+newCreateAddon pClusterName_ pAddonName_ =
+  CreateAddon'
+    { addonVersion = Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      configurationValues = Prelude.Nothing,
+      resolveConflicts = Prelude.Nothing,
+      serviceAccountRoleArn = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      clusterName = pClusterName_,
+      addonName = pAddonName_
+    }
+
+-- | The version of the add-on. The version must match one of the versions
+-- returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+-- .
+createAddon_addonVersion :: Lens.Lens' CreateAddon (Prelude.Maybe Prelude.Text)
+createAddon_addonVersion = Lens.lens (\CreateAddon' {addonVersion} -> addonVersion) (\s@CreateAddon' {} a -> s {addonVersion = a} :: CreateAddon)
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createAddon_clientRequestToken :: Lens.Lens' CreateAddon (Prelude.Maybe Prelude.Text)
+createAddon_clientRequestToken = Lens.lens (\CreateAddon' {clientRequestToken} -> clientRequestToken) (\s@CreateAddon' {} a -> s {clientRequestToken = a} :: CreateAddon)
+
+-- | The set of configuration values for the add-on that\'s created. The
+-- values that you provide are validated against the schema in
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonConfiguration.html DescribeAddonConfiguration>
+-- .
+createAddon_configurationValues :: Lens.Lens' CreateAddon (Prelude.Maybe Prelude.Text)
+createAddon_configurationValues = Lens.lens (\CreateAddon' {configurationValues} -> configurationValues) (\s@CreateAddon' {} a -> s {configurationValues = a} :: CreateAddon)
+
+-- | How to resolve field value conflicts for an Amazon EKS add-on. Conflicts
+-- are handled based on the value you choose:
+--
+-- -   __None__ – If the self-managed version of the add-on is installed on
+--     your cluster, Amazon EKS doesn\'t change the value. Creation of the
+--     add-on might fail.
+--
+-- -   __Overwrite__ – If the self-managed version of the add-on is
+--     installed on your cluster and the Amazon EKS default value is
+--     different than the existing value, Amazon EKS changes the value to
+--     the Amazon EKS default value.
+--
+-- -   __Preserve__ – Not supported. You can set this value when updating
+--     an add-on though. For more information, see
+--     <https://docs.aws.amazon.com/eks/latest/APIReference/API_UpdateAddon.html UpdateAddon>.
+--
+-- If you don\'t currently have the self-managed version of the add-on
+-- installed on your cluster, the Amazon EKS add-on is installed. Amazon
+-- EKS sets all values to default values, regardless of the option that you
+-- specify.
+createAddon_resolveConflicts :: Lens.Lens' CreateAddon (Prelude.Maybe ResolveConflicts)
+createAddon_resolveConflicts = Lens.lens (\CreateAddon' {resolveConflicts} -> resolveConflicts) (\s@CreateAddon' {} a -> s {resolveConflicts = a} :: CreateAddon)
+
+-- | The Amazon Resource Name (ARN) of an existing IAM role to bind to the
+-- add-on\'s service account. The role must be assigned the IAM permissions
+-- required by the add-on. If you don\'t specify an existing IAM role, then
+-- the add-on uses the permissions assigned to the node IAM role. For more
+-- information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html Amazon EKS node IAM role>
+-- in the /Amazon EKS User Guide/.
+--
+-- To specify an existing IAM role, you must have an IAM OpenID Connect
+-- (OIDC) provider created for your cluster. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html Enabling IAM roles for service accounts on your cluster>
+-- in the /Amazon EKS User Guide/.
+createAddon_serviceAccountRoleArn :: Lens.Lens' CreateAddon (Prelude.Maybe Prelude.Text)
+createAddon_serviceAccountRoleArn = Lens.lens (\CreateAddon' {serviceAccountRoleArn} -> serviceAccountRoleArn) (\s@CreateAddon' {} a -> s {serviceAccountRoleArn = a} :: CreateAddon)
+
+-- | The metadata to apply to the cluster to assist with categorization and
+-- organization. Each tag consists of a key and an optional value. You
+-- define both.
+createAddon_tags :: Lens.Lens' CreateAddon (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createAddon_tags = Lens.lens (\CreateAddon' {tags} -> tags) (\s@CreateAddon' {} a -> s {tags = a} :: CreateAddon) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the cluster to create the add-on for.
+createAddon_clusterName :: Lens.Lens' CreateAddon Prelude.Text
+createAddon_clusterName = Lens.lens (\CreateAddon' {clusterName} -> clusterName) (\s@CreateAddon' {} a -> s {clusterName = a} :: CreateAddon)
+
+-- | The name of the add-on. The name must match one of the names that
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+-- returns.
+createAddon_addonName :: Lens.Lens' CreateAddon Prelude.Text
+createAddon_addonName = Lens.lens (\CreateAddon' {addonName} -> addonName) (\s@CreateAddon' {} a -> s {addonName = a} :: CreateAddon)
+
+instance Core.AWSRequest CreateAddon where
+  type AWSResponse CreateAddon = CreateAddonResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAddonResponse'
+            Prelude.<$> (x Data..?> "addon")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAddon where
+  hashWithSalt _salt CreateAddon' {..} =
+    _salt
+      `Prelude.hashWithSalt` addonVersion
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` configurationValues
+      `Prelude.hashWithSalt` resolveConflicts
+      `Prelude.hashWithSalt` serviceAccountRoleArn
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` addonName
+
+instance Prelude.NFData CreateAddon where
+  rnf CreateAddon' {..} =
+    Prelude.rnf addonVersion
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf configurationValues
+      `Prelude.seq` Prelude.rnf resolveConflicts
+      `Prelude.seq` Prelude.rnf serviceAccountRoleArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf addonName
+
+instance Data.ToHeaders CreateAddon where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAddon where
+  toJSON CreateAddon' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("addonVersion" Data..=) Prelude.<$> addonVersion,
+            ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("configurationValues" Data..=)
+              Prelude.<$> configurationValues,
+            ("resolveConflicts" Data..=)
+              Prelude.<$> resolveConflicts,
+            ("serviceAccountRoleArn" Data..=)
+              Prelude.<$> serviceAccountRoleArn,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("addonName" Data..= addonName)
+          ]
+      )
+
+instance Data.ToPath CreateAddon where
+  toPath CreateAddon' {..} =
+    Prelude.mconcat
+      ["/clusters/", Data.toBS clusterName, "/addons"]
+
+instance Data.ToQuery CreateAddon where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAddonResponse' smart constructor.
+data CreateAddonResponse = CreateAddonResponse'
+  { addon :: Prelude.Maybe Addon,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAddonResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addon', 'createAddonResponse_addon' - Undocumented member.
+--
+-- 'httpStatus', 'createAddonResponse_httpStatus' - The response's http status code.
+newCreateAddonResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAddonResponse
+newCreateAddonResponse pHttpStatus_ =
+  CreateAddonResponse'
+    { addon = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+createAddonResponse_addon :: Lens.Lens' CreateAddonResponse (Prelude.Maybe Addon)
+createAddonResponse_addon = Lens.lens (\CreateAddonResponse' {addon} -> addon) (\s@CreateAddonResponse' {} a -> s {addon = a} :: CreateAddonResponse)
+
+-- | The response's http status code.
+createAddonResponse_httpStatus :: Lens.Lens' CreateAddonResponse Prelude.Int
+createAddonResponse_httpStatus = Lens.lens (\CreateAddonResponse' {httpStatus} -> httpStatus) (\s@CreateAddonResponse' {} a -> s {httpStatus = a} :: CreateAddonResponse)
+
+instance Prelude.NFData CreateAddonResponse where
+  rnf CreateAddonResponse' {..} =
+    Prelude.rnf addon
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/CreateCluster.hs b/gen/Amazonka/EKS/CreateCluster.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/CreateCluster.hs
@@ -0,0 +1,417 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.CreateCluster
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an Amazon EKS control plane.
+--
+-- The Amazon EKS control plane consists of control plane instances that
+-- run the Kubernetes software, such as @etcd@ and the API server. The
+-- control plane runs in an account managed by Amazon Web Services, and the
+-- Kubernetes API is exposed by the Amazon EKS API server endpoint. Each
+-- Amazon EKS cluster control plane is single tenant and unique. It runs on
+-- its own set of Amazon EC2 instances.
+--
+-- The cluster control plane is provisioned across multiple Availability
+-- Zones and fronted by an Elastic Load Balancing Network Load Balancer.
+-- Amazon EKS also provisions elastic network interfaces in your VPC
+-- subnets to provide connectivity from the control plane instances to the
+-- nodes (for example, to support @kubectl exec@, @logs@, and @proxy@ data
+-- flows).
+--
+-- Amazon EKS nodes run in your Amazon Web Services account and connect to
+-- your cluster\'s control plane over the Kubernetes API server endpoint
+-- and a certificate file that is created for your cluster.
+--
+-- In most cases, it takes several minutes to create a cluster. After you
+-- create an Amazon EKS cluster, you must configure your Kubernetes tooling
+-- to communicate with the API server and launch nodes into your cluster.
+-- For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/managing-auth.html Managing Cluster Authentication>
+-- and
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-workers.html Launching Amazon EKS nodes>
+-- in the /Amazon EKS User Guide/.
+module Amazonka.EKS.CreateCluster
+  ( -- * Creating a Request
+    CreateCluster (..),
+    newCreateCluster,
+
+    -- * Request Lenses
+    createCluster_clientRequestToken,
+    createCluster_encryptionConfig,
+    createCluster_kubernetesNetworkConfig,
+    createCluster_logging,
+    createCluster_outpostConfig,
+    createCluster_tags,
+    createCluster_version,
+    createCluster_name,
+    createCluster_roleArn,
+    createCluster_resourcesVpcConfig,
+
+    -- * Destructuring the Response
+    CreateClusterResponse (..),
+    newCreateClusterResponse,
+
+    -- * Response Lenses
+    createClusterResponse_cluster,
+    createClusterResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateCluster' smart constructor.
+data CreateCluster = CreateCluster'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The encryption configuration for the cluster.
+    encryptionConfig :: Prelude.Maybe [EncryptionConfig],
+    -- | The Kubernetes network configuration for the cluster.
+    kubernetesNetworkConfig :: Prelude.Maybe KubernetesNetworkConfigRequest,
+    -- | Enable or disable exporting the Kubernetes control plane logs for your
+    -- cluster to CloudWatch Logs. By default, cluster control plane logs
+    -- aren\'t exported to CloudWatch Logs. For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html Amazon EKS Cluster control plane logs>
+    -- in the //Amazon EKS User Guide// .
+    --
+    -- CloudWatch Logs ingestion, archive storage, and data scanning rates
+    -- apply to exported control plane logs. For more information, see
+    -- <http://aws.amazon.com/cloudwatch/pricing/ CloudWatch Pricing>.
+    logging :: Prelude.Maybe Logging,
+    -- | An object representing the configuration of your local Amazon EKS
+    -- cluster on an Amazon Web Services Outpost. Before creating a local
+    -- cluster on an Outpost, review
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-local-cluster-overview.html Local clusters for Amazon EKS on Amazon Web Services Outposts>
+    -- in the /Amazon EKS User Guide/. This object isn\'t available for
+    -- creating Amazon EKS clusters on the Amazon Web Services cloud.
+    outpostConfig :: Prelude.Maybe OutpostConfigRequest,
+    -- | The metadata to apply to the cluster to assist with categorization and
+    -- organization. Each tag consists of a key and an optional value. You
+    -- define both.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The desired Kubernetes version for your cluster. If you don\'t specify a
+    -- value here, the default version available in Amazon EKS is used.
+    --
+    -- The default version might not be the latest version available.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The unique name to give to your cluster.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the IAM role that provides permissions
+    -- for the Kubernetes control plane to make calls to Amazon Web Services
+    -- API operations on your behalf. For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/service_IAM_role.html Amazon EKS Service IAM Role>
+    -- in the //Amazon EKS User Guide// .
+    roleArn :: Prelude.Text,
+    -- | The VPC configuration that\'s used by the cluster control plane. Amazon
+    -- EKS VPC resources have specific requirements to work properly with
+    -- Kubernetes. For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html Cluster VPC Considerations>
+    -- and
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html Cluster Security Group Considerations>
+    -- in the /Amazon EKS User Guide/. You must specify at least two subnets.
+    -- You can specify up to five security groups. However, we recommend that
+    -- you use a dedicated security group for your cluster control plane.
+    resourcesVpcConfig :: VpcConfigRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCluster' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'createCluster_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'encryptionConfig', 'createCluster_encryptionConfig' - The encryption configuration for the cluster.
+--
+-- 'kubernetesNetworkConfig', 'createCluster_kubernetesNetworkConfig' - The Kubernetes network configuration for the cluster.
+--
+-- 'logging', 'createCluster_logging' - Enable or disable exporting the Kubernetes control plane logs for your
+-- cluster to CloudWatch Logs. By default, cluster control plane logs
+-- aren\'t exported to CloudWatch Logs. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html Amazon EKS Cluster control plane logs>
+-- in the //Amazon EKS User Guide// .
+--
+-- CloudWatch Logs ingestion, archive storage, and data scanning rates
+-- apply to exported control plane logs. For more information, see
+-- <http://aws.amazon.com/cloudwatch/pricing/ CloudWatch Pricing>.
+--
+-- 'outpostConfig', 'createCluster_outpostConfig' - An object representing the configuration of your local Amazon EKS
+-- cluster on an Amazon Web Services Outpost. Before creating a local
+-- cluster on an Outpost, review
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-local-cluster-overview.html Local clusters for Amazon EKS on Amazon Web Services Outposts>
+-- in the /Amazon EKS User Guide/. This object isn\'t available for
+-- creating Amazon EKS clusters on the Amazon Web Services cloud.
+--
+-- 'tags', 'createCluster_tags' - The metadata to apply to the cluster to assist with categorization and
+-- organization. Each tag consists of a key and an optional value. You
+-- define both.
+--
+-- 'version', 'createCluster_version' - The desired Kubernetes version for your cluster. If you don\'t specify a
+-- value here, the default version available in Amazon EKS is used.
+--
+-- The default version might not be the latest version available.
+--
+-- 'name', 'createCluster_name' - The unique name to give to your cluster.
+--
+-- 'roleArn', 'createCluster_roleArn' - The Amazon Resource Name (ARN) of the IAM role that provides permissions
+-- for the Kubernetes control plane to make calls to Amazon Web Services
+-- API operations on your behalf. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/service_IAM_role.html Amazon EKS Service IAM Role>
+-- in the //Amazon EKS User Guide// .
+--
+-- 'resourcesVpcConfig', 'createCluster_resourcesVpcConfig' - The VPC configuration that\'s used by the cluster control plane. Amazon
+-- EKS VPC resources have specific requirements to work properly with
+-- Kubernetes. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html Cluster VPC Considerations>
+-- and
+-- <https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html Cluster Security Group Considerations>
+-- in the /Amazon EKS User Guide/. You must specify at least two subnets.
+-- You can specify up to five security groups. However, we recommend that
+-- you use a dedicated security group for your cluster control plane.
+newCreateCluster ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'resourcesVpcConfig'
+  VpcConfigRequest ->
+  CreateCluster
+newCreateCluster
+  pName_
+  pRoleArn_
+  pResourcesVpcConfig_ =
+    CreateCluster'
+      { clientRequestToken =
+          Prelude.Nothing,
+        encryptionConfig = Prelude.Nothing,
+        kubernetesNetworkConfig = Prelude.Nothing,
+        logging = Prelude.Nothing,
+        outpostConfig = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        version = Prelude.Nothing,
+        name = pName_,
+        roleArn = pRoleArn_,
+        resourcesVpcConfig = pResourcesVpcConfig_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createCluster_clientRequestToken :: Lens.Lens' CreateCluster (Prelude.Maybe Prelude.Text)
+createCluster_clientRequestToken = Lens.lens (\CreateCluster' {clientRequestToken} -> clientRequestToken) (\s@CreateCluster' {} a -> s {clientRequestToken = a} :: CreateCluster)
+
+-- | The encryption configuration for the cluster.
+createCluster_encryptionConfig :: Lens.Lens' CreateCluster (Prelude.Maybe [EncryptionConfig])
+createCluster_encryptionConfig = Lens.lens (\CreateCluster' {encryptionConfig} -> encryptionConfig) (\s@CreateCluster' {} a -> s {encryptionConfig = a} :: CreateCluster) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Kubernetes network configuration for the cluster.
+createCluster_kubernetesNetworkConfig :: Lens.Lens' CreateCluster (Prelude.Maybe KubernetesNetworkConfigRequest)
+createCluster_kubernetesNetworkConfig = Lens.lens (\CreateCluster' {kubernetesNetworkConfig} -> kubernetesNetworkConfig) (\s@CreateCluster' {} a -> s {kubernetesNetworkConfig = a} :: CreateCluster)
+
+-- | Enable or disable exporting the Kubernetes control plane logs for your
+-- cluster to CloudWatch Logs. By default, cluster control plane logs
+-- aren\'t exported to CloudWatch Logs. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html Amazon EKS Cluster control plane logs>
+-- in the //Amazon EKS User Guide// .
+--
+-- CloudWatch Logs ingestion, archive storage, and data scanning rates
+-- apply to exported control plane logs. For more information, see
+-- <http://aws.amazon.com/cloudwatch/pricing/ CloudWatch Pricing>.
+createCluster_logging :: Lens.Lens' CreateCluster (Prelude.Maybe Logging)
+createCluster_logging = Lens.lens (\CreateCluster' {logging} -> logging) (\s@CreateCluster' {} a -> s {logging = a} :: CreateCluster)
+
+-- | An object representing the configuration of your local Amazon EKS
+-- cluster on an Amazon Web Services Outpost. Before creating a local
+-- cluster on an Outpost, review
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-local-cluster-overview.html Local clusters for Amazon EKS on Amazon Web Services Outposts>
+-- in the /Amazon EKS User Guide/. This object isn\'t available for
+-- creating Amazon EKS clusters on the Amazon Web Services cloud.
+createCluster_outpostConfig :: Lens.Lens' CreateCluster (Prelude.Maybe OutpostConfigRequest)
+createCluster_outpostConfig = Lens.lens (\CreateCluster' {outpostConfig} -> outpostConfig) (\s@CreateCluster' {} a -> s {outpostConfig = a} :: CreateCluster)
+
+-- | The metadata to apply to the cluster to assist with categorization and
+-- organization. Each tag consists of a key and an optional value. You
+-- define both.
+createCluster_tags :: Lens.Lens' CreateCluster (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createCluster_tags = Lens.lens (\CreateCluster' {tags} -> tags) (\s@CreateCluster' {} a -> s {tags = a} :: CreateCluster) Prelude.. Lens.mapping Lens.coerced
+
+-- | The desired Kubernetes version for your cluster. If you don\'t specify a
+-- value here, the default version available in Amazon EKS is used.
+--
+-- The default version might not be the latest version available.
+createCluster_version :: Lens.Lens' CreateCluster (Prelude.Maybe Prelude.Text)
+createCluster_version = Lens.lens (\CreateCluster' {version} -> version) (\s@CreateCluster' {} a -> s {version = a} :: CreateCluster)
+
+-- | The unique name to give to your cluster.
+createCluster_name :: Lens.Lens' CreateCluster Prelude.Text
+createCluster_name = Lens.lens (\CreateCluster' {name} -> name) (\s@CreateCluster' {} a -> s {name = a} :: CreateCluster)
+
+-- | The Amazon Resource Name (ARN) of the IAM role that provides permissions
+-- for the Kubernetes control plane to make calls to Amazon Web Services
+-- API operations on your behalf. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/service_IAM_role.html Amazon EKS Service IAM Role>
+-- in the //Amazon EKS User Guide// .
+createCluster_roleArn :: Lens.Lens' CreateCluster Prelude.Text
+createCluster_roleArn = Lens.lens (\CreateCluster' {roleArn} -> roleArn) (\s@CreateCluster' {} a -> s {roleArn = a} :: CreateCluster)
+
+-- | The VPC configuration that\'s used by the cluster control plane. Amazon
+-- EKS VPC resources have specific requirements to work properly with
+-- Kubernetes. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html Cluster VPC Considerations>
+-- and
+-- <https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html Cluster Security Group Considerations>
+-- in the /Amazon EKS User Guide/. You must specify at least two subnets.
+-- You can specify up to five security groups. However, we recommend that
+-- you use a dedicated security group for your cluster control plane.
+createCluster_resourcesVpcConfig :: Lens.Lens' CreateCluster VpcConfigRequest
+createCluster_resourcesVpcConfig = Lens.lens (\CreateCluster' {resourcesVpcConfig} -> resourcesVpcConfig) (\s@CreateCluster' {} a -> s {resourcesVpcConfig = a} :: CreateCluster)
+
+instance Core.AWSRequest CreateCluster where
+  type
+    AWSResponse CreateCluster =
+      CreateClusterResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateClusterResponse'
+            Prelude.<$> (x Data..?> "cluster")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateCluster where
+  hashWithSalt _salt CreateCluster' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` encryptionConfig
+      `Prelude.hashWithSalt` kubernetesNetworkConfig
+      `Prelude.hashWithSalt` logging
+      `Prelude.hashWithSalt` outpostConfig
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` version
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` resourcesVpcConfig
+
+instance Prelude.NFData CreateCluster where
+  rnf CreateCluster' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf encryptionConfig
+      `Prelude.seq` Prelude.rnf kubernetesNetworkConfig
+      `Prelude.seq` Prelude.rnf logging
+      `Prelude.seq` Prelude.rnf outpostConfig
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf resourcesVpcConfig
+
+instance Data.ToHeaders CreateCluster where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateCluster where
+  toJSON CreateCluster' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("encryptionConfig" Data..=)
+              Prelude.<$> encryptionConfig,
+            ("kubernetesNetworkConfig" Data..=)
+              Prelude.<$> kubernetesNetworkConfig,
+            ("logging" Data..=) Prelude.<$> logging,
+            ("outpostConfig" Data..=) Prelude.<$> outpostConfig,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("version" Data..=) Prelude.<$> version,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("roleArn" Data..= roleArn),
+            Prelude.Just
+              ("resourcesVpcConfig" Data..= resourcesVpcConfig)
+          ]
+      )
+
+instance Data.ToPath CreateCluster where
+  toPath = Prelude.const "/clusters"
+
+instance Data.ToQuery CreateCluster where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateClusterResponse' smart constructor.
+data CreateClusterResponse = CreateClusterResponse'
+  { -- | The full description of your new cluster.
+    cluster :: Prelude.Maybe Cluster,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateClusterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cluster', 'createClusterResponse_cluster' - The full description of your new cluster.
+--
+-- 'httpStatus', 'createClusterResponse_httpStatus' - The response's http status code.
+newCreateClusterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateClusterResponse
+newCreateClusterResponse pHttpStatus_ =
+  CreateClusterResponse'
+    { cluster = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The full description of your new cluster.
+createClusterResponse_cluster :: Lens.Lens' CreateClusterResponse (Prelude.Maybe Cluster)
+createClusterResponse_cluster = Lens.lens (\CreateClusterResponse' {cluster} -> cluster) (\s@CreateClusterResponse' {} a -> s {cluster = a} :: CreateClusterResponse)
+
+-- | The response's http status code.
+createClusterResponse_httpStatus :: Lens.Lens' CreateClusterResponse Prelude.Int
+createClusterResponse_httpStatus = Lens.lens (\CreateClusterResponse' {httpStatus} -> httpStatus) (\s@CreateClusterResponse' {} a -> s {httpStatus = a} :: CreateClusterResponse)
+
+instance Prelude.NFData CreateClusterResponse where
+  rnf CreateClusterResponse' {..} =
+    Prelude.rnf cluster
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/CreateFargateProfile.hs b/gen/Amazonka/EKS/CreateFargateProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/CreateFargateProfile.hs
@@ -0,0 +1,348 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.CreateFargateProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an Fargate profile for your Amazon EKS cluster. You must have at
+-- least one Fargate profile in a cluster to be able to run pods on
+-- Fargate.
+--
+-- The Fargate profile allows an administrator to declare which pods run on
+-- Fargate and specify which pods run on which Fargate profile. This
+-- declaration is done through the profile’s selectors. Each profile can
+-- have up to five selectors that contain a namespace and labels. A
+-- namespace is required for every selector. The label field consists of
+-- multiple optional key-value pairs. Pods that match the selectors are
+-- scheduled on Fargate. If a to-be-scheduled pod matches any of the
+-- selectors in the Fargate profile, then that pod is run on Fargate.
+--
+-- When you create a Fargate profile, you must specify a pod execution role
+-- to use with the pods that are scheduled with the profile. This role is
+-- added to the cluster\'s Kubernetes
+-- <https://kubernetes.io/docs/admin/authorization/rbac/ Role Based Access Control>
+-- (RBAC) for authorization so that the @kubelet@ that is running on the
+-- Fargate infrastructure can register with your Amazon EKS cluster so that
+-- it can appear in your cluster as a node. The pod execution role also
+-- provides IAM permissions to the Fargate infrastructure to allow read
+-- access to Amazon ECR image repositories. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html Pod Execution Role>
+-- in the /Amazon EKS User Guide/.
+--
+-- Fargate profiles are immutable. However, you can create a new updated
+-- profile to replace an existing profile and then delete the original
+-- after the updated profile has finished creating.
+--
+-- If any Fargate profiles in a cluster are in the @DELETING@ status, you
+-- must wait for that Fargate profile to finish deleting before you can
+-- create any other profiles in that cluster.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/fargate-profile.html Fargate Profile>
+-- in the /Amazon EKS User Guide/.
+module Amazonka.EKS.CreateFargateProfile
+  ( -- * Creating a Request
+    CreateFargateProfile (..),
+    newCreateFargateProfile,
+
+    -- * Request Lenses
+    createFargateProfile_clientRequestToken,
+    createFargateProfile_selectors,
+    createFargateProfile_subnets,
+    createFargateProfile_tags,
+    createFargateProfile_fargateProfileName,
+    createFargateProfile_clusterName,
+    createFargateProfile_podExecutionRoleArn,
+
+    -- * Destructuring the Response
+    CreateFargateProfileResponse (..),
+    newCreateFargateProfileResponse,
+
+    -- * Response Lenses
+    createFargateProfileResponse_fargateProfile,
+    createFargateProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateFargateProfile' smart constructor.
+data CreateFargateProfile = CreateFargateProfile'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The selectors to match for pods to use this Fargate profile. Each
+    -- selector must have an associated namespace. Optionally, you can also
+    -- specify labels for a namespace. You may specify up to five selectors in
+    -- a Fargate profile.
+    selectors :: Prelude.Maybe [FargateProfileSelector],
+    -- | The IDs of subnets to launch your pods into. At this time, pods running
+    -- on Fargate are not assigned public IP addresses, so only private subnets
+    -- (with no direct route to an Internet Gateway) are accepted for this
+    -- parameter.
+    subnets :: Prelude.Maybe [Prelude.Text],
+    -- | The metadata to apply to the Fargate profile to assist with
+    -- categorization and organization. Each tag consists of a key and an
+    -- optional value. You define both. Fargate profile tags do not propagate
+    -- to any other resources associated with the Fargate profile, such as the
+    -- pods that are scheduled with it.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the Fargate profile.
+    fargateProfileName :: Prelude.Text,
+    -- | The name of the Amazon EKS cluster to apply the Fargate profile to.
+    clusterName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the pod execution role to use for pods
+    -- that match the selectors in the Fargate profile. The pod execution role
+    -- allows Fargate infrastructure to register with your cluster as a node,
+    -- and it provides read access to Amazon ECR image repositories. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html Pod Execution Role>
+    -- in the /Amazon EKS User Guide/.
+    podExecutionRoleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFargateProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'createFargateProfile_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'selectors', 'createFargateProfile_selectors' - The selectors to match for pods to use this Fargate profile. Each
+-- selector must have an associated namespace. Optionally, you can also
+-- specify labels for a namespace. You may specify up to five selectors in
+-- a Fargate profile.
+--
+-- 'subnets', 'createFargateProfile_subnets' - The IDs of subnets to launch your pods into. At this time, pods running
+-- on Fargate are not assigned public IP addresses, so only private subnets
+-- (with no direct route to an Internet Gateway) are accepted for this
+-- parameter.
+--
+-- 'tags', 'createFargateProfile_tags' - The metadata to apply to the Fargate profile to assist with
+-- categorization and organization. Each tag consists of a key and an
+-- optional value. You define both. Fargate profile tags do not propagate
+-- to any other resources associated with the Fargate profile, such as the
+-- pods that are scheduled with it.
+--
+-- 'fargateProfileName', 'createFargateProfile_fargateProfileName' - The name of the Fargate profile.
+--
+-- 'clusterName', 'createFargateProfile_clusterName' - The name of the Amazon EKS cluster to apply the Fargate profile to.
+--
+-- 'podExecutionRoleArn', 'createFargateProfile_podExecutionRoleArn' - The Amazon Resource Name (ARN) of the pod execution role to use for pods
+-- that match the selectors in the Fargate profile. The pod execution role
+-- allows Fargate infrastructure to register with your cluster as a node,
+-- and it provides read access to Amazon ECR image repositories. For more
+-- information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html Pod Execution Role>
+-- in the /Amazon EKS User Guide/.
+newCreateFargateProfile ::
+  -- | 'fargateProfileName'
+  Prelude.Text ->
+  -- | 'clusterName'
+  Prelude.Text ->
+  -- | 'podExecutionRoleArn'
+  Prelude.Text ->
+  CreateFargateProfile
+newCreateFargateProfile
+  pFargateProfileName_
+  pClusterName_
+  pPodExecutionRoleArn_ =
+    CreateFargateProfile'
+      { clientRequestToken =
+          Prelude.Nothing,
+        selectors = Prelude.Nothing,
+        subnets = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        fargateProfileName = pFargateProfileName_,
+        clusterName = pClusterName_,
+        podExecutionRoleArn = pPodExecutionRoleArn_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createFargateProfile_clientRequestToken :: Lens.Lens' CreateFargateProfile (Prelude.Maybe Prelude.Text)
+createFargateProfile_clientRequestToken = Lens.lens (\CreateFargateProfile' {clientRequestToken} -> clientRequestToken) (\s@CreateFargateProfile' {} a -> s {clientRequestToken = a} :: CreateFargateProfile)
+
+-- | The selectors to match for pods to use this Fargate profile. Each
+-- selector must have an associated namespace. Optionally, you can also
+-- specify labels for a namespace. You may specify up to five selectors in
+-- a Fargate profile.
+createFargateProfile_selectors :: Lens.Lens' CreateFargateProfile (Prelude.Maybe [FargateProfileSelector])
+createFargateProfile_selectors = Lens.lens (\CreateFargateProfile' {selectors} -> selectors) (\s@CreateFargateProfile' {} a -> s {selectors = a} :: CreateFargateProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of subnets to launch your pods into. At this time, pods running
+-- on Fargate are not assigned public IP addresses, so only private subnets
+-- (with no direct route to an Internet Gateway) are accepted for this
+-- parameter.
+createFargateProfile_subnets :: Lens.Lens' CreateFargateProfile (Prelude.Maybe [Prelude.Text])
+createFargateProfile_subnets = Lens.lens (\CreateFargateProfile' {subnets} -> subnets) (\s@CreateFargateProfile' {} a -> s {subnets = a} :: CreateFargateProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The metadata to apply to the Fargate profile to assist with
+-- categorization and organization. Each tag consists of a key and an
+-- optional value. You define both. Fargate profile tags do not propagate
+-- to any other resources associated with the Fargate profile, such as the
+-- pods that are scheduled with it.
+createFargateProfile_tags :: Lens.Lens' CreateFargateProfile (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createFargateProfile_tags = Lens.lens (\CreateFargateProfile' {tags} -> tags) (\s@CreateFargateProfile' {} a -> s {tags = a} :: CreateFargateProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the Fargate profile.
+createFargateProfile_fargateProfileName :: Lens.Lens' CreateFargateProfile Prelude.Text
+createFargateProfile_fargateProfileName = Lens.lens (\CreateFargateProfile' {fargateProfileName} -> fargateProfileName) (\s@CreateFargateProfile' {} a -> s {fargateProfileName = a} :: CreateFargateProfile)
+
+-- | The name of the Amazon EKS cluster to apply the Fargate profile to.
+createFargateProfile_clusterName :: Lens.Lens' CreateFargateProfile Prelude.Text
+createFargateProfile_clusterName = Lens.lens (\CreateFargateProfile' {clusterName} -> clusterName) (\s@CreateFargateProfile' {} a -> s {clusterName = a} :: CreateFargateProfile)
+
+-- | The Amazon Resource Name (ARN) of the pod execution role to use for pods
+-- that match the selectors in the Fargate profile. The pod execution role
+-- allows Fargate infrastructure to register with your cluster as a node,
+-- and it provides read access to Amazon ECR image repositories. For more
+-- information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html Pod Execution Role>
+-- in the /Amazon EKS User Guide/.
+createFargateProfile_podExecutionRoleArn :: Lens.Lens' CreateFargateProfile Prelude.Text
+createFargateProfile_podExecutionRoleArn = Lens.lens (\CreateFargateProfile' {podExecutionRoleArn} -> podExecutionRoleArn) (\s@CreateFargateProfile' {} a -> s {podExecutionRoleArn = a} :: CreateFargateProfile)
+
+instance Core.AWSRequest CreateFargateProfile where
+  type
+    AWSResponse CreateFargateProfile =
+      CreateFargateProfileResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateFargateProfileResponse'
+            Prelude.<$> (x Data..?> "fargateProfile")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateFargateProfile where
+  hashWithSalt _salt CreateFargateProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` selectors
+      `Prelude.hashWithSalt` subnets
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` fargateProfileName
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` podExecutionRoleArn
+
+instance Prelude.NFData CreateFargateProfile where
+  rnf CreateFargateProfile' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf selectors
+      `Prelude.seq` Prelude.rnf subnets
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf fargateProfileName
+      `Prelude.seq` Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf podExecutionRoleArn
+
+instance Data.ToHeaders CreateFargateProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateFargateProfile where
+  toJSON CreateFargateProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("selectors" Data..=) Prelude.<$> selectors,
+            ("subnets" Data..=) Prelude.<$> subnets,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("fargateProfileName" Data..= fargateProfileName),
+            Prelude.Just
+              ("podExecutionRoleArn" Data..= podExecutionRoleArn)
+          ]
+      )
+
+instance Data.ToPath CreateFargateProfile where
+  toPath CreateFargateProfile' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/fargate-profiles"
+      ]
+
+instance Data.ToQuery CreateFargateProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateFargateProfileResponse' smart constructor.
+data CreateFargateProfileResponse = CreateFargateProfileResponse'
+  { -- | The full description of your new Fargate profile.
+    fargateProfile :: Prelude.Maybe FargateProfile,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFargateProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fargateProfile', 'createFargateProfileResponse_fargateProfile' - The full description of your new Fargate profile.
+--
+-- 'httpStatus', 'createFargateProfileResponse_httpStatus' - The response's http status code.
+newCreateFargateProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateFargateProfileResponse
+newCreateFargateProfileResponse pHttpStatus_ =
+  CreateFargateProfileResponse'
+    { fargateProfile =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The full description of your new Fargate profile.
+createFargateProfileResponse_fargateProfile :: Lens.Lens' CreateFargateProfileResponse (Prelude.Maybe FargateProfile)
+createFargateProfileResponse_fargateProfile = Lens.lens (\CreateFargateProfileResponse' {fargateProfile} -> fargateProfile) (\s@CreateFargateProfileResponse' {} a -> s {fargateProfile = a} :: CreateFargateProfileResponse)
+
+-- | The response's http status code.
+createFargateProfileResponse_httpStatus :: Lens.Lens' CreateFargateProfileResponse Prelude.Int
+createFargateProfileResponse_httpStatus = Lens.lens (\CreateFargateProfileResponse' {httpStatus} -> httpStatus) (\s@CreateFargateProfileResponse' {} a -> s {httpStatus = a} :: CreateFargateProfileResponse)
+
+instance Prelude.NFData CreateFargateProfileResponse where
+  rnf CreateFargateProfileResponse' {..} =
+    Prelude.rnf fargateProfile
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/CreateNodegroup.hs b/gen/Amazonka/EKS/CreateNodegroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/CreateNodegroup.hs
@@ -0,0 +1,680 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.CreateNodegroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a managed node group for an Amazon EKS cluster. You can only
+-- create a node group for your cluster that is equal to the current
+-- Kubernetes version for the cluster. All node groups are created with the
+-- latest AMI release version for the respective minor Kubernetes version
+-- of the cluster, unless you deploy a custom AMI using a launch template.
+-- For more information about using launch templates, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>.
+--
+-- An Amazon EKS managed node group is an Amazon EC2 Auto Scaling group and
+-- associated Amazon EC2 instances that are managed by Amazon Web Services
+-- for an Amazon EKS cluster. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html Managed node groups>
+-- in the /Amazon EKS User Guide/.
+--
+-- Windows AMI types are only supported for commercial Regions that support
+-- Windows Amazon EKS.
+module Amazonka.EKS.CreateNodegroup
+  ( -- * Creating a Request
+    CreateNodegroup (..),
+    newCreateNodegroup,
+
+    -- * Request Lenses
+    createNodegroup_amiType,
+    createNodegroup_capacityType,
+    createNodegroup_clientRequestToken,
+    createNodegroup_diskSize,
+    createNodegroup_instanceTypes,
+    createNodegroup_labels,
+    createNodegroup_launchTemplate,
+    createNodegroup_releaseVersion,
+    createNodegroup_remoteAccess,
+    createNodegroup_scalingConfig,
+    createNodegroup_tags,
+    createNodegroup_taints,
+    createNodegroup_updateConfig,
+    createNodegroup_version,
+    createNodegroup_clusterName,
+    createNodegroup_nodegroupName,
+    createNodegroup_subnets,
+    createNodegroup_nodeRole,
+
+    -- * Destructuring the Response
+    CreateNodegroupResponse (..),
+    newCreateNodegroupResponse,
+
+    -- * Response Lenses
+    createNodegroupResponse_nodegroup,
+    createNodegroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateNodegroup' smart constructor.
+data CreateNodegroup = CreateNodegroup'
+  { -- | The AMI type for your node group. If you specify @launchTemplate@, and
+    -- your launch template uses a custom AMI, then don\'t specify @amiType@,
+    -- or the node group deployment will fail. If your launch template uses a
+    -- Windows custom AMI, then add @eks:kube-proxy-windows@ to your Windows
+    -- nodes @rolearn@ in the @aws-auth@ @ConfigMap@. For more information
+    -- about using launch templates with Amazon EKS, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+    -- in the /Amazon EKS User Guide/.
+    amiType :: Prelude.Maybe AMITypes,
+    -- | The capacity type for your node group.
+    capacityType :: Prelude.Maybe CapacityTypes,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The root device disk size (in GiB) for your node group instances. The
+    -- default disk size is 20 GiB for Linux and Bottlerocket. The default disk
+    -- size is 50 GiB for Windows. If you specify @launchTemplate@, then don\'t
+    -- specify @diskSize@, or the node group deployment will fail. For more
+    -- information about using launch templates with Amazon EKS, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+    -- in the /Amazon EKS User Guide/.
+    diskSize :: Prelude.Maybe Prelude.Int,
+    -- | Specify the instance types for a node group. If you specify a GPU
+    -- instance type, make sure to also specify an applicable GPU AMI type with
+    -- the @amiType@ parameter. If you specify @launchTemplate@, then you can
+    -- specify zero or one instance type in your launch template /or/ you can
+    -- specify 0-20 instance types for @instanceTypes@. If however, you specify
+    -- an instance type in your launch template /and/ specify any
+    -- @instanceTypes@, the node group deployment will fail. If you don\'t
+    -- specify an instance type in a launch template or for @instanceTypes@,
+    -- then @t3.medium@ is used, by default. If you specify @Spot@ for
+    -- @capacityType@, then we recommend specifying multiple values for
+    -- @instanceTypes@. For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html#managed-node-group-capacity-types Managed node group capacity types>
+    -- and
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+    -- in the /Amazon EKS User Guide/.
+    instanceTypes :: Prelude.Maybe [Prelude.Text],
+    -- | The Kubernetes labels to be applied to the nodes in the node group when
+    -- they are created.
+    labels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | An object representing a node group\'s launch template specification. If
+    -- specified, then do not specify @instanceTypes@, @diskSize@, or
+    -- @remoteAccess@ and make sure that the launch template meets the
+    -- requirements in @launchTemplateSpecification@.
+    launchTemplate :: Prelude.Maybe LaunchTemplateSpecification,
+    -- | The AMI version of the Amazon EKS optimized AMI to use with your node
+    -- group. By default, the latest available AMI version for the node
+    -- group\'s current Kubernetes version is used. For information about Linux
+    -- versions, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html Amazon EKS optimized Amazon Linux AMI versions>
+    -- in the /Amazon EKS User Guide/. Amazon EKS managed node groups support
+    -- the November 2022 and later releases of the Windows AMIs. For
+    -- information about Windows versions, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-versions-windows.html Amazon EKS optimized Windows AMI versions>
+    -- in the /Amazon EKS User Guide/.
+    --
+    -- If you specify @launchTemplate@, and your launch template uses a custom
+    -- AMI, then don\'t specify @releaseVersion@, or the node group deployment
+    -- will fail. For more information about using launch templates with Amazon
+    -- EKS, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+    -- in the /Amazon EKS User Guide/.
+    releaseVersion :: Prelude.Maybe Prelude.Text,
+    -- | The remote access configuration to use with your node group. For Linux,
+    -- the protocol is SSH. For Windows, the protocol is RDP. If you specify
+    -- @launchTemplate@, then don\'t specify @remoteAccess@, or the node group
+    -- deployment will fail. For more information about using launch templates
+    -- with Amazon EKS, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+    -- in the /Amazon EKS User Guide/.
+    remoteAccess :: Prelude.Maybe RemoteAccessConfig,
+    -- | The scaling configuration details for the Auto Scaling group that is
+    -- created for your node group.
+    scalingConfig :: Prelude.Maybe NodegroupScalingConfig,
+    -- | The metadata to apply to the node group to assist with categorization
+    -- and organization. Each tag consists of a key and an optional value. You
+    -- define both. Node group tags do not propagate to any other resources
+    -- associated with the node group, such as the Amazon EC2 instances or
+    -- subnets.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Kubernetes taints to be applied to the nodes in the node group. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html Node taints on managed node groups>.
+    taints :: Prelude.Maybe [Taint],
+    -- | The node group update configuration.
+    updateConfig :: Prelude.Maybe NodegroupUpdateConfig,
+    -- | The Kubernetes version to use for your managed nodes. By default, the
+    -- Kubernetes version of the cluster is used, and this is the only accepted
+    -- specified value. If you specify @launchTemplate@, and your launch
+    -- template uses a custom AMI, then don\'t specify @version@, or the node
+    -- group deployment will fail. For more information about using launch
+    -- templates with Amazon EKS, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+    -- in the /Amazon EKS User Guide/.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The name of the cluster to create the node group in.
+    clusterName :: Prelude.Text,
+    -- | The unique name to give your node group.
+    nodegroupName :: Prelude.Text,
+    -- | The subnets to use for the Auto Scaling group that is created for your
+    -- node group. If you specify @launchTemplate@, then don\'t specify
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html SubnetId>
+    -- in your launch template, or the node group deployment will fail. For
+    -- more information about using launch templates with Amazon EKS, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+    -- in the /Amazon EKS User Guide/.
+    subnets :: [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) of the IAM role to associate with your
+    -- node group. The Amazon EKS worker node @kubelet@ daemon makes calls to
+    -- Amazon Web Services APIs on your behalf. Nodes receive permissions for
+    -- these API calls through an IAM instance profile and associated policies.
+    -- Before you can launch nodes and register them into a cluster, you must
+    -- create an IAM role for those nodes to use when they are launched. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html Amazon EKS node IAM role>
+    -- in the //Amazon EKS User Guide// . If you specify @launchTemplate@, then
+    -- don\'t specify
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_IamInstanceProfile.html IamInstanceProfile>
+    -- in your launch template, or the node group deployment will fail. For
+    -- more information about using launch templates with Amazon EKS, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+    -- in the /Amazon EKS User Guide/.
+    nodeRole :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNodegroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'amiType', 'createNodegroup_amiType' - The AMI type for your node group. If you specify @launchTemplate@, and
+-- your launch template uses a custom AMI, then don\'t specify @amiType@,
+-- or the node group deployment will fail. If your launch template uses a
+-- Windows custom AMI, then add @eks:kube-proxy-windows@ to your Windows
+-- nodes @rolearn@ in the @aws-auth@ @ConfigMap@. For more information
+-- about using launch templates with Amazon EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'capacityType', 'createNodegroup_capacityType' - The capacity type for your node group.
+--
+-- 'clientRequestToken', 'createNodegroup_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'diskSize', 'createNodegroup_diskSize' - The root device disk size (in GiB) for your node group instances. The
+-- default disk size is 20 GiB for Linux and Bottlerocket. The default disk
+-- size is 50 GiB for Windows. If you specify @launchTemplate@, then don\'t
+-- specify @diskSize@, or the node group deployment will fail. For more
+-- information about using launch templates with Amazon EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'instanceTypes', 'createNodegroup_instanceTypes' - Specify the instance types for a node group. If you specify a GPU
+-- instance type, make sure to also specify an applicable GPU AMI type with
+-- the @amiType@ parameter. If you specify @launchTemplate@, then you can
+-- specify zero or one instance type in your launch template /or/ you can
+-- specify 0-20 instance types for @instanceTypes@. If however, you specify
+-- an instance type in your launch template /and/ specify any
+-- @instanceTypes@, the node group deployment will fail. If you don\'t
+-- specify an instance type in a launch template or for @instanceTypes@,
+-- then @t3.medium@ is used, by default. If you specify @Spot@ for
+-- @capacityType@, then we recommend specifying multiple values for
+-- @instanceTypes@. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html#managed-node-group-capacity-types Managed node group capacity types>
+-- and
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'labels', 'createNodegroup_labels' - The Kubernetes labels to be applied to the nodes in the node group when
+-- they are created.
+--
+-- 'launchTemplate', 'createNodegroup_launchTemplate' - An object representing a node group\'s launch template specification. If
+-- specified, then do not specify @instanceTypes@, @diskSize@, or
+-- @remoteAccess@ and make sure that the launch template meets the
+-- requirements in @launchTemplateSpecification@.
+--
+-- 'releaseVersion', 'createNodegroup_releaseVersion' - The AMI version of the Amazon EKS optimized AMI to use with your node
+-- group. By default, the latest available AMI version for the node
+-- group\'s current Kubernetes version is used. For information about Linux
+-- versions, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html Amazon EKS optimized Amazon Linux AMI versions>
+-- in the /Amazon EKS User Guide/. Amazon EKS managed node groups support
+-- the November 2022 and later releases of the Windows AMIs. For
+-- information about Windows versions, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-versions-windows.html Amazon EKS optimized Windows AMI versions>
+-- in the /Amazon EKS User Guide/.
+--
+-- If you specify @launchTemplate@, and your launch template uses a custom
+-- AMI, then don\'t specify @releaseVersion@, or the node group deployment
+-- will fail. For more information about using launch templates with Amazon
+-- EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'remoteAccess', 'createNodegroup_remoteAccess' - The remote access configuration to use with your node group. For Linux,
+-- the protocol is SSH. For Windows, the protocol is RDP. If you specify
+-- @launchTemplate@, then don\'t specify @remoteAccess@, or the node group
+-- deployment will fail. For more information about using launch templates
+-- with Amazon EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'scalingConfig', 'createNodegroup_scalingConfig' - The scaling configuration details for the Auto Scaling group that is
+-- created for your node group.
+--
+-- 'tags', 'createNodegroup_tags' - The metadata to apply to the node group to assist with categorization
+-- and organization. Each tag consists of a key and an optional value. You
+-- define both. Node group tags do not propagate to any other resources
+-- associated with the node group, such as the Amazon EC2 instances or
+-- subnets.
+--
+-- 'taints', 'createNodegroup_taints' - The Kubernetes taints to be applied to the nodes in the node group. For
+-- more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html Node taints on managed node groups>.
+--
+-- 'updateConfig', 'createNodegroup_updateConfig' - The node group update configuration.
+--
+-- 'version', 'createNodegroup_version' - The Kubernetes version to use for your managed nodes. By default, the
+-- Kubernetes version of the cluster is used, and this is the only accepted
+-- specified value. If you specify @launchTemplate@, and your launch
+-- template uses a custom AMI, then don\'t specify @version@, or the node
+-- group deployment will fail. For more information about using launch
+-- templates with Amazon EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'clusterName', 'createNodegroup_clusterName' - The name of the cluster to create the node group in.
+--
+-- 'nodegroupName', 'createNodegroup_nodegroupName' - The unique name to give your node group.
+--
+-- 'subnets', 'createNodegroup_subnets' - The subnets to use for the Auto Scaling group that is created for your
+-- node group. If you specify @launchTemplate@, then don\'t specify
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html SubnetId>
+-- in your launch template, or the node group deployment will fail. For
+-- more information about using launch templates with Amazon EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'nodeRole', 'createNodegroup_nodeRole' - The Amazon Resource Name (ARN) of the IAM role to associate with your
+-- node group. The Amazon EKS worker node @kubelet@ daemon makes calls to
+-- Amazon Web Services APIs on your behalf. Nodes receive permissions for
+-- these API calls through an IAM instance profile and associated policies.
+-- Before you can launch nodes and register them into a cluster, you must
+-- create an IAM role for those nodes to use when they are launched. For
+-- more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html Amazon EKS node IAM role>
+-- in the //Amazon EKS User Guide// . If you specify @launchTemplate@, then
+-- don\'t specify
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_IamInstanceProfile.html IamInstanceProfile>
+-- in your launch template, or the node group deployment will fail. For
+-- more information about using launch templates with Amazon EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+newCreateNodegroup ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  -- | 'nodegroupName'
+  Prelude.Text ->
+  -- | 'nodeRole'
+  Prelude.Text ->
+  CreateNodegroup
+newCreateNodegroup
+  pClusterName_
+  pNodegroupName_
+  pNodeRole_ =
+    CreateNodegroup'
+      { amiType = Prelude.Nothing,
+        capacityType = Prelude.Nothing,
+        clientRequestToken = Prelude.Nothing,
+        diskSize = Prelude.Nothing,
+        instanceTypes = Prelude.Nothing,
+        labels = Prelude.Nothing,
+        launchTemplate = Prelude.Nothing,
+        releaseVersion = Prelude.Nothing,
+        remoteAccess = Prelude.Nothing,
+        scalingConfig = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        taints = Prelude.Nothing,
+        updateConfig = Prelude.Nothing,
+        version = Prelude.Nothing,
+        clusterName = pClusterName_,
+        nodegroupName = pNodegroupName_,
+        subnets = Prelude.mempty,
+        nodeRole = pNodeRole_
+      }
+
+-- | The AMI type for your node group. If you specify @launchTemplate@, and
+-- your launch template uses a custom AMI, then don\'t specify @amiType@,
+-- or the node group deployment will fail. If your launch template uses a
+-- Windows custom AMI, then add @eks:kube-proxy-windows@ to your Windows
+-- nodes @rolearn@ in the @aws-auth@ @ConfigMap@. For more information
+-- about using launch templates with Amazon EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+createNodegroup_amiType :: Lens.Lens' CreateNodegroup (Prelude.Maybe AMITypes)
+createNodegroup_amiType = Lens.lens (\CreateNodegroup' {amiType} -> amiType) (\s@CreateNodegroup' {} a -> s {amiType = a} :: CreateNodegroup)
+
+-- | The capacity type for your node group.
+createNodegroup_capacityType :: Lens.Lens' CreateNodegroup (Prelude.Maybe CapacityTypes)
+createNodegroup_capacityType = Lens.lens (\CreateNodegroup' {capacityType} -> capacityType) (\s@CreateNodegroup' {} a -> s {capacityType = a} :: CreateNodegroup)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createNodegroup_clientRequestToken :: Lens.Lens' CreateNodegroup (Prelude.Maybe Prelude.Text)
+createNodegroup_clientRequestToken = Lens.lens (\CreateNodegroup' {clientRequestToken} -> clientRequestToken) (\s@CreateNodegroup' {} a -> s {clientRequestToken = a} :: CreateNodegroup)
+
+-- | The root device disk size (in GiB) for your node group instances. The
+-- default disk size is 20 GiB for Linux and Bottlerocket. The default disk
+-- size is 50 GiB for Windows. If you specify @launchTemplate@, then don\'t
+-- specify @diskSize@, or the node group deployment will fail. For more
+-- information about using launch templates with Amazon EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+createNodegroup_diskSize :: Lens.Lens' CreateNodegroup (Prelude.Maybe Prelude.Int)
+createNodegroup_diskSize = Lens.lens (\CreateNodegroup' {diskSize} -> diskSize) (\s@CreateNodegroup' {} a -> s {diskSize = a} :: CreateNodegroup)
+
+-- | Specify the instance types for a node group. If you specify a GPU
+-- instance type, make sure to also specify an applicable GPU AMI type with
+-- the @amiType@ parameter. If you specify @launchTemplate@, then you can
+-- specify zero or one instance type in your launch template /or/ you can
+-- specify 0-20 instance types for @instanceTypes@. If however, you specify
+-- an instance type in your launch template /and/ specify any
+-- @instanceTypes@, the node group deployment will fail. If you don\'t
+-- specify an instance type in a launch template or for @instanceTypes@,
+-- then @t3.medium@ is used, by default. If you specify @Spot@ for
+-- @capacityType@, then we recommend specifying multiple values for
+-- @instanceTypes@. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html#managed-node-group-capacity-types Managed node group capacity types>
+-- and
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+createNodegroup_instanceTypes :: Lens.Lens' CreateNodegroup (Prelude.Maybe [Prelude.Text])
+createNodegroup_instanceTypes = Lens.lens (\CreateNodegroup' {instanceTypes} -> instanceTypes) (\s@CreateNodegroup' {} a -> s {instanceTypes = a} :: CreateNodegroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Kubernetes labels to be applied to the nodes in the node group when
+-- they are created.
+createNodegroup_labels :: Lens.Lens' CreateNodegroup (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createNodegroup_labels = Lens.lens (\CreateNodegroup' {labels} -> labels) (\s@CreateNodegroup' {} a -> s {labels = a} :: CreateNodegroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | An object representing a node group\'s launch template specification. If
+-- specified, then do not specify @instanceTypes@, @diskSize@, or
+-- @remoteAccess@ and make sure that the launch template meets the
+-- requirements in @launchTemplateSpecification@.
+createNodegroup_launchTemplate :: Lens.Lens' CreateNodegroup (Prelude.Maybe LaunchTemplateSpecification)
+createNodegroup_launchTemplate = Lens.lens (\CreateNodegroup' {launchTemplate} -> launchTemplate) (\s@CreateNodegroup' {} a -> s {launchTemplate = a} :: CreateNodegroup)
+
+-- | The AMI version of the Amazon EKS optimized AMI to use with your node
+-- group. By default, the latest available AMI version for the node
+-- group\'s current Kubernetes version is used. For information about Linux
+-- versions, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html Amazon EKS optimized Amazon Linux AMI versions>
+-- in the /Amazon EKS User Guide/. Amazon EKS managed node groups support
+-- the November 2022 and later releases of the Windows AMIs. For
+-- information about Windows versions, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-versions-windows.html Amazon EKS optimized Windows AMI versions>
+-- in the /Amazon EKS User Guide/.
+--
+-- If you specify @launchTemplate@, and your launch template uses a custom
+-- AMI, then don\'t specify @releaseVersion@, or the node group deployment
+-- will fail. For more information about using launch templates with Amazon
+-- EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+createNodegroup_releaseVersion :: Lens.Lens' CreateNodegroup (Prelude.Maybe Prelude.Text)
+createNodegroup_releaseVersion = Lens.lens (\CreateNodegroup' {releaseVersion} -> releaseVersion) (\s@CreateNodegroup' {} a -> s {releaseVersion = a} :: CreateNodegroup)
+
+-- | The remote access configuration to use with your node group. For Linux,
+-- the protocol is SSH. For Windows, the protocol is RDP. If you specify
+-- @launchTemplate@, then don\'t specify @remoteAccess@, or the node group
+-- deployment will fail. For more information about using launch templates
+-- with Amazon EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+createNodegroup_remoteAccess :: Lens.Lens' CreateNodegroup (Prelude.Maybe RemoteAccessConfig)
+createNodegroup_remoteAccess = Lens.lens (\CreateNodegroup' {remoteAccess} -> remoteAccess) (\s@CreateNodegroup' {} a -> s {remoteAccess = a} :: CreateNodegroup)
+
+-- | The scaling configuration details for the Auto Scaling group that is
+-- created for your node group.
+createNodegroup_scalingConfig :: Lens.Lens' CreateNodegroup (Prelude.Maybe NodegroupScalingConfig)
+createNodegroup_scalingConfig = Lens.lens (\CreateNodegroup' {scalingConfig} -> scalingConfig) (\s@CreateNodegroup' {} a -> s {scalingConfig = a} :: CreateNodegroup)
+
+-- | The metadata to apply to the node group to assist with categorization
+-- and organization. Each tag consists of a key and an optional value. You
+-- define both. Node group tags do not propagate to any other resources
+-- associated with the node group, such as the Amazon EC2 instances or
+-- subnets.
+createNodegroup_tags :: Lens.Lens' CreateNodegroup (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createNodegroup_tags = Lens.lens (\CreateNodegroup' {tags} -> tags) (\s@CreateNodegroup' {} a -> s {tags = a} :: CreateNodegroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Kubernetes taints to be applied to the nodes in the node group. For
+-- more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html Node taints on managed node groups>.
+createNodegroup_taints :: Lens.Lens' CreateNodegroup (Prelude.Maybe [Taint])
+createNodegroup_taints = Lens.lens (\CreateNodegroup' {taints} -> taints) (\s@CreateNodegroup' {} a -> s {taints = a} :: CreateNodegroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The node group update configuration.
+createNodegroup_updateConfig :: Lens.Lens' CreateNodegroup (Prelude.Maybe NodegroupUpdateConfig)
+createNodegroup_updateConfig = Lens.lens (\CreateNodegroup' {updateConfig} -> updateConfig) (\s@CreateNodegroup' {} a -> s {updateConfig = a} :: CreateNodegroup)
+
+-- | The Kubernetes version to use for your managed nodes. By default, the
+-- Kubernetes version of the cluster is used, and this is the only accepted
+-- specified value. If you specify @launchTemplate@, and your launch
+-- template uses a custom AMI, then don\'t specify @version@, or the node
+-- group deployment will fail. For more information about using launch
+-- templates with Amazon EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+createNodegroup_version :: Lens.Lens' CreateNodegroup (Prelude.Maybe Prelude.Text)
+createNodegroup_version = Lens.lens (\CreateNodegroup' {version} -> version) (\s@CreateNodegroup' {} a -> s {version = a} :: CreateNodegroup)
+
+-- | The name of the cluster to create the node group in.
+createNodegroup_clusterName :: Lens.Lens' CreateNodegroup Prelude.Text
+createNodegroup_clusterName = Lens.lens (\CreateNodegroup' {clusterName} -> clusterName) (\s@CreateNodegroup' {} a -> s {clusterName = a} :: CreateNodegroup)
+
+-- | The unique name to give your node group.
+createNodegroup_nodegroupName :: Lens.Lens' CreateNodegroup Prelude.Text
+createNodegroup_nodegroupName = Lens.lens (\CreateNodegroup' {nodegroupName} -> nodegroupName) (\s@CreateNodegroup' {} a -> s {nodegroupName = a} :: CreateNodegroup)
+
+-- | The subnets to use for the Auto Scaling group that is created for your
+-- node group. If you specify @launchTemplate@, then don\'t specify
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html SubnetId>
+-- in your launch template, or the node group deployment will fail. For
+-- more information about using launch templates with Amazon EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+createNodegroup_subnets :: Lens.Lens' CreateNodegroup [Prelude.Text]
+createNodegroup_subnets = Lens.lens (\CreateNodegroup' {subnets} -> subnets) (\s@CreateNodegroup' {} a -> s {subnets = a} :: CreateNodegroup) Prelude.. Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the IAM role to associate with your
+-- node group. The Amazon EKS worker node @kubelet@ daemon makes calls to
+-- Amazon Web Services APIs on your behalf. Nodes receive permissions for
+-- these API calls through an IAM instance profile and associated policies.
+-- Before you can launch nodes and register them into a cluster, you must
+-- create an IAM role for those nodes to use when they are launched. For
+-- more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html Amazon EKS node IAM role>
+-- in the //Amazon EKS User Guide// . If you specify @launchTemplate@, then
+-- don\'t specify
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_IamInstanceProfile.html IamInstanceProfile>
+-- in your launch template, or the node group deployment will fail. For
+-- more information about using launch templates with Amazon EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+createNodegroup_nodeRole :: Lens.Lens' CreateNodegroup Prelude.Text
+createNodegroup_nodeRole = Lens.lens (\CreateNodegroup' {nodeRole} -> nodeRole) (\s@CreateNodegroup' {} a -> s {nodeRole = a} :: CreateNodegroup)
+
+instance Core.AWSRequest CreateNodegroup where
+  type
+    AWSResponse CreateNodegroup =
+      CreateNodegroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateNodegroupResponse'
+            Prelude.<$> (x Data..?> "nodegroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateNodegroup where
+  hashWithSalt _salt CreateNodegroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` amiType
+      `Prelude.hashWithSalt` capacityType
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` diskSize
+      `Prelude.hashWithSalt` instanceTypes
+      `Prelude.hashWithSalt` labels
+      `Prelude.hashWithSalt` launchTemplate
+      `Prelude.hashWithSalt` releaseVersion
+      `Prelude.hashWithSalt` remoteAccess
+      `Prelude.hashWithSalt` scalingConfig
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` taints
+      `Prelude.hashWithSalt` updateConfig
+      `Prelude.hashWithSalt` version
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` nodegroupName
+      `Prelude.hashWithSalt` subnets
+      `Prelude.hashWithSalt` nodeRole
+
+instance Prelude.NFData CreateNodegroup where
+  rnf CreateNodegroup' {..} =
+    Prelude.rnf amiType
+      `Prelude.seq` Prelude.rnf capacityType
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf diskSize
+      `Prelude.seq` Prelude.rnf instanceTypes
+      `Prelude.seq` Prelude.rnf labels
+      `Prelude.seq` Prelude.rnf launchTemplate
+      `Prelude.seq` Prelude.rnf releaseVersion
+      `Prelude.seq` Prelude.rnf remoteAccess
+      `Prelude.seq` Prelude.rnf scalingConfig
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf taints
+      `Prelude.seq` Prelude.rnf updateConfig
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf nodegroupName
+      `Prelude.seq` Prelude.rnf subnets
+      `Prelude.seq` Prelude.rnf nodeRole
+
+instance Data.ToHeaders CreateNodegroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateNodegroup where
+  toJSON CreateNodegroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("amiType" Data..=) Prelude.<$> amiType,
+            ("capacityType" Data..=) Prelude.<$> capacityType,
+            ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("diskSize" Data..=) Prelude.<$> diskSize,
+            ("instanceTypes" Data..=) Prelude.<$> instanceTypes,
+            ("labels" Data..=) Prelude.<$> labels,
+            ("launchTemplate" Data..=)
+              Prelude.<$> launchTemplate,
+            ("releaseVersion" Data..=)
+              Prelude.<$> releaseVersion,
+            ("remoteAccess" Data..=) Prelude.<$> remoteAccess,
+            ("scalingConfig" Data..=) Prelude.<$> scalingConfig,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("taints" Data..=) Prelude.<$> taints,
+            ("updateConfig" Data..=) Prelude.<$> updateConfig,
+            ("version" Data..=) Prelude.<$> version,
+            Prelude.Just ("nodegroupName" Data..= nodegroupName),
+            Prelude.Just ("subnets" Data..= subnets),
+            Prelude.Just ("nodeRole" Data..= nodeRole)
+          ]
+      )
+
+instance Data.ToPath CreateNodegroup where
+  toPath CreateNodegroup' {..} =
+    Prelude.mconcat
+      ["/clusters/", Data.toBS clusterName, "/node-groups"]
+
+instance Data.ToQuery CreateNodegroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateNodegroupResponse' smart constructor.
+data CreateNodegroupResponse = CreateNodegroupResponse'
+  { -- | The full description of your new node group.
+    nodegroup :: Prelude.Maybe Nodegroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNodegroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nodegroup', 'createNodegroupResponse_nodegroup' - The full description of your new node group.
+--
+-- 'httpStatus', 'createNodegroupResponse_httpStatus' - The response's http status code.
+newCreateNodegroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateNodegroupResponse
+newCreateNodegroupResponse pHttpStatus_ =
+  CreateNodegroupResponse'
+    { nodegroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The full description of your new node group.
+createNodegroupResponse_nodegroup :: Lens.Lens' CreateNodegroupResponse (Prelude.Maybe Nodegroup)
+createNodegroupResponse_nodegroup = Lens.lens (\CreateNodegroupResponse' {nodegroup} -> nodegroup) (\s@CreateNodegroupResponse' {} a -> s {nodegroup = a} :: CreateNodegroupResponse)
+
+-- | The response's http status code.
+createNodegroupResponse_httpStatus :: Lens.Lens' CreateNodegroupResponse Prelude.Int
+createNodegroupResponse_httpStatus = Lens.lens (\CreateNodegroupResponse' {httpStatus} -> httpStatus) (\s@CreateNodegroupResponse' {} a -> s {httpStatus = a} :: CreateNodegroupResponse)
+
+instance Prelude.NFData CreateNodegroupResponse where
+  rnf CreateNodegroupResponse' {..} =
+    Prelude.rnf nodegroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/DeleteAddon.hs b/gen/Amazonka/EKS/DeleteAddon.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/DeleteAddon.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.DeleteAddon
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an Amazon EKS add-on.
+--
+-- When you remove the add-on, it will also be deleted from the cluster.
+-- You can always manually start an add-on on the cluster using the
+-- Kubernetes API.
+module Amazonka.EKS.DeleteAddon
+  ( -- * Creating a Request
+    DeleteAddon (..),
+    newDeleteAddon,
+
+    -- * Request Lenses
+    deleteAddon_preserve,
+    deleteAddon_clusterName,
+    deleteAddon_addonName,
+
+    -- * Destructuring the Response
+    DeleteAddonResponse (..),
+    newDeleteAddonResponse,
+
+    -- * Response Lenses
+    deleteAddonResponse_addon,
+    deleteAddonResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAddon' smart constructor.
+data DeleteAddon = DeleteAddon'
+  { -- | Specifying this option preserves the add-on software on your cluster but
+    -- Amazon EKS stops managing any settings for the add-on. If an IAM account
+    -- is associated with the add-on, it isn\'t removed.
+    preserve :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the cluster to delete the add-on from.
+    clusterName :: Prelude.Text,
+    -- | The name of the add-on. The name must match one of the names returned by
+    -- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
+    -- .
+    addonName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAddon' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'preserve', 'deleteAddon_preserve' - Specifying this option preserves the add-on software on your cluster but
+-- Amazon EKS stops managing any settings for the add-on. If an IAM account
+-- is associated with the add-on, it isn\'t removed.
+--
+-- 'clusterName', 'deleteAddon_clusterName' - The name of the cluster to delete the add-on from.
+--
+-- 'addonName', 'deleteAddon_addonName' - The name of the add-on. The name must match one of the names returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
+-- .
+newDeleteAddon ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  -- | 'addonName'
+  Prelude.Text ->
+  DeleteAddon
+newDeleteAddon pClusterName_ pAddonName_ =
+  DeleteAddon'
+    { preserve = Prelude.Nothing,
+      clusterName = pClusterName_,
+      addonName = pAddonName_
+    }
+
+-- | Specifying this option preserves the add-on software on your cluster but
+-- Amazon EKS stops managing any settings for the add-on. If an IAM account
+-- is associated with the add-on, it isn\'t removed.
+deleteAddon_preserve :: Lens.Lens' DeleteAddon (Prelude.Maybe Prelude.Bool)
+deleteAddon_preserve = Lens.lens (\DeleteAddon' {preserve} -> preserve) (\s@DeleteAddon' {} a -> s {preserve = a} :: DeleteAddon)
+
+-- | The name of the cluster to delete the add-on from.
+deleteAddon_clusterName :: Lens.Lens' DeleteAddon Prelude.Text
+deleteAddon_clusterName = Lens.lens (\DeleteAddon' {clusterName} -> clusterName) (\s@DeleteAddon' {} a -> s {clusterName = a} :: DeleteAddon)
+
+-- | The name of the add-on. The name must match one of the names returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
+-- .
+deleteAddon_addonName :: Lens.Lens' DeleteAddon Prelude.Text
+deleteAddon_addonName = Lens.lens (\DeleteAddon' {addonName} -> addonName) (\s@DeleteAddon' {} a -> s {addonName = a} :: DeleteAddon)
+
+instance Core.AWSRequest DeleteAddon where
+  type AWSResponse DeleteAddon = DeleteAddonResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteAddonResponse'
+            Prelude.<$> (x Data..?> "addon")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteAddon where
+  hashWithSalt _salt DeleteAddon' {..} =
+    _salt
+      `Prelude.hashWithSalt` preserve
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` addonName
+
+instance Prelude.NFData DeleteAddon where
+  rnf DeleteAddon' {..} =
+    Prelude.rnf preserve
+      `Prelude.seq` Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf addonName
+
+instance Data.ToHeaders DeleteAddon where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteAddon where
+  toPath DeleteAddon' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/addons/",
+        Data.toBS addonName
+      ]
+
+instance Data.ToQuery DeleteAddon where
+  toQuery DeleteAddon' {..} =
+    Prelude.mconcat ["preserve" Data.=: preserve]
+
+-- | /See:/ 'newDeleteAddonResponse' smart constructor.
+data DeleteAddonResponse = DeleteAddonResponse'
+  { addon :: Prelude.Maybe Addon,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAddonResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addon', 'deleteAddonResponse_addon' - Undocumented member.
+--
+-- 'httpStatus', 'deleteAddonResponse_httpStatus' - The response's http status code.
+newDeleteAddonResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAddonResponse
+newDeleteAddonResponse pHttpStatus_ =
+  DeleteAddonResponse'
+    { addon = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+deleteAddonResponse_addon :: Lens.Lens' DeleteAddonResponse (Prelude.Maybe Addon)
+deleteAddonResponse_addon = Lens.lens (\DeleteAddonResponse' {addon} -> addon) (\s@DeleteAddonResponse' {} a -> s {addon = a} :: DeleteAddonResponse)
+
+-- | The response's http status code.
+deleteAddonResponse_httpStatus :: Lens.Lens' DeleteAddonResponse Prelude.Int
+deleteAddonResponse_httpStatus = Lens.lens (\DeleteAddonResponse' {httpStatus} -> httpStatus) (\s@DeleteAddonResponse' {} a -> s {httpStatus = a} :: DeleteAddonResponse)
+
+instance Prelude.NFData DeleteAddonResponse where
+  rnf DeleteAddonResponse' {..} =
+    Prelude.rnf addon
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/DeleteCluster.hs b/gen/Amazonka/EKS/DeleteCluster.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/DeleteCluster.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.DeleteCluster
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the Amazon EKS cluster control plane.
+--
+-- If you have active services in your cluster that are associated with a
+-- load balancer, you must delete those services before deleting the
+-- cluster so that the load balancers are deleted properly. Otherwise, you
+-- can have orphaned resources in your VPC that prevent you from being able
+-- to delete the VPC. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/delete-cluster.html Deleting a Cluster>
+-- in the /Amazon EKS User Guide/.
+--
+-- If you have managed node groups or Fargate profiles attached to the
+-- cluster, you must delete them first. For more information, see
+-- DeleteNodegroup and DeleteFargateProfile.
+module Amazonka.EKS.DeleteCluster
+  ( -- * Creating a Request
+    DeleteCluster (..),
+    newDeleteCluster,
+
+    -- * Request Lenses
+    deleteCluster_name,
+
+    -- * Destructuring the Response
+    DeleteClusterResponse (..),
+    newDeleteClusterResponse,
+
+    -- * Response Lenses
+    deleteClusterResponse_cluster,
+    deleteClusterResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteCluster' smart constructor.
+data DeleteCluster = DeleteCluster'
+  { -- | The name of the cluster to delete.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCluster' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deleteCluster_name' - The name of the cluster to delete.
+newDeleteCluster ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteCluster
+newDeleteCluster pName_ =
+  DeleteCluster' {name = pName_}
+
+-- | The name of the cluster to delete.
+deleteCluster_name :: Lens.Lens' DeleteCluster Prelude.Text
+deleteCluster_name = Lens.lens (\DeleteCluster' {name} -> name) (\s@DeleteCluster' {} a -> s {name = a} :: DeleteCluster)
+
+instance Core.AWSRequest DeleteCluster where
+  type
+    AWSResponse DeleteCluster =
+      DeleteClusterResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteClusterResponse'
+            Prelude.<$> (x Data..?> "cluster")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteCluster where
+  hashWithSalt _salt DeleteCluster' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteCluster where
+  rnf DeleteCluster' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteCluster where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteCluster where
+  toPath DeleteCluster' {..} =
+    Prelude.mconcat ["/clusters/", Data.toBS name]
+
+instance Data.ToQuery DeleteCluster where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteClusterResponse' smart constructor.
+data DeleteClusterResponse = DeleteClusterResponse'
+  { -- | The full description of the cluster to delete.
+    cluster :: Prelude.Maybe Cluster,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteClusterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cluster', 'deleteClusterResponse_cluster' - The full description of the cluster to delete.
+--
+-- 'httpStatus', 'deleteClusterResponse_httpStatus' - The response's http status code.
+newDeleteClusterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteClusterResponse
+newDeleteClusterResponse pHttpStatus_ =
+  DeleteClusterResponse'
+    { cluster = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The full description of the cluster to delete.
+deleteClusterResponse_cluster :: Lens.Lens' DeleteClusterResponse (Prelude.Maybe Cluster)
+deleteClusterResponse_cluster = Lens.lens (\DeleteClusterResponse' {cluster} -> cluster) (\s@DeleteClusterResponse' {} a -> s {cluster = a} :: DeleteClusterResponse)
+
+-- | The response's http status code.
+deleteClusterResponse_httpStatus :: Lens.Lens' DeleteClusterResponse Prelude.Int
+deleteClusterResponse_httpStatus = Lens.lens (\DeleteClusterResponse' {httpStatus} -> httpStatus) (\s@DeleteClusterResponse' {} a -> s {httpStatus = a} :: DeleteClusterResponse)
+
+instance Prelude.NFData DeleteClusterResponse where
+  rnf DeleteClusterResponse' {..} =
+    Prelude.rnf cluster
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/DeleteFargateProfile.hs b/gen/Amazonka/EKS/DeleteFargateProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/DeleteFargateProfile.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.DeleteFargateProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an Fargate profile.
+--
+-- When you delete a Fargate profile, any pods running on Fargate that were
+-- created with the profile are deleted. If those pods match another
+-- Fargate profile, then they are scheduled on Fargate with that profile.
+-- If they no longer match any Fargate profiles, then they are not
+-- scheduled on Fargate and they may remain in a pending state.
+--
+-- Only one Fargate profile in a cluster can be in the @DELETING@ status at
+-- a time. You must wait for a Fargate profile to finish deleting before
+-- you can delete any other profiles in that cluster.
+module Amazonka.EKS.DeleteFargateProfile
+  ( -- * Creating a Request
+    DeleteFargateProfile (..),
+    newDeleteFargateProfile,
+
+    -- * Request Lenses
+    deleteFargateProfile_clusterName,
+    deleteFargateProfile_fargateProfileName,
+
+    -- * Destructuring the Response
+    DeleteFargateProfileResponse (..),
+    newDeleteFargateProfileResponse,
+
+    -- * Response Lenses
+    deleteFargateProfileResponse_fargateProfile,
+    deleteFargateProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteFargateProfile' smart constructor.
+data DeleteFargateProfile = DeleteFargateProfile'
+  { -- | The name of the Amazon EKS cluster associated with the Fargate profile
+    -- to delete.
+    clusterName :: Prelude.Text,
+    -- | The name of the Fargate profile to delete.
+    fargateProfileName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFargateProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterName', 'deleteFargateProfile_clusterName' - The name of the Amazon EKS cluster associated with the Fargate profile
+-- to delete.
+--
+-- 'fargateProfileName', 'deleteFargateProfile_fargateProfileName' - The name of the Fargate profile to delete.
+newDeleteFargateProfile ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  -- | 'fargateProfileName'
+  Prelude.Text ->
+  DeleteFargateProfile
+newDeleteFargateProfile
+  pClusterName_
+  pFargateProfileName_ =
+    DeleteFargateProfile'
+      { clusterName = pClusterName_,
+        fargateProfileName = pFargateProfileName_
+      }
+
+-- | The name of the Amazon EKS cluster associated with the Fargate profile
+-- to delete.
+deleteFargateProfile_clusterName :: Lens.Lens' DeleteFargateProfile Prelude.Text
+deleteFargateProfile_clusterName = Lens.lens (\DeleteFargateProfile' {clusterName} -> clusterName) (\s@DeleteFargateProfile' {} a -> s {clusterName = a} :: DeleteFargateProfile)
+
+-- | The name of the Fargate profile to delete.
+deleteFargateProfile_fargateProfileName :: Lens.Lens' DeleteFargateProfile Prelude.Text
+deleteFargateProfile_fargateProfileName = Lens.lens (\DeleteFargateProfile' {fargateProfileName} -> fargateProfileName) (\s@DeleteFargateProfile' {} a -> s {fargateProfileName = a} :: DeleteFargateProfile)
+
+instance Core.AWSRequest DeleteFargateProfile where
+  type
+    AWSResponse DeleteFargateProfile =
+      DeleteFargateProfileResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteFargateProfileResponse'
+            Prelude.<$> (x Data..?> "fargateProfile")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteFargateProfile where
+  hashWithSalt _salt DeleteFargateProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` fargateProfileName
+
+instance Prelude.NFData DeleteFargateProfile where
+  rnf DeleteFargateProfile' {..} =
+    Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf fargateProfileName
+
+instance Data.ToHeaders DeleteFargateProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteFargateProfile where
+  toPath DeleteFargateProfile' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/fargate-profiles/",
+        Data.toBS fargateProfileName
+      ]
+
+instance Data.ToQuery DeleteFargateProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteFargateProfileResponse' smart constructor.
+data DeleteFargateProfileResponse = DeleteFargateProfileResponse'
+  { -- | The deleted Fargate profile.
+    fargateProfile :: Prelude.Maybe FargateProfile,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFargateProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fargateProfile', 'deleteFargateProfileResponse_fargateProfile' - The deleted Fargate profile.
+--
+-- 'httpStatus', 'deleteFargateProfileResponse_httpStatus' - The response's http status code.
+newDeleteFargateProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteFargateProfileResponse
+newDeleteFargateProfileResponse pHttpStatus_ =
+  DeleteFargateProfileResponse'
+    { fargateProfile =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The deleted Fargate profile.
+deleteFargateProfileResponse_fargateProfile :: Lens.Lens' DeleteFargateProfileResponse (Prelude.Maybe FargateProfile)
+deleteFargateProfileResponse_fargateProfile = Lens.lens (\DeleteFargateProfileResponse' {fargateProfile} -> fargateProfile) (\s@DeleteFargateProfileResponse' {} a -> s {fargateProfile = a} :: DeleteFargateProfileResponse)
+
+-- | The response's http status code.
+deleteFargateProfileResponse_httpStatus :: Lens.Lens' DeleteFargateProfileResponse Prelude.Int
+deleteFargateProfileResponse_httpStatus = Lens.lens (\DeleteFargateProfileResponse' {httpStatus} -> httpStatus) (\s@DeleteFargateProfileResponse' {} a -> s {httpStatus = a} :: DeleteFargateProfileResponse)
+
+instance Prelude.NFData DeleteFargateProfileResponse where
+  rnf DeleteFargateProfileResponse' {..} =
+    Prelude.rnf fargateProfile
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/DeleteNodegroup.hs b/gen/Amazonka/EKS/DeleteNodegroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/DeleteNodegroup.hs
@@ -0,0 +1,184 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.DeleteNodegroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an Amazon EKS node group for a cluster.
+module Amazonka.EKS.DeleteNodegroup
+  ( -- * Creating a Request
+    DeleteNodegroup (..),
+    newDeleteNodegroup,
+
+    -- * Request Lenses
+    deleteNodegroup_clusterName,
+    deleteNodegroup_nodegroupName,
+
+    -- * Destructuring the Response
+    DeleteNodegroupResponse (..),
+    newDeleteNodegroupResponse,
+
+    -- * Response Lenses
+    deleteNodegroupResponse_nodegroup,
+    deleteNodegroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteNodegroup' smart constructor.
+data DeleteNodegroup = DeleteNodegroup'
+  { -- | The name of the Amazon EKS cluster that is associated with your node
+    -- group.
+    clusterName :: Prelude.Text,
+    -- | The name of the node group to delete.
+    nodegroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNodegroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterName', 'deleteNodegroup_clusterName' - The name of the Amazon EKS cluster that is associated with your node
+-- group.
+--
+-- 'nodegroupName', 'deleteNodegroup_nodegroupName' - The name of the node group to delete.
+newDeleteNodegroup ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  -- | 'nodegroupName'
+  Prelude.Text ->
+  DeleteNodegroup
+newDeleteNodegroup pClusterName_ pNodegroupName_ =
+  DeleteNodegroup'
+    { clusterName = pClusterName_,
+      nodegroupName = pNodegroupName_
+    }
+
+-- | The name of the Amazon EKS cluster that is associated with your node
+-- group.
+deleteNodegroup_clusterName :: Lens.Lens' DeleteNodegroup Prelude.Text
+deleteNodegroup_clusterName = Lens.lens (\DeleteNodegroup' {clusterName} -> clusterName) (\s@DeleteNodegroup' {} a -> s {clusterName = a} :: DeleteNodegroup)
+
+-- | The name of the node group to delete.
+deleteNodegroup_nodegroupName :: Lens.Lens' DeleteNodegroup Prelude.Text
+deleteNodegroup_nodegroupName = Lens.lens (\DeleteNodegroup' {nodegroupName} -> nodegroupName) (\s@DeleteNodegroup' {} a -> s {nodegroupName = a} :: DeleteNodegroup)
+
+instance Core.AWSRequest DeleteNodegroup where
+  type
+    AWSResponse DeleteNodegroup =
+      DeleteNodegroupResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteNodegroupResponse'
+            Prelude.<$> (x Data..?> "nodegroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteNodegroup where
+  hashWithSalt _salt DeleteNodegroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` nodegroupName
+
+instance Prelude.NFData DeleteNodegroup where
+  rnf DeleteNodegroup' {..} =
+    Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf nodegroupName
+
+instance Data.ToHeaders DeleteNodegroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteNodegroup where
+  toPath DeleteNodegroup' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/node-groups/",
+        Data.toBS nodegroupName
+      ]
+
+instance Data.ToQuery DeleteNodegroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteNodegroupResponse' smart constructor.
+data DeleteNodegroupResponse = DeleteNodegroupResponse'
+  { -- | The full description of your deleted node group.
+    nodegroup :: Prelude.Maybe Nodegroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNodegroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nodegroup', 'deleteNodegroupResponse_nodegroup' - The full description of your deleted node group.
+--
+-- 'httpStatus', 'deleteNodegroupResponse_httpStatus' - The response's http status code.
+newDeleteNodegroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteNodegroupResponse
+newDeleteNodegroupResponse pHttpStatus_ =
+  DeleteNodegroupResponse'
+    { nodegroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The full description of your deleted node group.
+deleteNodegroupResponse_nodegroup :: Lens.Lens' DeleteNodegroupResponse (Prelude.Maybe Nodegroup)
+deleteNodegroupResponse_nodegroup = Lens.lens (\DeleteNodegroupResponse' {nodegroup} -> nodegroup) (\s@DeleteNodegroupResponse' {} a -> s {nodegroup = a} :: DeleteNodegroupResponse)
+
+-- | The response's http status code.
+deleteNodegroupResponse_httpStatus :: Lens.Lens' DeleteNodegroupResponse Prelude.Int
+deleteNodegroupResponse_httpStatus = Lens.lens (\DeleteNodegroupResponse' {httpStatus} -> httpStatus) (\s@DeleteNodegroupResponse' {} a -> s {httpStatus = a} :: DeleteNodegroupResponse)
+
+instance Prelude.NFData DeleteNodegroupResponse where
+  rnf DeleteNodegroupResponse' {..} =
+    Prelude.rnf nodegroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/DeregisterCluster.hs b/gen/Amazonka/EKS/DeregisterCluster.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/DeregisterCluster.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.DeregisterCluster
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deregisters a connected cluster to remove it from the Amazon EKS control
+-- plane.
+module Amazonka.EKS.DeregisterCluster
+  ( -- * Creating a Request
+    DeregisterCluster (..),
+    newDeregisterCluster,
+
+    -- * Request Lenses
+    deregisterCluster_name,
+
+    -- * Destructuring the Response
+    DeregisterClusterResponse (..),
+    newDeregisterClusterResponse,
+
+    -- * Response Lenses
+    deregisterClusterResponse_cluster,
+    deregisterClusterResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeregisterCluster' smart constructor.
+data DeregisterCluster = DeregisterCluster'
+  { -- | The name of the connected cluster to deregister.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeregisterCluster' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deregisterCluster_name' - The name of the connected cluster to deregister.
+newDeregisterCluster ::
+  -- | 'name'
+  Prelude.Text ->
+  DeregisterCluster
+newDeregisterCluster pName_ =
+  DeregisterCluster' {name = pName_}
+
+-- | The name of the connected cluster to deregister.
+deregisterCluster_name :: Lens.Lens' DeregisterCluster Prelude.Text
+deregisterCluster_name = Lens.lens (\DeregisterCluster' {name} -> name) (\s@DeregisterCluster' {} a -> s {name = a} :: DeregisterCluster)
+
+instance Core.AWSRequest DeregisterCluster where
+  type
+    AWSResponse DeregisterCluster =
+      DeregisterClusterResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeregisterClusterResponse'
+            Prelude.<$> (x Data..?> "cluster")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeregisterCluster where
+  hashWithSalt _salt DeregisterCluster' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeregisterCluster where
+  rnf DeregisterCluster' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeregisterCluster where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeregisterCluster where
+  toPath DeregisterCluster' {..} =
+    Prelude.mconcat
+      ["/cluster-registrations/", Data.toBS name]
+
+instance Data.ToQuery DeregisterCluster where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeregisterClusterResponse' smart constructor.
+data DeregisterClusterResponse = DeregisterClusterResponse'
+  { cluster :: Prelude.Maybe Cluster,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeregisterClusterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cluster', 'deregisterClusterResponse_cluster' - Undocumented member.
+--
+-- 'httpStatus', 'deregisterClusterResponse_httpStatus' - The response's http status code.
+newDeregisterClusterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeregisterClusterResponse
+newDeregisterClusterResponse pHttpStatus_ =
+  DeregisterClusterResponse'
+    { cluster =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+deregisterClusterResponse_cluster :: Lens.Lens' DeregisterClusterResponse (Prelude.Maybe Cluster)
+deregisterClusterResponse_cluster = Lens.lens (\DeregisterClusterResponse' {cluster} -> cluster) (\s@DeregisterClusterResponse' {} a -> s {cluster = a} :: DeregisterClusterResponse)
+
+-- | The response's http status code.
+deregisterClusterResponse_httpStatus :: Lens.Lens' DeregisterClusterResponse Prelude.Int
+deregisterClusterResponse_httpStatus = Lens.lens (\DeregisterClusterResponse' {httpStatus} -> httpStatus) (\s@DeregisterClusterResponse' {} a -> s {httpStatus = a} :: DeregisterClusterResponse)
+
+instance Prelude.NFData DeregisterClusterResponse where
+  rnf DeregisterClusterResponse' {..} =
+    Prelude.rnf cluster
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/DescribeAddon.hs b/gen/Amazonka/EKS/DescribeAddon.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/DescribeAddon.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.EKS.DescribeAddon
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes an Amazon EKS add-on.
+module Amazonka.EKS.DescribeAddon
+  ( -- * Creating a Request
+    DescribeAddon (..),
+    newDescribeAddon,
+
+    -- * Request Lenses
+    describeAddon_clusterName,
+    describeAddon_addonName,
+
+    -- * Destructuring the Response
+    DescribeAddonResponse (..),
+    newDescribeAddonResponse,
+
+    -- * Response Lenses
+    describeAddonResponse_addon,
+    describeAddonResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAddon' smart constructor.
+data DescribeAddon = DescribeAddon'
+  { -- | The name of the cluster.
+    clusterName :: Prelude.Text,
+    -- | The name of the add-on. The name must match one of the names returned by
+    -- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
+    -- .
+    addonName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAddon' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterName', 'describeAddon_clusterName' - The name of the cluster.
+--
+-- 'addonName', 'describeAddon_addonName' - The name of the add-on. The name must match one of the names returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
+-- .
+newDescribeAddon ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  -- | 'addonName'
+  Prelude.Text ->
+  DescribeAddon
+newDescribeAddon pClusterName_ pAddonName_ =
+  DescribeAddon'
+    { clusterName = pClusterName_,
+      addonName = pAddonName_
+    }
+
+-- | The name of the cluster.
+describeAddon_clusterName :: Lens.Lens' DescribeAddon Prelude.Text
+describeAddon_clusterName = Lens.lens (\DescribeAddon' {clusterName} -> clusterName) (\s@DescribeAddon' {} a -> s {clusterName = a} :: DescribeAddon)
+
+-- | The name of the add-on. The name must match one of the names returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
+-- .
+describeAddon_addonName :: Lens.Lens' DescribeAddon Prelude.Text
+describeAddon_addonName = Lens.lens (\DescribeAddon' {addonName} -> addonName) (\s@DescribeAddon' {} a -> s {addonName = a} :: DescribeAddon)
+
+instance Core.AWSRequest DescribeAddon where
+  type
+    AWSResponse DescribeAddon =
+      DescribeAddonResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAddonResponse'
+            Prelude.<$> (x Data..?> "addon")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAddon where
+  hashWithSalt _salt DescribeAddon' {..} =
+    _salt
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` addonName
+
+instance Prelude.NFData DescribeAddon where
+  rnf DescribeAddon' {..} =
+    Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf addonName
+
+instance Data.ToHeaders DescribeAddon where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeAddon where
+  toPath DescribeAddon' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/addons/",
+        Data.toBS addonName
+      ]
+
+instance Data.ToQuery DescribeAddon where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAddonResponse' smart constructor.
+data DescribeAddonResponse = DescribeAddonResponse'
+  { addon :: Prelude.Maybe Addon,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAddonResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addon', 'describeAddonResponse_addon' - Undocumented member.
+--
+-- 'httpStatus', 'describeAddonResponse_httpStatus' - The response's http status code.
+newDescribeAddonResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAddonResponse
+newDescribeAddonResponse pHttpStatus_ =
+  DescribeAddonResponse'
+    { addon = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+describeAddonResponse_addon :: Lens.Lens' DescribeAddonResponse (Prelude.Maybe Addon)
+describeAddonResponse_addon = Lens.lens (\DescribeAddonResponse' {addon} -> addon) (\s@DescribeAddonResponse' {} a -> s {addon = a} :: DescribeAddonResponse)
+
+-- | The response's http status code.
+describeAddonResponse_httpStatus :: Lens.Lens' DescribeAddonResponse Prelude.Int
+describeAddonResponse_httpStatus = Lens.lens (\DescribeAddonResponse' {httpStatus} -> httpStatus) (\s@DescribeAddonResponse' {} a -> s {httpStatus = a} :: DescribeAddonResponse)
+
+instance Prelude.NFData DescribeAddonResponse where
+  rnf DescribeAddonResponse' {..} =
+    Prelude.rnf addon
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/DescribeAddonConfiguration.hs b/gen/Amazonka/EKS/DescribeAddonConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/DescribeAddonConfiguration.hs
@@ -0,0 +1,237 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.DescribeAddonConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns configuration options.
+module Amazonka.EKS.DescribeAddonConfiguration
+  ( -- * Creating a Request
+    DescribeAddonConfiguration (..),
+    newDescribeAddonConfiguration,
+
+    -- * Request Lenses
+    describeAddonConfiguration_addonName,
+    describeAddonConfiguration_addonVersion,
+
+    -- * Destructuring the Response
+    DescribeAddonConfigurationResponse (..),
+    newDescribeAddonConfigurationResponse,
+
+    -- * Response Lenses
+    describeAddonConfigurationResponse_addonName,
+    describeAddonConfigurationResponse_addonVersion,
+    describeAddonConfigurationResponse_configurationSchema,
+    describeAddonConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAddonConfiguration' smart constructor.
+data DescribeAddonConfiguration = DescribeAddonConfiguration'
+  { -- | The name of the add-on. The name must match one of the names that
+    -- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+    -- returns.
+    addonName :: Prelude.Text,
+    -- | The version of the add-on. The version must match one of the versions
+    -- returned by
+    -- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+    -- .
+    addonVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAddonConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addonName', 'describeAddonConfiguration_addonName' - The name of the add-on. The name must match one of the names that
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+-- returns.
+--
+-- 'addonVersion', 'describeAddonConfiguration_addonVersion' - The version of the add-on. The version must match one of the versions
+-- returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+-- .
+newDescribeAddonConfiguration ::
+  -- | 'addonName'
+  Prelude.Text ->
+  -- | 'addonVersion'
+  Prelude.Text ->
+  DescribeAddonConfiguration
+newDescribeAddonConfiguration
+  pAddonName_
+  pAddonVersion_ =
+    DescribeAddonConfiguration'
+      { addonName =
+          pAddonName_,
+        addonVersion = pAddonVersion_
+      }
+
+-- | The name of the add-on. The name must match one of the names that
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+-- returns.
+describeAddonConfiguration_addonName :: Lens.Lens' DescribeAddonConfiguration Prelude.Text
+describeAddonConfiguration_addonName = Lens.lens (\DescribeAddonConfiguration' {addonName} -> addonName) (\s@DescribeAddonConfiguration' {} a -> s {addonName = a} :: DescribeAddonConfiguration)
+
+-- | The version of the add-on. The version must match one of the versions
+-- returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+-- .
+describeAddonConfiguration_addonVersion :: Lens.Lens' DescribeAddonConfiguration Prelude.Text
+describeAddonConfiguration_addonVersion = Lens.lens (\DescribeAddonConfiguration' {addonVersion} -> addonVersion) (\s@DescribeAddonConfiguration' {} a -> s {addonVersion = a} :: DescribeAddonConfiguration)
+
+instance Core.AWSRequest DescribeAddonConfiguration where
+  type
+    AWSResponse DescribeAddonConfiguration =
+      DescribeAddonConfigurationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAddonConfigurationResponse'
+            Prelude.<$> (x Data..?> "addonName")
+            Prelude.<*> (x Data..?> "addonVersion")
+            Prelude.<*> (x Data..?> "configurationSchema")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAddonConfiguration where
+  hashWithSalt _salt DescribeAddonConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` addonName
+      `Prelude.hashWithSalt` addonVersion
+
+instance Prelude.NFData DescribeAddonConfiguration where
+  rnf DescribeAddonConfiguration' {..} =
+    Prelude.rnf addonName
+      `Prelude.seq` Prelude.rnf addonVersion
+
+instance Data.ToHeaders DescribeAddonConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeAddonConfiguration where
+  toPath =
+    Prelude.const "/addons/configuration-schemas"
+
+instance Data.ToQuery DescribeAddonConfiguration where
+  toQuery DescribeAddonConfiguration' {..} =
+    Prelude.mconcat
+      [ "addonName" Data.=: addonName,
+        "addonVersion" Data.=: addonVersion
+      ]
+
+-- | /See:/ 'newDescribeAddonConfigurationResponse' smart constructor.
+data DescribeAddonConfigurationResponse = DescribeAddonConfigurationResponse'
+  { -- | The name of the add-on.
+    addonName :: Prelude.Maybe Prelude.Text,
+    -- | The version of the add-on. The version must match one of the versions
+    -- returned by
+    -- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+    -- .
+    addonVersion :: Prelude.Maybe Prelude.Text,
+    -- | A JSON schema that\'s used to validate the configuration values that you
+    -- provide when an addon is created or updated.
+    configurationSchema :: 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 'DescribeAddonConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addonName', 'describeAddonConfigurationResponse_addonName' - The name of the add-on.
+--
+-- 'addonVersion', 'describeAddonConfigurationResponse_addonVersion' - The version of the add-on. The version must match one of the versions
+-- returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+-- .
+--
+-- 'configurationSchema', 'describeAddonConfigurationResponse_configurationSchema' - A JSON schema that\'s used to validate the configuration values that you
+-- provide when an addon is created or updated.
+--
+-- 'httpStatus', 'describeAddonConfigurationResponse_httpStatus' - The response's http status code.
+newDescribeAddonConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAddonConfigurationResponse
+newDescribeAddonConfigurationResponse pHttpStatus_ =
+  DescribeAddonConfigurationResponse'
+    { addonName =
+        Prelude.Nothing,
+      addonVersion = Prelude.Nothing,
+      configurationSchema = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The name of the add-on.
+describeAddonConfigurationResponse_addonName :: Lens.Lens' DescribeAddonConfigurationResponse (Prelude.Maybe Prelude.Text)
+describeAddonConfigurationResponse_addonName = Lens.lens (\DescribeAddonConfigurationResponse' {addonName} -> addonName) (\s@DescribeAddonConfigurationResponse' {} a -> s {addonName = a} :: DescribeAddonConfigurationResponse)
+
+-- | The version of the add-on. The version must match one of the versions
+-- returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+-- .
+describeAddonConfigurationResponse_addonVersion :: Lens.Lens' DescribeAddonConfigurationResponse (Prelude.Maybe Prelude.Text)
+describeAddonConfigurationResponse_addonVersion = Lens.lens (\DescribeAddonConfigurationResponse' {addonVersion} -> addonVersion) (\s@DescribeAddonConfigurationResponse' {} a -> s {addonVersion = a} :: DescribeAddonConfigurationResponse)
+
+-- | A JSON schema that\'s used to validate the configuration values that you
+-- provide when an addon is created or updated.
+describeAddonConfigurationResponse_configurationSchema :: Lens.Lens' DescribeAddonConfigurationResponse (Prelude.Maybe Prelude.Text)
+describeAddonConfigurationResponse_configurationSchema = Lens.lens (\DescribeAddonConfigurationResponse' {configurationSchema} -> configurationSchema) (\s@DescribeAddonConfigurationResponse' {} a -> s {configurationSchema = a} :: DescribeAddonConfigurationResponse)
+
+-- | The response's http status code.
+describeAddonConfigurationResponse_httpStatus :: Lens.Lens' DescribeAddonConfigurationResponse Prelude.Int
+describeAddonConfigurationResponse_httpStatus = Lens.lens (\DescribeAddonConfigurationResponse' {httpStatus} -> httpStatus) (\s@DescribeAddonConfigurationResponse' {} a -> s {httpStatus = a} :: DescribeAddonConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DescribeAddonConfigurationResponse
+  where
+  rnf DescribeAddonConfigurationResponse' {..} =
+    Prelude.rnf addonName
+      `Prelude.seq` Prelude.rnf addonVersion
+      `Prelude.seq` Prelude.rnf configurationSchema
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/DescribeAddonVersions.hs b/gen/Amazonka/EKS/DescribeAddonVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/DescribeAddonVersions.hs
@@ -0,0 +1,344 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.DescribeAddonVersions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the versions for an add-on. Information such as the Kubernetes
+-- versions that you can use the add-on with, the @owner@, @publisher@, and
+-- the @type@ of the add-on are returned.
+--
+-- This operation returns paginated results.
+module Amazonka.EKS.DescribeAddonVersions
+  ( -- * Creating a Request
+    DescribeAddonVersions (..),
+    newDescribeAddonVersions,
+
+    -- * Request Lenses
+    describeAddonVersions_addonName,
+    describeAddonVersions_kubernetesVersion,
+    describeAddonVersions_maxResults,
+    describeAddonVersions_nextToken,
+    describeAddonVersions_owners,
+    describeAddonVersions_publishers,
+    describeAddonVersions_types,
+
+    -- * Destructuring the Response
+    DescribeAddonVersionsResponse (..),
+    newDescribeAddonVersionsResponse,
+
+    -- * Response Lenses
+    describeAddonVersionsResponse_addons,
+    describeAddonVersionsResponse_nextToken,
+    describeAddonVersionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAddonVersions' smart constructor.
+data DescribeAddonVersions = DescribeAddonVersions'
+  { -- | The name of the add-on. The name must match one of the names returned by
+    -- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
+    -- .
+    addonName :: Prelude.Maybe Prelude.Text,
+    -- | The Kubernetes versions that you can use the add-on with.
+    kubernetesVersion :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The @nextToken@ value returned from a previous paginated
+    -- @DescribeAddonVersionsRequest@ where @maxResults@ was used and the
+    -- results exceeded the value of that parameter. Pagination continues from
+    -- the end of the previous results that returned the @nextToken@ value.
+    --
+    -- This token should be treated as an opaque identifier that is used only
+    -- to retrieve the next items in a list and not for other programmatic
+    -- purposes.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The owner of the add-on. For valid @owners@, don\'t specify a value for
+    -- this property.
+    owners :: Prelude.Maybe [Prelude.Text],
+    -- | The publisher of the add-on. For valid @publishers@, don\'t specify a
+    -- value for this property.
+    publishers :: Prelude.Maybe [Prelude.Text],
+    -- | The type of the add-on. For valid @types@, don\'t specify a value for
+    -- this property.
+    types :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAddonVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addonName', 'describeAddonVersions_addonName' - The name of the add-on. The name must match one of the names returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
+-- .
+--
+-- 'kubernetesVersion', 'describeAddonVersions_kubernetesVersion' - The Kubernetes versions that you can use the add-on with.
+--
+-- 'maxResults', 'describeAddonVersions_maxResults' - The maximum number of results to return.
+--
+-- 'nextToken', 'describeAddonVersions_nextToken' - The @nextToken@ value returned from a previous paginated
+-- @DescribeAddonVersionsRequest@ where @maxResults@ was used and the
+-- results exceeded the value of that parameter. Pagination continues from
+-- the end of the previous results that returned the @nextToken@ value.
+--
+-- This token should be treated as an opaque identifier that is used only
+-- to retrieve the next items in a list and not for other programmatic
+-- purposes.
+--
+-- 'owners', 'describeAddonVersions_owners' - The owner of the add-on. For valid @owners@, don\'t specify a value for
+-- this property.
+--
+-- 'publishers', 'describeAddonVersions_publishers' - The publisher of the add-on. For valid @publishers@, don\'t specify a
+-- value for this property.
+--
+-- 'types', 'describeAddonVersions_types' - The type of the add-on. For valid @types@, don\'t specify a value for
+-- this property.
+newDescribeAddonVersions ::
+  DescribeAddonVersions
+newDescribeAddonVersions =
+  DescribeAddonVersions'
+    { addonName = Prelude.Nothing,
+      kubernetesVersion = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      owners = Prelude.Nothing,
+      publishers = Prelude.Nothing,
+      types = Prelude.Nothing
+    }
+
+-- | The name of the add-on. The name must match one of the names returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
+-- .
+describeAddonVersions_addonName :: Lens.Lens' DescribeAddonVersions (Prelude.Maybe Prelude.Text)
+describeAddonVersions_addonName = Lens.lens (\DescribeAddonVersions' {addonName} -> addonName) (\s@DescribeAddonVersions' {} a -> s {addonName = a} :: DescribeAddonVersions)
+
+-- | The Kubernetes versions that you can use the add-on with.
+describeAddonVersions_kubernetesVersion :: Lens.Lens' DescribeAddonVersions (Prelude.Maybe Prelude.Text)
+describeAddonVersions_kubernetesVersion = Lens.lens (\DescribeAddonVersions' {kubernetesVersion} -> kubernetesVersion) (\s@DescribeAddonVersions' {} a -> s {kubernetesVersion = a} :: DescribeAddonVersions)
+
+-- | The maximum number of results to return.
+describeAddonVersions_maxResults :: Lens.Lens' DescribeAddonVersions (Prelude.Maybe Prelude.Natural)
+describeAddonVersions_maxResults = Lens.lens (\DescribeAddonVersions' {maxResults} -> maxResults) (\s@DescribeAddonVersions' {} a -> s {maxResults = a} :: DescribeAddonVersions)
+
+-- | The @nextToken@ value returned from a previous paginated
+-- @DescribeAddonVersionsRequest@ where @maxResults@ was used and the
+-- results exceeded the value of that parameter. Pagination continues from
+-- the end of the previous results that returned the @nextToken@ value.
+--
+-- This token should be treated as an opaque identifier that is used only
+-- to retrieve the next items in a list and not for other programmatic
+-- purposes.
+describeAddonVersions_nextToken :: Lens.Lens' DescribeAddonVersions (Prelude.Maybe Prelude.Text)
+describeAddonVersions_nextToken = Lens.lens (\DescribeAddonVersions' {nextToken} -> nextToken) (\s@DescribeAddonVersions' {} a -> s {nextToken = a} :: DescribeAddonVersions)
+
+-- | The owner of the add-on. For valid @owners@, don\'t specify a value for
+-- this property.
+describeAddonVersions_owners :: Lens.Lens' DescribeAddonVersions (Prelude.Maybe [Prelude.Text])
+describeAddonVersions_owners = Lens.lens (\DescribeAddonVersions' {owners} -> owners) (\s@DescribeAddonVersions' {} a -> s {owners = a} :: DescribeAddonVersions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The publisher of the add-on. For valid @publishers@, don\'t specify a
+-- value for this property.
+describeAddonVersions_publishers :: Lens.Lens' DescribeAddonVersions (Prelude.Maybe [Prelude.Text])
+describeAddonVersions_publishers = Lens.lens (\DescribeAddonVersions' {publishers} -> publishers) (\s@DescribeAddonVersions' {} a -> s {publishers = a} :: DescribeAddonVersions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of the add-on. For valid @types@, don\'t specify a value for
+-- this property.
+describeAddonVersions_types :: Lens.Lens' DescribeAddonVersions (Prelude.Maybe [Prelude.Text])
+describeAddonVersions_types = Lens.lens (\DescribeAddonVersions' {types} -> types) (\s@DescribeAddonVersions' {} a -> s {types = a} :: DescribeAddonVersions) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeAddonVersions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeAddonVersionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeAddonVersionsResponse_addons
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeAddonVersions_nextToken
+          Lens..~ rs
+          Lens.^? describeAddonVersionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeAddonVersions where
+  type
+    AWSResponse DescribeAddonVersions =
+      DescribeAddonVersionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAddonVersionsResponse'
+            Prelude.<$> (x Data..?> "addons" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAddonVersions where
+  hashWithSalt _salt DescribeAddonVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` addonName
+      `Prelude.hashWithSalt` kubernetesVersion
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` owners
+      `Prelude.hashWithSalt` publishers
+      `Prelude.hashWithSalt` types
+
+instance Prelude.NFData DescribeAddonVersions where
+  rnf DescribeAddonVersions' {..} =
+    Prelude.rnf addonName
+      `Prelude.seq` Prelude.rnf kubernetesVersion
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf owners
+      `Prelude.seq` Prelude.rnf publishers
+      `Prelude.seq` Prelude.rnf types
+
+instance Data.ToHeaders DescribeAddonVersions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeAddonVersions where
+  toPath = Prelude.const "/addons/supported-versions"
+
+instance Data.ToQuery DescribeAddonVersions where
+  toQuery DescribeAddonVersions' {..} =
+    Prelude.mconcat
+      [ "addonName" Data.=: addonName,
+        "kubernetesVersion" Data.=: kubernetesVersion,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "owners"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> owners),
+        "publishers"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> publishers),
+        "types"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> types)
+      ]
+
+-- | /See:/ 'newDescribeAddonVersionsResponse' smart constructor.
+data DescribeAddonVersionsResponse = DescribeAddonVersionsResponse'
+  { -- | The list of available versions with Kubernetes version compatibility and
+    -- other properties.
+    addons :: Prelude.Maybe [AddonInfo],
+    -- | The @nextToken@ value returned from a previous paginated
+    -- @DescribeAddonVersionsResponse@ where @maxResults@ was used and the
+    -- results exceeded the value of that parameter. Pagination continues from
+    -- the end of the previous results that returned the @nextToken@ value.
+    --
+    -- This token should be treated as an opaque identifier that is used only
+    -- to retrieve the next items in a list and not for other programmatic
+    -- purposes.
+    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 'DescribeAddonVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addons', 'describeAddonVersionsResponse_addons' - The list of available versions with Kubernetes version compatibility and
+-- other properties.
+--
+-- 'nextToken', 'describeAddonVersionsResponse_nextToken' - The @nextToken@ value returned from a previous paginated
+-- @DescribeAddonVersionsResponse@ where @maxResults@ was used and the
+-- results exceeded the value of that parameter. Pagination continues from
+-- the end of the previous results that returned the @nextToken@ value.
+--
+-- This token should be treated as an opaque identifier that is used only
+-- to retrieve the next items in a list and not for other programmatic
+-- purposes.
+--
+-- 'httpStatus', 'describeAddonVersionsResponse_httpStatus' - The response's http status code.
+newDescribeAddonVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAddonVersionsResponse
+newDescribeAddonVersionsResponse pHttpStatus_ =
+  DescribeAddonVersionsResponse'
+    { addons =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of available versions with Kubernetes version compatibility and
+-- other properties.
+describeAddonVersionsResponse_addons :: Lens.Lens' DescribeAddonVersionsResponse (Prelude.Maybe [AddonInfo])
+describeAddonVersionsResponse_addons = Lens.lens (\DescribeAddonVersionsResponse' {addons} -> addons) (\s@DescribeAddonVersionsResponse' {} a -> s {addons = a} :: DescribeAddonVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The @nextToken@ value returned from a previous paginated
+-- @DescribeAddonVersionsResponse@ where @maxResults@ was used and the
+-- results exceeded the value of that parameter. Pagination continues from
+-- the end of the previous results that returned the @nextToken@ value.
+--
+-- This token should be treated as an opaque identifier that is used only
+-- to retrieve the next items in a list and not for other programmatic
+-- purposes.
+describeAddonVersionsResponse_nextToken :: Lens.Lens' DescribeAddonVersionsResponse (Prelude.Maybe Prelude.Text)
+describeAddonVersionsResponse_nextToken = Lens.lens (\DescribeAddonVersionsResponse' {nextToken} -> nextToken) (\s@DescribeAddonVersionsResponse' {} a -> s {nextToken = a} :: DescribeAddonVersionsResponse)
+
+-- | The response's http status code.
+describeAddonVersionsResponse_httpStatus :: Lens.Lens' DescribeAddonVersionsResponse Prelude.Int
+describeAddonVersionsResponse_httpStatus = Lens.lens (\DescribeAddonVersionsResponse' {httpStatus} -> httpStatus) (\s@DescribeAddonVersionsResponse' {} a -> s {httpStatus = a} :: DescribeAddonVersionsResponse)
+
+instance Prelude.NFData DescribeAddonVersionsResponse where
+  rnf DescribeAddonVersionsResponse' {..} =
+    Prelude.rnf addons
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/DescribeCluster.hs b/gen/Amazonka/EKS/DescribeCluster.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/DescribeCluster.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.DescribeCluster
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns descriptive information about an Amazon EKS cluster.
+--
+-- The API server endpoint and certificate authority data returned by this
+-- operation are required for @kubelet@ and @kubectl@ to communicate with
+-- your Kubernetes API server. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html Create a kubeconfig for Amazon EKS>.
+--
+-- The API server endpoint and certificate authority data aren\'t available
+-- until the cluster reaches the @ACTIVE@ state.
+module Amazonka.EKS.DescribeCluster
+  ( -- * Creating a Request
+    DescribeCluster (..),
+    newDescribeCluster,
+
+    -- * Request Lenses
+    describeCluster_name,
+
+    -- * Destructuring the Response
+    DescribeClusterResponse (..),
+    newDescribeClusterResponse,
+
+    -- * Response Lenses
+    describeClusterResponse_cluster,
+    describeClusterResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeCluster' smart constructor.
+data DescribeCluster = DescribeCluster'
+  { -- | The name of the cluster to describe.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCluster' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'describeCluster_name' - The name of the cluster to describe.
+newDescribeCluster ::
+  -- | 'name'
+  Prelude.Text ->
+  DescribeCluster
+newDescribeCluster pName_ =
+  DescribeCluster' {name = pName_}
+
+-- | The name of the cluster to describe.
+describeCluster_name :: Lens.Lens' DescribeCluster Prelude.Text
+describeCluster_name = Lens.lens (\DescribeCluster' {name} -> name) (\s@DescribeCluster' {} a -> s {name = a} :: DescribeCluster)
+
+instance Core.AWSRequest DescribeCluster where
+  type
+    AWSResponse DescribeCluster =
+      DescribeClusterResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeClusterResponse'
+            Prelude.<$> (x Data..?> "cluster")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeCluster where
+  hashWithSalt _salt DescribeCluster' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DescribeCluster where
+  rnf DescribeCluster' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DescribeCluster where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeCluster where
+  toPath DescribeCluster' {..} =
+    Prelude.mconcat ["/clusters/", Data.toBS name]
+
+instance Data.ToQuery DescribeCluster where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeClusterResponse' smart constructor.
+data DescribeClusterResponse = DescribeClusterResponse'
+  { -- | The full description of your specified cluster.
+    cluster :: Prelude.Maybe Cluster,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClusterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cluster', 'describeClusterResponse_cluster' - The full description of your specified cluster.
+--
+-- 'httpStatus', 'describeClusterResponse_httpStatus' - The response's http status code.
+newDescribeClusterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeClusterResponse
+newDescribeClusterResponse pHttpStatus_ =
+  DescribeClusterResponse'
+    { cluster = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The full description of your specified cluster.
+describeClusterResponse_cluster :: Lens.Lens' DescribeClusterResponse (Prelude.Maybe Cluster)
+describeClusterResponse_cluster = Lens.lens (\DescribeClusterResponse' {cluster} -> cluster) (\s@DescribeClusterResponse' {} a -> s {cluster = a} :: DescribeClusterResponse)
+
+-- | The response's http status code.
+describeClusterResponse_httpStatus :: Lens.Lens' DescribeClusterResponse Prelude.Int
+describeClusterResponse_httpStatus = Lens.lens (\DescribeClusterResponse' {httpStatus} -> httpStatus) (\s@DescribeClusterResponse' {} a -> s {httpStatus = a} :: DescribeClusterResponse)
+
+instance Prelude.NFData DescribeClusterResponse where
+  rnf DescribeClusterResponse' {..} =
+    Prelude.rnf cluster
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/DescribeFargateProfile.hs b/gen/Amazonka/EKS/DescribeFargateProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/DescribeFargateProfile.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.DescribeFargateProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns descriptive information about an Fargate profile.
+module Amazonka.EKS.DescribeFargateProfile
+  ( -- * Creating a Request
+    DescribeFargateProfile (..),
+    newDescribeFargateProfile,
+
+    -- * Request Lenses
+    describeFargateProfile_clusterName,
+    describeFargateProfile_fargateProfileName,
+
+    -- * Destructuring the Response
+    DescribeFargateProfileResponse (..),
+    newDescribeFargateProfileResponse,
+
+    -- * Response Lenses
+    describeFargateProfileResponse_fargateProfile,
+    describeFargateProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeFargateProfile' smart constructor.
+data DescribeFargateProfile = DescribeFargateProfile'
+  { -- | The name of the Amazon EKS cluster associated with the Fargate profile.
+    clusterName :: Prelude.Text,
+    -- | The name of the Fargate profile to describe.
+    fargateProfileName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFargateProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterName', 'describeFargateProfile_clusterName' - The name of the Amazon EKS cluster associated with the Fargate profile.
+--
+-- 'fargateProfileName', 'describeFargateProfile_fargateProfileName' - The name of the Fargate profile to describe.
+newDescribeFargateProfile ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  -- | 'fargateProfileName'
+  Prelude.Text ->
+  DescribeFargateProfile
+newDescribeFargateProfile
+  pClusterName_
+  pFargateProfileName_ =
+    DescribeFargateProfile'
+      { clusterName =
+          pClusterName_,
+        fargateProfileName = pFargateProfileName_
+      }
+
+-- | The name of the Amazon EKS cluster associated with the Fargate profile.
+describeFargateProfile_clusterName :: Lens.Lens' DescribeFargateProfile Prelude.Text
+describeFargateProfile_clusterName = Lens.lens (\DescribeFargateProfile' {clusterName} -> clusterName) (\s@DescribeFargateProfile' {} a -> s {clusterName = a} :: DescribeFargateProfile)
+
+-- | The name of the Fargate profile to describe.
+describeFargateProfile_fargateProfileName :: Lens.Lens' DescribeFargateProfile Prelude.Text
+describeFargateProfile_fargateProfileName = Lens.lens (\DescribeFargateProfile' {fargateProfileName} -> fargateProfileName) (\s@DescribeFargateProfile' {} a -> s {fargateProfileName = a} :: DescribeFargateProfile)
+
+instance Core.AWSRequest DescribeFargateProfile where
+  type
+    AWSResponse DescribeFargateProfile =
+      DescribeFargateProfileResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeFargateProfileResponse'
+            Prelude.<$> (x Data..?> "fargateProfile")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeFargateProfile where
+  hashWithSalt _salt DescribeFargateProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` fargateProfileName
+
+instance Prelude.NFData DescribeFargateProfile where
+  rnf DescribeFargateProfile' {..} =
+    Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf fargateProfileName
+
+instance Data.ToHeaders DescribeFargateProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeFargateProfile where
+  toPath DescribeFargateProfile' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/fargate-profiles/",
+        Data.toBS fargateProfileName
+      ]
+
+instance Data.ToQuery DescribeFargateProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeFargateProfileResponse' smart constructor.
+data DescribeFargateProfileResponse = DescribeFargateProfileResponse'
+  { -- | The full description of your Fargate profile.
+    fargateProfile :: Prelude.Maybe FargateProfile,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFargateProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fargateProfile', 'describeFargateProfileResponse_fargateProfile' - The full description of your Fargate profile.
+--
+-- 'httpStatus', 'describeFargateProfileResponse_httpStatus' - The response's http status code.
+newDescribeFargateProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeFargateProfileResponse
+newDescribeFargateProfileResponse pHttpStatus_ =
+  DescribeFargateProfileResponse'
+    { fargateProfile =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The full description of your Fargate profile.
+describeFargateProfileResponse_fargateProfile :: Lens.Lens' DescribeFargateProfileResponse (Prelude.Maybe FargateProfile)
+describeFargateProfileResponse_fargateProfile = Lens.lens (\DescribeFargateProfileResponse' {fargateProfile} -> fargateProfile) (\s@DescribeFargateProfileResponse' {} a -> s {fargateProfile = a} :: DescribeFargateProfileResponse)
+
+-- | The response's http status code.
+describeFargateProfileResponse_httpStatus :: Lens.Lens' DescribeFargateProfileResponse Prelude.Int
+describeFargateProfileResponse_httpStatus = Lens.lens (\DescribeFargateProfileResponse' {httpStatus} -> httpStatus) (\s@DescribeFargateProfileResponse' {} a -> s {httpStatus = a} :: DescribeFargateProfileResponse)
+
+instance
+  Prelude.NFData
+    DescribeFargateProfileResponse
+  where
+  rnf DescribeFargateProfileResponse' {..} =
+    Prelude.rnf fargateProfile
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/DescribeIdentityProviderConfig.hs b/gen/Amazonka/EKS/DescribeIdentityProviderConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/DescribeIdentityProviderConfig.hs
@@ -0,0 +1,220 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.DescribeIdentityProviderConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns descriptive information about an identity provider
+-- configuration.
+module Amazonka.EKS.DescribeIdentityProviderConfig
+  ( -- * Creating a Request
+    DescribeIdentityProviderConfig (..),
+    newDescribeIdentityProviderConfig,
+
+    -- * Request Lenses
+    describeIdentityProviderConfig_clusterName,
+    describeIdentityProviderConfig_identityProviderConfig,
+
+    -- * Destructuring the Response
+    DescribeIdentityProviderConfigResponse (..),
+    newDescribeIdentityProviderConfigResponse,
+
+    -- * Response Lenses
+    describeIdentityProviderConfigResponse_identityProviderConfig,
+    describeIdentityProviderConfigResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeIdentityProviderConfig' smart constructor.
+data DescribeIdentityProviderConfig = DescribeIdentityProviderConfig'
+  { -- | The cluster name that the identity provider configuration is associated
+    -- to.
+    clusterName :: Prelude.Text,
+    -- | An object representing an identity provider configuration.
+    identityProviderConfig :: IdentityProviderConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIdentityProviderConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterName', 'describeIdentityProviderConfig_clusterName' - The cluster name that the identity provider configuration is associated
+-- to.
+--
+-- 'identityProviderConfig', 'describeIdentityProviderConfig_identityProviderConfig' - An object representing an identity provider configuration.
+newDescribeIdentityProviderConfig ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  -- | 'identityProviderConfig'
+  IdentityProviderConfig ->
+  DescribeIdentityProviderConfig
+newDescribeIdentityProviderConfig
+  pClusterName_
+  pIdentityProviderConfig_ =
+    DescribeIdentityProviderConfig'
+      { clusterName =
+          pClusterName_,
+        identityProviderConfig =
+          pIdentityProviderConfig_
+      }
+
+-- | The cluster name that the identity provider configuration is associated
+-- to.
+describeIdentityProviderConfig_clusterName :: Lens.Lens' DescribeIdentityProviderConfig Prelude.Text
+describeIdentityProviderConfig_clusterName = Lens.lens (\DescribeIdentityProviderConfig' {clusterName} -> clusterName) (\s@DescribeIdentityProviderConfig' {} a -> s {clusterName = a} :: DescribeIdentityProviderConfig)
+
+-- | An object representing an identity provider configuration.
+describeIdentityProviderConfig_identityProviderConfig :: Lens.Lens' DescribeIdentityProviderConfig IdentityProviderConfig
+describeIdentityProviderConfig_identityProviderConfig = Lens.lens (\DescribeIdentityProviderConfig' {identityProviderConfig} -> identityProviderConfig) (\s@DescribeIdentityProviderConfig' {} a -> s {identityProviderConfig = a} :: DescribeIdentityProviderConfig)
+
+instance
+  Core.AWSRequest
+    DescribeIdentityProviderConfig
+  where
+  type
+    AWSResponse DescribeIdentityProviderConfig =
+      DescribeIdentityProviderConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeIdentityProviderConfigResponse'
+            Prelude.<$> (x Data..?> "identityProviderConfig")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeIdentityProviderConfig
+  where
+  hashWithSalt
+    _salt
+    DescribeIdentityProviderConfig' {..} =
+      _salt
+        `Prelude.hashWithSalt` clusterName
+        `Prelude.hashWithSalt` identityProviderConfig
+
+instance
+  Prelude.NFData
+    DescribeIdentityProviderConfig
+  where
+  rnf DescribeIdentityProviderConfig' {..} =
+    Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf identityProviderConfig
+
+instance
+  Data.ToHeaders
+    DescribeIdentityProviderConfig
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeIdentityProviderConfig where
+  toJSON DescribeIdentityProviderConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "identityProviderConfig"
+                  Data..= identityProviderConfig
+              )
+          ]
+      )
+
+instance Data.ToPath DescribeIdentityProviderConfig where
+  toPath DescribeIdentityProviderConfig' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/identity-provider-configs/describe"
+      ]
+
+instance Data.ToQuery DescribeIdentityProviderConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeIdentityProviderConfigResponse' smart constructor.
+data DescribeIdentityProviderConfigResponse = DescribeIdentityProviderConfigResponse'
+  { -- | The object that represents an OpenID Connect (OIDC) identity provider
+    -- configuration.
+    identityProviderConfig :: Prelude.Maybe IdentityProviderConfigResponse,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIdentityProviderConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'identityProviderConfig', 'describeIdentityProviderConfigResponse_identityProviderConfig' - The object that represents an OpenID Connect (OIDC) identity provider
+-- configuration.
+--
+-- 'httpStatus', 'describeIdentityProviderConfigResponse_httpStatus' - The response's http status code.
+newDescribeIdentityProviderConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeIdentityProviderConfigResponse
+newDescribeIdentityProviderConfigResponse
+  pHttpStatus_ =
+    DescribeIdentityProviderConfigResponse'
+      { identityProviderConfig =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The object that represents an OpenID Connect (OIDC) identity provider
+-- configuration.
+describeIdentityProviderConfigResponse_identityProviderConfig :: Lens.Lens' DescribeIdentityProviderConfigResponse (Prelude.Maybe IdentityProviderConfigResponse)
+describeIdentityProviderConfigResponse_identityProviderConfig = Lens.lens (\DescribeIdentityProviderConfigResponse' {identityProviderConfig} -> identityProviderConfig) (\s@DescribeIdentityProviderConfigResponse' {} a -> s {identityProviderConfig = a} :: DescribeIdentityProviderConfigResponse)
+
+-- | The response's http status code.
+describeIdentityProviderConfigResponse_httpStatus :: Lens.Lens' DescribeIdentityProviderConfigResponse Prelude.Int
+describeIdentityProviderConfigResponse_httpStatus = Lens.lens (\DescribeIdentityProviderConfigResponse' {httpStatus} -> httpStatus) (\s@DescribeIdentityProviderConfigResponse' {} a -> s {httpStatus = a} :: DescribeIdentityProviderConfigResponse)
+
+instance
+  Prelude.NFData
+    DescribeIdentityProviderConfigResponse
+  where
+  rnf DescribeIdentityProviderConfigResponse' {..} =
+    Prelude.rnf identityProviderConfig
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/DescribeNodegroup.hs b/gen/Amazonka/EKS/DescribeNodegroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/DescribeNodegroup.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.EKS.DescribeNodegroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns descriptive information about an Amazon EKS node group.
+module Amazonka.EKS.DescribeNodegroup
+  ( -- * Creating a Request
+    DescribeNodegroup (..),
+    newDescribeNodegroup,
+
+    -- * Request Lenses
+    describeNodegroup_clusterName,
+    describeNodegroup_nodegroupName,
+
+    -- * Destructuring the Response
+    DescribeNodegroupResponse (..),
+    newDescribeNodegroupResponse,
+
+    -- * Response Lenses
+    describeNodegroupResponse_nodegroup,
+    describeNodegroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeNodegroup' smart constructor.
+data DescribeNodegroup = DescribeNodegroup'
+  { -- | The name of the Amazon EKS cluster associated with the node group.
+    clusterName :: Prelude.Text,
+    -- | The name of the node group to describe.
+    nodegroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNodegroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterName', 'describeNodegroup_clusterName' - The name of the Amazon EKS cluster associated with the node group.
+--
+-- 'nodegroupName', 'describeNodegroup_nodegroupName' - The name of the node group to describe.
+newDescribeNodegroup ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  -- | 'nodegroupName'
+  Prelude.Text ->
+  DescribeNodegroup
+newDescribeNodegroup pClusterName_ pNodegroupName_ =
+  DescribeNodegroup'
+    { clusterName = pClusterName_,
+      nodegroupName = pNodegroupName_
+    }
+
+-- | The name of the Amazon EKS cluster associated with the node group.
+describeNodegroup_clusterName :: Lens.Lens' DescribeNodegroup Prelude.Text
+describeNodegroup_clusterName = Lens.lens (\DescribeNodegroup' {clusterName} -> clusterName) (\s@DescribeNodegroup' {} a -> s {clusterName = a} :: DescribeNodegroup)
+
+-- | The name of the node group to describe.
+describeNodegroup_nodegroupName :: Lens.Lens' DescribeNodegroup Prelude.Text
+describeNodegroup_nodegroupName = Lens.lens (\DescribeNodegroup' {nodegroupName} -> nodegroupName) (\s@DescribeNodegroup' {} a -> s {nodegroupName = a} :: DescribeNodegroup)
+
+instance Core.AWSRequest DescribeNodegroup where
+  type
+    AWSResponse DescribeNodegroup =
+      DescribeNodegroupResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeNodegroupResponse'
+            Prelude.<$> (x Data..?> "nodegroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeNodegroup where
+  hashWithSalt _salt DescribeNodegroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` nodegroupName
+
+instance Prelude.NFData DescribeNodegroup where
+  rnf DescribeNodegroup' {..} =
+    Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf nodegroupName
+
+instance Data.ToHeaders DescribeNodegroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeNodegroup where
+  toPath DescribeNodegroup' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/node-groups/",
+        Data.toBS nodegroupName
+      ]
+
+instance Data.ToQuery DescribeNodegroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeNodegroupResponse' smart constructor.
+data DescribeNodegroupResponse = DescribeNodegroupResponse'
+  { -- | The full description of your node group.
+    nodegroup :: Prelude.Maybe Nodegroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNodegroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nodegroup', 'describeNodegroupResponse_nodegroup' - The full description of your node group.
+--
+-- 'httpStatus', 'describeNodegroupResponse_httpStatus' - The response's http status code.
+newDescribeNodegroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeNodegroupResponse
+newDescribeNodegroupResponse pHttpStatus_ =
+  DescribeNodegroupResponse'
+    { nodegroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The full description of your node group.
+describeNodegroupResponse_nodegroup :: Lens.Lens' DescribeNodegroupResponse (Prelude.Maybe Nodegroup)
+describeNodegroupResponse_nodegroup = Lens.lens (\DescribeNodegroupResponse' {nodegroup} -> nodegroup) (\s@DescribeNodegroupResponse' {} a -> s {nodegroup = a} :: DescribeNodegroupResponse)
+
+-- | The response's http status code.
+describeNodegroupResponse_httpStatus :: Lens.Lens' DescribeNodegroupResponse Prelude.Int
+describeNodegroupResponse_httpStatus = Lens.lens (\DescribeNodegroupResponse' {httpStatus} -> httpStatus) (\s@DescribeNodegroupResponse' {} a -> s {httpStatus = a} :: DescribeNodegroupResponse)
+
+instance Prelude.NFData DescribeNodegroupResponse where
+  rnf DescribeNodegroupResponse' {..} =
+    Prelude.rnf nodegroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/DescribeUpdate.hs b/gen/Amazonka/EKS/DescribeUpdate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/DescribeUpdate.hs
@@ -0,0 +1,222 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.DescribeUpdate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns descriptive information about an update against your Amazon EKS
+-- cluster or associated managed node group or Amazon EKS add-on.
+--
+-- When the status of the update is @Succeeded@, the update is complete. If
+-- an update fails, the status is @Failed@, and an error detail explains
+-- the reason for the failure.
+module Amazonka.EKS.DescribeUpdate
+  ( -- * Creating a Request
+    DescribeUpdate (..),
+    newDescribeUpdate,
+
+    -- * Request Lenses
+    describeUpdate_addonName,
+    describeUpdate_nodegroupName,
+    describeUpdate_name,
+    describeUpdate_updateId,
+
+    -- * Destructuring the Response
+    DescribeUpdateResponse (..),
+    newDescribeUpdateResponse,
+
+    -- * Response Lenses
+    describeUpdateResponse_update,
+    describeUpdateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeUpdate' smart constructor.
+data DescribeUpdate = DescribeUpdate'
+  { -- | The name of the add-on. The name must match one of the names returned by
+    -- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
+    -- . This parameter is required if the update is an add-on update.
+    addonName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Amazon EKS node group associated with the update. This
+    -- parameter is required if the update is a node group update.
+    nodegroupName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Amazon EKS cluster associated with the update.
+    name :: Prelude.Text,
+    -- | The ID of the update to describe.
+    updateId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeUpdate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addonName', 'describeUpdate_addonName' - The name of the add-on. The name must match one of the names returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
+-- . This parameter is required if the update is an add-on update.
+--
+-- 'nodegroupName', 'describeUpdate_nodegroupName' - The name of the Amazon EKS node group associated with the update. This
+-- parameter is required if the update is a node group update.
+--
+-- 'name', 'describeUpdate_name' - The name of the Amazon EKS cluster associated with the update.
+--
+-- 'updateId', 'describeUpdate_updateId' - The ID of the update to describe.
+newDescribeUpdate ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'updateId'
+  Prelude.Text ->
+  DescribeUpdate
+newDescribeUpdate pName_ pUpdateId_ =
+  DescribeUpdate'
+    { addonName = Prelude.Nothing,
+      nodegroupName = Prelude.Nothing,
+      name = pName_,
+      updateId = pUpdateId_
+    }
+
+-- | The name of the add-on. The name must match one of the names returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
+-- . This parameter is required if the update is an add-on update.
+describeUpdate_addonName :: Lens.Lens' DescribeUpdate (Prelude.Maybe Prelude.Text)
+describeUpdate_addonName = Lens.lens (\DescribeUpdate' {addonName} -> addonName) (\s@DescribeUpdate' {} a -> s {addonName = a} :: DescribeUpdate)
+
+-- | The name of the Amazon EKS node group associated with the update. This
+-- parameter is required if the update is a node group update.
+describeUpdate_nodegroupName :: Lens.Lens' DescribeUpdate (Prelude.Maybe Prelude.Text)
+describeUpdate_nodegroupName = Lens.lens (\DescribeUpdate' {nodegroupName} -> nodegroupName) (\s@DescribeUpdate' {} a -> s {nodegroupName = a} :: DescribeUpdate)
+
+-- | The name of the Amazon EKS cluster associated with the update.
+describeUpdate_name :: Lens.Lens' DescribeUpdate Prelude.Text
+describeUpdate_name = Lens.lens (\DescribeUpdate' {name} -> name) (\s@DescribeUpdate' {} a -> s {name = a} :: DescribeUpdate)
+
+-- | The ID of the update to describe.
+describeUpdate_updateId :: Lens.Lens' DescribeUpdate Prelude.Text
+describeUpdate_updateId = Lens.lens (\DescribeUpdate' {updateId} -> updateId) (\s@DescribeUpdate' {} a -> s {updateId = a} :: DescribeUpdate)
+
+instance Core.AWSRequest DescribeUpdate where
+  type
+    AWSResponse DescribeUpdate =
+      DescribeUpdateResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeUpdateResponse'
+            Prelude.<$> (x Data..?> "update")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeUpdate where
+  hashWithSalt _salt DescribeUpdate' {..} =
+    _salt
+      `Prelude.hashWithSalt` addonName
+      `Prelude.hashWithSalt` nodegroupName
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` updateId
+
+instance Prelude.NFData DescribeUpdate where
+  rnf DescribeUpdate' {..} =
+    Prelude.rnf addonName
+      `Prelude.seq` Prelude.rnf nodegroupName
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf updateId
+
+instance Data.ToHeaders DescribeUpdate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeUpdate where
+  toPath DescribeUpdate' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS name,
+        "/updates/",
+        Data.toBS updateId
+      ]
+
+instance Data.ToQuery DescribeUpdate where
+  toQuery DescribeUpdate' {..} =
+    Prelude.mconcat
+      [ "addonName" Data.=: addonName,
+        "nodegroupName" Data.=: nodegroupName
+      ]
+
+-- | /See:/ 'newDescribeUpdateResponse' smart constructor.
+data DescribeUpdateResponse = DescribeUpdateResponse'
+  { -- | The full description of the specified update.
+    update :: Prelude.Maybe Update,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeUpdateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'update', 'describeUpdateResponse_update' - The full description of the specified update.
+--
+-- 'httpStatus', 'describeUpdateResponse_httpStatus' - The response's http status code.
+newDescribeUpdateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeUpdateResponse
+newDescribeUpdateResponse pHttpStatus_ =
+  DescribeUpdateResponse'
+    { update = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The full description of the specified update.
+describeUpdateResponse_update :: Lens.Lens' DescribeUpdateResponse (Prelude.Maybe Update)
+describeUpdateResponse_update = Lens.lens (\DescribeUpdateResponse' {update} -> update) (\s@DescribeUpdateResponse' {} a -> s {update = a} :: DescribeUpdateResponse)
+
+-- | The response's http status code.
+describeUpdateResponse_httpStatus :: Lens.Lens' DescribeUpdateResponse Prelude.Int
+describeUpdateResponse_httpStatus = Lens.lens (\DescribeUpdateResponse' {httpStatus} -> httpStatus) (\s@DescribeUpdateResponse' {} a -> s {httpStatus = a} :: DescribeUpdateResponse)
+
+instance Prelude.NFData DescribeUpdateResponse where
+  rnf DescribeUpdateResponse' {..} =
+    Prelude.rnf update
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/DisassociateIdentityProviderConfig.hs b/gen/Amazonka/EKS/DisassociateIdentityProviderConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/DisassociateIdentityProviderConfig.hs
@@ -0,0 +1,241 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.DisassociateIdentityProviderConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates an identity provider configuration from a cluster. If you
+-- disassociate an identity provider from your cluster, users included in
+-- the provider can no longer access the cluster. However, you can still
+-- access the cluster with Amazon Web Services IAM users.
+module Amazonka.EKS.DisassociateIdentityProviderConfig
+  ( -- * Creating a Request
+    DisassociateIdentityProviderConfig (..),
+    newDisassociateIdentityProviderConfig,
+
+    -- * Request Lenses
+    disassociateIdentityProviderConfig_clientRequestToken,
+    disassociateIdentityProviderConfig_clusterName,
+    disassociateIdentityProviderConfig_identityProviderConfig,
+
+    -- * Destructuring the Response
+    DisassociateIdentityProviderConfigResponse (..),
+    newDisassociateIdentityProviderConfigResponse,
+
+    -- * Response Lenses
+    disassociateIdentityProviderConfigResponse_update,
+    disassociateIdentityProviderConfigResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateIdentityProviderConfig' smart constructor.
+data DisassociateIdentityProviderConfig = DisassociateIdentityProviderConfig'
+  { -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the cluster to disassociate an identity provider from.
+    clusterName :: Prelude.Text,
+    -- | An object representing an identity provider configuration.
+    identityProviderConfig :: IdentityProviderConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateIdentityProviderConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'disassociateIdentityProviderConfig_clientRequestToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'clusterName', 'disassociateIdentityProviderConfig_clusterName' - The name of the cluster to disassociate an identity provider from.
+--
+-- 'identityProviderConfig', 'disassociateIdentityProviderConfig_identityProviderConfig' - An object representing an identity provider configuration.
+newDisassociateIdentityProviderConfig ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  -- | 'identityProviderConfig'
+  IdentityProviderConfig ->
+  DisassociateIdentityProviderConfig
+newDisassociateIdentityProviderConfig
+  pClusterName_
+  pIdentityProviderConfig_ =
+    DisassociateIdentityProviderConfig'
+      { clientRequestToken =
+          Prelude.Nothing,
+        clusterName = pClusterName_,
+        identityProviderConfig =
+          pIdentityProviderConfig_
+      }
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+disassociateIdentityProviderConfig_clientRequestToken :: Lens.Lens' DisassociateIdentityProviderConfig (Prelude.Maybe Prelude.Text)
+disassociateIdentityProviderConfig_clientRequestToken = Lens.lens (\DisassociateIdentityProviderConfig' {clientRequestToken} -> clientRequestToken) (\s@DisassociateIdentityProviderConfig' {} a -> s {clientRequestToken = a} :: DisassociateIdentityProviderConfig)
+
+-- | The name of the cluster to disassociate an identity provider from.
+disassociateIdentityProviderConfig_clusterName :: Lens.Lens' DisassociateIdentityProviderConfig Prelude.Text
+disassociateIdentityProviderConfig_clusterName = Lens.lens (\DisassociateIdentityProviderConfig' {clusterName} -> clusterName) (\s@DisassociateIdentityProviderConfig' {} a -> s {clusterName = a} :: DisassociateIdentityProviderConfig)
+
+-- | An object representing an identity provider configuration.
+disassociateIdentityProviderConfig_identityProviderConfig :: Lens.Lens' DisassociateIdentityProviderConfig IdentityProviderConfig
+disassociateIdentityProviderConfig_identityProviderConfig = Lens.lens (\DisassociateIdentityProviderConfig' {identityProviderConfig} -> identityProviderConfig) (\s@DisassociateIdentityProviderConfig' {} a -> s {identityProviderConfig = a} :: DisassociateIdentityProviderConfig)
+
+instance
+  Core.AWSRequest
+    DisassociateIdentityProviderConfig
+  where
+  type
+    AWSResponse DisassociateIdentityProviderConfig =
+      DisassociateIdentityProviderConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DisassociateIdentityProviderConfigResponse'
+            Prelude.<$> (x Data..?> "update")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateIdentityProviderConfig
+  where
+  hashWithSalt
+    _salt
+    DisassociateIdentityProviderConfig' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientRequestToken
+        `Prelude.hashWithSalt` clusterName
+        `Prelude.hashWithSalt` identityProviderConfig
+
+instance
+  Prelude.NFData
+    DisassociateIdentityProviderConfig
+  where
+  rnf DisassociateIdentityProviderConfig' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf identityProviderConfig
+
+instance
+  Data.ToHeaders
+    DisassociateIdentityProviderConfig
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DisassociateIdentityProviderConfig
+  where
+  toJSON DisassociateIdentityProviderConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            Prelude.Just
+              ( "identityProviderConfig"
+                  Data..= identityProviderConfig
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    DisassociateIdentityProviderConfig
+  where
+  toPath DisassociateIdentityProviderConfig' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/identity-provider-configs/disassociate"
+      ]
+
+instance
+  Data.ToQuery
+    DisassociateIdentityProviderConfig
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateIdentityProviderConfigResponse' smart constructor.
+data DisassociateIdentityProviderConfigResponse = DisassociateIdentityProviderConfigResponse'
+  { update :: Prelude.Maybe Update,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateIdentityProviderConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'update', 'disassociateIdentityProviderConfigResponse_update' - Undocumented member.
+--
+-- 'httpStatus', 'disassociateIdentityProviderConfigResponse_httpStatus' - The response's http status code.
+newDisassociateIdentityProviderConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateIdentityProviderConfigResponse
+newDisassociateIdentityProviderConfigResponse
+  pHttpStatus_ =
+    DisassociateIdentityProviderConfigResponse'
+      { update =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Undocumented member.
+disassociateIdentityProviderConfigResponse_update :: Lens.Lens' DisassociateIdentityProviderConfigResponse (Prelude.Maybe Update)
+disassociateIdentityProviderConfigResponse_update = Lens.lens (\DisassociateIdentityProviderConfigResponse' {update} -> update) (\s@DisassociateIdentityProviderConfigResponse' {} a -> s {update = a} :: DisassociateIdentityProviderConfigResponse)
+
+-- | The response's http status code.
+disassociateIdentityProviderConfigResponse_httpStatus :: Lens.Lens' DisassociateIdentityProviderConfigResponse Prelude.Int
+disassociateIdentityProviderConfigResponse_httpStatus = Lens.lens (\DisassociateIdentityProviderConfigResponse' {httpStatus} -> httpStatus) (\s@DisassociateIdentityProviderConfigResponse' {} a -> s {httpStatus = a} :: DisassociateIdentityProviderConfigResponse)
+
+instance
+  Prelude.NFData
+    DisassociateIdentityProviderConfigResponse
+  where
+  rnf DisassociateIdentityProviderConfigResponse' {..} =
+    Prelude.rnf update
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/Lens.hs b/gen/Amazonka/EKS/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Lens.hs
@@ -0,0 +1,678 @@
+{-# 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.EKS.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.EKS.Lens
+  ( -- * Operations
+
+    -- ** AssociateEncryptionConfig
+    associateEncryptionConfig_clientRequestToken,
+    associateEncryptionConfig_clusterName,
+    associateEncryptionConfig_encryptionConfig,
+    associateEncryptionConfigResponse_update,
+    associateEncryptionConfigResponse_httpStatus,
+
+    -- ** AssociateIdentityProviderConfig
+    associateIdentityProviderConfig_clientRequestToken,
+    associateIdentityProviderConfig_tags,
+    associateIdentityProviderConfig_clusterName,
+    associateIdentityProviderConfig_oidc,
+    associateIdentityProviderConfigResponse_tags,
+    associateIdentityProviderConfigResponse_update,
+    associateIdentityProviderConfigResponse_httpStatus,
+
+    -- ** CreateAddon
+    createAddon_addonVersion,
+    createAddon_clientRequestToken,
+    createAddon_configurationValues,
+    createAddon_resolveConflicts,
+    createAddon_serviceAccountRoleArn,
+    createAddon_tags,
+    createAddon_clusterName,
+    createAddon_addonName,
+    createAddonResponse_addon,
+    createAddonResponse_httpStatus,
+
+    -- ** CreateCluster
+    createCluster_clientRequestToken,
+    createCluster_encryptionConfig,
+    createCluster_kubernetesNetworkConfig,
+    createCluster_logging,
+    createCluster_outpostConfig,
+    createCluster_tags,
+    createCluster_version,
+    createCluster_name,
+    createCluster_roleArn,
+    createCluster_resourcesVpcConfig,
+    createClusterResponse_cluster,
+    createClusterResponse_httpStatus,
+
+    -- ** CreateFargateProfile
+    createFargateProfile_clientRequestToken,
+    createFargateProfile_selectors,
+    createFargateProfile_subnets,
+    createFargateProfile_tags,
+    createFargateProfile_fargateProfileName,
+    createFargateProfile_clusterName,
+    createFargateProfile_podExecutionRoleArn,
+    createFargateProfileResponse_fargateProfile,
+    createFargateProfileResponse_httpStatus,
+
+    -- ** CreateNodegroup
+    createNodegroup_amiType,
+    createNodegroup_capacityType,
+    createNodegroup_clientRequestToken,
+    createNodegroup_diskSize,
+    createNodegroup_instanceTypes,
+    createNodegroup_labels,
+    createNodegroup_launchTemplate,
+    createNodegroup_releaseVersion,
+    createNodegroup_remoteAccess,
+    createNodegroup_scalingConfig,
+    createNodegroup_tags,
+    createNodegroup_taints,
+    createNodegroup_updateConfig,
+    createNodegroup_version,
+    createNodegroup_clusterName,
+    createNodegroup_nodegroupName,
+    createNodegroup_subnets,
+    createNodegroup_nodeRole,
+    createNodegroupResponse_nodegroup,
+    createNodegroupResponse_httpStatus,
+
+    -- ** DeleteAddon
+    deleteAddon_preserve,
+    deleteAddon_clusterName,
+    deleteAddon_addonName,
+    deleteAddonResponse_addon,
+    deleteAddonResponse_httpStatus,
+
+    -- ** DeleteCluster
+    deleteCluster_name,
+    deleteClusterResponse_cluster,
+    deleteClusterResponse_httpStatus,
+
+    -- ** DeleteFargateProfile
+    deleteFargateProfile_clusterName,
+    deleteFargateProfile_fargateProfileName,
+    deleteFargateProfileResponse_fargateProfile,
+    deleteFargateProfileResponse_httpStatus,
+
+    -- ** DeleteNodegroup
+    deleteNodegroup_clusterName,
+    deleteNodegroup_nodegroupName,
+    deleteNodegroupResponse_nodegroup,
+    deleteNodegroupResponse_httpStatus,
+
+    -- ** DeregisterCluster
+    deregisterCluster_name,
+    deregisterClusterResponse_cluster,
+    deregisterClusterResponse_httpStatus,
+
+    -- ** DescribeAddon
+    describeAddon_clusterName,
+    describeAddon_addonName,
+    describeAddonResponse_addon,
+    describeAddonResponse_httpStatus,
+
+    -- ** DescribeAddonConfiguration
+    describeAddonConfiguration_addonName,
+    describeAddonConfiguration_addonVersion,
+    describeAddonConfigurationResponse_addonName,
+    describeAddonConfigurationResponse_addonVersion,
+    describeAddonConfigurationResponse_configurationSchema,
+    describeAddonConfigurationResponse_httpStatus,
+
+    -- ** DescribeAddonVersions
+    describeAddonVersions_addonName,
+    describeAddonVersions_kubernetesVersion,
+    describeAddonVersions_maxResults,
+    describeAddonVersions_nextToken,
+    describeAddonVersions_owners,
+    describeAddonVersions_publishers,
+    describeAddonVersions_types,
+    describeAddonVersionsResponse_addons,
+    describeAddonVersionsResponse_nextToken,
+    describeAddonVersionsResponse_httpStatus,
+
+    -- ** DescribeCluster
+    describeCluster_name,
+    describeClusterResponse_cluster,
+    describeClusterResponse_httpStatus,
+
+    -- ** DescribeFargateProfile
+    describeFargateProfile_clusterName,
+    describeFargateProfile_fargateProfileName,
+    describeFargateProfileResponse_fargateProfile,
+    describeFargateProfileResponse_httpStatus,
+
+    -- ** DescribeIdentityProviderConfig
+    describeIdentityProviderConfig_clusterName,
+    describeIdentityProviderConfig_identityProviderConfig,
+    describeIdentityProviderConfigResponse_identityProviderConfig,
+    describeIdentityProviderConfigResponse_httpStatus,
+
+    -- ** DescribeNodegroup
+    describeNodegroup_clusterName,
+    describeNodegroup_nodegroupName,
+    describeNodegroupResponse_nodegroup,
+    describeNodegroupResponse_httpStatus,
+
+    -- ** DescribeUpdate
+    describeUpdate_addonName,
+    describeUpdate_nodegroupName,
+    describeUpdate_name,
+    describeUpdate_updateId,
+    describeUpdateResponse_update,
+    describeUpdateResponse_httpStatus,
+
+    -- ** DisassociateIdentityProviderConfig
+    disassociateIdentityProviderConfig_clientRequestToken,
+    disassociateIdentityProviderConfig_clusterName,
+    disassociateIdentityProviderConfig_identityProviderConfig,
+    disassociateIdentityProviderConfigResponse_update,
+    disassociateIdentityProviderConfigResponse_httpStatus,
+
+    -- ** ListAddons
+    listAddons_maxResults,
+    listAddons_nextToken,
+    listAddons_clusterName,
+    listAddonsResponse_addons,
+    listAddonsResponse_nextToken,
+    listAddonsResponse_httpStatus,
+
+    -- ** ListClusters
+    listClusters_include,
+    listClusters_maxResults,
+    listClusters_nextToken,
+    listClustersResponse_clusters,
+    listClustersResponse_nextToken,
+    listClustersResponse_httpStatus,
+
+    -- ** ListFargateProfiles
+    listFargateProfiles_maxResults,
+    listFargateProfiles_nextToken,
+    listFargateProfiles_clusterName,
+    listFargateProfilesResponse_fargateProfileNames,
+    listFargateProfilesResponse_nextToken,
+    listFargateProfilesResponse_httpStatus,
+
+    -- ** ListIdentityProviderConfigs
+    listIdentityProviderConfigs_maxResults,
+    listIdentityProviderConfigs_nextToken,
+    listIdentityProviderConfigs_clusterName,
+    listIdentityProviderConfigsResponse_identityProviderConfigs,
+    listIdentityProviderConfigsResponse_nextToken,
+    listIdentityProviderConfigsResponse_httpStatus,
+
+    -- ** ListNodegroups
+    listNodegroups_maxResults,
+    listNodegroups_nextToken,
+    listNodegroups_clusterName,
+    listNodegroupsResponse_nextToken,
+    listNodegroupsResponse_nodegroups,
+    listNodegroupsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListUpdates
+    listUpdates_addonName,
+    listUpdates_maxResults,
+    listUpdates_nextToken,
+    listUpdates_nodegroupName,
+    listUpdates_name,
+    listUpdatesResponse_nextToken,
+    listUpdatesResponse_updateIds,
+    listUpdatesResponse_httpStatus,
+
+    -- ** RegisterCluster
+    registerCluster_clientRequestToken,
+    registerCluster_tags,
+    registerCluster_name,
+    registerCluster_connectorConfig,
+    registerClusterResponse_cluster,
+    registerClusterResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateAddon
+    updateAddon_addonVersion,
+    updateAddon_clientRequestToken,
+    updateAddon_configurationValues,
+    updateAddon_resolveConflicts,
+    updateAddon_serviceAccountRoleArn,
+    updateAddon_clusterName,
+    updateAddon_addonName,
+    updateAddonResponse_update,
+    updateAddonResponse_httpStatus,
+
+    -- ** UpdateClusterConfig
+    updateClusterConfig_clientRequestToken,
+    updateClusterConfig_logging,
+    updateClusterConfig_resourcesVpcConfig,
+    updateClusterConfig_name,
+    updateClusterConfigResponse_update,
+    updateClusterConfigResponse_httpStatus,
+
+    -- ** UpdateClusterVersion
+    updateClusterVersion_clientRequestToken,
+    updateClusterVersion_name,
+    updateClusterVersion_version,
+    updateClusterVersionResponse_update,
+    updateClusterVersionResponse_httpStatus,
+
+    -- ** UpdateNodegroupConfig
+    updateNodegroupConfig_clientRequestToken,
+    updateNodegroupConfig_labels,
+    updateNodegroupConfig_scalingConfig,
+    updateNodegroupConfig_taints,
+    updateNodegroupConfig_updateConfig,
+    updateNodegroupConfig_clusterName,
+    updateNodegroupConfig_nodegroupName,
+    updateNodegroupConfigResponse_update,
+    updateNodegroupConfigResponse_httpStatus,
+
+    -- ** UpdateNodegroupVersion
+    updateNodegroupVersion_clientRequestToken,
+    updateNodegroupVersion_force,
+    updateNodegroupVersion_launchTemplate,
+    updateNodegroupVersion_releaseVersion,
+    updateNodegroupVersion_version,
+    updateNodegroupVersion_clusterName,
+    updateNodegroupVersion_nodegroupName,
+    updateNodegroupVersionResponse_update,
+    updateNodegroupVersionResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Addon
+    addon_addonArn,
+    addon_addonName,
+    addon_addonVersion,
+    addon_clusterName,
+    addon_configurationValues,
+    addon_createdAt,
+    addon_health,
+    addon_marketplaceInformation,
+    addon_modifiedAt,
+    addon_owner,
+    addon_publisher,
+    addon_serviceAccountRoleArn,
+    addon_status,
+    addon_tags,
+
+    -- ** AddonHealth
+    addonHealth_issues,
+
+    -- ** AddonInfo
+    addonInfo_addonName,
+    addonInfo_addonVersions,
+    addonInfo_marketplaceInformation,
+    addonInfo_owner,
+    addonInfo_publisher,
+    addonInfo_type,
+
+    -- ** AddonIssue
+    addonIssue_code,
+    addonIssue_message,
+    addonIssue_resourceIds,
+
+    -- ** AddonVersionInfo
+    addonVersionInfo_addonVersion,
+    addonVersionInfo_architecture,
+    addonVersionInfo_compatibilities,
+    addonVersionInfo_requiresConfiguration,
+
+    -- ** AutoScalingGroup
+    autoScalingGroup_name,
+
+    -- ** Certificate
+    certificate_data,
+
+    -- ** Cluster
+    cluster_arn,
+    cluster_certificateAuthority,
+    cluster_clientRequestToken,
+    cluster_connectorConfig,
+    cluster_createdAt,
+    cluster_encryptionConfig,
+    cluster_endpoint,
+    cluster_health,
+    cluster_id,
+    cluster_identity,
+    cluster_kubernetesNetworkConfig,
+    cluster_logging,
+    cluster_name,
+    cluster_outpostConfig,
+    cluster_platformVersion,
+    cluster_resourcesVpcConfig,
+    cluster_roleArn,
+    cluster_status,
+    cluster_tags,
+    cluster_version,
+
+    -- ** ClusterHealth
+    clusterHealth_issues,
+
+    -- ** ClusterIssue
+    clusterIssue_code,
+    clusterIssue_message,
+    clusterIssue_resourceIds,
+
+    -- ** Compatibility
+    compatibility_clusterVersion,
+    compatibility_defaultVersion,
+    compatibility_platformVersions,
+
+    -- ** ConnectorConfigRequest
+    connectorConfigRequest_roleArn,
+    connectorConfigRequest_provider,
+
+    -- ** ConnectorConfigResponse
+    connectorConfigResponse_activationCode,
+    connectorConfigResponse_activationExpiry,
+    connectorConfigResponse_activationId,
+    connectorConfigResponse_provider,
+    connectorConfigResponse_roleArn,
+
+    -- ** ControlPlanePlacementRequest
+    controlPlanePlacementRequest_groupName,
+
+    -- ** ControlPlanePlacementResponse
+    controlPlanePlacementResponse_groupName,
+
+    -- ** EncryptionConfig
+    encryptionConfig_provider,
+    encryptionConfig_resources,
+
+    -- ** ErrorDetail
+    errorDetail_errorCode,
+    errorDetail_errorMessage,
+    errorDetail_resourceIds,
+
+    -- ** FargateProfile
+    fargateProfile_clusterName,
+    fargateProfile_createdAt,
+    fargateProfile_fargateProfileArn,
+    fargateProfile_fargateProfileName,
+    fargateProfile_podExecutionRoleArn,
+    fargateProfile_selectors,
+    fargateProfile_status,
+    fargateProfile_subnets,
+    fargateProfile_tags,
+
+    -- ** FargateProfileSelector
+    fargateProfileSelector_labels,
+    fargateProfileSelector_namespace,
+
+    -- ** Identity
+    identity_oidc,
+
+    -- ** IdentityProviderConfig
+    identityProviderConfig_type,
+    identityProviderConfig_name,
+
+    -- ** IdentityProviderConfigResponse
+    identityProviderConfigResponse_oidc,
+
+    -- ** Issue
+    issue_code,
+    issue_message,
+    issue_resourceIds,
+
+    -- ** KubernetesNetworkConfigRequest
+    kubernetesNetworkConfigRequest_ipFamily,
+    kubernetesNetworkConfigRequest_serviceIpv4Cidr,
+
+    -- ** KubernetesNetworkConfigResponse
+    kubernetesNetworkConfigResponse_ipFamily,
+    kubernetesNetworkConfigResponse_serviceIpv4Cidr,
+    kubernetesNetworkConfigResponse_serviceIpv6Cidr,
+
+    -- ** LaunchTemplateSpecification
+    launchTemplateSpecification_id,
+    launchTemplateSpecification_name,
+    launchTemplateSpecification_version,
+
+    -- ** LogSetup
+    logSetup_enabled,
+    logSetup_types,
+
+    -- ** Logging
+    logging_clusterLogging,
+
+    -- ** MarketplaceInformation
+    marketplaceInformation_productId,
+    marketplaceInformation_productUrl,
+
+    -- ** Nodegroup
+    nodegroup_amiType,
+    nodegroup_capacityType,
+    nodegroup_clusterName,
+    nodegroup_createdAt,
+    nodegroup_diskSize,
+    nodegroup_health,
+    nodegroup_instanceTypes,
+    nodegroup_labels,
+    nodegroup_launchTemplate,
+    nodegroup_modifiedAt,
+    nodegroup_nodeRole,
+    nodegroup_nodegroupArn,
+    nodegroup_nodegroupName,
+    nodegroup_releaseVersion,
+    nodegroup_remoteAccess,
+    nodegroup_resources,
+    nodegroup_scalingConfig,
+    nodegroup_status,
+    nodegroup_subnets,
+    nodegroup_tags,
+    nodegroup_taints,
+    nodegroup_updateConfig,
+    nodegroup_version,
+
+    -- ** NodegroupHealth
+    nodegroupHealth_issues,
+
+    -- ** NodegroupResources
+    nodegroupResources_autoScalingGroups,
+    nodegroupResources_remoteAccessSecurityGroup,
+
+    -- ** NodegroupScalingConfig
+    nodegroupScalingConfig_desiredSize,
+    nodegroupScalingConfig_maxSize,
+    nodegroupScalingConfig_minSize,
+
+    -- ** NodegroupUpdateConfig
+    nodegroupUpdateConfig_maxUnavailable,
+    nodegroupUpdateConfig_maxUnavailablePercentage,
+
+    -- ** OIDC
+    oidc_issuer,
+
+    -- ** OidcIdentityProviderConfig
+    oidcIdentityProviderConfig_clientId,
+    oidcIdentityProviderConfig_clusterName,
+    oidcIdentityProviderConfig_groupsClaim,
+    oidcIdentityProviderConfig_groupsPrefix,
+    oidcIdentityProviderConfig_identityProviderConfigArn,
+    oidcIdentityProviderConfig_identityProviderConfigName,
+    oidcIdentityProviderConfig_issuerUrl,
+    oidcIdentityProviderConfig_requiredClaims,
+    oidcIdentityProviderConfig_status,
+    oidcIdentityProviderConfig_tags,
+    oidcIdentityProviderConfig_usernameClaim,
+    oidcIdentityProviderConfig_usernamePrefix,
+
+    -- ** OidcIdentityProviderConfigRequest
+    oidcIdentityProviderConfigRequest_groupsClaim,
+    oidcIdentityProviderConfigRequest_groupsPrefix,
+    oidcIdentityProviderConfigRequest_requiredClaims,
+    oidcIdentityProviderConfigRequest_usernameClaim,
+    oidcIdentityProviderConfigRequest_usernamePrefix,
+    oidcIdentityProviderConfigRequest_identityProviderConfigName,
+    oidcIdentityProviderConfigRequest_issuerUrl,
+    oidcIdentityProviderConfigRequest_clientId,
+
+    -- ** OutpostConfigRequest
+    outpostConfigRequest_controlPlanePlacement,
+    outpostConfigRequest_outpostArns,
+    outpostConfigRequest_controlPlaneInstanceType,
+
+    -- ** OutpostConfigResponse
+    outpostConfigResponse_controlPlanePlacement,
+    outpostConfigResponse_outpostArns,
+    outpostConfigResponse_controlPlaneInstanceType,
+
+    -- ** Provider
+    provider_keyArn,
+
+    -- ** RemoteAccessConfig
+    remoteAccessConfig_ec2SshKey,
+    remoteAccessConfig_sourceSecurityGroups,
+
+    -- ** Taint
+    taint_effect,
+    taint_key,
+    taint_value,
+
+    -- ** Update
+    update_createdAt,
+    update_errors,
+    update_id,
+    update_params,
+    update_status,
+    update_type,
+
+    -- ** UpdateLabelsPayload
+    updateLabelsPayload_addOrUpdateLabels,
+    updateLabelsPayload_removeLabels,
+
+    -- ** UpdateParam
+    updateParam_type,
+    updateParam_value,
+
+    -- ** UpdateTaintsPayload
+    updateTaintsPayload_addOrUpdateTaints,
+    updateTaintsPayload_removeTaints,
+
+    -- ** VpcConfigRequest
+    vpcConfigRequest_endpointPrivateAccess,
+    vpcConfigRequest_endpointPublicAccess,
+    vpcConfigRequest_publicAccessCidrs,
+    vpcConfigRequest_securityGroupIds,
+    vpcConfigRequest_subnetIds,
+
+    -- ** VpcConfigResponse
+    vpcConfigResponse_clusterSecurityGroupId,
+    vpcConfigResponse_endpointPrivateAccess,
+    vpcConfigResponse_endpointPublicAccess,
+    vpcConfigResponse_publicAccessCidrs,
+    vpcConfigResponse_securityGroupIds,
+    vpcConfigResponse_subnetIds,
+    vpcConfigResponse_vpcId,
+  )
+where
+
+import Amazonka.EKS.AssociateEncryptionConfig
+import Amazonka.EKS.AssociateIdentityProviderConfig
+import Amazonka.EKS.CreateAddon
+import Amazonka.EKS.CreateCluster
+import Amazonka.EKS.CreateFargateProfile
+import Amazonka.EKS.CreateNodegroup
+import Amazonka.EKS.DeleteAddon
+import Amazonka.EKS.DeleteCluster
+import Amazonka.EKS.DeleteFargateProfile
+import Amazonka.EKS.DeleteNodegroup
+import Amazonka.EKS.DeregisterCluster
+import Amazonka.EKS.DescribeAddon
+import Amazonka.EKS.DescribeAddonConfiguration
+import Amazonka.EKS.DescribeAddonVersions
+import Amazonka.EKS.DescribeCluster
+import Amazonka.EKS.DescribeFargateProfile
+import Amazonka.EKS.DescribeIdentityProviderConfig
+import Amazonka.EKS.DescribeNodegroup
+import Amazonka.EKS.DescribeUpdate
+import Amazonka.EKS.DisassociateIdentityProviderConfig
+import Amazonka.EKS.ListAddons
+import Amazonka.EKS.ListClusters
+import Amazonka.EKS.ListFargateProfiles
+import Amazonka.EKS.ListIdentityProviderConfigs
+import Amazonka.EKS.ListNodegroups
+import Amazonka.EKS.ListTagsForResource
+import Amazonka.EKS.ListUpdates
+import Amazonka.EKS.RegisterCluster
+import Amazonka.EKS.TagResource
+import Amazonka.EKS.Types.Addon
+import Amazonka.EKS.Types.AddonHealth
+import Amazonka.EKS.Types.AddonInfo
+import Amazonka.EKS.Types.AddonIssue
+import Amazonka.EKS.Types.AddonVersionInfo
+import Amazonka.EKS.Types.AutoScalingGroup
+import Amazonka.EKS.Types.Certificate
+import Amazonka.EKS.Types.Cluster
+import Amazonka.EKS.Types.ClusterHealth
+import Amazonka.EKS.Types.ClusterIssue
+import Amazonka.EKS.Types.Compatibility
+import Amazonka.EKS.Types.ConnectorConfigRequest
+import Amazonka.EKS.Types.ConnectorConfigResponse
+import Amazonka.EKS.Types.ControlPlanePlacementRequest
+import Amazonka.EKS.Types.ControlPlanePlacementResponse
+import Amazonka.EKS.Types.EncryptionConfig
+import Amazonka.EKS.Types.ErrorDetail
+import Amazonka.EKS.Types.FargateProfile
+import Amazonka.EKS.Types.FargateProfileSelector
+import Amazonka.EKS.Types.Identity
+import Amazonka.EKS.Types.IdentityProviderConfig
+import Amazonka.EKS.Types.IdentityProviderConfigResponse
+import Amazonka.EKS.Types.Issue
+import Amazonka.EKS.Types.KubernetesNetworkConfigRequest
+import Amazonka.EKS.Types.KubernetesNetworkConfigResponse
+import Amazonka.EKS.Types.LaunchTemplateSpecification
+import Amazonka.EKS.Types.LogSetup
+import Amazonka.EKS.Types.Logging
+import Amazonka.EKS.Types.MarketplaceInformation
+import Amazonka.EKS.Types.Nodegroup
+import Amazonka.EKS.Types.NodegroupHealth
+import Amazonka.EKS.Types.NodegroupResources
+import Amazonka.EKS.Types.NodegroupScalingConfig
+import Amazonka.EKS.Types.NodegroupUpdateConfig
+import Amazonka.EKS.Types.OIDC
+import Amazonka.EKS.Types.OidcIdentityProviderConfig
+import Amazonka.EKS.Types.OidcIdentityProviderConfigRequest
+import Amazonka.EKS.Types.OutpostConfigRequest
+import Amazonka.EKS.Types.OutpostConfigResponse
+import Amazonka.EKS.Types.Provider
+import Amazonka.EKS.Types.RemoteAccessConfig
+import Amazonka.EKS.Types.Taint
+import Amazonka.EKS.Types.Update
+import Amazonka.EKS.Types.UpdateLabelsPayload
+import Amazonka.EKS.Types.UpdateParam
+import Amazonka.EKS.Types.UpdateTaintsPayload
+import Amazonka.EKS.Types.VpcConfigRequest
+import Amazonka.EKS.Types.VpcConfigResponse
+import Amazonka.EKS.UntagResource
+import Amazonka.EKS.UpdateAddon
+import Amazonka.EKS.UpdateClusterConfig
+import Amazonka.EKS.UpdateClusterVersion
+import Amazonka.EKS.UpdateNodegroupConfig
+import Amazonka.EKS.UpdateNodegroupVersion
diff --git a/gen/Amazonka/EKS/ListAddons.hs b/gen/Amazonka/EKS/ListAddons.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/ListAddons.hs
@@ -0,0 +1,287 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.ListAddons
+-- 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 available add-ons.
+--
+-- This operation returns paginated results.
+module Amazonka.EKS.ListAddons
+  ( -- * Creating a Request
+    ListAddons (..),
+    newListAddons,
+
+    -- * Request Lenses
+    listAddons_maxResults,
+    listAddons_nextToken,
+    listAddons_clusterName,
+
+    -- * Destructuring the Response
+    ListAddonsResponse (..),
+    newListAddonsResponse,
+
+    -- * Response Lenses
+    listAddonsResponse_addons,
+    listAddonsResponse_nextToken,
+    listAddonsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAddons' smart constructor.
+data ListAddons = ListAddons'
+  { -- | The maximum number of add-on results returned by @ListAddonsRequest@ in
+    -- paginated output. When you use this parameter, @ListAddonsRequest@
+    -- returns only @maxResults@ results in a single page along with a
+    -- @nextToken@ response element. You can see the remaining results of the
+    -- initial request by sending another @ListAddonsRequest@ request with the
+    -- returned @nextToken@ value. This value can be between 1 and 100. If you
+    -- don\'t use this parameter, @ListAddonsRequest@ returns up to 100 results
+    -- and a @nextToken@ value, if applicable.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The @nextToken@ value returned from a previous paginated
+    -- @ListAddonsRequest@ where @maxResults@ was used and the results exceeded
+    -- the value of that parameter. Pagination continues from the end of the
+    -- previous results that returned the @nextToken@ value.
+    --
+    -- This token should be treated as an opaque identifier that is used only
+    -- to retrieve the next items in a list and not for other programmatic
+    -- purposes.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the cluster.
+    clusterName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAddons' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAddons_maxResults' - The maximum number of add-on results returned by @ListAddonsRequest@ in
+-- paginated output. When you use this parameter, @ListAddonsRequest@
+-- returns only @maxResults@ results in a single page along with a
+-- @nextToken@ response element. You can see the remaining results of the
+-- initial request by sending another @ListAddonsRequest@ request with the
+-- returned @nextToken@ value. This value can be between 1 and 100. If you
+-- don\'t use this parameter, @ListAddonsRequest@ returns up to 100 results
+-- and a @nextToken@ value, if applicable.
+--
+-- 'nextToken', 'listAddons_nextToken' - The @nextToken@ value returned from a previous paginated
+-- @ListAddonsRequest@ where @maxResults@ was used and the results exceeded
+-- the value of that parameter. Pagination continues from the end of the
+-- previous results that returned the @nextToken@ value.
+--
+-- This token should be treated as an opaque identifier that is used only
+-- to retrieve the next items in a list and not for other programmatic
+-- purposes.
+--
+-- 'clusterName', 'listAddons_clusterName' - The name of the cluster.
+newListAddons ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  ListAddons
+newListAddons pClusterName_ =
+  ListAddons'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      clusterName = pClusterName_
+    }
+
+-- | The maximum number of add-on results returned by @ListAddonsRequest@ in
+-- paginated output. When you use this parameter, @ListAddonsRequest@
+-- returns only @maxResults@ results in a single page along with a
+-- @nextToken@ response element. You can see the remaining results of the
+-- initial request by sending another @ListAddonsRequest@ request with the
+-- returned @nextToken@ value. This value can be between 1 and 100. If you
+-- don\'t use this parameter, @ListAddonsRequest@ returns up to 100 results
+-- and a @nextToken@ value, if applicable.
+listAddons_maxResults :: Lens.Lens' ListAddons (Prelude.Maybe Prelude.Natural)
+listAddons_maxResults = Lens.lens (\ListAddons' {maxResults} -> maxResults) (\s@ListAddons' {} a -> s {maxResults = a} :: ListAddons)
+
+-- | The @nextToken@ value returned from a previous paginated
+-- @ListAddonsRequest@ where @maxResults@ was used and the results exceeded
+-- the value of that parameter. Pagination continues from the end of the
+-- previous results that returned the @nextToken@ value.
+--
+-- This token should be treated as an opaque identifier that is used only
+-- to retrieve the next items in a list and not for other programmatic
+-- purposes.
+listAddons_nextToken :: Lens.Lens' ListAddons (Prelude.Maybe Prelude.Text)
+listAddons_nextToken = Lens.lens (\ListAddons' {nextToken} -> nextToken) (\s@ListAddons' {} a -> s {nextToken = a} :: ListAddons)
+
+-- | The name of the cluster.
+listAddons_clusterName :: Lens.Lens' ListAddons Prelude.Text
+listAddons_clusterName = Lens.lens (\ListAddons' {clusterName} -> clusterName) (\s@ListAddons' {} a -> s {clusterName = a} :: ListAddons)
+
+instance Core.AWSPager ListAddons where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAddonsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAddonsResponse_addons
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAddons_nextToken
+          Lens..~ rs
+          Lens.^? listAddonsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListAddons where
+  type AWSResponse ListAddons = ListAddonsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAddonsResponse'
+            Prelude.<$> (x Data..?> "addons" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAddons where
+  hashWithSalt _salt ListAddons' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` clusterName
+
+instance Prelude.NFData ListAddons where
+  rnf ListAddons' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf clusterName
+
+instance Data.ToHeaders ListAddons where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListAddons where
+  toPath ListAddons' {..} =
+    Prelude.mconcat
+      ["/clusters/", Data.toBS clusterName, "/addons"]
+
+instance Data.ToQuery ListAddons where
+  toQuery ListAddons' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAddonsResponse' smart constructor.
+data ListAddonsResponse = ListAddonsResponse'
+  { -- | A list of available add-ons.
+    addons :: Prelude.Maybe [Prelude.Text],
+    -- | The @nextToken@ value returned from a previous paginated
+    -- @ListAddonsResponse@ where @maxResults@ was used and the results
+    -- exceeded the value of that parameter. Pagination continues from the end
+    -- of the previous results that returned the @nextToken@ value.
+    --
+    -- This token should be treated as an opaque identifier that is used only
+    -- to retrieve the next items in a list and not for other programmatic
+    -- purposes.
+    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 'ListAddonsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addons', 'listAddonsResponse_addons' - A list of available add-ons.
+--
+-- 'nextToken', 'listAddonsResponse_nextToken' - The @nextToken@ value returned from a previous paginated
+-- @ListAddonsResponse@ where @maxResults@ was used and the results
+-- exceeded the value of that parameter. Pagination continues from the end
+-- of the previous results that returned the @nextToken@ value.
+--
+-- This token should be treated as an opaque identifier that is used only
+-- to retrieve the next items in a list and not for other programmatic
+-- purposes.
+--
+-- 'httpStatus', 'listAddonsResponse_httpStatus' - The response's http status code.
+newListAddonsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAddonsResponse
+newListAddonsResponse pHttpStatus_ =
+  ListAddonsResponse'
+    { addons = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of available add-ons.
+listAddonsResponse_addons :: Lens.Lens' ListAddonsResponse (Prelude.Maybe [Prelude.Text])
+listAddonsResponse_addons = Lens.lens (\ListAddonsResponse' {addons} -> addons) (\s@ListAddonsResponse' {} a -> s {addons = a} :: ListAddonsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The @nextToken@ value returned from a previous paginated
+-- @ListAddonsResponse@ where @maxResults@ was used and the results
+-- exceeded the value of that parameter. Pagination continues from the end
+-- of the previous results that returned the @nextToken@ value.
+--
+-- This token should be treated as an opaque identifier that is used only
+-- to retrieve the next items in a list and not for other programmatic
+-- purposes.
+listAddonsResponse_nextToken :: Lens.Lens' ListAddonsResponse (Prelude.Maybe Prelude.Text)
+listAddonsResponse_nextToken = Lens.lens (\ListAddonsResponse' {nextToken} -> nextToken) (\s@ListAddonsResponse' {} a -> s {nextToken = a} :: ListAddonsResponse)
+
+-- | The response's http status code.
+listAddonsResponse_httpStatus :: Lens.Lens' ListAddonsResponse Prelude.Int
+listAddonsResponse_httpStatus = Lens.lens (\ListAddonsResponse' {httpStatus} -> httpStatus) (\s@ListAddonsResponse' {} a -> s {httpStatus = a} :: ListAddonsResponse)
+
+instance Prelude.NFData ListAddonsResponse where
+  rnf ListAddonsResponse' {..} =
+    Prelude.rnf addons
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/ListClusters.hs b/gen/Amazonka/EKS/ListClusters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/ListClusters.hs
@@ -0,0 +1,284 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.ListClusters
+-- 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 Amazon EKS clusters in your Amazon Web Services account in the
+-- specified Region.
+--
+-- This operation returns paginated results.
+module Amazonka.EKS.ListClusters
+  ( -- * Creating a Request
+    ListClusters (..),
+    newListClusters,
+
+    -- * Request Lenses
+    listClusters_include,
+    listClusters_maxResults,
+    listClusters_nextToken,
+
+    -- * Destructuring the Response
+    ListClustersResponse (..),
+    newListClustersResponse,
+
+    -- * Response Lenses
+    listClustersResponse_clusters,
+    listClustersResponse_nextToken,
+    listClustersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListClusters' smart constructor.
+data ListClusters = ListClusters'
+  { -- | Indicates whether external clusters are included in the returned list.
+    -- Use \'@all@\' to return connected clusters, or blank to return only
+    -- Amazon EKS clusters. \'@all@\' must be in lowercase otherwise an error
+    -- occurs.
+    include :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of cluster results returned by @ListClusters@ in
+    -- paginated output. When you use this parameter, @ListClusters@ returns
+    -- only @maxResults@ results in a single page along with a @nextToken@
+    -- response element. You can see the remaining results of the initial
+    -- request by sending another @ListClusters@ request with the returned
+    -- @nextToken@ value. This value can be between 1 and 100. If you don\'t
+    -- use this parameter, @ListClusters@ returns up to 100 results and a
+    -- @nextToken@ value if applicable.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The @nextToken@ value returned from a previous paginated @ListClusters@
+    -- request where @maxResults@ was used and the results exceeded the value
+    -- of that parameter. Pagination continues from the end of the previous
+    -- results that returned the @nextToken@ value.
+    --
+    -- This token should be treated as an opaque identifier that is used only
+    -- to retrieve the next items in a list and not for other programmatic
+    -- purposes.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListClusters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'include', 'listClusters_include' - Indicates whether external clusters are included in the returned list.
+-- Use \'@all@\' to return connected clusters, or blank to return only
+-- Amazon EKS clusters. \'@all@\' must be in lowercase otherwise an error
+-- occurs.
+--
+-- 'maxResults', 'listClusters_maxResults' - The maximum number of cluster results returned by @ListClusters@ in
+-- paginated output. When you use this parameter, @ListClusters@ returns
+-- only @maxResults@ results in a single page along with a @nextToken@
+-- response element. You can see the remaining results of the initial
+-- request by sending another @ListClusters@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If you don\'t
+-- use this parameter, @ListClusters@ returns up to 100 results and a
+-- @nextToken@ value if applicable.
+--
+-- 'nextToken', 'listClusters_nextToken' - The @nextToken@ value returned from a previous paginated @ListClusters@
+-- request where @maxResults@ was used and the results exceeded the value
+-- of that parameter. Pagination continues from the end of the previous
+-- results that returned the @nextToken@ value.
+--
+-- This token should be treated as an opaque identifier that is used only
+-- to retrieve the next items in a list and not for other programmatic
+-- purposes.
+newListClusters ::
+  ListClusters
+newListClusters =
+  ListClusters'
+    { include = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Indicates whether external clusters are included in the returned list.
+-- Use \'@all@\' to return connected clusters, or blank to return only
+-- Amazon EKS clusters. \'@all@\' must be in lowercase otherwise an error
+-- occurs.
+listClusters_include :: Lens.Lens' ListClusters (Prelude.Maybe [Prelude.Text])
+listClusters_include = Lens.lens (\ListClusters' {include} -> include) (\s@ListClusters' {} a -> s {include = a} :: ListClusters) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of cluster results returned by @ListClusters@ in
+-- paginated output. When you use this parameter, @ListClusters@ returns
+-- only @maxResults@ results in a single page along with a @nextToken@
+-- response element. You can see the remaining results of the initial
+-- request by sending another @ListClusters@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If you don\'t
+-- use this parameter, @ListClusters@ returns up to 100 results and a
+-- @nextToken@ value if applicable.
+listClusters_maxResults :: Lens.Lens' ListClusters (Prelude.Maybe Prelude.Natural)
+listClusters_maxResults = Lens.lens (\ListClusters' {maxResults} -> maxResults) (\s@ListClusters' {} a -> s {maxResults = a} :: ListClusters)
+
+-- | The @nextToken@ value returned from a previous paginated @ListClusters@
+-- request where @maxResults@ was used and the results exceeded the value
+-- of that parameter. Pagination continues from the end of the previous
+-- results that returned the @nextToken@ value.
+--
+-- This token should be treated as an opaque identifier that is used only
+-- to retrieve the next items in a list and not for other programmatic
+-- purposes.
+listClusters_nextToken :: Lens.Lens' ListClusters (Prelude.Maybe Prelude.Text)
+listClusters_nextToken = Lens.lens (\ListClusters' {nextToken} -> nextToken) (\s@ListClusters' {} a -> s {nextToken = a} :: ListClusters)
+
+instance Core.AWSPager ListClusters where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listClustersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listClustersResponse_clusters
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listClusters_nextToken
+          Lens..~ rs
+          Lens.^? listClustersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListClusters where
+  type AWSResponse ListClusters = ListClustersResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListClustersResponse'
+            Prelude.<$> (x Data..?> "clusters" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListClusters where
+  hashWithSalt _salt ListClusters' {..} =
+    _salt
+      `Prelude.hashWithSalt` include
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListClusters where
+  rnf ListClusters' {..} =
+    Prelude.rnf include
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListClusters where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListClusters where
+  toPath = Prelude.const "/clusters"
+
+instance Data.ToQuery ListClusters where
+  toQuery ListClusters' {..} =
+    Prelude.mconcat
+      [ "include"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> include),
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListClustersResponse' smart constructor.
+data ListClustersResponse = ListClustersResponse'
+  { -- | A list of all of the clusters for your account in the specified Region.
+    clusters :: Prelude.Maybe [Prelude.Text],
+    -- | The @nextToken@ value to include in a future @ListClusters@ request.
+    -- When the results of a @ListClusters@ request exceed @maxResults@, you
+    -- can use this value to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListClustersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusters', 'listClustersResponse_clusters' - A list of all of the clusters for your account in the specified Region.
+--
+-- 'nextToken', 'listClustersResponse_nextToken' - The @nextToken@ value to include in a future @ListClusters@ request.
+-- When the results of a @ListClusters@ request exceed @maxResults@, you
+-- can use this value to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'listClustersResponse_httpStatus' - The response's http status code.
+newListClustersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListClustersResponse
+newListClustersResponse pHttpStatus_ =
+  ListClustersResponse'
+    { clusters = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of all of the clusters for your account in the specified Region.
+listClustersResponse_clusters :: Lens.Lens' ListClustersResponse (Prelude.Maybe [Prelude.Text])
+listClustersResponse_clusters = Lens.lens (\ListClustersResponse' {clusters} -> clusters) (\s@ListClustersResponse' {} a -> s {clusters = a} :: ListClustersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The @nextToken@ value to include in a future @ListClusters@ request.
+-- When the results of a @ListClusters@ request exceed @maxResults@, you
+-- can use this value to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+listClustersResponse_nextToken :: Lens.Lens' ListClustersResponse (Prelude.Maybe Prelude.Text)
+listClustersResponse_nextToken = Lens.lens (\ListClustersResponse' {nextToken} -> nextToken) (\s@ListClustersResponse' {} a -> s {nextToken = a} :: ListClustersResponse)
+
+-- | The response's http status code.
+listClustersResponse_httpStatus :: Lens.Lens' ListClustersResponse Prelude.Int
+listClustersResponse_httpStatus = Lens.lens (\ListClustersResponse' {httpStatus} -> httpStatus) (\s@ListClustersResponse' {} a -> s {httpStatus = a} :: ListClustersResponse)
+
+instance Prelude.NFData ListClustersResponse where
+  rnf ListClustersResponse' {..} =
+    Prelude.rnf clusters
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/ListFargateProfiles.hs b/gen/Amazonka/EKS/ListFargateProfiles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/ListFargateProfiles.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.EKS.ListFargateProfiles
+-- 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 Fargate profiles associated with the specified cluster in your
+-- Amazon Web Services account in the specified Region.
+--
+-- This operation returns paginated results.
+module Amazonka.EKS.ListFargateProfiles
+  ( -- * Creating a Request
+    ListFargateProfiles (..),
+    newListFargateProfiles,
+
+    -- * Request Lenses
+    listFargateProfiles_maxResults,
+    listFargateProfiles_nextToken,
+    listFargateProfiles_clusterName,
+
+    -- * Destructuring the Response
+    ListFargateProfilesResponse (..),
+    newListFargateProfilesResponse,
+
+    -- * Response Lenses
+    listFargateProfilesResponse_fargateProfileNames,
+    listFargateProfilesResponse_nextToken,
+    listFargateProfilesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListFargateProfiles' smart constructor.
+data ListFargateProfiles = ListFargateProfiles'
+  { -- | The maximum number of Fargate profile results returned by
+    -- @ListFargateProfiles@ in paginated output. When you use this parameter,
+    -- @ListFargateProfiles@ returns only @maxResults@ results in a single page
+    -- along with a @nextToken@ response element. You can see the remaining
+    -- results of the initial request by sending another @ListFargateProfiles@
+    -- request with the returned @nextToken@ value. This value can be between 1
+    -- and 100. If you don\'t use this parameter, @ListFargateProfiles@ returns
+    -- up to 100 results and a @nextToken@ value if applicable.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The @nextToken@ value returned from a previous paginated
+    -- @ListFargateProfiles@ request where @maxResults@ was used and the
+    -- results exceeded the value of that parameter. Pagination continues from
+    -- the end of the previous results that returned the @nextToken@ value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Amazon EKS cluster that you would like to list Fargate
+    -- profiles in.
+    clusterName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListFargateProfiles' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listFargateProfiles_maxResults' - The maximum number of Fargate profile results returned by
+-- @ListFargateProfiles@ in paginated output. When you use this parameter,
+-- @ListFargateProfiles@ returns only @maxResults@ results in a single page
+-- along with a @nextToken@ response element. You can see the remaining
+-- results of the initial request by sending another @ListFargateProfiles@
+-- request with the returned @nextToken@ value. This value can be between 1
+-- and 100. If you don\'t use this parameter, @ListFargateProfiles@ returns
+-- up to 100 results and a @nextToken@ value if applicable.
+--
+-- 'nextToken', 'listFargateProfiles_nextToken' - The @nextToken@ value returned from a previous paginated
+-- @ListFargateProfiles@ request where @maxResults@ was used and the
+-- results exceeded the value of that parameter. Pagination continues from
+-- the end of the previous results that returned the @nextToken@ value.
+--
+-- 'clusterName', 'listFargateProfiles_clusterName' - The name of the Amazon EKS cluster that you would like to list Fargate
+-- profiles in.
+newListFargateProfiles ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  ListFargateProfiles
+newListFargateProfiles pClusterName_ =
+  ListFargateProfiles'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      clusterName = pClusterName_
+    }
+
+-- | The maximum number of Fargate profile results returned by
+-- @ListFargateProfiles@ in paginated output. When you use this parameter,
+-- @ListFargateProfiles@ returns only @maxResults@ results in a single page
+-- along with a @nextToken@ response element. You can see the remaining
+-- results of the initial request by sending another @ListFargateProfiles@
+-- request with the returned @nextToken@ value. This value can be between 1
+-- and 100. If you don\'t use this parameter, @ListFargateProfiles@ returns
+-- up to 100 results and a @nextToken@ value if applicable.
+listFargateProfiles_maxResults :: Lens.Lens' ListFargateProfiles (Prelude.Maybe Prelude.Natural)
+listFargateProfiles_maxResults = Lens.lens (\ListFargateProfiles' {maxResults} -> maxResults) (\s@ListFargateProfiles' {} a -> s {maxResults = a} :: ListFargateProfiles)
+
+-- | The @nextToken@ value returned from a previous paginated
+-- @ListFargateProfiles@ request where @maxResults@ was used and the
+-- results exceeded the value of that parameter. Pagination continues from
+-- the end of the previous results that returned the @nextToken@ value.
+listFargateProfiles_nextToken :: Lens.Lens' ListFargateProfiles (Prelude.Maybe Prelude.Text)
+listFargateProfiles_nextToken = Lens.lens (\ListFargateProfiles' {nextToken} -> nextToken) (\s@ListFargateProfiles' {} a -> s {nextToken = a} :: ListFargateProfiles)
+
+-- | The name of the Amazon EKS cluster that you would like to list Fargate
+-- profiles in.
+listFargateProfiles_clusterName :: Lens.Lens' ListFargateProfiles Prelude.Text
+listFargateProfiles_clusterName = Lens.lens (\ListFargateProfiles' {clusterName} -> clusterName) (\s@ListFargateProfiles' {} a -> s {clusterName = a} :: ListFargateProfiles)
+
+instance Core.AWSPager ListFargateProfiles where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listFargateProfilesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listFargateProfilesResponse_fargateProfileNames
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listFargateProfiles_nextToken
+          Lens..~ rs
+          Lens.^? listFargateProfilesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListFargateProfiles where
+  type
+    AWSResponse ListFargateProfiles =
+      ListFargateProfilesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListFargateProfilesResponse'
+            Prelude.<$> ( x
+                            Data..?> "fargateProfileNames"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListFargateProfiles where
+  hashWithSalt _salt ListFargateProfiles' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` clusterName
+
+instance Prelude.NFData ListFargateProfiles where
+  rnf ListFargateProfiles' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf clusterName
+
+instance Data.ToHeaders ListFargateProfiles where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListFargateProfiles where
+  toPath ListFargateProfiles' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/fargate-profiles"
+      ]
+
+instance Data.ToQuery ListFargateProfiles where
+  toQuery ListFargateProfiles' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListFargateProfilesResponse' smart constructor.
+data ListFargateProfilesResponse = ListFargateProfilesResponse'
+  { -- | A list of all of the Fargate profiles associated with the specified
+    -- cluster.
+    fargateProfileNames :: Prelude.Maybe [Prelude.Text],
+    -- | The @nextToken@ value to include in a future @ListFargateProfiles@
+    -- request. When the results of a @ListFargateProfiles@ request exceed
+    -- @maxResults@, you can use this value to retrieve the next page of
+    -- results. This value is @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListFargateProfilesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fargateProfileNames', 'listFargateProfilesResponse_fargateProfileNames' - A list of all of the Fargate profiles associated with the specified
+-- cluster.
+--
+-- 'nextToken', 'listFargateProfilesResponse_nextToken' - The @nextToken@ value to include in a future @ListFargateProfiles@
+-- request. When the results of a @ListFargateProfiles@ request exceed
+-- @maxResults@, you can use this value to retrieve the next page of
+-- results. This value is @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'listFargateProfilesResponse_httpStatus' - The response's http status code.
+newListFargateProfilesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListFargateProfilesResponse
+newListFargateProfilesResponse pHttpStatus_ =
+  ListFargateProfilesResponse'
+    { fargateProfileNames =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of all of the Fargate profiles associated with the specified
+-- cluster.
+listFargateProfilesResponse_fargateProfileNames :: Lens.Lens' ListFargateProfilesResponse (Prelude.Maybe [Prelude.Text])
+listFargateProfilesResponse_fargateProfileNames = Lens.lens (\ListFargateProfilesResponse' {fargateProfileNames} -> fargateProfileNames) (\s@ListFargateProfilesResponse' {} a -> s {fargateProfileNames = a} :: ListFargateProfilesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The @nextToken@ value to include in a future @ListFargateProfiles@
+-- request. When the results of a @ListFargateProfiles@ request exceed
+-- @maxResults@, you can use this value to retrieve the next page of
+-- results. This value is @null@ when there are no more results to return.
+listFargateProfilesResponse_nextToken :: Lens.Lens' ListFargateProfilesResponse (Prelude.Maybe Prelude.Text)
+listFargateProfilesResponse_nextToken = Lens.lens (\ListFargateProfilesResponse' {nextToken} -> nextToken) (\s@ListFargateProfilesResponse' {} a -> s {nextToken = a} :: ListFargateProfilesResponse)
+
+-- | The response's http status code.
+listFargateProfilesResponse_httpStatus :: Lens.Lens' ListFargateProfilesResponse Prelude.Int
+listFargateProfilesResponse_httpStatus = Lens.lens (\ListFargateProfilesResponse' {httpStatus} -> httpStatus) (\s@ListFargateProfilesResponse' {} a -> s {httpStatus = a} :: ListFargateProfilesResponse)
+
+instance Prelude.NFData ListFargateProfilesResponse where
+  rnf ListFargateProfilesResponse' {..} =
+    Prelude.rnf fargateProfileNames
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/ListIdentityProviderConfigs.hs b/gen/Amazonka/EKS/ListIdentityProviderConfigs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/ListIdentityProviderConfigs.hs
@@ -0,0 +1,285 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.ListIdentityProviderConfigs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- A list of identity provider configurations.
+--
+-- This operation returns paginated results.
+module Amazonka.EKS.ListIdentityProviderConfigs
+  ( -- * Creating a Request
+    ListIdentityProviderConfigs (..),
+    newListIdentityProviderConfigs,
+
+    -- * Request Lenses
+    listIdentityProviderConfigs_maxResults,
+    listIdentityProviderConfigs_nextToken,
+    listIdentityProviderConfigs_clusterName,
+
+    -- * Destructuring the Response
+    ListIdentityProviderConfigsResponse (..),
+    newListIdentityProviderConfigsResponse,
+
+    -- * Response Lenses
+    listIdentityProviderConfigsResponse_identityProviderConfigs,
+    listIdentityProviderConfigsResponse_nextToken,
+    listIdentityProviderConfigsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListIdentityProviderConfigs' smart constructor.
+data ListIdentityProviderConfigs = ListIdentityProviderConfigs'
+  { -- | The maximum number of identity provider configurations returned by
+    -- @ListIdentityProviderConfigs@ in paginated output. When you use this
+    -- parameter, @ListIdentityProviderConfigs@ returns only @maxResults@
+    -- results in a single page along with a @nextToken@ response element. You
+    -- can see the remaining results of the initial request by sending another
+    -- @ListIdentityProviderConfigs@ request with the returned @nextToken@
+    -- value. This value can be between 1 and 100. If you don\'t use this
+    -- parameter, @ListIdentityProviderConfigs@ returns up to 100 results and a
+    -- @nextToken@ value, if applicable.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The @nextToken@ value returned from a previous paginated
+    -- @IdentityProviderConfigsRequest@ where @maxResults@ was used and the
+    -- results exceeded the value of that parameter. Pagination continues from
+    -- the end of the previous results that returned the @nextToken@ value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The cluster name that you want to list identity provider configurations
+    -- for.
+    clusterName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListIdentityProviderConfigs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listIdentityProviderConfigs_maxResults' - The maximum number of identity provider configurations returned by
+-- @ListIdentityProviderConfigs@ in paginated output. When you use this
+-- parameter, @ListIdentityProviderConfigs@ returns only @maxResults@
+-- results in a single page along with a @nextToken@ response element. You
+-- can see the remaining results of the initial request by sending another
+-- @ListIdentityProviderConfigs@ request with the returned @nextToken@
+-- value. This value can be between 1 and 100. If you don\'t use this
+-- parameter, @ListIdentityProviderConfigs@ returns up to 100 results and a
+-- @nextToken@ value, if applicable.
+--
+-- 'nextToken', 'listIdentityProviderConfigs_nextToken' - The @nextToken@ value returned from a previous paginated
+-- @IdentityProviderConfigsRequest@ where @maxResults@ was used and the
+-- results exceeded the value of that parameter. Pagination continues from
+-- the end of the previous results that returned the @nextToken@ value.
+--
+-- 'clusterName', 'listIdentityProviderConfigs_clusterName' - The cluster name that you want to list identity provider configurations
+-- for.
+newListIdentityProviderConfigs ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  ListIdentityProviderConfigs
+newListIdentityProviderConfigs pClusterName_ =
+  ListIdentityProviderConfigs'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      clusterName = pClusterName_
+    }
+
+-- | The maximum number of identity provider configurations returned by
+-- @ListIdentityProviderConfigs@ in paginated output. When you use this
+-- parameter, @ListIdentityProviderConfigs@ returns only @maxResults@
+-- results in a single page along with a @nextToken@ response element. You
+-- can see the remaining results of the initial request by sending another
+-- @ListIdentityProviderConfigs@ request with the returned @nextToken@
+-- value. This value can be between 1 and 100. If you don\'t use this
+-- parameter, @ListIdentityProviderConfigs@ returns up to 100 results and a
+-- @nextToken@ value, if applicable.
+listIdentityProviderConfigs_maxResults :: Lens.Lens' ListIdentityProviderConfigs (Prelude.Maybe Prelude.Natural)
+listIdentityProviderConfigs_maxResults = Lens.lens (\ListIdentityProviderConfigs' {maxResults} -> maxResults) (\s@ListIdentityProviderConfigs' {} a -> s {maxResults = a} :: ListIdentityProviderConfigs)
+
+-- | The @nextToken@ value returned from a previous paginated
+-- @IdentityProviderConfigsRequest@ where @maxResults@ was used and the
+-- results exceeded the value of that parameter. Pagination continues from
+-- the end of the previous results that returned the @nextToken@ value.
+listIdentityProviderConfigs_nextToken :: Lens.Lens' ListIdentityProviderConfigs (Prelude.Maybe Prelude.Text)
+listIdentityProviderConfigs_nextToken = Lens.lens (\ListIdentityProviderConfigs' {nextToken} -> nextToken) (\s@ListIdentityProviderConfigs' {} a -> s {nextToken = a} :: ListIdentityProviderConfigs)
+
+-- | The cluster name that you want to list identity provider configurations
+-- for.
+listIdentityProviderConfigs_clusterName :: Lens.Lens' ListIdentityProviderConfigs Prelude.Text
+listIdentityProviderConfigs_clusterName = Lens.lens (\ListIdentityProviderConfigs' {clusterName} -> clusterName) (\s@ListIdentityProviderConfigs' {} a -> s {clusterName = a} :: ListIdentityProviderConfigs)
+
+instance Core.AWSPager ListIdentityProviderConfigs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listIdentityProviderConfigsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listIdentityProviderConfigsResponse_identityProviderConfigs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listIdentityProviderConfigs_nextToken
+          Lens..~ rs
+          Lens.^? listIdentityProviderConfigsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListIdentityProviderConfigs where
+  type
+    AWSResponse ListIdentityProviderConfigs =
+      ListIdentityProviderConfigsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListIdentityProviderConfigsResponse'
+            Prelude.<$> ( x
+                            Data..?> "identityProviderConfigs"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListIdentityProviderConfigs where
+  hashWithSalt _salt ListIdentityProviderConfigs' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` clusterName
+
+instance Prelude.NFData ListIdentityProviderConfigs where
+  rnf ListIdentityProviderConfigs' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf clusterName
+
+instance Data.ToHeaders ListIdentityProviderConfigs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListIdentityProviderConfigs where
+  toPath ListIdentityProviderConfigs' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/identity-provider-configs"
+      ]
+
+instance Data.ToQuery ListIdentityProviderConfigs where
+  toQuery ListIdentityProviderConfigs' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListIdentityProviderConfigsResponse' smart constructor.
+data ListIdentityProviderConfigsResponse = ListIdentityProviderConfigsResponse'
+  { -- | The identity provider configurations for the cluster.
+    identityProviderConfigs :: Prelude.Maybe [IdentityProviderConfig],
+    -- | The @nextToken@ value returned from a previous paginated
+    -- @ListIdentityProviderConfigsResponse@ where @maxResults@ was used and
+    -- the results exceeded the value of that parameter. Pagination continues
+    -- from the end of the previous results that returned the @nextToken@
+    -- value.
+    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 'ListIdentityProviderConfigsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'identityProviderConfigs', 'listIdentityProviderConfigsResponse_identityProviderConfigs' - The identity provider configurations for the cluster.
+--
+-- 'nextToken', 'listIdentityProviderConfigsResponse_nextToken' - The @nextToken@ value returned from a previous paginated
+-- @ListIdentityProviderConfigsResponse@ where @maxResults@ was used and
+-- the results exceeded the value of that parameter. Pagination continues
+-- from the end of the previous results that returned the @nextToken@
+-- value.
+--
+-- 'httpStatus', 'listIdentityProviderConfigsResponse_httpStatus' - The response's http status code.
+newListIdentityProviderConfigsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListIdentityProviderConfigsResponse
+newListIdentityProviderConfigsResponse pHttpStatus_ =
+  ListIdentityProviderConfigsResponse'
+    { identityProviderConfigs =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identity provider configurations for the cluster.
+listIdentityProviderConfigsResponse_identityProviderConfigs :: Lens.Lens' ListIdentityProviderConfigsResponse (Prelude.Maybe [IdentityProviderConfig])
+listIdentityProviderConfigsResponse_identityProviderConfigs = Lens.lens (\ListIdentityProviderConfigsResponse' {identityProviderConfigs} -> identityProviderConfigs) (\s@ListIdentityProviderConfigsResponse' {} a -> s {identityProviderConfigs = a} :: ListIdentityProviderConfigsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The @nextToken@ value returned from a previous paginated
+-- @ListIdentityProviderConfigsResponse@ where @maxResults@ was used and
+-- the results exceeded the value of that parameter. Pagination continues
+-- from the end of the previous results that returned the @nextToken@
+-- value.
+listIdentityProviderConfigsResponse_nextToken :: Lens.Lens' ListIdentityProviderConfigsResponse (Prelude.Maybe Prelude.Text)
+listIdentityProviderConfigsResponse_nextToken = Lens.lens (\ListIdentityProviderConfigsResponse' {nextToken} -> nextToken) (\s@ListIdentityProviderConfigsResponse' {} a -> s {nextToken = a} :: ListIdentityProviderConfigsResponse)
+
+-- | The response's http status code.
+listIdentityProviderConfigsResponse_httpStatus :: Lens.Lens' ListIdentityProviderConfigsResponse Prelude.Int
+listIdentityProviderConfigsResponse_httpStatus = Lens.lens (\ListIdentityProviderConfigsResponse' {httpStatus} -> httpStatus) (\s@ListIdentityProviderConfigsResponse' {} a -> s {httpStatus = a} :: ListIdentityProviderConfigsResponse)
+
+instance
+  Prelude.NFData
+    ListIdentityProviderConfigsResponse
+  where
+  rnf ListIdentityProviderConfigsResponse' {..} =
+    Prelude.rnf identityProviderConfigs
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/ListNodegroups.hs b/gen/Amazonka/EKS/ListNodegroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/ListNodegroups.hs
@@ -0,0 +1,271 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.ListNodegroups
+-- 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 Amazon EKS managed node groups associated with the specified
+-- cluster in your Amazon Web Services account in the specified Region.
+-- Self-managed node groups are not listed.
+--
+-- This operation returns paginated results.
+module Amazonka.EKS.ListNodegroups
+  ( -- * Creating a Request
+    ListNodegroups (..),
+    newListNodegroups,
+
+    -- * Request Lenses
+    listNodegroups_maxResults,
+    listNodegroups_nextToken,
+    listNodegroups_clusterName,
+
+    -- * Destructuring the Response
+    ListNodegroupsResponse (..),
+    newListNodegroupsResponse,
+
+    -- * Response Lenses
+    listNodegroupsResponse_nextToken,
+    listNodegroupsResponse_nodegroups,
+    listNodegroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListNodegroups' smart constructor.
+data ListNodegroups = ListNodegroups'
+  { -- | The maximum number of node group results returned by @ListNodegroups@ in
+    -- paginated output. When you use this parameter, @ListNodegroups@ returns
+    -- only @maxResults@ results in a single page along with a @nextToken@
+    -- response element. You can see the remaining results of the initial
+    -- request by sending another @ListNodegroups@ request with the returned
+    -- @nextToken@ value. This value can be between 1 and 100. If you don\'t
+    -- use this parameter, @ListNodegroups@ returns up to 100 results and a
+    -- @nextToken@ value if applicable.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The @nextToken@ value returned from a previous paginated
+    -- @ListNodegroups@ request where @maxResults@ was used and the results
+    -- exceeded the value of that parameter. Pagination continues from the end
+    -- of the previous results that returned the @nextToken@ value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Amazon EKS cluster that you would like to list node
+    -- groups in.
+    clusterName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListNodegroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listNodegroups_maxResults' - The maximum number of node group results returned by @ListNodegroups@ in
+-- paginated output. When you use this parameter, @ListNodegroups@ returns
+-- only @maxResults@ results in a single page along with a @nextToken@
+-- response element. You can see the remaining results of the initial
+-- request by sending another @ListNodegroups@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If you don\'t
+-- use this parameter, @ListNodegroups@ returns up to 100 results and a
+-- @nextToken@ value if applicable.
+--
+-- 'nextToken', 'listNodegroups_nextToken' - The @nextToken@ value returned from a previous paginated
+-- @ListNodegroups@ request where @maxResults@ was used and the results
+-- exceeded the value of that parameter. Pagination continues from the end
+-- of the previous results that returned the @nextToken@ value.
+--
+-- 'clusterName', 'listNodegroups_clusterName' - The name of the Amazon EKS cluster that you would like to list node
+-- groups in.
+newListNodegroups ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  ListNodegroups
+newListNodegroups pClusterName_ =
+  ListNodegroups'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      clusterName = pClusterName_
+    }
+
+-- | The maximum number of node group results returned by @ListNodegroups@ in
+-- paginated output. When you use this parameter, @ListNodegroups@ returns
+-- only @maxResults@ results in a single page along with a @nextToken@
+-- response element. You can see the remaining results of the initial
+-- request by sending another @ListNodegroups@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If you don\'t
+-- use this parameter, @ListNodegroups@ returns up to 100 results and a
+-- @nextToken@ value if applicable.
+listNodegroups_maxResults :: Lens.Lens' ListNodegroups (Prelude.Maybe Prelude.Natural)
+listNodegroups_maxResults = Lens.lens (\ListNodegroups' {maxResults} -> maxResults) (\s@ListNodegroups' {} a -> s {maxResults = a} :: ListNodegroups)
+
+-- | The @nextToken@ value returned from a previous paginated
+-- @ListNodegroups@ request where @maxResults@ was used and the results
+-- exceeded the value of that parameter. Pagination continues from the end
+-- of the previous results that returned the @nextToken@ value.
+listNodegroups_nextToken :: Lens.Lens' ListNodegroups (Prelude.Maybe Prelude.Text)
+listNodegroups_nextToken = Lens.lens (\ListNodegroups' {nextToken} -> nextToken) (\s@ListNodegroups' {} a -> s {nextToken = a} :: ListNodegroups)
+
+-- | The name of the Amazon EKS cluster that you would like to list node
+-- groups in.
+listNodegroups_clusterName :: Lens.Lens' ListNodegroups Prelude.Text
+listNodegroups_clusterName = Lens.lens (\ListNodegroups' {clusterName} -> clusterName) (\s@ListNodegroups' {} a -> s {clusterName = a} :: ListNodegroups)
+
+instance Core.AWSPager ListNodegroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listNodegroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listNodegroupsResponse_nodegroups
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listNodegroups_nextToken
+          Lens..~ rs
+          Lens.^? listNodegroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListNodegroups where
+  type
+    AWSResponse ListNodegroups =
+      ListNodegroupsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListNodegroupsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "nodegroups" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListNodegroups where
+  hashWithSalt _salt ListNodegroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` clusterName
+
+instance Prelude.NFData ListNodegroups where
+  rnf ListNodegroups' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf clusterName
+
+instance Data.ToHeaders ListNodegroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListNodegroups where
+  toPath ListNodegroups' {..} =
+    Prelude.mconcat
+      ["/clusters/", Data.toBS clusterName, "/node-groups"]
+
+instance Data.ToQuery ListNodegroups where
+  toQuery ListNodegroups' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListNodegroupsResponse' smart constructor.
+data ListNodegroupsResponse = ListNodegroupsResponse'
+  { -- | The @nextToken@ value to include in a future @ListNodegroups@ request.
+    -- When the results of a @ListNodegroups@ request exceed @maxResults@, you
+    -- can use this value to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of all of the node groups associated with the specified cluster.
+    nodegroups :: 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 'ListNodegroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listNodegroupsResponse_nextToken' - The @nextToken@ value to include in a future @ListNodegroups@ request.
+-- When the results of a @ListNodegroups@ request exceed @maxResults@, you
+-- can use this value to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'nodegroups', 'listNodegroupsResponse_nodegroups' - A list of all of the node groups associated with the specified cluster.
+--
+-- 'httpStatus', 'listNodegroupsResponse_httpStatus' - The response's http status code.
+newListNodegroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListNodegroupsResponse
+newListNodegroupsResponse pHttpStatus_ =
+  ListNodegroupsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      nodegroups = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The @nextToken@ value to include in a future @ListNodegroups@ request.
+-- When the results of a @ListNodegroups@ request exceed @maxResults@, you
+-- can use this value to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+listNodegroupsResponse_nextToken :: Lens.Lens' ListNodegroupsResponse (Prelude.Maybe Prelude.Text)
+listNodegroupsResponse_nextToken = Lens.lens (\ListNodegroupsResponse' {nextToken} -> nextToken) (\s@ListNodegroupsResponse' {} a -> s {nextToken = a} :: ListNodegroupsResponse)
+
+-- | A list of all of the node groups associated with the specified cluster.
+listNodegroupsResponse_nodegroups :: Lens.Lens' ListNodegroupsResponse (Prelude.Maybe [Prelude.Text])
+listNodegroupsResponse_nodegroups = Lens.lens (\ListNodegroupsResponse' {nodegroups} -> nodegroups) (\s@ListNodegroupsResponse' {} a -> s {nodegroups = a} :: ListNodegroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listNodegroupsResponse_httpStatus :: Lens.Lens' ListNodegroupsResponse Prelude.Int
+listNodegroupsResponse_httpStatus = Lens.lens (\ListNodegroupsResponse' {httpStatus} -> httpStatus) (\s@ListNodegroupsResponse' {} a -> s {httpStatus = a} :: ListNodegroupsResponse)
+
+instance Prelude.NFData ListNodegroupsResponse where
+  rnf ListNodegroupsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf nodegroups
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/ListTagsForResource.hs b/gen/Amazonka/EKS/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/ListTagsForResource.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.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 the tags for an Amazon EKS resource.
+module Amazonka.EKS.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.EKS.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) that identifies the resource for which to
+    -- list the tags. Currently, the supported resources are Amazon EKS
+    -- clusters and managed node groups.
+    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) that identifies the resource for which to
+-- list the tags. Currently, the supported resources are Amazon EKS
+-- clusters and managed node groups.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) that identifies the resource for which to
+-- list the tags. Currently, the supported resources are Amazon EKS
+-- clusters and managed node groups.
+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.get (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
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags for the resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | 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' - The tags for the resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags for the resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+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/EKS/ListUpdates.hs b/gen/Amazonka/EKS/ListUpdates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/ListUpdates.hs
@@ -0,0 +1,290 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.ListUpdates
+-- 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 updates associated with an Amazon EKS cluster or managed node
+-- group in your Amazon Web Services account, in the specified Region.
+--
+-- This operation returns paginated results.
+module Amazonka.EKS.ListUpdates
+  ( -- * Creating a Request
+    ListUpdates (..),
+    newListUpdates,
+
+    -- * Request Lenses
+    listUpdates_addonName,
+    listUpdates_maxResults,
+    listUpdates_nextToken,
+    listUpdates_nodegroupName,
+    listUpdates_name,
+
+    -- * Destructuring the Response
+    ListUpdatesResponse (..),
+    newListUpdatesResponse,
+
+    -- * Response Lenses
+    listUpdatesResponse_nextToken,
+    listUpdatesResponse_updateIds,
+    listUpdatesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListUpdates' smart constructor.
+data ListUpdates = ListUpdates'
+  { -- | The names of the installed add-ons that have available updates.
+    addonName :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of update results returned by @ListUpdates@ in
+    -- paginated output. When you use this parameter, @ListUpdates@ returns
+    -- only @maxResults@ results in a single page along with a @nextToken@
+    -- response element. You can see the remaining results of the initial
+    -- request by sending another @ListUpdates@ request with the returned
+    -- @nextToken@ value. This value can be between 1 and 100. If you don\'t
+    -- use this parameter, @ListUpdates@ returns up to 100 results and a
+    -- @nextToken@ value if applicable.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The @nextToken@ value returned from a previous paginated @ListUpdates@
+    -- request where @maxResults@ was used and the results exceeded the value
+    -- of that parameter. Pagination continues from the end of the previous
+    -- results that returned the @nextToken@ value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Amazon EKS managed node group to list updates for.
+    nodegroupName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Amazon EKS cluster to list updates for.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListUpdates' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addonName', 'listUpdates_addonName' - The names of the installed add-ons that have available updates.
+--
+-- 'maxResults', 'listUpdates_maxResults' - The maximum number of update results returned by @ListUpdates@ in
+-- paginated output. When you use this parameter, @ListUpdates@ returns
+-- only @maxResults@ results in a single page along with a @nextToken@
+-- response element. You can see the remaining results of the initial
+-- request by sending another @ListUpdates@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If you don\'t
+-- use this parameter, @ListUpdates@ returns up to 100 results and a
+-- @nextToken@ value if applicable.
+--
+-- 'nextToken', 'listUpdates_nextToken' - The @nextToken@ value returned from a previous paginated @ListUpdates@
+-- request where @maxResults@ was used and the results exceeded the value
+-- of that parameter. Pagination continues from the end of the previous
+-- results that returned the @nextToken@ value.
+--
+-- 'nodegroupName', 'listUpdates_nodegroupName' - The name of the Amazon EKS managed node group to list updates for.
+--
+-- 'name', 'listUpdates_name' - The name of the Amazon EKS cluster to list updates for.
+newListUpdates ::
+  -- | 'name'
+  Prelude.Text ->
+  ListUpdates
+newListUpdates pName_ =
+  ListUpdates'
+    { addonName = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      nodegroupName = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The names of the installed add-ons that have available updates.
+listUpdates_addonName :: Lens.Lens' ListUpdates (Prelude.Maybe Prelude.Text)
+listUpdates_addonName = Lens.lens (\ListUpdates' {addonName} -> addonName) (\s@ListUpdates' {} a -> s {addonName = a} :: ListUpdates)
+
+-- | The maximum number of update results returned by @ListUpdates@ in
+-- paginated output. When you use this parameter, @ListUpdates@ returns
+-- only @maxResults@ results in a single page along with a @nextToken@
+-- response element. You can see the remaining results of the initial
+-- request by sending another @ListUpdates@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If you don\'t
+-- use this parameter, @ListUpdates@ returns up to 100 results and a
+-- @nextToken@ value if applicable.
+listUpdates_maxResults :: Lens.Lens' ListUpdates (Prelude.Maybe Prelude.Natural)
+listUpdates_maxResults = Lens.lens (\ListUpdates' {maxResults} -> maxResults) (\s@ListUpdates' {} a -> s {maxResults = a} :: ListUpdates)
+
+-- | The @nextToken@ value returned from a previous paginated @ListUpdates@
+-- request where @maxResults@ was used and the results exceeded the value
+-- of that parameter. Pagination continues from the end of the previous
+-- results that returned the @nextToken@ value.
+listUpdates_nextToken :: Lens.Lens' ListUpdates (Prelude.Maybe Prelude.Text)
+listUpdates_nextToken = Lens.lens (\ListUpdates' {nextToken} -> nextToken) (\s@ListUpdates' {} a -> s {nextToken = a} :: ListUpdates)
+
+-- | The name of the Amazon EKS managed node group to list updates for.
+listUpdates_nodegroupName :: Lens.Lens' ListUpdates (Prelude.Maybe Prelude.Text)
+listUpdates_nodegroupName = Lens.lens (\ListUpdates' {nodegroupName} -> nodegroupName) (\s@ListUpdates' {} a -> s {nodegroupName = a} :: ListUpdates)
+
+-- | The name of the Amazon EKS cluster to list updates for.
+listUpdates_name :: Lens.Lens' ListUpdates Prelude.Text
+listUpdates_name = Lens.lens (\ListUpdates' {name} -> name) (\s@ListUpdates' {} a -> s {name = a} :: ListUpdates)
+
+instance Core.AWSPager ListUpdates where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listUpdatesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listUpdatesResponse_updateIds
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listUpdates_nextToken
+          Lens..~ rs
+          Lens.^? listUpdatesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListUpdates where
+  type AWSResponse ListUpdates = ListUpdatesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListUpdatesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "updateIds" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListUpdates where
+  hashWithSalt _salt ListUpdates' {..} =
+    _salt
+      `Prelude.hashWithSalt` addonName
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` nodegroupName
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ListUpdates where
+  rnf ListUpdates' {..} =
+    Prelude.rnf addonName
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf nodegroupName
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders ListUpdates where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListUpdates where
+  toPath ListUpdates' {..} =
+    Prelude.mconcat
+      ["/clusters/", Data.toBS name, "/updates"]
+
+instance Data.ToQuery ListUpdates where
+  toQuery ListUpdates' {..} =
+    Prelude.mconcat
+      [ "addonName" Data.=: addonName,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "nodegroupName" Data.=: nodegroupName
+      ]
+
+-- | /See:/ 'newListUpdatesResponse' smart constructor.
+data ListUpdatesResponse = ListUpdatesResponse'
+  { -- | The @nextToken@ value to include in a future @ListUpdates@ request. When
+    -- the results of a @ListUpdates@ request exceed @maxResults@, you can use
+    -- this value to retrieve the next page of results. This value is @null@
+    -- when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of all the updates for the specified cluster and Region.
+    updateIds :: 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 'ListUpdatesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listUpdatesResponse_nextToken' - The @nextToken@ value to include in a future @ListUpdates@ request. When
+-- the results of a @ListUpdates@ request exceed @maxResults@, you can use
+-- this value to retrieve the next page of results. This value is @null@
+-- when there are no more results to return.
+--
+-- 'updateIds', 'listUpdatesResponse_updateIds' - A list of all the updates for the specified cluster and Region.
+--
+-- 'httpStatus', 'listUpdatesResponse_httpStatus' - The response's http status code.
+newListUpdatesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListUpdatesResponse
+newListUpdatesResponse pHttpStatus_ =
+  ListUpdatesResponse'
+    { nextToken = Prelude.Nothing,
+      updateIds = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The @nextToken@ value to include in a future @ListUpdates@ request. When
+-- the results of a @ListUpdates@ request exceed @maxResults@, you can use
+-- this value to retrieve the next page of results. This value is @null@
+-- when there are no more results to return.
+listUpdatesResponse_nextToken :: Lens.Lens' ListUpdatesResponse (Prelude.Maybe Prelude.Text)
+listUpdatesResponse_nextToken = Lens.lens (\ListUpdatesResponse' {nextToken} -> nextToken) (\s@ListUpdatesResponse' {} a -> s {nextToken = a} :: ListUpdatesResponse)
+
+-- | A list of all the updates for the specified cluster and Region.
+listUpdatesResponse_updateIds :: Lens.Lens' ListUpdatesResponse (Prelude.Maybe [Prelude.Text])
+listUpdatesResponse_updateIds = Lens.lens (\ListUpdatesResponse' {updateIds} -> updateIds) (\s@ListUpdatesResponse' {} a -> s {updateIds = a} :: ListUpdatesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listUpdatesResponse_httpStatus :: Lens.Lens' ListUpdatesResponse Prelude.Int
+listUpdatesResponse_httpStatus = Lens.lens (\ListUpdatesResponse' {httpStatus} -> httpStatus) (\s@ListUpdatesResponse' {} a -> s {httpStatus = a} :: ListUpdatesResponse)
+
+instance Prelude.NFData ListUpdatesResponse where
+  rnf ListUpdatesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf updateIds
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/RegisterCluster.hs b/gen/Amazonka/EKS/RegisterCluster.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/RegisterCluster.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.EKS.RegisterCluster
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Connects a Kubernetes cluster to the Amazon EKS control plane.
+--
+-- Any Kubernetes cluster can be connected to the Amazon EKS control plane
+-- to view current information about the cluster and its nodes.
+--
+-- Cluster connection requires two steps. First, send a
+-- @ @@RegisterClusterRequest@@ @ to add it to the Amazon EKS control
+-- plane.
+--
+-- Second, a
+-- <https://amazon-eks.s3.us-west-2.amazonaws.com/eks-connector/manifests/eks-connector/latest/eks-connector.yaml Manifest>
+-- containing the @activationID@ and @activationCode@ must be applied to
+-- the Kubernetes cluster through it\'s native provider to provide
+-- visibility.
+--
+-- After the Manifest is updated and applied, then the connected cluster is
+-- visible to the Amazon EKS control plane. If the Manifest is not applied
+-- within three days, then the connected cluster will no longer be visible
+-- and must be deregistered. See DeregisterCluster.
+module Amazonka.EKS.RegisterCluster
+  ( -- * Creating a Request
+    RegisterCluster (..),
+    newRegisterCluster,
+
+    -- * Request Lenses
+    registerCluster_clientRequestToken,
+    registerCluster_tags,
+    registerCluster_name,
+    registerCluster_connectorConfig,
+
+    -- * Destructuring the Response
+    RegisterClusterResponse (..),
+    newRegisterClusterResponse,
+
+    -- * Response Lenses
+    registerClusterResponse_cluster,
+    registerClusterResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRegisterCluster' smart constructor.
+data RegisterCluster = RegisterCluster'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The metadata that you apply to the cluster to assist with categorization
+    -- and organization. Each tag consists of a key and an optional value, both
+    -- of which you define. Cluster tags do not propagate to any other
+    -- resources associated with the cluster.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Define a unique name for this cluster for your Region.
+    name :: Prelude.Text,
+    -- | The configuration settings required to connect the Kubernetes cluster to
+    -- the Amazon EKS control plane.
+    connectorConfig :: ConnectorConfigRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterCluster' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'registerCluster_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'tags', 'registerCluster_tags' - The metadata that you apply to the cluster to assist with categorization
+-- and organization. Each tag consists of a key and an optional value, both
+-- of which you define. Cluster tags do not propagate to any other
+-- resources associated with the cluster.
+--
+-- 'name', 'registerCluster_name' - Define a unique name for this cluster for your Region.
+--
+-- 'connectorConfig', 'registerCluster_connectorConfig' - The configuration settings required to connect the Kubernetes cluster to
+-- the Amazon EKS control plane.
+newRegisterCluster ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'connectorConfig'
+  ConnectorConfigRequest ->
+  RegisterCluster
+newRegisterCluster pName_ pConnectorConfig_ =
+  RegisterCluster'
+    { clientRequestToken =
+        Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      connectorConfig = pConnectorConfig_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+registerCluster_clientRequestToken :: Lens.Lens' RegisterCluster (Prelude.Maybe Prelude.Text)
+registerCluster_clientRequestToken = Lens.lens (\RegisterCluster' {clientRequestToken} -> clientRequestToken) (\s@RegisterCluster' {} a -> s {clientRequestToken = a} :: RegisterCluster)
+
+-- | The metadata that you apply to the cluster to assist with categorization
+-- and organization. Each tag consists of a key and an optional value, both
+-- of which you define. Cluster tags do not propagate to any other
+-- resources associated with the cluster.
+registerCluster_tags :: Lens.Lens' RegisterCluster (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+registerCluster_tags = Lens.lens (\RegisterCluster' {tags} -> tags) (\s@RegisterCluster' {} a -> s {tags = a} :: RegisterCluster) Prelude.. Lens.mapping Lens.coerced
+
+-- | Define a unique name for this cluster for your Region.
+registerCluster_name :: Lens.Lens' RegisterCluster Prelude.Text
+registerCluster_name = Lens.lens (\RegisterCluster' {name} -> name) (\s@RegisterCluster' {} a -> s {name = a} :: RegisterCluster)
+
+-- | The configuration settings required to connect the Kubernetes cluster to
+-- the Amazon EKS control plane.
+registerCluster_connectorConfig :: Lens.Lens' RegisterCluster ConnectorConfigRequest
+registerCluster_connectorConfig = Lens.lens (\RegisterCluster' {connectorConfig} -> connectorConfig) (\s@RegisterCluster' {} a -> s {connectorConfig = a} :: RegisterCluster)
+
+instance Core.AWSRequest RegisterCluster where
+  type
+    AWSResponse RegisterCluster =
+      RegisterClusterResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RegisterClusterResponse'
+            Prelude.<$> (x Data..?> "cluster")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RegisterCluster where
+  hashWithSalt _salt RegisterCluster' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` connectorConfig
+
+instance Prelude.NFData RegisterCluster where
+  rnf RegisterCluster' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf connectorConfig
+
+instance Data.ToHeaders RegisterCluster where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RegisterCluster where
+  toJSON RegisterCluster' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ("connectorConfig" Data..= connectorConfig)
+          ]
+      )
+
+instance Data.ToPath RegisterCluster where
+  toPath = Prelude.const "/cluster-registrations"
+
+instance Data.ToQuery RegisterCluster where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRegisterClusterResponse' smart constructor.
+data RegisterClusterResponse = RegisterClusterResponse'
+  { cluster :: Prelude.Maybe Cluster,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterClusterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cluster', 'registerClusterResponse_cluster' - Undocumented member.
+--
+-- 'httpStatus', 'registerClusterResponse_httpStatus' - The response's http status code.
+newRegisterClusterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RegisterClusterResponse
+newRegisterClusterResponse pHttpStatus_ =
+  RegisterClusterResponse'
+    { cluster = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+registerClusterResponse_cluster :: Lens.Lens' RegisterClusterResponse (Prelude.Maybe Cluster)
+registerClusterResponse_cluster = Lens.lens (\RegisterClusterResponse' {cluster} -> cluster) (\s@RegisterClusterResponse' {} a -> s {cluster = a} :: RegisterClusterResponse)
+
+-- | The response's http status code.
+registerClusterResponse_httpStatus :: Lens.Lens' RegisterClusterResponse Prelude.Int
+registerClusterResponse_httpStatus = Lens.lens (\RegisterClusterResponse' {httpStatus} -> httpStatus) (\s@RegisterClusterResponse' {} a -> s {httpStatus = a} :: RegisterClusterResponse)
+
+instance Prelude.NFData RegisterClusterResponse where
+  rnf RegisterClusterResponse' {..} =
+    Prelude.rnf cluster
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/TagResource.hs b/gen/Amazonka/EKS/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/TagResource.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.EKS.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)
+--
+-- Associates the specified tags to a resource with the specified
+-- @resourceArn@. If existing tags on a resource are not specified in the
+-- request parameters, they are not changed. When a resource is deleted,
+-- the tags associated with that resource are deleted as well. Tags that
+-- you create for Amazon EKS resources do not propagate to any other
+-- resources associated with the cluster. For example, if you tag a cluster
+-- with this operation, that tag does not automatically propagate to the
+-- subnets and nodes associated with the cluster.
+module Amazonka.EKS.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.EKS.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 resource to which to add tags.
+    -- Currently, the supported resources are Amazon EKS clusters and managed
+    -- node groups.
+    resourceArn :: Prelude.Text,
+    -- | The tags to add to the resource. A tag is an array of key-value pairs.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  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 resource to which to add tags.
+-- Currently, the supported resources are Amazon EKS clusters and managed
+-- node groups.
+--
+-- 'tags', 'tagResource_tags' - The tags to add to the resource. A tag is an array of key-value pairs.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource to which to add tags.
+-- Currently, the supported resources are Amazon EKS clusters and managed
+-- node groups.
+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 the resource. A tag is an array of key-value pairs.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+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
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+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/EKS/Types.hs b/gen/Amazonka/EKS/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types.hs
@@ -0,0 +1,740 @@
+{-# 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.EKS.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.EKS.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _BadRequestException,
+    _ClientException,
+    _InvalidParameterException,
+    _InvalidRequestException,
+    _NotFoundException,
+    _ResourceInUseException,
+    _ResourceLimitExceededException,
+    _ResourceNotFoundException,
+    _ResourcePropagationDelayException,
+    _ServerException,
+    _ServiceUnavailableException,
+    _UnsupportedAvailabilityZoneException,
+
+    -- * AMITypes
+    AMITypes (..),
+
+    -- * AddonIssueCode
+    AddonIssueCode (..),
+
+    -- * AddonStatus
+    AddonStatus (..),
+
+    -- * CapacityTypes
+    CapacityTypes (..),
+
+    -- * ClusterIssueCode
+    ClusterIssueCode (..),
+
+    -- * ClusterStatus
+    ClusterStatus (..),
+
+    -- * ConfigStatus
+    ConfigStatus (..),
+
+    -- * ConnectorConfigProvider
+    ConnectorConfigProvider (..),
+
+    -- * EKSErrorCode
+    EKSErrorCode (..),
+
+    -- * FargateProfileStatus
+    FargateProfileStatus (..),
+
+    -- * IpFamily
+    IpFamily (..),
+
+    -- * LogType
+    LogType (..),
+
+    -- * NodegroupIssueCode
+    NodegroupIssueCode (..),
+
+    -- * NodegroupStatus
+    NodegroupStatus (..),
+
+    -- * ResolveConflicts
+    ResolveConflicts (..),
+
+    -- * TaintEffect
+    TaintEffect (..),
+
+    -- * UpdateParamType
+    UpdateParamType (..),
+
+    -- * UpdateStatus
+    UpdateStatus (..),
+
+    -- * UpdateType
+    UpdateType (..),
+
+    -- * Addon
+    Addon (..),
+    newAddon,
+    addon_addonArn,
+    addon_addonName,
+    addon_addonVersion,
+    addon_clusterName,
+    addon_configurationValues,
+    addon_createdAt,
+    addon_health,
+    addon_marketplaceInformation,
+    addon_modifiedAt,
+    addon_owner,
+    addon_publisher,
+    addon_serviceAccountRoleArn,
+    addon_status,
+    addon_tags,
+
+    -- * AddonHealth
+    AddonHealth (..),
+    newAddonHealth,
+    addonHealth_issues,
+
+    -- * AddonInfo
+    AddonInfo (..),
+    newAddonInfo,
+    addonInfo_addonName,
+    addonInfo_addonVersions,
+    addonInfo_marketplaceInformation,
+    addonInfo_owner,
+    addonInfo_publisher,
+    addonInfo_type,
+
+    -- * AddonIssue
+    AddonIssue (..),
+    newAddonIssue,
+    addonIssue_code,
+    addonIssue_message,
+    addonIssue_resourceIds,
+
+    -- * AddonVersionInfo
+    AddonVersionInfo (..),
+    newAddonVersionInfo,
+    addonVersionInfo_addonVersion,
+    addonVersionInfo_architecture,
+    addonVersionInfo_compatibilities,
+    addonVersionInfo_requiresConfiguration,
+
+    -- * AutoScalingGroup
+    AutoScalingGroup (..),
+    newAutoScalingGroup,
+    autoScalingGroup_name,
+
+    -- * Certificate
+    Certificate (..),
+    newCertificate,
+    certificate_data,
+
+    -- * Cluster
+    Cluster (..),
+    newCluster,
+    cluster_arn,
+    cluster_certificateAuthority,
+    cluster_clientRequestToken,
+    cluster_connectorConfig,
+    cluster_createdAt,
+    cluster_encryptionConfig,
+    cluster_endpoint,
+    cluster_health,
+    cluster_id,
+    cluster_identity,
+    cluster_kubernetesNetworkConfig,
+    cluster_logging,
+    cluster_name,
+    cluster_outpostConfig,
+    cluster_platformVersion,
+    cluster_resourcesVpcConfig,
+    cluster_roleArn,
+    cluster_status,
+    cluster_tags,
+    cluster_version,
+
+    -- * ClusterHealth
+    ClusterHealth (..),
+    newClusterHealth,
+    clusterHealth_issues,
+
+    -- * ClusterIssue
+    ClusterIssue (..),
+    newClusterIssue,
+    clusterIssue_code,
+    clusterIssue_message,
+    clusterIssue_resourceIds,
+
+    -- * Compatibility
+    Compatibility (..),
+    newCompatibility,
+    compatibility_clusterVersion,
+    compatibility_defaultVersion,
+    compatibility_platformVersions,
+
+    -- * ConnectorConfigRequest
+    ConnectorConfigRequest (..),
+    newConnectorConfigRequest,
+    connectorConfigRequest_roleArn,
+    connectorConfigRequest_provider,
+
+    -- * ConnectorConfigResponse
+    ConnectorConfigResponse (..),
+    newConnectorConfigResponse,
+    connectorConfigResponse_activationCode,
+    connectorConfigResponse_activationExpiry,
+    connectorConfigResponse_activationId,
+    connectorConfigResponse_provider,
+    connectorConfigResponse_roleArn,
+
+    -- * ControlPlanePlacementRequest
+    ControlPlanePlacementRequest (..),
+    newControlPlanePlacementRequest,
+    controlPlanePlacementRequest_groupName,
+
+    -- * ControlPlanePlacementResponse
+    ControlPlanePlacementResponse (..),
+    newControlPlanePlacementResponse,
+    controlPlanePlacementResponse_groupName,
+
+    -- * EncryptionConfig
+    EncryptionConfig (..),
+    newEncryptionConfig,
+    encryptionConfig_provider,
+    encryptionConfig_resources,
+
+    -- * ErrorDetail
+    ErrorDetail (..),
+    newErrorDetail,
+    errorDetail_errorCode,
+    errorDetail_errorMessage,
+    errorDetail_resourceIds,
+
+    -- * FargateProfile
+    FargateProfile (..),
+    newFargateProfile,
+    fargateProfile_clusterName,
+    fargateProfile_createdAt,
+    fargateProfile_fargateProfileArn,
+    fargateProfile_fargateProfileName,
+    fargateProfile_podExecutionRoleArn,
+    fargateProfile_selectors,
+    fargateProfile_status,
+    fargateProfile_subnets,
+    fargateProfile_tags,
+
+    -- * FargateProfileSelector
+    FargateProfileSelector (..),
+    newFargateProfileSelector,
+    fargateProfileSelector_labels,
+    fargateProfileSelector_namespace,
+
+    -- * Identity
+    Identity (..),
+    newIdentity,
+    identity_oidc,
+
+    -- * IdentityProviderConfig
+    IdentityProviderConfig (..),
+    newIdentityProviderConfig,
+    identityProviderConfig_type,
+    identityProviderConfig_name,
+
+    -- * IdentityProviderConfigResponse
+    IdentityProviderConfigResponse (..),
+    newIdentityProviderConfigResponse,
+    identityProviderConfigResponse_oidc,
+
+    -- * Issue
+    Issue (..),
+    newIssue,
+    issue_code,
+    issue_message,
+    issue_resourceIds,
+
+    -- * KubernetesNetworkConfigRequest
+    KubernetesNetworkConfigRequest (..),
+    newKubernetesNetworkConfigRequest,
+    kubernetesNetworkConfigRequest_ipFamily,
+    kubernetesNetworkConfigRequest_serviceIpv4Cidr,
+
+    -- * KubernetesNetworkConfigResponse
+    KubernetesNetworkConfigResponse (..),
+    newKubernetesNetworkConfigResponse,
+    kubernetesNetworkConfigResponse_ipFamily,
+    kubernetesNetworkConfigResponse_serviceIpv4Cidr,
+    kubernetesNetworkConfigResponse_serviceIpv6Cidr,
+
+    -- * LaunchTemplateSpecification
+    LaunchTemplateSpecification (..),
+    newLaunchTemplateSpecification,
+    launchTemplateSpecification_id,
+    launchTemplateSpecification_name,
+    launchTemplateSpecification_version,
+
+    -- * LogSetup
+    LogSetup (..),
+    newLogSetup,
+    logSetup_enabled,
+    logSetup_types,
+
+    -- * Logging
+    Logging (..),
+    newLogging,
+    logging_clusterLogging,
+
+    -- * MarketplaceInformation
+    MarketplaceInformation (..),
+    newMarketplaceInformation,
+    marketplaceInformation_productId,
+    marketplaceInformation_productUrl,
+
+    -- * Nodegroup
+    Nodegroup (..),
+    newNodegroup,
+    nodegroup_amiType,
+    nodegroup_capacityType,
+    nodegroup_clusterName,
+    nodegroup_createdAt,
+    nodegroup_diskSize,
+    nodegroup_health,
+    nodegroup_instanceTypes,
+    nodegroup_labels,
+    nodegroup_launchTemplate,
+    nodegroup_modifiedAt,
+    nodegroup_nodeRole,
+    nodegroup_nodegroupArn,
+    nodegroup_nodegroupName,
+    nodegroup_releaseVersion,
+    nodegroup_remoteAccess,
+    nodegroup_resources,
+    nodegroup_scalingConfig,
+    nodegroup_status,
+    nodegroup_subnets,
+    nodegroup_tags,
+    nodegroup_taints,
+    nodegroup_updateConfig,
+    nodegroup_version,
+
+    -- * NodegroupHealth
+    NodegroupHealth (..),
+    newNodegroupHealth,
+    nodegroupHealth_issues,
+
+    -- * NodegroupResources
+    NodegroupResources (..),
+    newNodegroupResources,
+    nodegroupResources_autoScalingGroups,
+    nodegroupResources_remoteAccessSecurityGroup,
+
+    -- * NodegroupScalingConfig
+    NodegroupScalingConfig (..),
+    newNodegroupScalingConfig,
+    nodegroupScalingConfig_desiredSize,
+    nodegroupScalingConfig_maxSize,
+    nodegroupScalingConfig_minSize,
+
+    -- * NodegroupUpdateConfig
+    NodegroupUpdateConfig (..),
+    newNodegroupUpdateConfig,
+    nodegroupUpdateConfig_maxUnavailable,
+    nodegroupUpdateConfig_maxUnavailablePercentage,
+
+    -- * OIDC
+    OIDC (..),
+    newOIDC,
+    oidc_issuer,
+
+    -- * OidcIdentityProviderConfig
+    OidcIdentityProviderConfig (..),
+    newOidcIdentityProviderConfig,
+    oidcIdentityProviderConfig_clientId,
+    oidcIdentityProviderConfig_clusterName,
+    oidcIdentityProviderConfig_groupsClaim,
+    oidcIdentityProviderConfig_groupsPrefix,
+    oidcIdentityProviderConfig_identityProviderConfigArn,
+    oidcIdentityProviderConfig_identityProviderConfigName,
+    oidcIdentityProviderConfig_issuerUrl,
+    oidcIdentityProviderConfig_requiredClaims,
+    oidcIdentityProviderConfig_status,
+    oidcIdentityProviderConfig_tags,
+    oidcIdentityProviderConfig_usernameClaim,
+    oidcIdentityProviderConfig_usernamePrefix,
+
+    -- * OidcIdentityProviderConfigRequest
+    OidcIdentityProviderConfigRequest (..),
+    newOidcIdentityProviderConfigRequest,
+    oidcIdentityProviderConfigRequest_groupsClaim,
+    oidcIdentityProviderConfigRequest_groupsPrefix,
+    oidcIdentityProviderConfigRequest_requiredClaims,
+    oidcIdentityProviderConfigRequest_usernameClaim,
+    oidcIdentityProviderConfigRequest_usernamePrefix,
+    oidcIdentityProviderConfigRequest_identityProviderConfigName,
+    oidcIdentityProviderConfigRequest_issuerUrl,
+    oidcIdentityProviderConfigRequest_clientId,
+
+    -- * OutpostConfigRequest
+    OutpostConfigRequest (..),
+    newOutpostConfigRequest,
+    outpostConfigRequest_controlPlanePlacement,
+    outpostConfigRequest_outpostArns,
+    outpostConfigRequest_controlPlaneInstanceType,
+
+    -- * OutpostConfigResponse
+    OutpostConfigResponse (..),
+    newOutpostConfigResponse,
+    outpostConfigResponse_controlPlanePlacement,
+    outpostConfigResponse_outpostArns,
+    outpostConfigResponse_controlPlaneInstanceType,
+
+    -- * Provider
+    Provider (..),
+    newProvider,
+    provider_keyArn,
+
+    -- * RemoteAccessConfig
+    RemoteAccessConfig (..),
+    newRemoteAccessConfig,
+    remoteAccessConfig_ec2SshKey,
+    remoteAccessConfig_sourceSecurityGroups,
+
+    -- * Taint
+    Taint (..),
+    newTaint,
+    taint_effect,
+    taint_key,
+    taint_value,
+
+    -- * Update
+    Update (..),
+    newUpdate,
+    update_createdAt,
+    update_errors,
+    update_id,
+    update_params,
+    update_status,
+    update_type,
+
+    -- * UpdateLabelsPayload
+    UpdateLabelsPayload (..),
+    newUpdateLabelsPayload,
+    updateLabelsPayload_addOrUpdateLabels,
+    updateLabelsPayload_removeLabels,
+
+    -- * UpdateParam
+    UpdateParam (..),
+    newUpdateParam,
+    updateParam_type,
+    updateParam_value,
+
+    -- * UpdateTaintsPayload
+    UpdateTaintsPayload (..),
+    newUpdateTaintsPayload,
+    updateTaintsPayload_addOrUpdateTaints,
+    updateTaintsPayload_removeTaints,
+
+    -- * VpcConfigRequest
+    VpcConfigRequest (..),
+    newVpcConfigRequest,
+    vpcConfigRequest_endpointPrivateAccess,
+    vpcConfigRequest_endpointPublicAccess,
+    vpcConfigRequest_publicAccessCidrs,
+    vpcConfigRequest_securityGroupIds,
+    vpcConfigRequest_subnetIds,
+
+    -- * VpcConfigResponse
+    VpcConfigResponse (..),
+    newVpcConfigResponse,
+    vpcConfigResponse_clusterSecurityGroupId,
+    vpcConfigResponse_endpointPrivateAccess,
+    vpcConfigResponse_endpointPublicAccess,
+    vpcConfigResponse_publicAccessCidrs,
+    vpcConfigResponse_securityGroupIds,
+    vpcConfigResponse_subnetIds,
+    vpcConfigResponse_vpcId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.EKS.Types.AMITypes
+import Amazonka.EKS.Types.Addon
+import Amazonka.EKS.Types.AddonHealth
+import Amazonka.EKS.Types.AddonInfo
+import Amazonka.EKS.Types.AddonIssue
+import Amazonka.EKS.Types.AddonIssueCode
+import Amazonka.EKS.Types.AddonStatus
+import Amazonka.EKS.Types.AddonVersionInfo
+import Amazonka.EKS.Types.AutoScalingGroup
+import Amazonka.EKS.Types.CapacityTypes
+import Amazonka.EKS.Types.Certificate
+import Amazonka.EKS.Types.Cluster
+import Amazonka.EKS.Types.ClusterHealth
+import Amazonka.EKS.Types.ClusterIssue
+import Amazonka.EKS.Types.ClusterIssueCode
+import Amazonka.EKS.Types.ClusterStatus
+import Amazonka.EKS.Types.Compatibility
+import Amazonka.EKS.Types.ConfigStatus
+import Amazonka.EKS.Types.ConnectorConfigProvider
+import Amazonka.EKS.Types.ConnectorConfigRequest
+import Amazonka.EKS.Types.ConnectorConfigResponse
+import Amazonka.EKS.Types.ControlPlanePlacementRequest
+import Amazonka.EKS.Types.ControlPlanePlacementResponse
+import Amazonka.EKS.Types.EKSErrorCode
+import Amazonka.EKS.Types.EncryptionConfig
+import Amazonka.EKS.Types.ErrorDetail
+import Amazonka.EKS.Types.FargateProfile
+import Amazonka.EKS.Types.FargateProfileSelector
+import Amazonka.EKS.Types.FargateProfileStatus
+import Amazonka.EKS.Types.Identity
+import Amazonka.EKS.Types.IdentityProviderConfig
+import Amazonka.EKS.Types.IdentityProviderConfigResponse
+import Amazonka.EKS.Types.IpFamily
+import Amazonka.EKS.Types.Issue
+import Amazonka.EKS.Types.KubernetesNetworkConfigRequest
+import Amazonka.EKS.Types.KubernetesNetworkConfigResponse
+import Amazonka.EKS.Types.LaunchTemplateSpecification
+import Amazonka.EKS.Types.LogSetup
+import Amazonka.EKS.Types.LogType
+import Amazonka.EKS.Types.Logging
+import Amazonka.EKS.Types.MarketplaceInformation
+import Amazonka.EKS.Types.Nodegroup
+import Amazonka.EKS.Types.NodegroupHealth
+import Amazonka.EKS.Types.NodegroupIssueCode
+import Amazonka.EKS.Types.NodegroupResources
+import Amazonka.EKS.Types.NodegroupScalingConfig
+import Amazonka.EKS.Types.NodegroupStatus
+import Amazonka.EKS.Types.NodegroupUpdateConfig
+import Amazonka.EKS.Types.OIDC
+import Amazonka.EKS.Types.OidcIdentityProviderConfig
+import Amazonka.EKS.Types.OidcIdentityProviderConfigRequest
+import Amazonka.EKS.Types.OutpostConfigRequest
+import Amazonka.EKS.Types.OutpostConfigResponse
+import Amazonka.EKS.Types.Provider
+import Amazonka.EKS.Types.RemoteAccessConfig
+import Amazonka.EKS.Types.ResolveConflicts
+import Amazonka.EKS.Types.Taint
+import Amazonka.EKS.Types.TaintEffect
+import Amazonka.EKS.Types.Update
+import Amazonka.EKS.Types.UpdateLabelsPayload
+import Amazonka.EKS.Types.UpdateParam
+import Amazonka.EKS.Types.UpdateParamType
+import Amazonka.EKS.Types.UpdateStatus
+import Amazonka.EKS.Types.UpdateTaintsPayload
+import Amazonka.EKS.Types.UpdateType
+import Amazonka.EKS.Types.VpcConfigRequest
+import Amazonka.EKS.Types.VpcConfigResponse
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2017-11-01@ of the Amazon Elastic Kubernetes Service SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "EKS",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "eks",
+      Core.signingName = "eks",
+      Core.version = "2017-11-01",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "EKS",
+      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
+
+-- | You don\'t have permissions to perform the requested operation. The user
+-- or role that is making the request must have at least one IAM
+-- permissions policy attached that grants the required permissions. For
+-- more information, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html Access Management>
+-- in the /IAM User Guide/.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | This exception is thrown if the request contains a semantic error. The
+-- precise meaning will depend on the API, and will be documented in the
+-- error message.
+_BadRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_BadRequestException =
+  Core._MatchServiceError
+    defaultService
+    "BadRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | These errors are usually caused by a client action. Actions can include
+-- using an action or resource on behalf of a user that doesn\'t have
+-- permissions to use the action or resource or specifying an identifier
+-- that is not valid.
+_ClientException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ClientException =
+  Core._MatchServiceError
+    defaultService
+    "ClientException"
+    Prelude.. Core.hasStatus 400
+
+-- | The specified parameter is invalid. Review the available parameters for
+-- the API request.
+_InvalidParameterException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidParameterException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidParameterException"
+    Prelude.. Core.hasStatus 400
+
+-- | The request is invalid given the state of the cluster. Check the state
+-- of the cluster and the associated operations.
+_InvalidRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidRequestException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | A service resource associated with the request could not be found.
+-- Clients should not retry such requests.
+_NotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "NotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The specified resource is in use.
+_ResourceInUseException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceInUseException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceInUseException"
+    Prelude.. Core.hasStatus 409
+
+-- | You have encountered a service limit on the specified resource.
+_ResourceLimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceLimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceLimitExceededException"
+    Prelude.. Core.hasStatus 400
+
+-- | The specified resource could not be found. You can view your available
+-- clusters with ListClusters. You can view your available managed node
+-- groups with ListNodegroups. Amazon EKS clusters and node groups are
+-- Region-specific.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | Required resources (such as service-linked roles) were created and are
+-- still propagating. Retry later.
+_ResourcePropagationDelayException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourcePropagationDelayException =
+  Core._MatchServiceError
+    defaultService
+    "ResourcePropagationDelayException"
+    Prelude.. Core.hasStatus 428
+
+-- | These errors are usually caused by a server-side issue.
+_ServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServerException =
+  Core._MatchServiceError
+    defaultService
+    "ServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | The service is unavailable. Back off and retry the operation.
+_ServiceUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceUnavailableException"
+    Prelude.. Core.hasStatus 503
+
+-- | At least one of your specified cluster subnets is in an Availability
+-- Zone that does not support Amazon EKS. The exception output specifies
+-- the supported Availability Zones for your account, from which you can
+-- choose subnets for your cluster.
+_UnsupportedAvailabilityZoneException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnsupportedAvailabilityZoneException =
+  Core._MatchServiceError
+    defaultService
+    "UnsupportedAvailabilityZoneException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/EKS/Types/AMITypes.hs b/gen/Amazonka/EKS/Types/AMITypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/AMITypes.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.AMITypes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.AMITypes
+  ( AMITypes
+      ( ..,
+        AMITypes_AL2_ARM_64,
+        AMITypes_AL2_x86_64,
+        AMITypes_AL2_x86_64_GPU,
+        AMITypes_BOTTLEROCKET_ARM_64,
+        AMITypes_BOTTLEROCKET_ARM_64_NVIDIA,
+        AMITypes_BOTTLEROCKET_x86_64,
+        AMITypes_BOTTLEROCKET_x86_64_NVIDIA,
+        AMITypes_CUSTOM,
+        AMITypes_WINDOWS_CORE_2019_x86_64,
+        AMITypes_WINDOWS_CORE_2022_x86_64,
+        AMITypes_WINDOWS_FULL_2019_x86_64,
+        AMITypes_WINDOWS_FULL_2022_x86_64
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AMITypes = AMITypes'
+  { fromAMITypes ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AMITypes_AL2_ARM_64 :: AMITypes
+pattern AMITypes_AL2_ARM_64 = AMITypes' "AL2_ARM_64"
+
+pattern AMITypes_AL2_x86_64 :: AMITypes
+pattern AMITypes_AL2_x86_64 = AMITypes' "AL2_x86_64"
+
+pattern AMITypes_AL2_x86_64_GPU :: AMITypes
+pattern AMITypes_AL2_x86_64_GPU = AMITypes' "AL2_x86_64_GPU"
+
+pattern AMITypes_BOTTLEROCKET_ARM_64 :: AMITypes
+pattern AMITypes_BOTTLEROCKET_ARM_64 = AMITypes' "BOTTLEROCKET_ARM_64"
+
+pattern AMITypes_BOTTLEROCKET_ARM_64_NVIDIA :: AMITypes
+pattern AMITypes_BOTTLEROCKET_ARM_64_NVIDIA = AMITypes' "BOTTLEROCKET_ARM_64_NVIDIA"
+
+pattern AMITypes_BOTTLEROCKET_x86_64 :: AMITypes
+pattern AMITypes_BOTTLEROCKET_x86_64 = AMITypes' "BOTTLEROCKET_x86_64"
+
+pattern AMITypes_BOTTLEROCKET_x86_64_NVIDIA :: AMITypes
+pattern AMITypes_BOTTLEROCKET_x86_64_NVIDIA = AMITypes' "BOTTLEROCKET_x86_64_NVIDIA"
+
+pattern AMITypes_CUSTOM :: AMITypes
+pattern AMITypes_CUSTOM = AMITypes' "CUSTOM"
+
+pattern AMITypes_WINDOWS_CORE_2019_x86_64 :: AMITypes
+pattern AMITypes_WINDOWS_CORE_2019_x86_64 = AMITypes' "WINDOWS_CORE_2019_x86_64"
+
+pattern AMITypes_WINDOWS_CORE_2022_x86_64 :: AMITypes
+pattern AMITypes_WINDOWS_CORE_2022_x86_64 = AMITypes' "WINDOWS_CORE_2022_x86_64"
+
+pattern AMITypes_WINDOWS_FULL_2019_x86_64 :: AMITypes
+pattern AMITypes_WINDOWS_FULL_2019_x86_64 = AMITypes' "WINDOWS_FULL_2019_x86_64"
+
+pattern AMITypes_WINDOWS_FULL_2022_x86_64 :: AMITypes
+pattern AMITypes_WINDOWS_FULL_2022_x86_64 = AMITypes' "WINDOWS_FULL_2022_x86_64"
+
+{-# COMPLETE
+  AMITypes_AL2_ARM_64,
+  AMITypes_AL2_x86_64,
+  AMITypes_AL2_x86_64_GPU,
+  AMITypes_BOTTLEROCKET_ARM_64,
+  AMITypes_BOTTLEROCKET_ARM_64_NVIDIA,
+  AMITypes_BOTTLEROCKET_x86_64,
+  AMITypes_BOTTLEROCKET_x86_64_NVIDIA,
+  AMITypes_CUSTOM,
+  AMITypes_WINDOWS_CORE_2019_x86_64,
+  AMITypes_WINDOWS_CORE_2022_x86_64,
+  AMITypes_WINDOWS_FULL_2019_x86_64,
+  AMITypes_WINDOWS_FULL_2022_x86_64,
+  AMITypes'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/Addon.hs b/gen/Amazonka/EKS/Types/Addon.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/Addon.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.Addon
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.Addon where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.AddonHealth
+import Amazonka.EKS.Types.AddonStatus
+import Amazonka.EKS.Types.MarketplaceInformation
+import qualified Amazonka.Prelude as Prelude
+
+-- | An Amazon EKS add-on. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-add-ons.html Amazon EKS add-ons>
+-- in the /Amazon EKS User Guide/.
+--
+-- /See:/ 'newAddon' smart constructor.
+data Addon = Addon'
+  { -- | The Amazon Resource Name (ARN) of the add-on.
+    addonArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the add-on.
+    addonName :: Prelude.Maybe Prelude.Text,
+    -- | The version of the add-on.
+    addonVersion :: Prelude.Maybe Prelude.Text,
+    -- | The name of the cluster.
+    clusterName :: Prelude.Maybe Prelude.Text,
+    -- | The configuration values that you provided.
+    configurationValues :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the add-on was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | An object that represents the health of the add-on.
+    health :: Prelude.Maybe AddonHealth,
+    -- | Information about an Amazon EKS add-on from the Amazon Web Services
+    -- Marketplace.
+    marketplaceInformation :: Prelude.Maybe MarketplaceInformation,
+    -- | The date and time that the add-on was last modified.
+    modifiedAt :: Prelude.Maybe Data.POSIX,
+    -- | The owner of the add-on.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The publisher of the add-on.
+    publisher :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the IAM role that\'s bound to the
+    -- Kubernetes service account that the add-on uses.
+    serviceAccountRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the add-on.
+    status :: Prelude.Maybe AddonStatus,
+    -- | The metadata that you apply to the add-on to assist with categorization
+    -- and organization. Each tag consists of a key and an optional value. You
+    -- define both. Add-on tags do not propagate to any other resources
+    -- associated with the cluster.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Addon' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addonArn', 'addon_addonArn' - The Amazon Resource Name (ARN) of the add-on.
+--
+-- 'addonName', 'addon_addonName' - The name of the add-on.
+--
+-- 'addonVersion', 'addon_addonVersion' - The version of the add-on.
+--
+-- 'clusterName', 'addon_clusterName' - The name of the cluster.
+--
+-- 'configurationValues', 'addon_configurationValues' - The configuration values that you provided.
+--
+-- 'createdAt', 'addon_createdAt' - The date and time that the add-on was created.
+--
+-- 'health', 'addon_health' - An object that represents the health of the add-on.
+--
+-- 'marketplaceInformation', 'addon_marketplaceInformation' - Information about an Amazon EKS add-on from the Amazon Web Services
+-- Marketplace.
+--
+-- 'modifiedAt', 'addon_modifiedAt' - The date and time that the add-on was last modified.
+--
+-- 'owner', 'addon_owner' - The owner of the add-on.
+--
+-- 'publisher', 'addon_publisher' - The publisher of the add-on.
+--
+-- 'serviceAccountRoleArn', 'addon_serviceAccountRoleArn' - The Amazon Resource Name (ARN) of the IAM role that\'s bound to the
+-- Kubernetes service account that the add-on uses.
+--
+-- 'status', 'addon_status' - The status of the add-on.
+--
+-- 'tags', 'addon_tags' - The metadata that you apply to the add-on to assist with categorization
+-- and organization. Each tag consists of a key and an optional value. You
+-- define both. Add-on tags do not propagate to any other resources
+-- associated with the cluster.
+newAddon ::
+  Addon
+newAddon =
+  Addon'
+    { addonArn = Prelude.Nothing,
+      addonName = Prelude.Nothing,
+      addonVersion = Prelude.Nothing,
+      clusterName = Prelude.Nothing,
+      configurationValues = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      health = Prelude.Nothing,
+      marketplaceInformation = Prelude.Nothing,
+      modifiedAt = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      publisher = Prelude.Nothing,
+      serviceAccountRoleArn = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the add-on.
+addon_addonArn :: Lens.Lens' Addon (Prelude.Maybe Prelude.Text)
+addon_addonArn = Lens.lens (\Addon' {addonArn} -> addonArn) (\s@Addon' {} a -> s {addonArn = a} :: Addon)
+
+-- | The name of the add-on.
+addon_addonName :: Lens.Lens' Addon (Prelude.Maybe Prelude.Text)
+addon_addonName = Lens.lens (\Addon' {addonName} -> addonName) (\s@Addon' {} a -> s {addonName = a} :: Addon)
+
+-- | The version of the add-on.
+addon_addonVersion :: Lens.Lens' Addon (Prelude.Maybe Prelude.Text)
+addon_addonVersion = Lens.lens (\Addon' {addonVersion} -> addonVersion) (\s@Addon' {} a -> s {addonVersion = a} :: Addon)
+
+-- | The name of the cluster.
+addon_clusterName :: Lens.Lens' Addon (Prelude.Maybe Prelude.Text)
+addon_clusterName = Lens.lens (\Addon' {clusterName} -> clusterName) (\s@Addon' {} a -> s {clusterName = a} :: Addon)
+
+-- | The configuration values that you provided.
+addon_configurationValues :: Lens.Lens' Addon (Prelude.Maybe Prelude.Text)
+addon_configurationValues = Lens.lens (\Addon' {configurationValues} -> configurationValues) (\s@Addon' {} a -> s {configurationValues = a} :: Addon)
+
+-- | The date and time that the add-on was created.
+addon_createdAt :: Lens.Lens' Addon (Prelude.Maybe Prelude.UTCTime)
+addon_createdAt = Lens.lens (\Addon' {createdAt} -> createdAt) (\s@Addon' {} a -> s {createdAt = a} :: Addon) Prelude.. Lens.mapping Data._Time
+
+-- | An object that represents the health of the add-on.
+addon_health :: Lens.Lens' Addon (Prelude.Maybe AddonHealth)
+addon_health = Lens.lens (\Addon' {health} -> health) (\s@Addon' {} a -> s {health = a} :: Addon)
+
+-- | Information about an Amazon EKS add-on from the Amazon Web Services
+-- Marketplace.
+addon_marketplaceInformation :: Lens.Lens' Addon (Prelude.Maybe MarketplaceInformation)
+addon_marketplaceInformation = Lens.lens (\Addon' {marketplaceInformation} -> marketplaceInformation) (\s@Addon' {} a -> s {marketplaceInformation = a} :: Addon)
+
+-- | The date and time that the add-on was last modified.
+addon_modifiedAt :: Lens.Lens' Addon (Prelude.Maybe Prelude.UTCTime)
+addon_modifiedAt = Lens.lens (\Addon' {modifiedAt} -> modifiedAt) (\s@Addon' {} a -> s {modifiedAt = a} :: Addon) Prelude.. Lens.mapping Data._Time
+
+-- | The owner of the add-on.
+addon_owner :: Lens.Lens' Addon (Prelude.Maybe Prelude.Text)
+addon_owner = Lens.lens (\Addon' {owner} -> owner) (\s@Addon' {} a -> s {owner = a} :: Addon)
+
+-- | The publisher of the add-on.
+addon_publisher :: Lens.Lens' Addon (Prelude.Maybe Prelude.Text)
+addon_publisher = Lens.lens (\Addon' {publisher} -> publisher) (\s@Addon' {} a -> s {publisher = a} :: Addon)
+
+-- | The Amazon Resource Name (ARN) of the IAM role that\'s bound to the
+-- Kubernetes service account that the add-on uses.
+addon_serviceAccountRoleArn :: Lens.Lens' Addon (Prelude.Maybe Prelude.Text)
+addon_serviceAccountRoleArn = Lens.lens (\Addon' {serviceAccountRoleArn} -> serviceAccountRoleArn) (\s@Addon' {} a -> s {serviceAccountRoleArn = a} :: Addon)
+
+-- | The status of the add-on.
+addon_status :: Lens.Lens' Addon (Prelude.Maybe AddonStatus)
+addon_status = Lens.lens (\Addon' {status} -> status) (\s@Addon' {} a -> s {status = a} :: Addon)
+
+-- | The metadata that you apply to the add-on to assist with categorization
+-- and organization. Each tag consists of a key and an optional value. You
+-- define both. Add-on tags do not propagate to any other resources
+-- associated with the cluster.
+addon_tags :: Lens.Lens' Addon (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+addon_tags = Lens.lens (\Addon' {tags} -> tags) (\s@Addon' {} a -> s {tags = a} :: Addon) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Addon where
+  parseJSON =
+    Data.withObject
+      "Addon"
+      ( \x ->
+          Addon'
+            Prelude.<$> (x Data..:? "addonArn")
+            Prelude.<*> (x Data..:? "addonName")
+            Prelude.<*> (x Data..:? "addonVersion")
+            Prelude.<*> (x Data..:? "clusterName")
+            Prelude.<*> (x Data..:? "configurationValues")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "health")
+            Prelude.<*> (x Data..:? "marketplaceInformation")
+            Prelude.<*> (x Data..:? "modifiedAt")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "publisher")
+            Prelude.<*> (x Data..:? "serviceAccountRoleArn")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable Addon where
+  hashWithSalt _salt Addon' {..} =
+    _salt
+      `Prelude.hashWithSalt` addonArn
+      `Prelude.hashWithSalt` addonName
+      `Prelude.hashWithSalt` addonVersion
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` configurationValues
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` health
+      `Prelude.hashWithSalt` marketplaceInformation
+      `Prelude.hashWithSalt` modifiedAt
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` publisher
+      `Prelude.hashWithSalt` serviceAccountRoleArn
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData Addon where
+  rnf Addon' {..} =
+    Prelude.rnf addonArn
+      `Prelude.seq` Prelude.rnf addonName
+      `Prelude.seq` Prelude.rnf addonVersion
+      `Prelude.seq` Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf configurationValues
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf health
+      `Prelude.seq` Prelude.rnf marketplaceInformation
+      `Prelude.seq` Prelude.rnf modifiedAt
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf publisher
+      `Prelude.seq` Prelude.rnf serviceAccountRoleArn
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EKS/Types/AddonHealth.hs b/gen/Amazonka/EKS/Types/AddonHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/AddonHealth.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.AddonHealth
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.AddonHealth where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.AddonIssue
+import qualified Amazonka.Prelude as Prelude
+
+-- | The health of the add-on.
+--
+-- /See:/ 'newAddonHealth' smart constructor.
+data AddonHealth = AddonHealth'
+  { -- | An object representing the health issues for an add-on.
+    issues :: Prelude.Maybe [AddonIssue]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddonHealth' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'issues', 'addonHealth_issues' - An object representing the health issues for an add-on.
+newAddonHealth ::
+  AddonHealth
+newAddonHealth =
+  AddonHealth' {issues = Prelude.Nothing}
+
+-- | An object representing the health issues for an add-on.
+addonHealth_issues :: Lens.Lens' AddonHealth (Prelude.Maybe [AddonIssue])
+addonHealth_issues = Lens.lens (\AddonHealth' {issues} -> issues) (\s@AddonHealth' {} a -> s {issues = a} :: AddonHealth) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON AddonHealth where
+  parseJSON =
+    Data.withObject
+      "AddonHealth"
+      ( \x ->
+          AddonHealth'
+            Prelude.<$> (x Data..:? "issues" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable AddonHealth where
+  hashWithSalt _salt AddonHealth' {..} =
+    _salt `Prelude.hashWithSalt` issues
+
+instance Prelude.NFData AddonHealth where
+  rnf AddonHealth' {..} = Prelude.rnf issues
diff --git a/gen/Amazonka/EKS/Types/AddonInfo.hs b/gen/Amazonka/EKS/Types/AddonInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/AddonInfo.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.AddonInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.AddonInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.AddonVersionInfo
+import Amazonka.EKS.Types.MarketplaceInformation
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an add-on.
+--
+-- /See:/ 'newAddonInfo' smart constructor.
+data AddonInfo = AddonInfo'
+  { -- | The name of the add-on.
+    addonName :: Prelude.Maybe Prelude.Text,
+    -- | An object representing information about available add-on versions and
+    -- compatible Kubernetes versions.
+    addonVersions :: Prelude.Maybe [AddonVersionInfo],
+    -- | Information about the add-on from the Amazon Web Services Marketplace.
+    marketplaceInformation :: Prelude.Maybe MarketplaceInformation,
+    -- | The owner of the add-on.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The publisher of the add-on.
+    publisher :: Prelude.Maybe Prelude.Text,
+    -- | The type of the add-on.
+    type' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddonInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addonName', 'addonInfo_addonName' - The name of the add-on.
+--
+-- 'addonVersions', 'addonInfo_addonVersions' - An object representing information about available add-on versions and
+-- compatible Kubernetes versions.
+--
+-- 'marketplaceInformation', 'addonInfo_marketplaceInformation' - Information about the add-on from the Amazon Web Services Marketplace.
+--
+-- 'owner', 'addonInfo_owner' - The owner of the add-on.
+--
+-- 'publisher', 'addonInfo_publisher' - The publisher of the add-on.
+--
+-- 'type'', 'addonInfo_type' - The type of the add-on.
+newAddonInfo ::
+  AddonInfo
+newAddonInfo =
+  AddonInfo'
+    { addonName = Prelude.Nothing,
+      addonVersions = Prelude.Nothing,
+      marketplaceInformation = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      publisher = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The name of the add-on.
+addonInfo_addonName :: Lens.Lens' AddonInfo (Prelude.Maybe Prelude.Text)
+addonInfo_addonName = Lens.lens (\AddonInfo' {addonName} -> addonName) (\s@AddonInfo' {} a -> s {addonName = a} :: AddonInfo)
+
+-- | An object representing information about available add-on versions and
+-- compatible Kubernetes versions.
+addonInfo_addonVersions :: Lens.Lens' AddonInfo (Prelude.Maybe [AddonVersionInfo])
+addonInfo_addonVersions = Lens.lens (\AddonInfo' {addonVersions} -> addonVersions) (\s@AddonInfo' {} a -> s {addonVersions = a} :: AddonInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the add-on from the Amazon Web Services Marketplace.
+addonInfo_marketplaceInformation :: Lens.Lens' AddonInfo (Prelude.Maybe MarketplaceInformation)
+addonInfo_marketplaceInformation = Lens.lens (\AddonInfo' {marketplaceInformation} -> marketplaceInformation) (\s@AddonInfo' {} a -> s {marketplaceInformation = a} :: AddonInfo)
+
+-- | The owner of the add-on.
+addonInfo_owner :: Lens.Lens' AddonInfo (Prelude.Maybe Prelude.Text)
+addonInfo_owner = Lens.lens (\AddonInfo' {owner} -> owner) (\s@AddonInfo' {} a -> s {owner = a} :: AddonInfo)
+
+-- | The publisher of the add-on.
+addonInfo_publisher :: Lens.Lens' AddonInfo (Prelude.Maybe Prelude.Text)
+addonInfo_publisher = Lens.lens (\AddonInfo' {publisher} -> publisher) (\s@AddonInfo' {} a -> s {publisher = a} :: AddonInfo)
+
+-- | The type of the add-on.
+addonInfo_type :: Lens.Lens' AddonInfo (Prelude.Maybe Prelude.Text)
+addonInfo_type = Lens.lens (\AddonInfo' {type'} -> type') (\s@AddonInfo' {} a -> s {type' = a} :: AddonInfo)
+
+instance Data.FromJSON AddonInfo where
+  parseJSON =
+    Data.withObject
+      "AddonInfo"
+      ( \x ->
+          AddonInfo'
+            Prelude.<$> (x Data..:? "addonName")
+            Prelude.<*> (x Data..:? "addonVersions" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "marketplaceInformation")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "publisher")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable AddonInfo where
+  hashWithSalt _salt AddonInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` addonName
+      `Prelude.hashWithSalt` addonVersions
+      `Prelude.hashWithSalt` marketplaceInformation
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` publisher
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData AddonInfo where
+  rnf AddonInfo' {..} =
+    Prelude.rnf addonName
+      `Prelude.seq` Prelude.rnf addonVersions
+      `Prelude.seq` Prelude.rnf marketplaceInformation
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf publisher
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/EKS/Types/AddonIssue.hs b/gen/Amazonka/EKS/Types/AddonIssue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/AddonIssue.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.EKS.Types.AddonIssue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.AddonIssue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.AddonIssueCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | An issue related to an add-on.
+--
+-- /See:/ 'newAddonIssue' smart constructor.
+data AddonIssue = AddonIssue'
+  { -- | A code that describes the type of issue.
+    code :: Prelude.Maybe AddonIssueCode,
+    -- | A message that provides details about the issue and what might cause it.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The resource IDs of the issue.
+    resourceIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddonIssue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'addonIssue_code' - A code that describes the type of issue.
+--
+-- 'message', 'addonIssue_message' - A message that provides details about the issue and what might cause it.
+--
+-- 'resourceIds', 'addonIssue_resourceIds' - The resource IDs of the issue.
+newAddonIssue ::
+  AddonIssue
+newAddonIssue =
+  AddonIssue'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing,
+      resourceIds = Prelude.Nothing
+    }
+
+-- | A code that describes the type of issue.
+addonIssue_code :: Lens.Lens' AddonIssue (Prelude.Maybe AddonIssueCode)
+addonIssue_code = Lens.lens (\AddonIssue' {code} -> code) (\s@AddonIssue' {} a -> s {code = a} :: AddonIssue)
+
+-- | A message that provides details about the issue and what might cause it.
+addonIssue_message :: Lens.Lens' AddonIssue (Prelude.Maybe Prelude.Text)
+addonIssue_message = Lens.lens (\AddonIssue' {message} -> message) (\s@AddonIssue' {} a -> s {message = a} :: AddonIssue)
+
+-- | The resource IDs of the issue.
+addonIssue_resourceIds :: Lens.Lens' AddonIssue (Prelude.Maybe [Prelude.Text])
+addonIssue_resourceIds = Lens.lens (\AddonIssue' {resourceIds} -> resourceIds) (\s@AddonIssue' {} a -> s {resourceIds = a} :: AddonIssue) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON AddonIssue where
+  parseJSON =
+    Data.withObject
+      "AddonIssue"
+      ( \x ->
+          AddonIssue'
+            Prelude.<$> (x Data..:? "code")
+            Prelude.<*> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "resourceIds" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable AddonIssue where
+  hashWithSalt _salt AddonIssue' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` resourceIds
+
+instance Prelude.NFData AddonIssue where
+  rnf AddonIssue' {..} =
+    Prelude.rnf code
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf resourceIds
diff --git a/gen/Amazonka/EKS/Types/AddonIssueCode.hs b/gen/Amazonka/EKS/Types/AddonIssueCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/AddonIssueCode.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.AddonIssueCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.AddonIssueCode
+  ( AddonIssueCode
+      ( ..,
+        AddonIssueCode_AccessDenied,
+        AddonIssueCode_AdmissionRequestDenied,
+        AddonIssueCode_ClusterUnreachable,
+        AddonIssueCode_ConfigurationConflict,
+        AddonIssueCode_InsufficientNumberOfReplicas,
+        AddonIssueCode_InternalFailure,
+        AddonIssueCode_K8sResourceNotFound,
+        AddonIssueCode_UnsupportedAddonModification
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AddonIssueCode = AddonIssueCode'
+  { fromAddonIssueCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AddonIssueCode_AccessDenied :: AddonIssueCode
+pattern AddonIssueCode_AccessDenied = AddonIssueCode' "AccessDenied"
+
+pattern AddonIssueCode_AdmissionRequestDenied :: AddonIssueCode
+pattern AddonIssueCode_AdmissionRequestDenied = AddonIssueCode' "AdmissionRequestDenied"
+
+pattern AddonIssueCode_ClusterUnreachable :: AddonIssueCode
+pattern AddonIssueCode_ClusterUnreachable = AddonIssueCode' "ClusterUnreachable"
+
+pattern AddonIssueCode_ConfigurationConflict :: AddonIssueCode
+pattern AddonIssueCode_ConfigurationConflict = AddonIssueCode' "ConfigurationConflict"
+
+pattern AddonIssueCode_InsufficientNumberOfReplicas :: AddonIssueCode
+pattern AddonIssueCode_InsufficientNumberOfReplicas = AddonIssueCode' "InsufficientNumberOfReplicas"
+
+pattern AddonIssueCode_InternalFailure :: AddonIssueCode
+pattern AddonIssueCode_InternalFailure = AddonIssueCode' "InternalFailure"
+
+pattern AddonIssueCode_K8sResourceNotFound :: AddonIssueCode
+pattern AddonIssueCode_K8sResourceNotFound = AddonIssueCode' "K8sResourceNotFound"
+
+pattern AddonIssueCode_UnsupportedAddonModification :: AddonIssueCode
+pattern AddonIssueCode_UnsupportedAddonModification = AddonIssueCode' "UnsupportedAddonModification"
+
+{-# COMPLETE
+  AddonIssueCode_AccessDenied,
+  AddonIssueCode_AdmissionRequestDenied,
+  AddonIssueCode_ClusterUnreachable,
+  AddonIssueCode_ConfigurationConflict,
+  AddonIssueCode_InsufficientNumberOfReplicas,
+  AddonIssueCode_InternalFailure,
+  AddonIssueCode_K8sResourceNotFound,
+  AddonIssueCode_UnsupportedAddonModification,
+  AddonIssueCode'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/AddonStatus.hs b/gen/Amazonka/EKS/Types/AddonStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/AddonStatus.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.AddonStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.AddonStatus
+  ( AddonStatus
+      ( ..,
+        AddonStatus_ACTIVE,
+        AddonStatus_CREATE_FAILED,
+        AddonStatus_CREATING,
+        AddonStatus_DEGRADED,
+        AddonStatus_DELETE_FAILED,
+        AddonStatus_DELETING,
+        AddonStatus_UPDATE_FAILED,
+        AddonStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AddonStatus = AddonStatus'
+  { fromAddonStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AddonStatus_ACTIVE :: AddonStatus
+pattern AddonStatus_ACTIVE = AddonStatus' "ACTIVE"
+
+pattern AddonStatus_CREATE_FAILED :: AddonStatus
+pattern AddonStatus_CREATE_FAILED = AddonStatus' "CREATE_FAILED"
+
+pattern AddonStatus_CREATING :: AddonStatus
+pattern AddonStatus_CREATING = AddonStatus' "CREATING"
+
+pattern AddonStatus_DEGRADED :: AddonStatus
+pattern AddonStatus_DEGRADED = AddonStatus' "DEGRADED"
+
+pattern AddonStatus_DELETE_FAILED :: AddonStatus
+pattern AddonStatus_DELETE_FAILED = AddonStatus' "DELETE_FAILED"
+
+pattern AddonStatus_DELETING :: AddonStatus
+pattern AddonStatus_DELETING = AddonStatus' "DELETING"
+
+pattern AddonStatus_UPDATE_FAILED :: AddonStatus
+pattern AddonStatus_UPDATE_FAILED = AddonStatus' "UPDATE_FAILED"
+
+pattern AddonStatus_UPDATING :: AddonStatus
+pattern AddonStatus_UPDATING = AddonStatus' "UPDATING"
+
+{-# COMPLETE
+  AddonStatus_ACTIVE,
+  AddonStatus_CREATE_FAILED,
+  AddonStatus_CREATING,
+  AddonStatus_DEGRADED,
+  AddonStatus_DELETE_FAILED,
+  AddonStatus_DELETING,
+  AddonStatus_UPDATE_FAILED,
+  AddonStatus_UPDATING,
+  AddonStatus'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/AddonVersionInfo.hs b/gen/Amazonka/EKS/Types/AddonVersionInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/AddonVersionInfo.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.AddonVersionInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.AddonVersionInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.Compatibility
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an add-on version.
+--
+-- /See:/ 'newAddonVersionInfo' smart constructor.
+data AddonVersionInfo = AddonVersionInfo'
+  { -- | The version of the add-on.
+    addonVersion :: Prelude.Maybe Prelude.Text,
+    -- | The architectures that the version supports.
+    architecture :: Prelude.Maybe [Prelude.Text],
+    -- | An object representing the compatibilities of a version.
+    compatibilities :: Prelude.Maybe [Compatibility],
+    -- | Whether the add-on requires configuration.
+    requiresConfiguration :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddonVersionInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addonVersion', 'addonVersionInfo_addonVersion' - The version of the add-on.
+--
+-- 'architecture', 'addonVersionInfo_architecture' - The architectures that the version supports.
+--
+-- 'compatibilities', 'addonVersionInfo_compatibilities' - An object representing the compatibilities of a version.
+--
+-- 'requiresConfiguration', 'addonVersionInfo_requiresConfiguration' - Whether the add-on requires configuration.
+newAddonVersionInfo ::
+  AddonVersionInfo
+newAddonVersionInfo =
+  AddonVersionInfo'
+    { addonVersion = Prelude.Nothing,
+      architecture = Prelude.Nothing,
+      compatibilities = Prelude.Nothing,
+      requiresConfiguration = Prelude.Nothing
+    }
+
+-- | The version of the add-on.
+addonVersionInfo_addonVersion :: Lens.Lens' AddonVersionInfo (Prelude.Maybe Prelude.Text)
+addonVersionInfo_addonVersion = Lens.lens (\AddonVersionInfo' {addonVersion} -> addonVersion) (\s@AddonVersionInfo' {} a -> s {addonVersion = a} :: AddonVersionInfo)
+
+-- | The architectures that the version supports.
+addonVersionInfo_architecture :: Lens.Lens' AddonVersionInfo (Prelude.Maybe [Prelude.Text])
+addonVersionInfo_architecture = Lens.lens (\AddonVersionInfo' {architecture} -> architecture) (\s@AddonVersionInfo' {} a -> s {architecture = a} :: AddonVersionInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | An object representing the compatibilities of a version.
+addonVersionInfo_compatibilities :: Lens.Lens' AddonVersionInfo (Prelude.Maybe [Compatibility])
+addonVersionInfo_compatibilities = Lens.lens (\AddonVersionInfo' {compatibilities} -> compatibilities) (\s@AddonVersionInfo' {} a -> s {compatibilities = a} :: AddonVersionInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | Whether the add-on requires configuration.
+addonVersionInfo_requiresConfiguration :: Lens.Lens' AddonVersionInfo (Prelude.Maybe Prelude.Bool)
+addonVersionInfo_requiresConfiguration = Lens.lens (\AddonVersionInfo' {requiresConfiguration} -> requiresConfiguration) (\s@AddonVersionInfo' {} a -> s {requiresConfiguration = a} :: AddonVersionInfo)
+
+instance Data.FromJSON AddonVersionInfo where
+  parseJSON =
+    Data.withObject
+      "AddonVersionInfo"
+      ( \x ->
+          AddonVersionInfo'
+            Prelude.<$> (x Data..:? "addonVersion")
+            Prelude.<*> (x Data..:? "architecture" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "compatibilities"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "requiresConfiguration")
+      )
+
+instance Prelude.Hashable AddonVersionInfo where
+  hashWithSalt _salt AddonVersionInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` addonVersion
+      `Prelude.hashWithSalt` architecture
+      `Prelude.hashWithSalt` compatibilities
+      `Prelude.hashWithSalt` requiresConfiguration
+
+instance Prelude.NFData AddonVersionInfo where
+  rnf AddonVersionInfo' {..} =
+    Prelude.rnf addonVersion
+      `Prelude.seq` Prelude.rnf architecture
+      `Prelude.seq` Prelude.rnf compatibilities
+      `Prelude.seq` Prelude.rnf requiresConfiguration
diff --git a/gen/Amazonka/EKS/Types/AutoScalingGroup.hs b/gen/Amazonka/EKS/Types/AutoScalingGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/AutoScalingGroup.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.AutoScalingGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.AutoScalingGroup 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 Auto Scaling group that is associated with an Amazon EKS managed node
+-- group.
+--
+-- /See:/ 'newAutoScalingGroup' smart constructor.
+data AutoScalingGroup = AutoScalingGroup'
+  { -- | The name of the Auto Scaling group associated with an Amazon EKS managed
+    -- node group.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AutoScalingGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'autoScalingGroup_name' - The name of the Auto Scaling group associated with an Amazon EKS managed
+-- node group.
+newAutoScalingGroup ::
+  AutoScalingGroup
+newAutoScalingGroup =
+  AutoScalingGroup' {name = Prelude.Nothing}
+
+-- | The name of the Auto Scaling group associated with an Amazon EKS managed
+-- node group.
+autoScalingGroup_name :: Lens.Lens' AutoScalingGroup (Prelude.Maybe Prelude.Text)
+autoScalingGroup_name = Lens.lens (\AutoScalingGroup' {name} -> name) (\s@AutoScalingGroup' {} a -> s {name = a} :: AutoScalingGroup)
+
+instance Data.FromJSON AutoScalingGroup where
+  parseJSON =
+    Data.withObject
+      "AutoScalingGroup"
+      ( \x ->
+          AutoScalingGroup' Prelude.<$> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable AutoScalingGroup where
+  hashWithSalt _salt AutoScalingGroup' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData AutoScalingGroup where
+  rnf AutoScalingGroup' {..} = Prelude.rnf name
diff --git a/gen/Amazonka/EKS/Types/CapacityTypes.hs b/gen/Amazonka/EKS/Types/CapacityTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/CapacityTypes.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.EKS.Types.CapacityTypes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.CapacityTypes
+  ( CapacityTypes
+      ( ..,
+        CapacityTypes_ON_DEMAND,
+        CapacityTypes_SPOT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CapacityTypes = CapacityTypes'
+  { fromCapacityTypes ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CapacityTypes_ON_DEMAND :: CapacityTypes
+pattern CapacityTypes_ON_DEMAND = CapacityTypes' "ON_DEMAND"
+
+pattern CapacityTypes_SPOT :: CapacityTypes
+pattern CapacityTypes_SPOT = CapacityTypes' "SPOT"
+
+{-# COMPLETE
+  CapacityTypes_ON_DEMAND,
+  CapacityTypes_SPOT,
+  CapacityTypes'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/Certificate.hs b/gen/Amazonka/EKS/Types/Certificate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/Certificate.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.Certificate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.Certificate 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 object representing the @certificate-authority-data@ for your
+-- cluster.
+--
+-- /See:/ 'newCertificate' smart constructor.
+data Certificate = Certificate'
+  { -- | The Base64-encoded certificate data required to communicate with your
+    -- cluster. Add this to the @certificate-authority-data@ section of the
+    -- @kubeconfig@ file for your cluster.
+    data' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Certificate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'data'', 'certificate_data' - The Base64-encoded certificate data required to communicate with your
+-- cluster. Add this to the @certificate-authority-data@ section of the
+-- @kubeconfig@ file for your cluster.
+newCertificate ::
+  Certificate
+newCertificate =
+  Certificate' {data' = Prelude.Nothing}
+
+-- | The Base64-encoded certificate data required to communicate with your
+-- cluster. Add this to the @certificate-authority-data@ section of the
+-- @kubeconfig@ file for your cluster.
+certificate_data :: Lens.Lens' Certificate (Prelude.Maybe Prelude.Text)
+certificate_data = Lens.lens (\Certificate' {data'} -> data') (\s@Certificate' {} a -> s {data' = a} :: Certificate)
+
+instance Data.FromJSON Certificate where
+  parseJSON =
+    Data.withObject
+      "Certificate"
+      (\x -> Certificate' Prelude.<$> (x Data..:? "data"))
+
+instance Prelude.Hashable Certificate where
+  hashWithSalt _salt Certificate' {..} =
+    _salt `Prelude.hashWithSalt` data'
+
+instance Prelude.NFData Certificate where
+  rnf Certificate' {..} = Prelude.rnf data'
diff --git a/gen/Amazonka/EKS/Types/Cluster.hs b/gen/Amazonka/EKS/Types/Cluster.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/Cluster.hs
@@ -0,0 +1,376 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.Cluster
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.Cluster where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.Certificate
+import Amazonka.EKS.Types.ClusterHealth
+import Amazonka.EKS.Types.ClusterStatus
+import Amazonka.EKS.Types.ConnectorConfigResponse
+import Amazonka.EKS.Types.EncryptionConfig
+import Amazonka.EKS.Types.Identity
+import Amazonka.EKS.Types.KubernetesNetworkConfigResponse
+import Amazonka.EKS.Types.Logging
+import Amazonka.EKS.Types.OutpostConfigResponse
+import Amazonka.EKS.Types.VpcConfigResponse
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing an Amazon EKS cluster.
+--
+-- /See:/ 'newCluster' smart constructor.
+data Cluster = Cluster'
+  { -- | The Amazon Resource Name (ARN) of the cluster.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The @certificate-authority-data@ for your cluster.
+    certificateAuthority :: Prelude.Maybe Certificate,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The configuration used to connect to a cluster for registration.
+    connectorConfig :: Prelude.Maybe ConnectorConfigResponse,
+    -- | The Unix epoch timestamp in seconds for when the cluster was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The encryption configuration for the cluster.
+    encryptionConfig :: Prelude.Maybe [EncryptionConfig],
+    -- | The endpoint for your Kubernetes API server.
+    endpoint :: Prelude.Maybe Prelude.Text,
+    -- | An object representing the health of your local Amazon EKS cluster on an
+    -- Amazon Web Services Outpost. This object isn\'t available for clusters
+    -- on the Amazon Web Services cloud.
+    health :: Prelude.Maybe ClusterHealth,
+    -- | The ID of your local Amazon EKS cluster on an Amazon Web Services
+    -- Outpost. This property isn\'t available for an Amazon EKS cluster on the
+    -- Amazon Web Services cloud.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The identity provider information for the cluster.
+    identity :: Prelude.Maybe Identity,
+    -- | The Kubernetes network configuration for the cluster.
+    kubernetesNetworkConfig :: Prelude.Maybe KubernetesNetworkConfigResponse,
+    -- | The logging configuration for your cluster.
+    logging :: Prelude.Maybe Logging,
+    -- | The name of the cluster.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | An object representing the configuration of your local Amazon EKS
+    -- cluster on an Amazon Web Services Outpost. This object isn\'t available
+    -- for clusters on the Amazon Web Services cloud.
+    outpostConfig :: Prelude.Maybe OutpostConfigResponse,
+    -- | The platform version of your Amazon EKS cluster. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html Platform Versions>
+    -- in the //Amazon EKS User Guide// .
+    platformVersion :: Prelude.Maybe Prelude.Text,
+    -- | The VPC configuration used by the cluster control plane. Amazon EKS VPC
+    -- resources have specific requirements to work properly with Kubernetes.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html Cluster VPC Considerations>
+    -- and
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html Cluster Security Group Considerations>
+    -- in the /Amazon EKS User Guide/.
+    resourcesVpcConfig :: Prelude.Maybe VpcConfigResponse,
+    -- | The Amazon Resource Name (ARN) of the IAM role that provides permissions
+    -- for the Kubernetes control plane to make calls to Amazon Web Services
+    -- API operations on your behalf.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the cluster.
+    status :: Prelude.Maybe ClusterStatus,
+    -- | The metadata that you apply to the cluster to assist with categorization
+    -- and organization. Each tag consists of a key and an optional value. You
+    -- define both. Cluster tags do not propagate to any other resources
+    -- associated with the cluster.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Kubernetes server version for the cluster.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Cluster' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'cluster_arn' - The Amazon Resource Name (ARN) of the cluster.
+--
+-- 'certificateAuthority', 'cluster_certificateAuthority' - The @certificate-authority-data@ for your cluster.
+--
+-- 'clientRequestToken', 'cluster_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'connectorConfig', 'cluster_connectorConfig' - The configuration used to connect to a cluster for registration.
+--
+-- 'createdAt', 'cluster_createdAt' - The Unix epoch timestamp in seconds for when the cluster was created.
+--
+-- 'encryptionConfig', 'cluster_encryptionConfig' - The encryption configuration for the cluster.
+--
+-- 'endpoint', 'cluster_endpoint' - The endpoint for your Kubernetes API server.
+--
+-- 'health', 'cluster_health' - An object representing the health of your local Amazon EKS cluster on an
+-- Amazon Web Services Outpost. This object isn\'t available for clusters
+-- on the Amazon Web Services cloud.
+--
+-- 'id', 'cluster_id' - The ID of your local Amazon EKS cluster on an Amazon Web Services
+-- Outpost. This property isn\'t available for an Amazon EKS cluster on the
+-- Amazon Web Services cloud.
+--
+-- 'identity', 'cluster_identity' - The identity provider information for the cluster.
+--
+-- 'kubernetesNetworkConfig', 'cluster_kubernetesNetworkConfig' - The Kubernetes network configuration for the cluster.
+--
+-- 'logging', 'cluster_logging' - The logging configuration for your cluster.
+--
+-- 'name', 'cluster_name' - The name of the cluster.
+--
+-- 'outpostConfig', 'cluster_outpostConfig' - An object representing the configuration of your local Amazon EKS
+-- cluster on an Amazon Web Services Outpost. This object isn\'t available
+-- for clusters on the Amazon Web Services cloud.
+--
+-- 'platformVersion', 'cluster_platformVersion' - The platform version of your Amazon EKS cluster. For more information,
+-- see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html Platform Versions>
+-- in the //Amazon EKS User Guide// .
+--
+-- 'resourcesVpcConfig', 'cluster_resourcesVpcConfig' - The VPC configuration used by the cluster control plane. Amazon EKS VPC
+-- resources have specific requirements to work properly with Kubernetes.
+-- For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html Cluster VPC Considerations>
+-- and
+-- <https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html Cluster Security Group Considerations>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'roleArn', 'cluster_roleArn' - The Amazon Resource Name (ARN) of the IAM role that provides permissions
+-- for the Kubernetes control plane to make calls to Amazon Web Services
+-- API operations on your behalf.
+--
+-- 'status', 'cluster_status' - The current status of the cluster.
+--
+-- 'tags', 'cluster_tags' - The metadata that you apply to the cluster to assist with categorization
+-- and organization. Each tag consists of a key and an optional value. You
+-- define both. Cluster tags do not propagate to any other resources
+-- associated with the cluster.
+--
+-- 'version', 'cluster_version' - The Kubernetes server version for the cluster.
+newCluster ::
+  Cluster
+newCluster =
+  Cluster'
+    { arn = Prelude.Nothing,
+      certificateAuthority = Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      connectorConfig = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      encryptionConfig = Prelude.Nothing,
+      endpoint = Prelude.Nothing,
+      health = Prelude.Nothing,
+      id = Prelude.Nothing,
+      identity = Prelude.Nothing,
+      kubernetesNetworkConfig = Prelude.Nothing,
+      logging = Prelude.Nothing,
+      name = Prelude.Nothing,
+      outpostConfig = Prelude.Nothing,
+      platformVersion = Prelude.Nothing,
+      resourcesVpcConfig = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the cluster.
+cluster_arn :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
+cluster_arn = Lens.lens (\Cluster' {arn} -> arn) (\s@Cluster' {} a -> s {arn = a} :: Cluster)
+
+-- | The @certificate-authority-data@ for your cluster.
+cluster_certificateAuthority :: Lens.Lens' Cluster (Prelude.Maybe Certificate)
+cluster_certificateAuthority = Lens.lens (\Cluster' {certificateAuthority} -> certificateAuthority) (\s@Cluster' {} a -> s {certificateAuthority = a} :: Cluster)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+cluster_clientRequestToken :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
+cluster_clientRequestToken = Lens.lens (\Cluster' {clientRequestToken} -> clientRequestToken) (\s@Cluster' {} a -> s {clientRequestToken = a} :: Cluster)
+
+-- | The configuration used to connect to a cluster for registration.
+cluster_connectorConfig :: Lens.Lens' Cluster (Prelude.Maybe ConnectorConfigResponse)
+cluster_connectorConfig = Lens.lens (\Cluster' {connectorConfig} -> connectorConfig) (\s@Cluster' {} a -> s {connectorConfig = a} :: Cluster)
+
+-- | The Unix epoch timestamp in seconds for when the cluster was created.
+cluster_createdAt :: Lens.Lens' Cluster (Prelude.Maybe Prelude.UTCTime)
+cluster_createdAt = Lens.lens (\Cluster' {createdAt} -> createdAt) (\s@Cluster' {} a -> s {createdAt = a} :: Cluster) Prelude.. Lens.mapping Data._Time
+
+-- | The encryption configuration for the cluster.
+cluster_encryptionConfig :: Lens.Lens' Cluster (Prelude.Maybe [EncryptionConfig])
+cluster_encryptionConfig = Lens.lens (\Cluster' {encryptionConfig} -> encryptionConfig) (\s@Cluster' {} a -> s {encryptionConfig = a} :: Cluster) Prelude.. Lens.mapping Lens.coerced
+
+-- | The endpoint for your Kubernetes API server.
+cluster_endpoint :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
+cluster_endpoint = Lens.lens (\Cluster' {endpoint} -> endpoint) (\s@Cluster' {} a -> s {endpoint = a} :: Cluster)
+
+-- | An object representing the health of your local Amazon EKS cluster on an
+-- Amazon Web Services Outpost. This object isn\'t available for clusters
+-- on the Amazon Web Services cloud.
+cluster_health :: Lens.Lens' Cluster (Prelude.Maybe ClusterHealth)
+cluster_health = Lens.lens (\Cluster' {health} -> health) (\s@Cluster' {} a -> s {health = a} :: Cluster)
+
+-- | The ID of your local Amazon EKS cluster on an Amazon Web Services
+-- Outpost. This property isn\'t available for an Amazon EKS cluster on the
+-- Amazon Web Services cloud.
+cluster_id :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
+cluster_id = Lens.lens (\Cluster' {id} -> id) (\s@Cluster' {} a -> s {id = a} :: Cluster)
+
+-- | The identity provider information for the cluster.
+cluster_identity :: Lens.Lens' Cluster (Prelude.Maybe Identity)
+cluster_identity = Lens.lens (\Cluster' {identity} -> identity) (\s@Cluster' {} a -> s {identity = a} :: Cluster)
+
+-- | The Kubernetes network configuration for the cluster.
+cluster_kubernetesNetworkConfig :: Lens.Lens' Cluster (Prelude.Maybe KubernetesNetworkConfigResponse)
+cluster_kubernetesNetworkConfig = Lens.lens (\Cluster' {kubernetesNetworkConfig} -> kubernetesNetworkConfig) (\s@Cluster' {} a -> s {kubernetesNetworkConfig = a} :: Cluster)
+
+-- | The logging configuration for your cluster.
+cluster_logging :: Lens.Lens' Cluster (Prelude.Maybe Logging)
+cluster_logging = Lens.lens (\Cluster' {logging} -> logging) (\s@Cluster' {} a -> s {logging = a} :: Cluster)
+
+-- | The name of the cluster.
+cluster_name :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
+cluster_name = Lens.lens (\Cluster' {name} -> name) (\s@Cluster' {} a -> s {name = a} :: Cluster)
+
+-- | An object representing the configuration of your local Amazon EKS
+-- cluster on an Amazon Web Services Outpost. This object isn\'t available
+-- for clusters on the Amazon Web Services cloud.
+cluster_outpostConfig :: Lens.Lens' Cluster (Prelude.Maybe OutpostConfigResponse)
+cluster_outpostConfig = Lens.lens (\Cluster' {outpostConfig} -> outpostConfig) (\s@Cluster' {} a -> s {outpostConfig = a} :: Cluster)
+
+-- | The platform version of your Amazon EKS cluster. For more information,
+-- see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html Platform Versions>
+-- in the //Amazon EKS User Guide// .
+cluster_platformVersion :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
+cluster_platformVersion = Lens.lens (\Cluster' {platformVersion} -> platformVersion) (\s@Cluster' {} a -> s {platformVersion = a} :: Cluster)
+
+-- | The VPC configuration used by the cluster control plane. Amazon EKS VPC
+-- resources have specific requirements to work properly with Kubernetes.
+-- For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html Cluster VPC Considerations>
+-- and
+-- <https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html Cluster Security Group Considerations>
+-- in the /Amazon EKS User Guide/.
+cluster_resourcesVpcConfig :: Lens.Lens' Cluster (Prelude.Maybe VpcConfigResponse)
+cluster_resourcesVpcConfig = Lens.lens (\Cluster' {resourcesVpcConfig} -> resourcesVpcConfig) (\s@Cluster' {} a -> s {resourcesVpcConfig = a} :: Cluster)
+
+-- | The Amazon Resource Name (ARN) of the IAM role that provides permissions
+-- for the Kubernetes control plane to make calls to Amazon Web Services
+-- API operations on your behalf.
+cluster_roleArn :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
+cluster_roleArn = Lens.lens (\Cluster' {roleArn} -> roleArn) (\s@Cluster' {} a -> s {roleArn = a} :: Cluster)
+
+-- | The current status of the cluster.
+cluster_status :: Lens.Lens' Cluster (Prelude.Maybe ClusterStatus)
+cluster_status = Lens.lens (\Cluster' {status} -> status) (\s@Cluster' {} a -> s {status = a} :: Cluster)
+
+-- | The metadata that you apply to the cluster to assist with categorization
+-- and organization. Each tag consists of a key and an optional value. You
+-- define both. Cluster tags do not propagate to any other resources
+-- associated with the cluster.
+cluster_tags :: Lens.Lens' Cluster (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+cluster_tags = Lens.lens (\Cluster' {tags} -> tags) (\s@Cluster' {} a -> s {tags = a} :: Cluster) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Kubernetes server version for the cluster.
+cluster_version :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)
+cluster_version = Lens.lens (\Cluster' {version} -> version) (\s@Cluster' {} a -> s {version = a} :: Cluster)
+
+instance Data.FromJSON Cluster where
+  parseJSON =
+    Data.withObject
+      "Cluster"
+      ( \x ->
+          Cluster'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "certificateAuthority")
+            Prelude.<*> (x Data..:? "clientRequestToken")
+            Prelude.<*> (x Data..:? "connectorConfig")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> ( x
+                            Data..:? "encryptionConfig"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "endpoint")
+            Prelude.<*> (x Data..:? "health")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "identity")
+            Prelude.<*> (x Data..:? "kubernetesNetworkConfig")
+            Prelude.<*> (x Data..:? "logging")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "outpostConfig")
+            Prelude.<*> (x Data..:? "platformVersion")
+            Prelude.<*> (x Data..:? "resourcesVpcConfig")
+            Prelude.<*> (x Data..:? "roleArn")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable Cluster where
+  hashWithSalt _salt Cluster' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` certificateAuthority
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` connectorConfig
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` encryptionConfig
+      `Prelude.hashWithSalt` endpoint
+      `Prelude.hashWithSalt` health
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` identity
+      `Prelude.hashWithSalt` kubernetesNetworkConfig
+      `Prelude.hashWithSalt` logging
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` outpostConfig
+      `Prelude.hashWithSalt` platformVersion
+      `Prelude.hashWithSalt` resourcesVpcConfig
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData Cluster where
+  rnf Cluster' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf certificateAuthority
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf connectorConfig
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf encryptionConfig
+      `Prelude.seq` Prelude.rnf endpoint
+      `Prelude.seq` Prelude.rnf health
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf identity
+      `Prelude.seq` Prelude.rnf kubernetesNetworkConfig
+      `Prelude.seq` Prelude.rnf logging
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf outpostConfig
+      `Prelude.seq` Prelude.rnf platformVersion
+      `Prelude.seq` Prelude.rnf resourcesVpcConfig
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/EKS/Types/ClusterHealth.hs b/gen/Amazonka/EKS/Types/ClusterHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/ClusterHealth.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.ClusterHealth
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.ClusterHealth where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.ClusterIssue
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing the health of your local Amazon EKS cluster on an
+-- Amazon Web Services Outpost. You can\'t use this API with an Amazon EKS
+-- cluster on the Amazon Web Services cloud.
+--
+-- /See:/ 'newClusterHealth' smart constructor.
+data ClusterHealth = ClusterHealth'
+  { -- | An object representing the health issues of your local Amazon EKS
+    -- cluster on an Amazon Web Services Outpost.
+    issues :: Prelude.Maybe [ClusterIssue]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClusterHealth' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'issues', 'clusterHealth_issues' - An object representing the health issues of your local Amazon EKS
+-- cluster on an Amazon Web Services Outpost.
+newClusterHealth ::
+  ClusterHealth
+newClusterHealth =
+  ClusterHealth' {issues = Prelude.Nothing}
+
+-- | An object representing the health issues of your local Amazon EKS
+-- cluster on an Amazon Web Services Outpost.
+clusterHealth_issues :: Lens.Lens' ClusterHealth (Prelude.Maybe [ClusterIssue])
+clusterHealth_issues = Lens.lens (\ClusterHealth' {issues} -> issues) (\s@ClusterHealth' {} a -> s {issues = a} :: ClusterHealth) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ClusterHealth where
+  parseJSON =
+    Data.withObject
+      "ClusterHealth"
+      ( \x ->
+          ClusterHealth'
+            Prelude.<$> (x Data..:? "issues" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ClusterHealth where
+  hashWithSalt _salt ClusterHealth' {..} =
+    _salt `Prelude.hashWithSalt` issues
+
+instance Prelude.NFData ClusterHealth where
+  rnf ClusterHealth' {..} = Prelude.rnf issues
diff --git a/gen/Amazonka/EKS/Types/ClusterIssue.hs b/gen/Amazonka/EKS/Types/ClusterIssue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/ClusterIssue.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.ClusterIssue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.ClusterIssue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.ClusterIssueCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | An issue with your local Amazon EKS cluster on an Amazon Web Services
+-- Outpost. You can\'t use this API with an Amazon EKS cluster on the
+-- Amazon Web Services cloud.
+--
+-- /See:/ 'newClusterIssue' smart constructor.
+data ClusterIssue = ClusterIssue'
+  { -- | The error code of the issue.
+    code :: Prelude.Maybe ClusterIssueCode,
+    -- | A description of the issue.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The resource IDs that the issue relates to.
+    resourceIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClusterIssue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'clusterIssue_code' - The error code of the issue.
+--
+-- 'message', 'clusterIssue_message' - A description of the issue.
+--
+-- 'resourceIds', 'clusterIssue_resourceIds' - The resource IDs that the issue relates to.
+newClusterIssue ::
+  ClusterIssue
+newClusterIssue =
+  ClusterIssue'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing,
+      resourceIds = Prelude.Nothing
+    }
+
+-- | The error code of the issue.
+clusterIssue_code :: Lens.Lens' ClusterIssue (Prelude.Maybe ClusterIssueCode)
+clusterIssue_code = Lens.lens (\ClusterIssue' {code} -> code) (\s@ClusterIssue' {} a -> s {code = a} :: ClusterIssue)
+
+-- | A description of the issue.
+clusterIssue_message :: Lens.Lens' ClusterIssue (Prelude.Maybe Prelude.Text)
+clusterIssue_message = Lens.lens (\ClusterIssue' {message} -> message) (\s@ClusterIssue' {} a -> s {message = a} :: ClusterIssue)
+
+-- | The resource IDs that the issue relates to.
+clusterIssue_resourceIds :: Lens.Lens' ClusterIssue (Prelude.Maybe [Prelude.Text])
+clusterIssue_resourceIds = Lens.lens (\ClusterIssue' {resourceIds} -> resourceIds) (\s@ClusterIssue' {} a -> s {resourceIds = a} :: ClusterIssue) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ClusterIssue where
+  parseJSON =
+    Data.withObject
+      "ClusterIssue"
+      ( \x ->
+          ClusterIssue'
+            Prelude.<$> (x Data..:? "code")
+            Prelude.<*> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "resourceIds" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ClusterIssue where
+  hashWithSalt _salt ClusterIssue' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` resourceIds
+
+instance Prelude.NFData ClusterIssue where
+  rnf ClusterIssue' {..} =
+    Prelude.rnf code
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf resourceIds
diff --git a/gen/Amazonka/EKS/Types/ClusterIssueCode.hs b/gen/Amazonka/EKS/Types/ClusterIssueCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/ClusterIssueCode.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.ClusterIssueCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.ClusterIssueCode
+  ( ClusterIssueCode
+      ( ..,
+        ClusterIssueCode_AccessDenied,
+        ClusterIssueCode_ClusterUnreachable,
+        ClusterIssueCode_ConfigurationConflict,
+        ClusterIssueCode_InternalFailure,
+        ClusterIssueCode_ResourceLimitExceeded,
+        ClusterIssueCode_ResourceNotFound
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ClusterIssueCode = ClusterIssueCode'
+  { fromClusterIssueCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ClusterIssueCode_AccessDenied :: ClusterIssueCode
+pattern ClusterIssueCode_AccessDenied = ClusterIssueCode' "AccessDenied"
+
+pattern ClusterIssueCode_ClusterUnreachable :: ClusterIssueCode
+pattern ClusterIssueCode_ClusterUnreachable = ClusterIssueCode' "ClusterUnreachable"
+
+pattern ClusterIssueCode_ConfigurationConflict :: ClusterIssueCode
+pattern ClusterIssueCode_ConfigurationConflict = ClusterIssueCode' "ConfigurationConflict"
+
+pattern ClusterIssueCode_InternalFailure :: ClusterIssueCode
+pattern ClusterIssueCode_InternalFailure = ClusterIssueCode' "InternalFailure"
+
+pattern ClusterIssueCode_ResourceLimitExceeded :: ClusterIssueCode
+pattern ClusterIssueCode_ResourceLimitExceeded = ClusterIssueCode' "ResourceLimitExceeded"
+
+pattern ClusterIssueCode_ResourceNotFound :: ClusterIssueCode
+pattern ClusterIssueCode_ResourceNotFound = ClusterIssueCode' "ResourceNotFound"
+
+{-# COMPLETE
+  ClusterIssueCode_AccessDenied,
+  ClusterIssueCode_ClusterUnreachable,
+  ClusterIssueCode_ConfigurationConflict,
+  ClusterIssueCode_InternalFailure,
+  ClusterIssueCode_ResourceLimitExceeded,
+  ClusterIssueCode_ResourceNotFound,
+  ClusterIssueCode'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/ClusterStatus.hs b/gen/Amazonka/EKS/Types/ClusterStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/ClusterStatus.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.ClusterStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.ClusterStatus
+  ( ClusterStatus
+      ( ..,
+        ClusterStatus_ACTIVE,
+        ClusterStatus_CREATING,
+        ClusterStatus_DELETING,
+        ClusterStatus_FAILED,
+        ClusterStatus_PENDING,
+        ClusterStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ClusterStatus = ClusterStatus'
+  { fromClusterStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ClusterStatus_ACTIVE :: ClusterStatus
+pattern ClusterStatus_ACTIVE = ClusterStatus' "ACTIVE"
+
+pattern ClusterStatus_CREATING :: ClusterStatus
+pattern ClusterStatus_CREATING = ClusterStatus' "CREATING"
+
+pattern ClusterStatus_DELETING :: ClusterStatus
+pattern ClusterStatus_DELETING = ClusterStatus' "DELETING"
+
+pattern ClusterStatus_FAILED :: ClusterStatus
+pattern ClusterStatus_FAILED = ClusterStatus' "FAILED"
+
+pattern ClusterStatus_PENDING :: ClusterStatus
+pattern ClusterStatus_PENDING = ClusterStatus' "PENDING"
+
+pattern ClusterStatus_UPDATING :: ClusterStatus
+pattern ClusterStatus_UPDATING = ClusterStatus' "UPDATING"
+
+{-# COMPLETE
+  ClusterStatus_ACTIVE,
+  ClusterStatus_CREATING,
+  ClusterStatus_DELETING,
+  ClusterStatus_FAILED,
+  ClusterStatus_PENDING,
+  ClusterStatus_UPDATING,
+  ClusterStatus'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/Compatibility.hs b/gen/Amazonka/EKS/Types/Compatibility.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/Compatibility.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.Compatibility
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.Compatibility 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
+
+-- | Compatibility information.
+--
+-- /See:/ 'newCompatibility' smart constructor.
+data Compatibility = Compatibility'
+  { -- | The supported Kubernetes version of the cluster.
+    clusterVersion :: Prelude.Maybe Prelude.Text,
+    -- | The supported default version.
+    defaultVersion :: Prelude.Maybe Prelude.Bool,
+    -- | The supported compute platform.
+    platformVersions :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Compatibility' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterVersion', 'compatibility_clusterVersion' - The supported Kubernetes version of the cluster.
+--
+-- 'defaultVersion', 'compatibility_defaultVersion' - The supported default version.
+--
+-- 'platformVersions', 'compatibility_platformVersions' - The supported compute platform.
+newCompatibility ::
+  Compatibility
+newCompatibility =
+  Compatibility'
+    { clusterVersion = Prelude.Nothing,
+      defaultVersion = Prelude.Nothing,
+      platformVersions = Prelude.Nothing
+    }
+
+-- | The supported Kubernetes version of the cluster.
+compatibility_clusterVersion :: Lens.Lens' Compatibility (Prelude.Maybe Prelude.Text)
+compatibility_clusterVersion = Lens.lens (\Compatibility' {clusterVersion} -> clusterVersion) (\s@Compatibility' {} a -> s {clusterVersion = a} :: Compatibility)
+
+-- | The supported default version.
+compatibility_defaultVersion :: Lens.Lens' Compatibility (Prelude.Maybe Prelude.Bool)
+compatibility_defaultVersion = Lens.lens (\Compatibility' {defaultVersion} -> defaultVersion) (\s@Compatibility' {} a -> s {defaultVersion = a} :: Compatibility)
+
+-- | The supported compute platform.
+compatibility_platformVersions :: Lens.Lens' Compatibility (Prelude.Maybe [Prelude.Text])
+compatibility_platformVersions = Lens.lens (\Compatibility' {platformVersions} -> platformVersions) (\s@Compatibility' {} a -> s {platformVersions = a} :: Compatibility) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Compatibility where
+  parseJSON =
+    Data.withObject
+      "Compatibility"
+      ( \x ->
+          Compatibility'
+            Prelude.<$> (x Data..:? "clusterVersion")
+            Prelude.<*> (x Data..:? "defaultVersion")
+            Prelude.<*> ( x
+                            Data..:? "platformVersions"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable Compatibility where
+  hashWithSalt _salt Compatibility' {..} =
+    _salt
+      `Prelude.hashWithSalt` clusterVersion
+      `Prelude.hashWithSalt` defaultVersion
+      `Prelude.hashWithSalt` platformVersions
+
+instance Prelude.NFData Compatibility where
+  rnf Compatibility' {..} =
+    Prelude.rnf clusterVersion
+      `Prelude.seq` Prelude.rnf defaultVersion
+      `Prelude.seq` Prelude.rnf platformVersions
diff --git a/gen/Amazonka/EKS/Types/ConfigStatus.hs b/gen/Amazonka/EKS/Types/ConfigStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/ConfigStatus.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.EKS.Types.ConfigStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.ConfigStatus
+  ( ConfigStatus
+      ( ..,
+        ConfigStatus_ACTIVE,
+        ConfigStatus_CREATING,
+        ConfigStatus_DELETING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConfigStatus = ConfigStatus'
+  { fromConfigStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ConfigStatus_ACTIVE :: ConfigStatus
+pattern ConfigStatus_ACTIVE = ConfigStatus' "ACTIVE"
+
+pattern ConfigStatus_CREATING :: ConfigStatus
+pattern ConfigStatus_CREATING = ConfigStatus' "CREATING"
+
+pattern ConfigStatus_DELETING :: ConfigStatus
+pattern ConfigStatus_DELETING = ConfigStatus' "DELETING"
+
+{-# COMPLETE
+  ConfigStatus_ACTIVE,
+  ConfigStatus_CREATING,
+  ConfigStatus_DELETING,
+  ConfigStatus'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/ConnectorConfigProvider.hs b/gen/Amazonka/EKS/Types/ConnectorConfigProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/ConnectorConfigProvider.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.ConnectorConfigProvider
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.ConnectorConfigProvider
+  ( ConnectorConfigProvider
+      ( ..,
+        ConnectorConfigProvider_AKS,
+        ConnectorConfigProvider_ANTHOS,
+        ConnectorConfigProvider_EC2,
+        ConnectorConfigProvider_EKS_ANYWHERE,
+        ConnectorConfigProvider_GKE,
+        ConnectorConfigProvider_OPENSHIFT,
+        ConnectorConfigProvider_OTHER,
+        ConnectorConfigProvider_RANCHER,
+        ConnectorConfigProvider_TANZU
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConnectorConfigProvider = ConnectorConfigProvider'
+  { fromConnectorConfigProvider ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ConnectorConfigProvider_AKS :: ConnectorConfigProvider
+pattern ConnectorConfigProvider_AKS = ConnectorConfigProvider' "AKS"
+
+pattern ConnectorConfigProvider_ANTHOS :: ConnectorConfigProvider
+pattern ConnectorConfigProvider_ANTHOS = ConnectorConfigProvider' "ANTHOS"
+
+pattern ConnectorConfigProvider_EC2 :: ConnectorConfigProvider
+pattern ConnectorConfigProvider_EC2 = ConnectorConfigProvider' "EC2"
+
+pattern ConnectorConfigProvider_EKS_ANYWHERE :: ConnectorConfigProvider
+pattern ConnectorConfigProvider_EKS_ANYWHERE = ConnectorConfigProvider' "EKS_ANYWHERE"
+
+pattern ConnectorConfigProvider_GKE :: ConnectorConfigProvider
+pattern ConnectorConfigProvider_GKE = ConnectorConfigProvider' "GKE"
+
+pattern ConnectorConfigProvider_OPENSHIFT :: ConnectorConfigProvider
+pattern ConnectorConfigProvider_OPENSHIFT = ConnectorConfigProvider' "OPENSHIFT"
+
+pattern ConnectorConfigProvider_OTHER :: ConnectorConfigProvider
+pattern ConnectorConfigProvider_OTHER = ConnectorConfigProvider' "OTHER"
+
+pattern ConnectorConfigProvider_RANCHER :: ConnectorConfigProvider
+pattern ConnectorConfigProvider_RANCHER = ConnectorConfigProvider' "RANCHER"
+
+pattern ConnectorConfigProvider_TANZU :: ConnectorConfigProvider
+pattern ConnectorConfigProvider_TANZU = ConnectorConfigProvider' "TANZU"
+
+{-# COMPLETE
+  ConnectorConfigProvider_AKS,
+  ConnectorConfigProvider_ANTHOS,
+  ConnectorConfigProvider_EC2,
+  ConnectorConfigProvider_EKS_ANYWHERE,
+  ConnectorConfigProvider_GKE,
+  ConnectorConfigProvider_OPENSHIFT,
+  ConnectorConfigProvider_OTHER,
+  ConnectorConfigProvider_RANCHER,
+  ConnectorConfigProvider_TANZU,
+  ConnectorConfigProvider'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/ConnectorConfigRequest.hs b/gen/Amazonka/EKS/Types/ConnectorConfigRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/ConnectorConfigRequest.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.ConnectorConfigRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.ConnectorConfigRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.ConnectorConfigProvider
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration sent to a cluster for configuration.
+--
+-- /See:/ 'newConnectorConfigRequest' smart constructor.
+data ConnectorConfigRequest = ConnectorConfigRequest'
+  { -- | The Amazon Resource Name (ARN) of the role that is authorized to request
+    -- the connector configuration.
+    roleArn :: Prelude.Text,
+    -- | The cloud provider for the target cluster to connect.
+    provider :: ConnectorConfigProvider
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConnectorConfigRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roleArn', 'connectorConfigRequest_roleArn' - The Amazon Resource Name (ARN) of the role that is authorized to request
+-- the connector configuration.
+--
+-- 'provider', 'connectorConfigRequest_provider' - The cloud provider for the target cluster to connect.
+newConnectorConfigRequest ::
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'provider'
+  ConnectorConfigProvider ->
+  ConnectorConfigRequest
+newConnectorConfigRequest pRoleArn_ pProvider_ =
+  ConnectorConfigRequest'
+    { roleArn = pRoleArn_,
+      provider = pProvider_
+    }
+
+-- | The Amazon Resource Name (ARN) of the role that is authorized to request
+-- the connector configuration.
+connectorConfigRequest_roleArn :: Lens.Lens' ConnectorConfigRequest Prelude.Text
+connectorConfigRequest_roleArn = Lens.lens (\ConnectorConfigRequest' {roleArn} -> roleArn) (\s@ConnectorConfigRequest' {} a -> s {roleArn = a} :: ConnectorConfigRequest)
+
+-- | The cloud provider for the target cluster to connect.
+connectorConfigRequest_provider :: Lens.Lens' ConnectorConfigRequest ConnectorConfigProvider
+connectorConfigRequest_provider = Lens.lens (\ConnectorConfigRequest' {provider} -> provider) (\s@ConnectorConfigRequest' {} a -> s {provider = a} :: ConnectorConfigRequest)
+
+instance Prelude.Hashable ConnectorConfigRequest where
+  hashWithSalt _salt ConnectorConfigRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` provider
+
+instance Prelude.NFData ConnectorConfigRequest where
+  rnf ConnectorConfigRequest' {..} =
+    Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf provider
+
+instance Data.ToJSON ConnectorConfigRequest where
+  toJSON ConnectorConfigRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("roleArn" Data..= roleArn),
+            Prelude.Just ("provider" Data..= provider)
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/ConnectorConfigResponse.hs b/gen/Amazonka/EKS/Types/ConnectorConfigResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/ConnectorConfigResponse.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.ConnectorConfigResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.ConnectorConfigResponse 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 full description of your connected cluster.
+--
+-- /See:/ 'newConnectorConfigResponse' smart constructor.
+data ConnectorConfigResponse = ConnectorConfigResponse'
+  { -- | A unique code associated with the cluster for registration purposes.
+    activationCode :: Prelude.Maybe Prelude.Text,
+    -- | The expiration time of the connected cluster. The cluster\'s YAML file
+    -- must be applied through the native provider.
+    activationExpiry :: Prelude.Maybe Data.POSIX,
+    -- | A unique ID associated with the cluster for registration purposes.
+    activationId :: Prelude.Maybe Prelude.Text,
+    -- | The cluster\'s cloud service provider.
+    provider :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the role to communicate with services
+    -- from the connected Kubernetes cluster.
+    roleArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConnectorConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'activationCode', 'connectorConfigResponse_activationCode' - A unique code associated with the cluster for registration purposes.
+--
+-- 'activationExpiry', 'connectorConfigResponse_activationExpiry' - The expiration time of the connected cluster. The cluster\'s YAML file
+-- must be applied through the native provider.
+--
+-- 'activationId', 'connectorConfigResponse_activationId' - A unique ID associated with the cluster for registration purposes.
+--
+-- 'provider', 'connectorConfigResponse_provider' - The cluster\'s cloud service provider.
+--
+-- 'roleArn', 'connectorConfigResponse_roleArn' - The Amazon Resource Name (ARN) of the role to communicate with services
+-- from the connected Kubernetes cluster.
+newConnectorConfigResponse ::
+  ConnectorConfigResponse
+newConnectorConfigResponse =
+  ConnectorConfigResponse'
+    { activationCode =
+        Prelude.Nothing,
+      activationExpiry = Prelude.Nothing,
+      activationId = Prelude.Nothing,
+      provider = Prelude.Nothing,
+      roleArn = Prelude.Nothing
+    }
+
+-- | A unique code associated with the cluster for registration purposes.
+connectorConfigResponse_activationCode :: Lens.Lens' ConnectorConfigResponse (Prelude.Maybe Prelude.Text)
+connectorConfigResponse_activationCode = Lens.lens (\ConnectorConfigResponse' {activationCode} -> activationCode) (\s@ConnectorConfigResponse' {} a -> s {activationCode = a} :: ConnectorConfigResponse)
+
+-- | The expiration time of the connected cluster. The cluster\'s YAML file
+-- must be applied through the native provider.
+connectorConfigResponse_activationExpiry :: Lens.Lens' ConnectorConfigResponse (Prelude.Maybe Prelude.UTCTime)
+connectorConfigResponse_activationExpiry = Lens.lens (\ConnectorConfigResponse' {activationExpiry} -> activationExpiry) (\s@ConnectorConfigResponse' {} a -> s {activationExpiry = a} :: ConnectorConfigResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A unique ID associated with the cluster for registration purposes.
+connectorConfigResponse_activationId :: Lens.Lens' ConnectorConfigResponse (Prelude.Maybe Prelude.Text)
+connectorConfigResponse_activationId = Lens.lens (\ConnectorConfigResponse' {activationId} -> activationId) (\s@ConnectorConfigResponse' {} a -> s {activationId = a} :: ConnectorConfigResponse)
+
+-- | The cluster\'s cloud service provider.
+connectorConfigResponse_provider :: Lens.Lens' ConnectorConfigResponse (Prelude.Maybe Prelude.Text)
+connectorConfigResponse_provider = Lens.lens (\ConnectorConfigResponse' {provider} -> provider) (\s@ConnectorConfigResponse' {} a -> s {provider = a} :: ConnectorConfigResponse)
+
+-- | The Amazon Resource Name (ARN) of the role to communicate with services
+-- from the connected Kubernetes cluster.
+connectorConfigResponse_roleArn :: Lens.Lens' ConnectorConfigResponse (Prelude.Maybe Prelude.Text)
+connectorConfigResponse_roleArn = Lens.lens (\ConnectorConfigResponse' {roleArn} -> roleArn) (\s@ConnectorConfigResponse' {} a -> s {roleArn = a} :: ConnectorConfigResponse)
+
+instance Data.FromJSON ConnectorConfigResponse where
+  parseJSON =
+    Data.withObject
+      "ConnectorConfigResponse"
+      ( \x ->
+          ConnectorConfigResponse'
+            Prelude.<$> (x Data..:? "activationCode")
+            Prelude.<*> (x Data..:? "activationExpiry")
+            Prelude.<*> (x Data..:? "activationId")
+            Prelude.<*> (x Data..:? "provider")
+            Prelude.<*> (x Data..:? "roleArn")
+      )
+
+instance Prelude.Hashable ConnectorConfigResponse where
+  hashWithSalt _salt ConnectorConfigResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` activationCode
+      `Prelude.hashWithSalt` activationExpiry
+      `Prelude.hashWithSalt` activationId
+      `Prelude.hashWithSalt` provider
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData ConnectorConfigResponse where
+  rnf ConnectorConfigResponse' {..} =
+    Prelude.rnf activationCode
+      `Prelude.seq` Prelude.rnf activationExpiry
+      `Prelude.seq` Prelude.rnf activationId
+      `Prelude.seq` Prelude.rnf provider
+      `Prelude.seq` Prelude.rnf roleArn
diff --git a/gen/Amazonka/EKS/Types/ControlPlanePlacementRequest.hs b/gen/Amazonka/EKS/Types/ControlPlanePlacementRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/ControlPlanePlacementRequest.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.ControlPlanePlacementRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.ControlPlanePlacementRequest 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 placement configuration for all the control plane instances of your
+-- local Amazon EKS cluster on an Amazon Web Services Outpost. For more
+-- information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-capacity-considerations.html Capacity considerations>
+-- in the /Amazon EKS User Guide/
+--
+-- /See:/ 'newControlPlanePlacementRequest' smart constructor.
+data ControlPlanePlacementRequest = ControlPlanePlacementRequest'
+  { -- | The name of the placement group for the Kubernetes control plane
+    -- instances. This setting can\'t be changed after cluster creation.
+    groupName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ControlPlanePlacementRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupName', 'controlPlanePlacementRequest_groupName' - The name of the placement group for the Kubernetes control plane
+-- instances. This setting can\'t be changed after cluster creation.
+newControlPlanePlacementRequest ::
+  ControlPlanePlacementRequest
+newControlPlanePlacementRequest =
+  ControlPlanePlacementRequest'
+    { groupName =
+        Prelude.Nothing
+    }
+
+-- | The name of the placement group for the Kubernetes control plane
+-- instances. This setting can\'t be changed after cluster creation.
+controlPlanePlacementRequest_groupName :: Lens.Lens' ControlPlanePlacementRequest (Prelude.Maybe Prelude.Text)
+controlPlanePlacementRequest_groupName = Lens.lens (\ControlPlanePlacementRequest' {groupName} -> groupName) (\s@ControlPlanePlacementRequest' {} a -> s {groupName = a} :: ControlPlanePlacementRequest)
+
+instance
+  Prelude.Hashable
+    ControlPlanePlacementRequest
+  where
+  hashWithSalt _salt ControlPlanePlacementRequest' {..} =
+    _salt `Prelude.hashWithSalt` groupName
+
+instance Prelude.NFData ControlPlanePlacementRequest where
+  rnf ControlPlanePlacementRequest' {..} =
+    Prelude.rnf groupName
+
+instance Data.ToJSON ControlPlanePlacementRequest where
+  toJSON ControlPlanePlacementRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("groupName" Data..=) Prelude.<$> groupName]
+      )
diff --git a/gen/Amazonka/EKS/Types/ControlPlanePlacementResponse.hs b/gen/Amazonka/EKS/Types/ControlPlanePlacementResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/ControlPlanePlacementResponse.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.ControlPlanePlacementResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.ControlPlanePlacementResponse 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 placement configuration for all the control plane instances of your
+-- local Amazon EKS cluster on an Amazon Web Services Outpost. For more
+-- information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-capacity-considerations.html Capacity considerations>
+-- in the /Amazon EKS User Guide/.
+--
+-- /See:/ 'newControlPlanePlacementResponse' smart constructor.
+data ControlPlanePlacementResponse = ControlPlanePlacementResponse'
+  { -- | The name of the placement group for the Kubernetes control plane
+    -- instances.
+    groupName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ControlPlanePlacementResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupName', 'controlPlanePlacementResponse_groupName' - The name of the placement group for the Kubernetes control plane
+-- instances.
+newControlPlanePlacementResponse ::
+  ControlPlanePlacementResponse
+newControlPlanePlacementResponse =
+  ControlPlanePlacementResponse'
+    { groupName =
+        Prelude.Nothing
+    }
+
+-- | The name of the placement group for the Kubernetes control plane
+-- instances.
+controlPlanePlacementResponse_groupName :: Lens.Lens' ControlPlanePlacementResponse (Prelude.Maybe Prelude.Text)
+controlPlanePlacementResponse_groupName = Lens.lens (\ControlPlanePlacementResponse' {groupName} -> groupName) (\s@ControlPlanePlacementResponse' {} a -> s {groupName = a} :: ControlPlanePlacementResponse)
+
+instance Data.FromJSON ControlPlanePlacementResponse where
+  parseJSON =
+    Data.withObject
+      "ControlPlanePlacementResponse"
+      ( \x ->
+          ControlPlanePlacementResponse'
+            Prelude.<$> (x Data..:? "groupName")
+      )
+
+instance
+  Prelude.Hashable
+    ControlPlanePlacementResponse
+  where
+  hashWithSalt _salt ControlPlanePlacementResponse' {..} =
+    _salt `Prelude.hashWithSalt` groupName
+
+instance Prelude.NFData ControlPlanePlacementResponse where
+  rnf ControlPlanePlacementResponse' {..} =
+    Prelude.rnf groupName
diff --git a/gen/Amazonka/EKS/Types/EKSErrorCode.hs b/gen/Amazonka/EKS/Types/EKSErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/EKSErrorCode.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.EKSErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.EKSErrorCode
+  ( EKSErrorCode
+      ( ..,
+        EKSErrorCode_AccessDenied,
+        EKSErrorCode_AdmissionRequestDenied,
+        EKSErrorCode_ClusterUnreachable,
+        EKSErrorCode_ConfigurationConflict,
+        EKSErrorCode_EniLimitReached,
+        EKSErrorCode_InsufficientFreeAddresses,
+        EKSErrorCode_InsufficientNumberOfReplicas,
+        EKSErrorCode_IpNotAvailable,
+        EKSErrorCode_K8sResourceNotFound,
+        EKSErrorCode_NodeCreationFailure,
+        EKSErrorCode_OperationNotPermitted,
+        EKSErrorCode_PodEvictionFailure,
+        EKSErrorCode_SecurityGroupNotFound,
+        EKSErrorCode_SubnetNotFound,
+        EKSErrorCode_Unknown,
+        EKSErrorCode_UnsupportedAddonModification,
+        EKSErrorCode_VpcIdNotFound
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EKSErrorCode = EKSErrorCode'
+  { fromEKSErrorCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EKSErrorCode_AccessDenied :: EKSErrorCode
+pattern EKSErrorCode_AccessDenied = EKSErrorCode' "AccessDenied"
+
+pattern EKSErrorCode_AdmissionRequestDenied :: EKSErrorCode
+pattern EKSErrorCode_AdmissionRequestDenied = EKSErrorCode' "AdmissionRequestDenied"
+
+pattern EKSErrorCode_ClusterUnreachable :: EKSErrorCode
+pattern EKSErrorCode_ClusterUnreachable = EKSErrorCode' "ClusterUnreachable"
+
+pattern EKSErrorCode_ConfigurationConflict :: EKSErrorCode
+pattern EKSErrorCode_ConfigurationConflict = EKSErrorCode' "ConfigurationConflict"
+
+pattern EKSErrorCode_EniLimitReached :: EKSErrorCode
+pattern EKSErrorCode_EniLimitReached = EKSErrorCode' "EniLimitReached"
+
+pattern EKSErrorCode_InsufficientFreeAddresses :: EKSErrorCode
+pattern EKSErrorCode_InsufficientFreeAddresses = EKSErrorCode' "InsufficientFreeAddresses"
+
+pattern EKSErrorCode_InsufficientNumberOfReplicas :: EKSErrorCode
+pattern EKSErrorCode_InsufficientNumberOfReplicas = EKSErrorCode' "InsufficientNumberOfReplicas"
+
+pattern EKSErrorCode_IpNotAvailable :: EKSErrorCode
+pattern EKSErrorCode_IpNotAvailable = EKSErrorCode' "IpNotAvailable"
+
+pattern EKSErrorCode_K8sResourceNotFound :: EKSErrorCode
+pattern EKSErrorCode_K8sResourceNotFound = EKSErrorCode' "K8sResourceNotFound"
+
+pattern EKSErrorCode_NodeCreationFailure :: EKSErrorCode
+pattern EKSErrorCode_NodeCreationFailure = EKSErrorCode' "NodeCreationFailure"
+
+pattern EKSErrorCode_OperationNotPermitted :: EKSErrorCode
+pattern EKSErrorCode_OperationNotPermitted = EKSErrorCode' "OperationNotPermitted"
+
+pattern EKSErrorCode_PodEvictionFailure :: EKSErrorCode
+pattern EKSErrorCode_PodEvictionFailure = EKSErrorCode' "PodEvictionFailure"
+
+pattern EKSErrorCode_SecurityGroupNotFound :: EKSErrorCode
+pattern EKSErrorCode_SecurityGroupNotFound = EKSErrorCode' "SecurityGroupNotFound"
+
+pattern EKSErrorCode_SubnetNotFound :: EKSErrorCode
+pattern EKSErrorCode_SubnetNotFound = EKSErrorCode' "SubnetNotFound"
+
+pattern EKSErrorCode_Unknown :: EKSErrorCode
+pattern EKSErrorCode_Unknown = EKSErrorCode' "Unknown"
+
+pattern EKSErrorCode_UnsupportedAddonModification :: EKSErrorCode
+pattern EKSErrorCode_UnsupportedAddonModification = EKSErrorCode' "UnsupportedAddonModification"
+
+pattern EKSErrorCode_VpcIdNotFound :: EKSErrorCode
+pattern EKSErrorCode_VpcIdNotFound = EKSErrorCode' "VpcIdNotFound"
+
+{-# COMPLETE
+  EKSErrorCode_AccessDenied,
+  EKSErrorCode_AdmissionRequestDenied,
+  EKSErrorCode_ClusterUnreachable,
+  EKSErrorCode_ConfigurationConflict,
+  EKSErrorCode_EniLimitReached,
+  EKSErrorCode_InsufficientFreeAddresses,
+  EKSErrorCode_InsufficientNumberOfReplicas,
+  EKSErrorCode_IpNotAvailable,
+  EKSErrorCode_K8sResourceNotFound,
+  EKSErrorCode_NodeCreationFailure,
+  EKSErrorCode_OperationNotPermitted,
+  EKSErrorCode_PodEvictionFailure,
+  EKSErrorCode_SecurityGroupNotFound,
+  EKSErrorCode_SubnetNotFound,
+  EKSErrorCode_Unknown,
+  EKSErrorCode_UnsupportedAddonModification,
+  EKSErrorCode_VpcIdNotFound,
+  EKSErrorCode'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/EncryptionConfig.hs b/gen/Amazonka/EKS/Types/EncryptionConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/EncryptionConfig.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.EKS.Types.EncryptionConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.EncryptionConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.Provider
+import qualified Amazonka.Prelude as Prelude
+
+-- | The encryption configuration for the cluster.
+--
+-- /See:/ 'newEncryptionConfig' smart constructor.
+data EncryptionConfig = EncryptionConfig'
+  { -- | Key Management Service (KMS) key. Either the ARN or the alias can be
+    -- used.
+    provider :: Prelude.Maybe Provider,
+    -- | Specifies the resources to be encrypted. The only supported value is
+    -- \"secrets\".
+    resources :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EncryptionConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'provider', 'encryptionConfig_provider' - Key Management Service (KMS) key. Either the ARN or the alias can be
+-- used.
+--
+-- 'resources', 'encryptionConfig_resources' - Specifies the resources to be encrypted. The only supported value is
+-- \"secrets\".
+newEncryptionConfig ::
+  EncryptionConfig
+newEncryptionConfig =
+  EncryptionConfig'
+    { provider = Prelude.Nothing,
+      resources = Prelude.Nothing
+    }
+
+-- | Key Management Service (KMS) key. Either the ARN or the alias can be
+-- used.
+encryptionConfig_provider :: Lens.Lens' EncryptionConfig (Prelude.Maybe Provider)
+encryptionConfig_provider = Lens.lens (\EncryptionConfig' {provider} -> provider) (\s@EncryptionConfig' {} a -> s {provider = a} :: EncryptionConfig)
+
+-- | Specifies the resources to be encrypted. The only supported value is
+-- \"secrets\".
+encryptionConfig_resources :: Lens.Lens' EncryptionConfig (Prelude.Maybe [Prelude.Text])
+encryptionConfig_resources = Lens.lens (\EncryptionConfig' {resources} -> resources) (\s@EncryptionConfig' {} a -> s {resources = a} :: EncryptionConfig) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON EncryptionConfig where
+  parseJSON =
+    Data.withObject
+      "EncryptionConfig"
+      ( \x ->
+          EncryptionConfig'
+            Prelude.<$> (x Data..:? "provider")
+            Prelude.<*> (x Data..:? "resources" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable EncryptionConfig where
+  hashWithSalt _salt EncryptionConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` provider
+      `Prelude.hashWithSalt` resources
+
+instance Prelude.NFData EncryptionConfig where
+  rnf EncryptionConfig' {..} =
+    Prelude.rnf provider
+      `Prelude.seq` Prelude.rnf resources
+
+instance Data.ToJSON EncryptionConfig where
+  toJSON EncryptionConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("provider" Data..=) Prelude.<$> provider,
+            ("resources" Data..=) Prelude.<$> resources
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/ErrorDetail.hs b/gen/Amazonka/EKS/Types/ErrorDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/ErrorDetail.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.ErrorDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.ErrorDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.EKSErrorCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing an error when an asynchronous operation fails.
+--
+-- /See:/ 'newErrorDetail' smart constructor.
+data ErrorDetail = ErrorDetail'
+  { -- | A brief description of the error.
+    --
+    -- -   __SubnetNotFound__: We couldn\'t find one of the subnets associated
+    --     with the cluster.
+    --
+    -- -   __SecurityGroupNotFound__: We couldn\'t find one of the security
+    --     groups associated with the cluster.
+    --
+    -- -   __EniLimitReached__: You have reached the elastic network interface
+    --     limit for your account.
+    --
+    -- -   __IpNotAvailable__: A subnet associated with the cluster doesn\'t
+    --     have any free IP addresses.
+    --
+    -- -   __AccessDenied__: You don\'t have permissions to perform the
+    --     specified operation.
+    --
+    -- -   __OperationNotPermitted__: The service role associated with the
+    --     cluster doesn\'t have the required access permissions for Amazon
+    --     EKS.
+    --
+    -- -   __VpcIdNotFound__: We couldn\'t find the VPC associated with the
+    --     cluster.
+    errorCode :: Prelude.Maybe EKSErrorCode,
+    -- | A more complete description of the error.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | An optional field that contains the resource IDs associated with the
+    -- error.
+    resourceIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ErrorDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'errorDetail_errorCode' - A brief description of the error.
+--
+-- -   __SubnetNotFound__: We couldn\'t find one of the subnets associated
+--     with the cluster.
+--
+-- -   __SecurityGroupNotFound__: We couldn\'t find one of the security
+--     groups associated with the cluster.
+--
+-- -   __EniLimitReached__: You have reached the elastic network interface
+--     limit for your account.
+--
+-- -   __IpNotAvailable__: A subnet associated with the cluster doesn\'t
+--     have any free IP addresses.
+--
+-- -   __AccessDenied__: You don\'t have permissions to perform the
+--     specified operation.
+--
+-- -   __OperationNotPermitted__: The service role associated with the
+--     cluster doesn\'t have the required access permissions for Amazon
+--     EKS.
+--
+-- -   __VpcIdNotFound__: We couldn\'t find the VPC associated with the
+--     cluster.
+--
+-- 'errorMessage', 'errorDetail_errorMessage' - A more complete description of the error.
+--
+-- 'resourceIds', 'errorDetail_resourceIds' - An optional field that contains the resource IDs associated with the
+-- error.
+newErrorDetail ::
+  ErrorDetail
+newErrorDetail =
+  ErrorDetail'
+    { errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      resourceIds = Prelude.Nothing
+    }
+
+-- | A brief description of the error.
+--
+-- -   __SubnetNotFound__: We couldn\'t find one of the subnets associated
+--     with the cluster.
+--
+-- -   __SecurityGroupNotFound__: We couldn\'t find one of the security
+--     groups associated with the cluster.
+--
+-- -   __EniLimitReached__: You have reached the elastic network interface
+--     limit for your account.
+--
+-- -   __IpNotAvailable__: A subnet associated with the cluster doesn\'t
+--     have any free IP addresses.
+--
+-- -   __AccessDenied__: You don\'t have permissions to perform the
+--     specified operation.
+--
+-- -   __OperationNotPermitted__: The service role associated with the
+--     cluster doesn\'t have the required access permissions for Amazon
+--     EKS.
+--
+-- -   __VpcIdNotFound__: We couldn\'t find the VPC associated with the
+--     cluster.
+errorDetail_errorCode :: Lens.Lens' ErrorDetail (Prelude.Maybe EKSErrorCode)
+errorDetail_errorCode = Lens.lens (\ErrorDetail' {errorCode} -> errorCode) (\s@ErrorDetail' {} a -> s {errorCode = a} :: ErrorDetail)
+
+-- | A more complete description of the error.
+errorDetail_errorMessage :: Lens.Lens' ErrorDetail (Prelude.Maybe Prelude.Text)
+errorDetail_errorMessage = Lens.lens (\ErrorDetail' {errorMessage} -> errorMessage) (\s@ErrorDetail' {} a -> s {errorMessage = a} :: ErrorDetail)
+
+-- | An optional field that contains the resource IDs associated with the
+-- error.
+errorDetail_resourceIds :: Lens.Lens' ErrorDetail (Prelude.Maybe [Prelude.Text])
+errorDetail_resourceIds = Lens.lens (\ErrorDetail' {resourceIds} -> resourceIds) (\s@ErrorDetail' {} a -> s {resourceIds = a} :: ErrorDetail) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ErrorDetail where
+  parseJSON =
+    Data.withObject
+      "ErrorDetail"
+      ( \x ->
+          ErrorDetail'
+            Prelude.<$> (x Data..:? "errorCode")
+            Prelude.<*> (x Data..:? "errorMessage")
+            Prelude.<*> (x Data..:? "resourceIds" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ErrorDetail where
+  hashWithSalt _salt ErrorDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` resourceIds
+
+instance Prelude.NFData ErrorDetail where
+  rnf ErrorDetail' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf resourceIds
diff --git a/gen/Amazonka/EKS/Types/FargateProfile.hs b/gen/Amazonka/EKS/Types/FargateProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/FargateProfile.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.FargateProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.FargateProfile where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.FargateProfileSelector
+import Amazonka.EKS.Types.FargateProfileStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing an Fargate profile.
+--
+-- /See:/ 'newFargateProfile' smart constructor.
+data FargateProfile = FargateProfile'
+  { -- | The name of the Amazon EKS cluster that the Fargate profile belongs to.
+    clusterName :: Prelude.Maybe Prelude.Text,
+    -- | The Unix epoch timestamp in seconds for when the Fargate profile was
+    -- created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The full Amazon Resource Name (ARN) of the Fargate profile.
+    fargateProfileArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Fargate profile.
+    fargateProfileName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the pod execution role to use for pods
+    -- that match the selectors in the Fargate profile. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html Pod Execution Role>
+    -- in the /Amazon EKS User Guide/.
+    podExecutionRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The selectors to match for pods to use this Fargate profile.
+    selectors :: Prelude.Maybe [FargateProfileSelector],
+    -- | The current status of the Fargate profile.
+    status :: Prelude.Maybe FargateProfileStatus,
+    -- | The IDs of subnets to launch pods into.
+    subnets :: Prelude.Maybe [Prelude.Text],
+    -- | The metadata applied to the Fargate profile to assist with
+    -- categorization and organization. Each tag consists of a key and an
+    -- optional value. You define both. Fargate profile tags do not propagate
+    -- to any other resources associated with the Fargate profile, such as the
+    -- pods that are scheduled with it.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FargateProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterName', 'fargateProfile_clusterName' - The name of the Amazon EKS cluster that the Fargate profile belongs to.
+--
+-- 'createdAt', 'fargateProfile_createdAt' - The Unix epoch timestamp in seconds for when the Fargate profile was
+-- created.
+--
+-- 'fargateProfileArn', 'fargateProfile_fargateProfileArn' - The full Amazon Resource Name (ARN) of the Fargate profile.
+--
+-- 'fargateProfileName', 'fargateProfile_fargateProfileName' - The name of the Fargate profile.
+--
+-- 'podExecutionRoleArn', 'fargateProfile_podExecutionRoleArn' - The Amazon Resource Name (ARN) of the pod execution role to use for pods
+-- that match the selectors in the Fargate profile. For more information,
+-- see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html Pod Execution Role>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'selectors', 'fargateProfile_selectors' - The selectors to match for pods to use this Fargate profile.
+--
+-- 'status', 'fargateProfile_status' - The current status of the Fargate profile.
+--
+-- 'subnets', 'fargateProfile_subnets' - The IDs of subnets to launch pods into.
+--
+-- 'tags', 'fargateProfile_tags' - The metadata applied to the Fargate profile to assist with
+-- categorization and organization. Each tag consists of a key and an
+-- optional value. You define both. Fargate profile tags do not propagate
+-- to any other resources associated with the Fargate profile, such as the
+-- pods that are scheduled with it.
+newFargateProfile ::
+  FargateProfile
+newFargateProfile =
+  FargateProfile'
+    { clusterName = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      fargateProfileArn = Prelude.Nothing,
+      fargateProfileName = Prelude.Nothing,
+      podExecutionRoleArn = Prelude.Nothing,
+      selectors = Prelude.Nothing,
+      status = Prelude.Nothing,
+      subnets = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The name of the Amazon EKS cluster that the Fargate profile belongs to.
+fargateProfile_clusterName :: Lens.Lens' FargateProfile (Prelude.Maybe Prelude.Text)
+fargateProfile_clusterName = Lens.lens (\FargateProfile' {clusterName} -> clusterName) (\s@FargateProfile' {} a -> s {clusterName = a} :: FargateProfile)
+
+-- | The Unix epoch timestamp in seconds for when the Fargate profile was
+-- created.
+fargateProfile_createdAt :: Lens.Lens' FargateProfile (Prelude.Maybe Prelude.UTCTime)
+fargateProfile_createdAt = Lens.lens (\FargateProfile' {createdAt} -> createdAt) (\s@FargateProfile' {} a -> s {createdAt = a} :: FargateProfile) Prelude.. Lens.mapping Data._Time
+
+-- | The full Amazon Resource Name (ARN) of the Fargate profile.
+fargateProfile_fargateProfileArn :: Lens.Lens' FargateProfile (Prelude.Maybe Prelude.Text)
+fargateProfile_fargateProfileArn = Lens.lens (\FargateProfile' {fargateProfileArn} -> fargateProfileArn) (\s@FargateProfile' {} a -> s {fargateProfileArn = a} :: FargateProfile)
+
+-- | The name of the Fargate profile.
+fargateProfile_fargateProfileName :: Lens.Lens' FargateProfile (Prelude.Maybe Prelude.Text)
+fargateProfile_fargateProfileName = Lens.lens (\FargateProfile' {fargateProfileName} -> fargateProfileName) (\s@FargateProfile' {} a -> s {fargateProfileName = a} :: FargateProfile)
+
+-- | The Amazon Resource Name (ARN) of the pod execution role to use for pods
+-- that match the selectors in the Fargate profile. For more information,
+-- see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html Pod Execution Role>
+-- in the /Amazon EKS User Guide/.
+fargateProfile_podExecutionRoleArn :: Lens.Lens' FargateProfile (Prelude.Maybe Prelude.Text)
+fargateProfile_podExecutionRoleArn = Lens.lens (\FargateProfile' {podExecutionRoleArn} -> podExecutionRoleArn) (\s@FargateProfile' {} a -> s {podExecutionRoleArn = a} :: FargateProfile)
+
+-- | The selectors to match for pods to use this Fargate profile.
+fargateProfile_selectors :: Lens.Lens' FargateProfile (Prelude.Maybe [FargateProfileSelector])
+fargateProfile_selectors = Lens.lens (\FargateProfile' {selectors} -> selectors) (\s@FargateProfile' {} a -> s {selectors = a} :: FargateProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The current status of the Fargate profile.
+fargateProfile_status :: Lens.Lens' FargateProfile (Prelude.Maybe FargateProfileStatus)
+fargateProfile_status = Lens.lens (\FargateProfile' {status} -> status) (\s@FargateProfile' {} a -> s {status = a} :: FargateProfile)
+
+-- | The IDs of subnets to launch pods into.
+fargateProfile_subnets :: Lens.Lens' FargateProfile (Prelude.Maybe [Prelude.Text])
+fargateProfile_subnets = Lens.lens (\FargateProfile' {subnets} -> subnets) (\s@FargateProfile' {} a -> s {subnets = a} :: FargateProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The metadata applied to the Fargate profile to assist with
+-- categorization and organization. Each tag consists of a key and an
+-- optional value. You define both. Fargate profile tags do not propagate
+-- to any other resources associated with the Fargate profile, such as the
+-- pods that are scheduled with it.
+fargateProfile_tags :: Lens.Lens' FargateProfile (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+fargateProfile_tags = Lens.lens (\FargateProfile' {tags} -> tags) (\s@FargateProfile' {} a -> s {tags = a} :: FargateProfile) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON FargateProfile where
+  parseJSON =
+    Data.withObject
+      "FargateProfile"
+      ( \x ->
+          FargateProfile'
+            Prelude.<$> (x Data..:? "clusterName")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "fargateProfileArn")
+            Prelude.<*> (x Data..:? "fargateProfileName")
+            Prelude.<*> (x Data..:? "podExecutionRoleArn")
+            Prelude.<*> (x Data..:? "selectors" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "subnets" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable FargateProfile where
+  hashWithSalt _salt FargateProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` fargateProfileArn
+      `Prelude.hashWithSalt` fargateProfileName
+      `Prelude.hashWithSalt` podExecutionRoleArn
+      `Prelude.hashWithSalt` selectors
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` subnets
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData FargateProfile where
+  rnf FargateProfile' {..} =
+    Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf fargateProfileArn
+      `Prelude.seq` Prelude.rnf fargateProfileName
+      `Prelude.seq` Prelude.rnf podExecutionRoleArn
+      `Prelude.seq` Prelude.rnf selectors
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf subnets
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EKS/Types/FargateProfileSelector.hs b/gen/Amazonka/EKS/Types/FargateProfileSelector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/FargateProfileSelector.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.FargateProfileSelector
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.FargateProfileSelector 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 object representing an Fargate profile selector.
+--
+-- /See:/ 'newFargateProfileSelector' smart constructor.
+data FargateProfileSelector = FargateProfileSelector'
+  { -- | The Kubernetes labels that the selector should match. A pod must contain
+    -- all of the labels that are specified in the selector for it to be
+    -- considered a match.
+    labels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Kubernetes namespace that the selector should match.
+    namespace :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FargateProfileSelector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'labels', 'fargateProfileSelector_labels' - The Kubernetes labels that the selector should match. A pod must contain
+-- all of the labels that are specified in the selector for it to be
+-- considered a match.
+--
+-- 'namespace', 'fargateProfileSelector_namespace' - The Kubernetes namespace that the selector should match.
+newFargateProfileSelector ::
+  FargateProfileSelector
+newFargateProfileSelector =
+  FargateProfileSelector'
+    { labels = Prelude.Nothing,
+      namespace = Prelude.Nothing
+    }
+
+-- | The Kubernetes labels that the selector should match. A pod must contain
+-- all of the labels that are specified in the selector for it to be
+-- considered a match.
+fargateProfileSelector_labels :: Lens.Lens' FargateProfileSelector (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+fargateProfileSelector_labels = Lens.lens (\FargateProfileSelector' {labels} -> labels) (\s@FargateProfileSelector' {} a -> s {labels = a} :: FargateProfileSelector) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Kubernetes namespace that the selector should match.
+fargateProfileSelector_namespace :: Lens.Lens' FargateProfileSelector (Prelude.Maybe Prelude.Text)
+fargateProfileSelector_namespace = Lens.lens (\FargateProfileSelector' {namespace} -> namespace) (\s@FargateProfileSelector' {} a -> s {namespace = a} :: FargateProfileSelector)
+
+instance Data.FromJSON FargateProfileSelector where
+  parseJSON =
+    Data.withObject
+      "FargateProfileSelector"
+      ( \x ->
+          FargateProfileSelector'
+            Prelude.<$> (x Data..:? "labels" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "namespace")
+      )
+
+instance Prelude.Hashable FargateProfileSelector where
+  hashWithSalt _salt FargateProfileSelector' {..} =
+    _salt
+      `Prelude.hashWithSalt` labels
+      `Prelude.hashWithSalt` namespace
+
+instance Prelude.NFData FargateProfileSelector where
+  rnf FargateProfileSelector' {..} =
+    Prelude.rnf labels
+      `Prelude.seq` Prelude.rnf namespace
+
+instance Data.ToJSON FargateProfileSelector where
+  toJSON FargateProfileSelector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("labels" Data..=) Prelude.<$> labels,
+            ("namespace" Data..=) Prelude.<$> namespace
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/FargateProfileStatus.hs b/gen/Amazonka/EKS/Types/FargateProfileStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/FargateProfileStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.FargateProfileStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.FargateProfileStatus
+  ( FargateProfileStatus
+      ( ..,
+        FargateProfileStatus_ACTIVE,
+        FargateProfileStatus_CREATE_FAILED,
+        FargateProfileStatus_CREATING,
+        FargateProfileStatus_DELETE_FAILED,
+        FargateProfileStatus_DELETING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FargateProfileStatus = FargateProfileStatus'
+  { fromFargateProfileStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FargateProfileStatus_ACTIVE :: FargateProfileStatus
+pattern FargateProfileStatus_ACTIVE = FargateProfileStatus' "ACTIVE"
+
+pattern FargateProfileStatus_CREATE_FAILED :: FargateProfileStatus
+pattern FargateProfileStatus_CREATE_FAILED = FargateProfileStatus' "CREATE_FAILED"
+
+pattern FargateProfileStatus_CREATING :: FargateProfileStatus
+pattern FargateProfileStatus_CREATING = FargateProfileStatus' "CREATING"
+
+pattern FargateProfileStatus_DELETE_FAILED :: FargateProfileStatus
+pattern FargateProfileStatus_DELETE_FAILED = FargateProfileStatus' "DELETE_FAILED"
+
+pattern FargateProfileStatus_DELETING :: FargateProfileStatus
+pattern FargateProfileStatus_DELETING = FargateProfileStatus' "DELETING"
+
+{-# COMPLETE
+  FargateProfileStatus_ACTIVE,
+  FargateProfileStatus_CREATE_FAILED,
+  FargateProfileStatus_CREATING,
+  FargateProfileStatus_DELETE_FAILED,
+  FargateProfileStatus_DELETING,
+  FargateProfileStatus'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/Identity.hs b/gen/Amazonka/EKS/Types/Identity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/Identity.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.Identity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.Identity where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.OIDC
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing an identity provider.
+--
+-- /See:/ 'newIdentity' smart constructor.
+data Identity = Identity'
+  { -- | An object representing the <https://openid.net/connect/ OpenID Connect>
+    -- identity provider information.
+    oidc :: Prelude.Maybe OIDC
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Identity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'oidc', 'identity_oidc' - An object representing the <https://openid.net/connect/ OpenID Connect>
+-- identity provider information.
+newIdentity ::
+  Identity
+newIdentity = Identity' {oidc = Prelude.Nothing}
+
+-- | An object representing the <https://openid.net/connect/ OpenID Connect>
+-- identity provider information.
+identity_oidc :: Lens.Lens' Identity (Prelude.Maybe OIDC)
+identity_oidc = Lens.lens (\Identity' {oidc} -> oidc) (\s@Identity' {} a -> s {oidc = a} :: Identity)
+
+instance Data.FromJSON Identity where
+  parseJSON =
+    Data.withObject
+      "Identity"
+      (\x -> Identity' Prelude.<$> (x Data..:? "oidc"))
+
+instance Prelude.Hashable Identity where
+  hashWithSalt _salt Identity' {..} =
+    _salt `Prelude.hashWithSalt` oidc
+
+instance Prelude.NFData Identity where
+  rnf Identity' {..} = Prelude.rnf oidc
diff --git a/gen/Amazonka/EKS/Types/IdentityProviderConfig.hs b/gen/Amazonka/EKS/Types/IdentityProviderConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/IdentityProviderConfig.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.IdentityProviderConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.IdentityProviderConfig 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 object representing an identity provider configuration.
+--
+-- /See:/ 'newIdentityProviderConfig' smart constructor.
+data IdentityProviderConfig = IdentityProviderConfig'
+  { -- | The type of the identity provider configuration. The only type available
+    -- is @oidc@.
+    type' :: Prelude.Text,
+    -- | The name of the identity provider configuration.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IdentityProviderConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'type'', 'identityProviderConfig_type' - The type of the identity provider configuration. The only type available
+-- is @oidc@.
+--
+-- 'name', 'identityProviderConfig_name' - The name of the identity provider configuration.
+newIdentityProviderConfig ::
+  -- | 'type''
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  IdentityProviderConfig
+newIdentityProviderConfig pType_ pName_ =
+  IdentityProviderConfig'
+    { type' = pType_,
+      name = pName_
+    }
+
+-- | The type of the identity provider configuration. The only type available
+-- is @oidc@.
+identityProviderConfig_type :: Lens.Lens' IdentityProviderConfig Prelude.Text
+identityProviderConfig_type = Lens.lens (\IdentityProviderConfig' {type'} -> type') (\s@IdentityProviderConfig' {} a -> s {type' = a} :: IdentityProviderConfig)
+
+-- | The name of the identity provider configuration.
+identityProviderConfig_name :: Lens.Lens' IdentityProviderConfig Prelude.Text
+identityProviderConfig_name = Lens.lens (\IdentityProviderConfig' {name} -> name) (\s@IdentityProviderConfig' {} a -> s {name = a} :: IdentityProviderConfig)
+
+instance Data.FromJSON IdentityProviderConfig where
+  parseJSON =
+    Data.withObject
+      "IdentityProviderConfig"
+      ( \x ->
+          IdentityProviderConfig'
+            Prelude.<$> (x Data..: "type")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable IdentityProviderConfig where
+  hashWithSalt _salt IdentityProviderConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData IdentityProviderConfig where
+  rnf IdentityProviderConfig' {..} =
+    Prelude.rnf type' `Prelude.seq` Prelude.rnf name
+
+instance Data.ToJSON IdentityProviderConfig where
+  toJSON IdentityProviderConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("type" Data..= type'),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/IdentityProviderConfigResponse.hs b/gen/Amazonka/EKS/Types/IdentityProviderConfigResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/IdentityProviderConfigResponse.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.EKS.Types.IdentityProviderConfigResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.IdentityProviderConfigResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.OidcIdentityProviderConfig
+import qualified Amazonka.Prelude as Prelude
+
+-- | The full description of your identity configuration.
+--
+-- /See:/ 'newIdentityProviderConfigResponse' smart constructor.
+data IdentityProviderConfigResponse = IdentityProviderConfigResponse'
+  { -- | An object representing an OpenID Connect (OIDC) identity provider
+    -- configuration.
+    oidc :: Prelude.Maybe OidcIdentityProviderConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IdentityProviderConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'oidc', 'identityProviderConfigResponse_oidc' - An object representing an OpenID Connect (OIDC) identity provider
+-- configuration.
+newIdentityProviderConfigResponse ::
+  IdentityProviderConfigResponse
+newIdentityProviderConfigResponse =
+  IdentityProviderConfigResponse'
+    { oidc =
+        Prelude.Nothing
+    }
+
+-- | An object representing an OpenID Connect (OIDC) identity provider
+-- configuration.
+identityProviderConfigResponse_oidc :: Lens.Lens' IdentityProviderConfigResponse (Prelude.Maybe OidcIdentityProviderConfig)
+identityProviderConfigResponse_oidc = Lens.lens (\IdentityProviderConfigResponse' {oidc} -> oidc) (\s@IdentityProviderConfigResponse' {} a -> s {oidc = a} :: IdentityProviderConfigResponse)
+
+instance Data.FromJSON IdentityProviderConfigResponse where
+  parseJSON =
+    Data.withObject
+      "IdentityProviderConfigResponse"
+      ( \x ->
+          IdentityProviderConfigResponse'
+            Prelude.<$> (x Data..:? "oidc")
+      )
+
+instance
+  Prelude.Hashable
+    IdentityProviderConfigResponse
+  where
+  hashWithSalt
+    _salt
+    IdentityProviderConfigResponse' {..} =
+      _salt `Prelude.hashWithSalt` oidc
+
+instance
+  Prelude.NFData
+    IdentityProviderConfigResponse
+  where
+  rnf IdentityProviderConfigResponse' {..} =
+    Prelude.rnf oidc
diff --git a/gen/Amazonka/EKS/Types/IpFamily.hs b/gen/Amazonka/EKS/Types/IpFamily.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/IpFamily.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.EKS.Types.IpFamily
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.IpFamily
+  ( IpFamily
+      ( ..,
+        IpFamily_Ipv4,
+        IpFamily_Ipv6
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpFamily = IpFamily'
+  { fromIpFamily ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpFamily_Ipv4 :: IpFamily
+pattern IpFamily_Ipv4 = IpFamily' "ipv4"
+
+pattern IpFamily_Ipv6 :: IpFamily
+pattern IpFamily_Ipv6 = IpFamily' "ipv6"
+
+{-# COMPLETE
+  IpFamily_Ipv4,
+  IpFamily_Ipv6,
+  IpFamily'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/Issue.hs b/gen/Amazonka/EKS/Types/Issue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/Issue.hs
@@ -0,0 +1,295 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.Issue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.Issue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.NodegroupIssueCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing an issue with an Amazon EKS resource.
+--
+-- /See:/ 'newIssue' smart constructor.
+data Issue = Issue'
+  { -- | A brief description of the error.
+    --
+    -- -   __AccessDenied__: Amazon EKS or one or more of your managed nodes is
+    --     failing to authenticate or authorize with your Kubernetes cluster
+    --     API server.
+    --
+    -- -   __AsgInstanceLaunchFailures__: Your Auto Scaling group is
+    --     experiencing failures while attempting to launch instances.
+    --
+    -- -   __AutoScalingGroupNotFound__: We couldn\'t find the Auto Scaling
+    --     group associated with the managed node group. You may be able to
+    --     recreate an Auto Scaling group with the same settings to recover.
+    --
+    -- -   __ClusterUnreachable__: Amazon EKS or one or more of your managed
+    --     nodes is unable to to communicate with your Kubernetes cluster API
+    --     server. This can happen if there are network disruptions or if API
+    --     servers are timing out processing requests.
+    --
+    -- -   __Ec2LaunchTemplateNotFound__: We couldn\'t find the Amazon EC2
+    --     launch template for your managed node group. You may be able to
+    --     recreate a launch template with the same settings to recover.
+    --
+    -- -   __Ec2LaunchTemplateVersionMismatch__: The Amazon EC2 launch template
+    --     version for your managed node group does not match the version that
+    --     Amazon EKS created. You may be able to revert to the version that
+    --     Amazon EKS created to recover.
+    --
+    -- -   __Ec2SecurityGroupDeletionFailure__: We could not delete the remote
+    --     access security group for your managed node group. Remove any
+    --     dependencies from the security group.
+    --
+    -- -   __Ec2SecurityGroupNotFound__: We couldn\'t find the cluster security
+    --     group for the cluster. You must recreate your cluster.
+    --
+    -- -   __Ec2SubnetInvalidConfiguration__: One or more Amazon EC2 subnets
+    --     specified for a node group do not automatically assign public IP
+    --     addresses to instances launched into it. If you want your instances
+    --     to be assigned a public IP address, then you need to enable the
+    --     @auto-assign public IP address@ setting for the subnet. See
+    --     <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip Modifying the public IPv4 addressing attribute for your subnet>
+    --     in the /Amazon VPC User Guide/.
+    --
+    -- -   __IamInstanceProfileNotFound__: We couldn\'t find the IAM instance
+    --     profile for your managed node group. You may be able to recreate an
+    --     instance profile with the same settings to recover.
+    --
+    -- -   __IamNodeRoleNotFound__: We couldn\'t find the IAM role for your
+    --     managed node group. You may be able to recreate an IAM role with the
+    --     same settings to recover.
+    --
+    -- -   __InstanceLimitExceeded__: Your Amazon Web Services account is
+    --     unable to launch any more instances of the specified instance type.
+    --     You may be able to request an Amazon EC2 instance limit increase to
+    --     recover.
+    --
+    -- -   __InsufficientFreeAddresses__: One or more of the subnets associated
+    --     with your managed node group does not have enough available IP
+    --     addresses for new nodes.
+    --
+    -- -   __InternalFailure__: These errors are usually caused by an Amazon
+    --     EKS server-side issue.
+    --
+    -- -   __NodeCreationFailure__: Your launched instances are unable to
+    --     register with your Amazon EKS cluster. Common causes of this failure
+    --     are insufficient
+    --     <https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html node IAM role>
+    --     permissions or lack of outbound internet access for the nodes.
+    code :: Prelude.Maybe NodegroupIssueCode,
+    -- | The error message associated with the issue.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services resources that are afflicted by this issue.
+    resourceIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Issue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'issue_code' - A brief description of the error.
+--
+-- -   __AccessDenied__: Amazon EKS or one or more of your managed nodes is
+--     failing to authenticate or authorize with your Kubernetes cluster
+--     API server.
+--
+-- -   __AsgInstanceLaunchFailures__: Your Auto Scaling group is
+--     experiencing failures while attempting to launch instances.
+--
+-- -   __AutoScalingGroupNotFound__: We couldn\'t find the Auto Scaling
+--     group associated with the managed node group. You may be able to
+--     recreate an Auto Scaling group with the same settings to recover.
+--
+-- -   __ClusterUnreachable__: Amazon EKS or one or more of your managed
+--     nodes is unable to to communicate with your Kubernetes cluster API
+--     server. This can happen if there are network disruptions or if API
+--     servers are timing out processing requests.
+--
+-- -   __Ec2LaunchTemplateNotFound__: We couldn\'t find the Amazon EC2
+--     launch template for your managed node group. You may be able to
+--     recreate a launch template with the same settings to recover.
+--
+-- -   __Ec2LaunchTemplateVersionMismatch__: The Amazon EC2 launch template
+--     version for your managed node group does not match the version that
+--     Amazon EKS created. You may be able to revert to the version that
+--     Amazon EKS created to recover.
+--
+-- -   __Ec2SecurityGroupDeletionFailure__: We could not delete the remote
+--     access security group for your managed node group. Remove any
+--     dependencies from the security group.
+--
+-- -   __Ec2SecurityGroupNotFound__: We couldn\'t find the cluster security
+--     group for the cluster. You must recreate your cluster.
+--
+-- -   __Ec2SubnetInvalidConfiguration__: One or more Amazon EC2 subnets
+--     specified for a node group do not automatically assign public IP
+--     addresses to instances launched into it. If you want your instances
+--     to be assigned a public IP address, then you need to enable the
+--     @auto-assign public IP address@ setting for the subnet. See
+--     <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip Modifying the public IPv4 addressing attribute for your subnet>
+--     in the /Amazon VPC User Guide/.
+--
+-- -   __IamInstanceProfileNotFound__: We couldn\'t find the IAM instance
+--     profile for your managed node group. You may be able to recreate an
+--     instance profile with the same settings to recover.
+--
+-- -   __IamNodeRoleNotFound__: We couldn\'t find the IAM role for your
+--     managed node group. You may be able to recreate an IAM role with the
+--     same settings to recover.
+--
+-- -   __InstanceLimitExceeded__: Your Amazon Web Services account is
+--     unable to launch any more instances of the specified instance type.
+--     You may be able to request an Amazon EC2 instance limit increase to
+--     recover.
+--
+-- -   __InsufficientFreeAddresses__: One or more of the subnets associated
+--     with your managed node group does not have enough available IP
+--     addresses for new nodes.
+--
+-- -   __InternalFailure__: These errors are usually caused by an Amazon
+--     EKS server-side issue.
+--
+-- -   __NodeCreationFailure__: Your launched instances are unable to
+--     register with your Amazon EKS cluster. Common causes of this failure
+--     are insufficient
+--     <https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html node IAM role>
+--     permissions or lack of outbound internet access for the nodes.
+--
+-- 'message', 'issue_message' - The error message associated with the issue.
+--
+-- 'resourceIds', 'issue_resourceIds' - The Amazon Web Services resources that are afflicted by this issue.
+newIssue ::
+  Issue
+newIssue =
+  Issue'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing,
+      resourceIds = Prelude.Nothing
+    }
+
+-- | A brief description of the error.
+--
+-- -   __AccessDenied__: Amazon EKS or one or more of your managed nodes is
+--     failing to authenticate or authorize with your Kubernetes cluster
+--     API server.
+--
+-- -   __AsgInstanceLaunchFailures__: Your Auto Scaling group is
+--     experiencing failures while attempting to launch instances.
+--
+-- -   __AutoScalingGroupNotFound__: We couldn\'t find the Auto Scaling
+--     group associated with the managed node group. You may be able to
+--     recreate an Auto Scaling group with the same settings to recover.
+--
+-- -   __ClusterUnreachable__: Amazon EKS or one or more of your managed
+--     nodes is unable to to communicate with your Kubernetes cluster API
+--     server. This can happen if there are network disruptions or if API
+--     servers are timing out processing requests.
+--
+-- -   __Ec2LaunchTemplateNotFound__: We couldn\'t find the Amazon EC2
+--     launch template for your managed node group. You may be able to
+--     recreate a launch template with the same settings to recover.
+--
+-- -   __Ec2LaunchTemplateVersionMismatch__: The Amazon EC2 launch template
+--     version for your managed node group does not match the version that
+--     Amazon EKS created. You may be able to revert to the version that
+--     Amazon EKS created to recover.
+--
+-- -   __Ec2SecurityGroupDeletionFailure__: We could not delete the remote
+--     access security group for your managed node group. Remove any
+--     dependencies from the security group.
+--
+-- -   __Ec2SecurityGroupNotFound__: We couldn\'t find the cluster security
+--     group for the cluster. You must recreate your cluster.
+--
+-- -   __Ec2SubnetInvalidConfiguration__: One or more Amazon EC2 subnets
+--     specified for a node group do not automatically assign public IP
+--     addresses to instances launched into it. If you want your instances
+--     to be assigned a public IP address, then you need to enable the
+--     @auto-assign public IP address@ setting for the subnet. See
+--     <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip Modifying the public IPv4 addressing attribute for your subnet>
+--     in the /Amazon VPC User Guide/.
+--
+-- -   __IamInstanceProfileNotFound__: We couldn\'t find the IAM instance
+--     profile for your managed node group. You may be able to recreate an
+--     instance profile with the same settings to recover.
+--
+-- -   __IamNodeRoleNotFound__: We couldn\'t find the IAM role for your
+--     managed node group. You may be able to recreate an IAM role with the
+--     same settings to recover.
+--
+-- -   __InstanceLimitExceeded__: Your Amazon Web Services account is
+--     unable to launch any more instances of the specified instance type.
+--     You may be able to request an Amazon EC2 instance limit increase to
+--     recover.
+--
+-- -   __InsufficientFreeAddresses__: One or more of the subnets associated
+--     with your managed node group does not have enough available IP
+--     addresses for new nodes.
+--
+-- -   __InternalFailure__: These errors are usually caused by an Amazon
+--     EKS server-side issue.
+--
+-- -   __NodeCreationFailure__: Your launched instances are unable to
+--     register with your Amazon EKS cluster. Common causes of this failure
+--     are insufficient
+--     <https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html node IAM role>
+--     permissions or lack of outbound internet access for the nodes.
+issue_code :: Lens.Lens' Issue (Prelude.Maybe NodegroupIssueCode)
+issue_code = Lens.lens (\Issue' {code} -> code) (\s@Issue' {} a -> s {code = a} :: Issue)
+
+-- | The error message associated with the issue.
+issue_message :: Lens.Lens' Issue (Prelude.Maybe Prelude.Text)
+issue_message = Lens.lens (\Issue' {message} -> message) (\s@Issue' {} a -> s {message = a} :: Issue)
+
+-- | The Amazon Web Services resources that are afflicted by this issue.
+issue_resourceIds :: Lens.Lens' Issue (Prelude.Maybe [Prelude.Text])
+issue_resourceIds = Lens.lens (\Issue' {resourceIds} -> resourceIds) (\s@Issue' {} a -> s {resourceIds = a} :: Issue) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Issue where
+  parseJSON =
+    Data.withObject
+      "Issue"
+      ( \x ->
+          Issue'
+            Prelude.<$> (x Data..:? "code")
+            Prelude.<*> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "resourceIds" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable Issue where
+  hashWithSalt _salt Issue' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` resourceIds
+
+instance Prelude.NFData Issue where
+  rnf Issue' {..} =
+    Prelude.rnf code
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf resourceIds
diff --git a/gen/Amazonka/EKS/Types/KubernetesNetworkConfigRequest.hs b/gen/Amazonka/EKS/Types/KubernetesNetworkConfigRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/KubernetesNetworkConfigRequest.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.KubernetesNetworkConfigRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.KubernetesNetworkConfigRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.IpFamily
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Kubernetes network configuration for the cluster.
+--
+-- /See:/ 'newKubernetesNetworkConfigRequest' smart constructor.
+data KubernetesNetworkConfigRequest = KubernetesNetworkConfigRequest'
+  { -- | Specify which IP family is used to assign Kubernetes pod and service IP
+    -- addresses. If you don\'t specify a value, @ipv4@ is used by default. You
+    -- can only specify an IP family when you create a cluster and can\'t
+    -- change this value once the cluster is created. If you specify @ipv6@,
+    -- the VPC and subnets that you specify for cluster creation must have both
+    -- @IPv4@ and @IPv6@ CIDR blocks assigned to them. You can\'t specify
+    -- @ipv6@ for clusters in China Regions.
+    --
+    -- You can only specify @ipv6@ for @1.21@ and later clusters that use
+    -- version @1.10.1@ or later of the Amazon VPC CNI add-on. If you specify
+    -- @ipv6@, then ensure that your VPC meets the requirements listed in the
+    -- considerations listed in
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/cni-ipv6.html Assigning IPv6 addresses to pods and services>
+    -- in the Amazon EKS User Guide. Kubernetes assigns services @IPv6@
+    -- addresses from the unique local address range @(fc00::\/7)@. You can\'t
+    -- specify a custom @IPv6@ CIDR block. Pod addresses are assigned from the
+    -- subnet\'s @IPv6@ CIDR.
+    ipFamily :: Prelude.Maybe IpFamily,
+    -- | Don\'t specify a value if you select @ipv6@ for __ipFamily__. The CIDR
+    -- block to assign Kubernetes service IP addresses from. If you don\'t
+    -- specify a block, Kubernetes assigns addresses from either the
+    -- @10.100.0.0\/16@ or @172.20.0.0\/16@ CIDR blocks. We recommend that you
+    -- specify a block that does not overlap with resources in other networks
+    -- that are peered or connected to your VPC. The block must meet the
+    -- following requirements:
+    --
+    -- -   Within one of the following private IP address blocks:
+    --     @10.0.0.0\/8@, @172.16.0.0\/12@, or @192.168.0.0\/16@.
+    --
+    -- -   Doesn\'t overlap with any CIDR block assigned to the VPC that you
+    --     selected for VPC.
+    --
+    -- -   Between \/24 and \/12.
+    --
+    -- You can only specify a custom CIDR block when you create a cluster and
+    -- can\'t change this value once the cluster is created.
+    serviceIpv4Cidr :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KubernetesNetworkConfigRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipFamily', 'kubernetesNetworkConfigRequest_ipFamily' - Specify which IP family is used to assign Kubernetes pod and service IP
+-- addresses. If you don\'t specify a value, @ipv4@ is used by default. You
+-- can only specify an IP family when you create a cluster and can\'t
+-- change this value once the cluster is created. If you specify @ipv6@,
+-- the VPC and subnets that you specify for cluster creation must have both
+-- @IPv4@ and @IPv6@ CIDR blocks assigned to them. You can\'t specify
+-- @ipv6@ for clusters in China Regions.
+--
+-- You can only specify @ipv6@ for @1.21@ and later clusters that use
+-- version @1.10.1@ or later of the Amazon VPC CNI add-on. If you specify
+-- @ipv6@, then ensure that your VPC meets the requirements listed in the
+-- considerations listed in
+-- <https://docs.aws.amazon.com/eks/latest/userguide/cni-ipv6.html Assigning IPv6 addresses to pods and services>
+-- in the Amazon EKS User Guide. Kubernetes assigns services @IPv6@
+-- addresses from the unique local address range @(fc00::\/7)@. You can\'t
+-- specify a custom @IPv6@ CIDR block. Pod addresses are assigned from the
+-- subnet\'s @IPv6@ CIDR.
+--
+-- 'serviceIpv4Cidr', 'kubernetesNetworkConfigRequest_serviceIpv4Cidr' - Don\'t specify a value if you select @ipv6@ for __ipFamily__. The CIDR
+-- block to assign Kubernetes service IP addresses from. If you don\'t
+-- specify a block, Kubernetes assigns addresses from either the
+-- @10.100.0.0\/16@ or @172.20.0.0\/16@ CIDR blocks. We recommend that you
+-- specify a block that does not overlap with resources in other networks
+-- that are peered or connected to your VPC. The block must meet the
+-- following requirements:
+--
+-- -   Within one of the following private IP address blocks:
+--     @10.0.0.0\/8@, @172.16.0.0\/12@, or @192.168.0.0\/16@.
+--
+-- -   Doesn\'t overlap with any CIDR block assigned to the VPC that you
+--     selected for VPC.
+--
+-- -   Between \/24 and \/12.
+--
+-- You can only specify a custom CIDR block when you create a cluster and
+-- can\'t change this value once the cluster is created.
+newKubernetesNetworkConfigRequest ::
+  KubernetesNetworkConfigRequest
+newKubernetesNetworkConfigRequest =
+  KubernetesNetworkConfigRequest'
+    { ipFamily =
+        Prelude.Nothing,
+      serviceIpv4Cidr = Prelude.Nothing
+    }
+
+-- | Specify which IP family is used to assign Kubernetes pod and service IP
+-- addresses. If you don\'t specify a value, @ipv4@ is used by default. You
+-- can only specify an IP family when you create a cluster and can\'t
+-- change this value once the cluster is created. If you specify @ipv6@,
+-- the VPC and subnets that you specify for cluster creation must have both
+-- @IPv4@ and @IPv6@ CIDR blocks assigned to them. You can\'t specify
+-- @ipv6@ for clusters in China Regions.
+--
+-- You can only specify @ipv6@ for @1.21@ and later clusters that use
+-- version @1.10.1@ or later of the Amazon VPC CNI add-on. If you specify
+-- @ipv6@, then ensure that your VPC meets the requirements listed in the
+-- considerations listed in
+-- <https://docs.aws.amazon.com/eks/latest/userguide/cni-ipv6.html Assigning IPv6 addresses to pods and services>
+-- in the Amazon EKS User Guide. Kubernetes assigns services @IPv6@
+-- addresses from the unique local address range @(fc00::\/7)@. You can\'t
+-- specify a custom @IPv6@ CIDR block. Pod addresses are assigned from the
+-- subnet\'s @IPv6@ CIDR.
+kubernetesNetworkConfigRequest_ipFamily :: Lens.Lens' KubernetesNetworkConfigRequest (Prelude.Maybe IpFamily)
+kubernetesNetworkConfigRequest_ipFamily = Lens.lens (\KubernetesNetworkConfigRequest' {ipFamily} -> ipFamily) (\s@KubernetesNetworkConfigRequest' {} a -> s {ipFamily = a} :: KubernetesNetworkConfigRequest)
+
+-- | Don\'t specify a value if you select @ipv6@ for __ipFamily__. The CIDR
+-- block to assign Kubernetes service IP addresses from. If you don\'t
+-- specify a block, Kubernetes assigns addresses from either the
+-- @10.100.0.0\/16@ or @172.20.0.0\/16@ CIDR blocks. We recommend that you
+-- specify a block that does not overlap with resources in other networks
+-- that are peered or connected to your VPC. The block must meet the
+-- following requirements:
+--
+-- -   Within one of the following private IP address blocks:
+--     @10.0.0.0\/8@, @172.16.0.0\/12@, or @192.168.0.0\/16@.
+--
+-- -   Doesn\'t overlap with any CIDR block assigned to the VPC that you
+--     selected for VPC.
+--
+-- -   Between \/24 and \/12.
+--
+-- You can only specify a custom CIDR block when you create a cluster and
+-- can\'t change this value once the cluster is created.
+kubernetesNetworkConfigRequest_serviceIpv4Cidr :: Lens.Lens' KubernetesNetworkConfigRequest (Prelude.Maybe Prelude.Text)
+kubernetesNetworkConfigRequest_serviceIpv4Cidr = Lens.lens (\KubernetesNetworkConfigRequest' {serviceIpv4Cidr} -> serviceIpv4Cidr) (\s@KubernetesNetworkConfigRequest' {} a -> s {serviceIpv4Cidr = a} :: KubernetesNetworkConfigRequest)
+
+instance
+  Prelude.Hashable
+    KubernetesNetworkConfigRequest
+  where
+  hashWithSalt
+    _salt
+    KubernetesNetworkConfigRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` ipFamily
+        `Prelude.hashWithSalt` serviceIpv4Cidr
+
+instance
+  Prelude.NFData
+    KubernetesNetworkConfigRequest
+  where
+  rnf KubernetesNetworkConfigRequest' {..} =
+    Prelude.rnf ipFamily
+      `Prelude.seq` Prelude.rnf serviceIpv4Cidr
+
+instance Data.ToJSON KubernetesNetworkConfigRequest where
+  toJSON KubernetesNetworkConfigRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ipFamily" Data..=) Prelude.<$> ipFamily,
+            ("serviceIpv4Cidr" Data..=)
+              Prelude.<$> serviceIpv4Cidr
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/KubernetesNetworkConfigResponse.hs b/gen/Amazonka/EKS/Types/KubernetesNetworkConfigResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/KubernetesNetworkConfigResponse.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.KubernetesNetworkConfigResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.KubernetesNetworkConfigResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.IpFamily
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Kubernetes network configuration for the cluster. The response
+-- contains a value for __serviceIpv6Cidr__ or __serviceIpv4Cidr__, but not
+-- both.
+--
+-- /See:/ 'newKubernetesNetworkConfigResponse' smart constructor.
+data KubernetesNetworkConfigResponse = KubernetesNetworkConfigResponse'
+  { -- | The IP family used to assign Kubernetes pod and service IP addresses.
+    -- The IP family is always @ipv4@, unless you have a @1.21@ or later
+    -- cluster running version 1.10.1 or later of the Amazon VPC CNI add-on and
+    -- specified @ipv6@ when you created the cluster.
+    ipFamily :: Prelude.Maybe IpFamily,
+    -- | The CIDR block that Kubernetes pod and service IP addresses are assigned
+    -- from. Kubernetes assigns addresses from an IPv4 CIDR block assigned to a
+    -- subnet that the node is in. If you didn\'t specify a CIDR block when you
+    -- created the cluster, then Kubernetes assigns addresses from either the
+    -- @10.100.0.0\/16@ or @172.20.0.0\/16@ CIDR blocks. If this was specified,
+    -- then it was specified when the cluster was created and it can\'t be
+    -- changed.
+    serviceIpv4Cidr :: Prelude.Maybe Prelude.Text,
+    -- | The CIDR block that Kubernetes pod and service IP addresses are assigned
+    -- from if you created a 1.21 or later cluster with version 1.10.1 or later
+    -- of the Amazon VPC CNI add-on and specified @ipv6@ for __ipFamily__ when
+    -- you created the cluster. Kubernetes assigns service addresses from the
+    -- unique local address range (@fc00::\/7@) because you can\'t specify a
+    -- custom IPv6 CIDR block when you create the cluster.
+    serviceIpv6Cidr :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KubernetesNetworkConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipFamily', 'kubernetesNetworkConfigResponse_ipFamily' - The IP family used to assign Kubernetes pod and service IP addresses.
+-- The IP family is always @ipv4@, unless you have a @1.21@ or later
+-- cluster running version 1.10.1 or later of the Amazon VPC CNI add-on and
+-- specified @ipv6@ when you created the cluster.
+--
+-- 'serviceIpv4Cidr', 'kubernetesNetworkConfigResponse_serviceIpv4Cidr' - The CIDR block that Kubernetes pod and service IP addresses are assigned
+-- from. Kubernetes assigns addresses from an IPv4 CIDR block assigned to a
+-- subnet that the node is in. If you didn\'t specify a CIDR block when you
+-- created the cluster, then Kubernetes assigns addresses from either the
+-- @10.100.0.0\/16@ or @172.20.0.0\/16@ CIDR blocks. If this was specified,
+-- then it was specified when the cluster was created and it can\'t be
+-- changed.
+--
+-- 'serviceIpv6Cidr', 'kubernetesNetworkConfigResponse_serviceIpv6Cidr' - The CIDR block that Kubernetes pod and service IP addresses are assigned
+-- from if you created a 1.21 or later cluster with version 1.10.1 or later
+-- of the Amazon VPC CNI add-on and specified @ipv6@ for __ipFamily__ when
+-- you created the cluster. Kubernetes assigns service addresses from the
+-- unique local address range (@fc00::\/7@) because you can\'t specify a
+-- custom IPv6 CIDR block when you create the cluster.
+newKubernetesNetworkConfigResponse ::
+  KubernetesNetworkConfigResponse
+newKubernetesNetworkConfigResponse =
+  KubernetesNetworkConfigResponse'
+    { ipFamily =
+        Prelude.Nothing,
+      serviceIpv4Cidr = Prelude.Nothing,
+      serviceIpv6Cidr = Prelude.Nothing
+    }
+
+-- | The IP family used to assign Kubernetes pod and service IP addresses.
+-- The IP family is always @ipv4@, unless you have a @1.21@ or later
+-- cluster running version 1.10.1 or later of the Amazon VPC CNI add-on and
+-- specified @ipv6@ when you created the cluster.
+kubernetesNetworkConfigResponse_ipFamily :: Lens.Lens' KubernetesNetworkConfigResponse (Prelude.Maybe IpFamily)
+kubernetesNetworkConfigResponse_ipFamily = Lens.lens (\KubernetesNetworkConfigResponse' {ipFamily} -> ipFamily) (\s@KubernetesNetworkConfigResponse' {} a -> s {ipFamily = a} :: KubernetesNetworkConfigResponse)
+
+-- | The CIDR block that Kubernetes pod and service IP addresses are assigned
+-- from. Kubernetes assigns addresses from an IPv4 CIDR block assigned to a
+-- subnet that the node is in. If you didn\'t specify a CIDR block when you
+-- created the cluster, then Kubernetes assigns addresses from either the
+-- @10.100.0.0\/16@ or @172.20.0.0\/16@ CIDR blocks. If this was specified,
+-- then it was specified when the cluster was created and it can\'t be
+-- changed.
+kubernetesNetworkConfigResponse_serviceIpv4Cidr :: Lens.Lens' KubernetesNetworkConfigResponse (Prelude.Maybe Prelude.Text)
+kubernetesNetworkConfigResponse_serviceIpv4Cidr = Lens.lens (\KubernetesNetworkConfigResponse' {serviceIpv4Cidr} -> serviceIpv4Cidr) (\s@KubernetesNetworkConfigResponse' {} a -> s {serviceIpv4Cidr = a} :: KubernetesNetworkConfigResponse)
+
+-- | The CIDR block that Kubernetes pod and service IP addresses are assigned
+-- from if you created a 1.21 or later cluster with version 1.10.1 or later
+-- of the Amazon VPC CNI add-on and specified @ipv6@ for __ipFamily__ when
+-- you created the cluster. Kubernetes assigns service addresses from the
+-- unique local address range (@fc00::\/7@) because you can\'t specify a
+-- custom IPv6 CIDR block when you create the cluster.
+kubernetesNetworkConfigResponse_serviceIpv6Cidr :: Lens.Lens' KubernetesNetworkConfigResponse (Prelude.Maybe Prelude.Text)
+kubernetesNetworkConfigResponse_serviceIpv6Cidr = Lens.lens (\KubernetesNetworkConfigResponse' {serviceIpv6Cidr} -> serviceIpv6Cidr) (\s@KubernetesNetworkConfigResponse' {} a -> s {serviceIpv6Cidr = a} :: KubernetesNetworkConfigResponse)
+
+instance
+  Data.FromJSON
+    KubernetesNetworkConfigResponse
+  where
+  parseJSON =
+    Data.withObject
+      "KubernetesNetworkConfigResponse"
+      ( \x ->
+          KubernetesNetworkConfigResponse'
+            Prelude.<$> (x Data..:? "ipFamily")
+            Prelude.<*> (x Data..:? "serviceIpv4Cidr")
+            Prelude.<*> (x Data..:? "serviceIpv6Cidr")
+      )
+
+instance
+  Prelude.Hashable
+    KubernetesNetworkConfigResponse
+  where
+  hashWithSalt
+    _salt
+    KubernetesNetworkConfigResponse' {..} =
+      _salt
+        `Prelude.hashWithSalt` ipFamily
+        `Prelude.hashWithSalt` serviceIpv4Cidr
+        `Prelude.hashWithSalt` serviceIpv6Cidr
+
+instance
+  Prelude.NFData
+    KubernetesNetworkConfigResponse
+  where
+  rnf KubernetesNetworkConfigResponse' {..} =
+    Prelude.rnf ipFamily
+      `Prelude.seq` Prelude.rnf serviceIpv4Cidr
+      `Prelude.seq` Prelude.rnf serviceIpv6Cidr
diff --git a/gen/Amazonka/EKS/Types/LaunchTemplateSpecification.hs b/gen/Amazonka/EKS/Types/LaunchTemplateSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/LaunchTemplateSpecification.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.LaunchTemplateSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.LaunchTemplateSpecification 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 object representing a node group launch template specification. The
+-- launch template can\'t include
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html SubnetId>
+-- ,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_IamInstanceProfile.html IamInstanceProfile>
+-- ,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html RequestSpotInstances>
+-- ,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_HibernationOptionsRequest.html HibernationOptions>
+-- , or
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html TerminateInstances>
+-- , or the node group deployment or update will fail. For more information
+-- about launch templates, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html CreateLaunchTemplate>
+-- in the Amazon EC2 API Reference. For more information about using launch
+-- templates with Amazon EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+--
+-- You must specify either the launch template ID or the launch template
+-- name in the request, but not both.
+--
+-- /See:/ 'newLaunchTemplateSpecification' smart constructor.
+data LaunchTemplateSpecification = LaunchTemplateSpecification'
+  { -- | The ID of the launch template.
+    --
+    -- You must specify either the launch template ID or the launch template
+    -- name in the request, but not both.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template.
+    --
+    -- You must specify either the launch template name or the launch template
+    -- ID in the request, but not both.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The version number of the launch template to use. If no version is
+    -- specified, then the template\'s default version is used.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'launchTemplateSpecification_id' - The ID of the launch template.
+--
+-- You must specify either the launch template ID or the launch template
+-- name in the request, but not both.
+--
+-- 'name', 'launchTemplateSpecification_name' - The name of the launch template.
+--
+-- You must specify either the launch template name or the launch template
+-- ID in the request, but not both.
+--
+-- 'version', 'launchTemplateSpecification_version' - The version number of the launch template to use. If no version is
+-- specified, then the template\'s default version is used.
+newLaunchTemplateSpecification ::
+  LaunchTemplateSpecification
+newLaunchTemplateSpecification =
+  LaunchTemplateSpecification'
+    { id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The ID of the launch template.
+--
+-- You must specify either the launch template ID or the launch template
+-- name in the request, but not both.
+launchTemplateSpecification_id :: Lens.Lens' LaunchTemplateSpecification (Prelude.Maybe Prelude.Text)
+launchTemplateSpecification_id = Lens.lens (\LaunchTemplateSpecification' {id} -> id) (\s@LaunchTemplateSpecification' {} a -> s {id = a} :: LaunchTemplateSpecification)
+
+-- | The name of the launch template.
+--
+-- You must specify either the launch template name or the launch template
+-- ID in the request, but not both.
+launchTemplateSpecification_name :: Lens.Lens' LaunchTemplateSpecification (Prelude.Maybe Prelude.Text)
+launchTemplateSpecification_name = Lens.lens (\LaunchTemplateSpecification' {name} -> name) (\s@LaunchTemplateSpecification' {} a -> s {name = a} :: LaunchTemplateSpecification)
+
+-- | The version number of the launch template to use. If no version is
+-- specified, then the template\'s default version is used.
+launchTemplateSpecification_version :: Lens.Lens' LaunchTemplateSpecification (Prelude.Maybe Prelude.Text)
+launchTemplateSpecification_version = Lens.lens (\LaunchTemplateSpecification' {version} -> version) (\s@LaunchTemplateSpecification' {} a -> s {version = a} :: LaunchTemplateSpecification)
+
+instance Data.FromJSON LaunchTemplateSpecification where
+  parseJSON =
+    Data.withObject
+      "LaunchTemplateSpecification"
+      ( \x ->
+          LaunchTemplateSpecification'
+            Prelude.<$> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable LaunchTemplateSpecification where
+  hashWithSalt _salt LaunchTemplateSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData LaunchTemplateSpecification where
+  rnf LaunchTemplateSpecification' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf version
+
+instance Data.ToJSON LaunchTemplateSpecification where
+  toJSON LaunchTemplateSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("id" Data..=) Prelude.<$> id,
+            ("name" Data..=) Prelude.<$> name,
+            ("version" Data..=) Prelude.<$> version
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/LogSetup.hs b/gen/Amazonka/EKS/Types/LogSetup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/LogSetup.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.LogSetup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.LogSetup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.LogType
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing the enabled or disabled Kubernetes control plane
+-- logs for your cluster.
+--
+-- /See:/ 'newLogSetup' smart constructor.
+data LogSetup = LogSetup'
+  { -- | If a log type is enabled, that log type exports its control plane logs
+    -- to CloudWatch Logs. If a log type isn\'t enabled, that log type doesn\'t
+    -- export its control plane logs. Each individual log type can be enabled
+    -- or disabled independently.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The available cluster control plane log types.
+    types :: Prelude.Maybe [LogType]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogSetup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'logSetup_enabled' - If a log type is enabled, that log type exports its control plane logs
+-- to CloudWatch Logs. If a log type isn\'t enabled, that log type doesn\'t
+-- export its control plane logs. Each individual log type can be enabled
+-- or disabled independently.
+--
+-- 'types', 'logSetup_types' - The available cluster control plane log types.
+newLogSetup ::
+  LogSetup
+newLogSetup =
+  LogSetup'
+    { enabled = Prelude.Nothing,
+      types = Prelude.Nothing
+    }
+
+-- | If a log type is enabled, that log type exports its control plane logs
+-- to CloudWatch Logs. If a log type isn\'t enabled, that log type doesn\'t
+-- export its control plane logs. Each individual log type can be enabled
+-- or disabled independently.
+logSetup_enabled :: Lens.Lens' LogSetup (Prelude.Maybe Prelude.Bool)
+logSetup_enabled = Lens.lens (\LogSetup' {enabled} -> enabled) (\s@LogSetup' {} a -> s {enabled = a} :: LogSetup)
+
+-- | The available cluster control plane log types.
+logSetup_types :: Lens.Lens' LogSetup (Prelude.Maybe [LogType])
+logSetup_types = Lens.lens (\LogSetup' {types} -> types) (\s@LogSetup' {} a -> s {types = a} :: LogSetup) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON LogSetup where
+  parseJSON =
+    Data.withObject
+      "LogSetup"
+      ( \x ->
+          LogSetup'
+            Prelude.<$> (x Data..:? "enabled")
+            Prelude.<*> (x Data..:? "types" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable LogSetup where
+  hashWithSalt _salt LogSetup' {..} =
+    _salt
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` types
+
+instance Prelude.NFData LogSetup where
+  rnf LogSetup' {..} =
+    Prelude.rnf enabled `Prelude.seq` Prelude.rnf types
+
+instance Data.ToJSON LogSetup where
+  toJSON LogSetup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("enabled" Data..=) Prelude.<$> enabled,
+            ("types" Data..=) Prelude.<$> types
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/LogType.hs b/gen/Amazonka/EKS/Types/LogType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/LogType.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.LogType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.LogType
+  ( LogType
+      ( ..,
+        LogType_Api,
+        LogType_Audit,
+        LogType_Authenticator,
+        LogType_ControllerManager,
+        LogType_Scheduler
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LogType = LogType' {fromLogType :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LogType_Api :: LogType
+pattern LogType_Api = LogType' "api"
+
+pattern LogType_Audit :: LogType
+pattern LogType_Audit = LogType' "audit"
+
+pattern LogType_Authenticator :: LogType
+pattern LogType_Authenticator = LogType' "authenticator"
+
+pattern LogType_ControllerManager :: LogType
+pattern LogType_ControllerManager = LogType' "controllerManager"
+
+pattern LogType_Scheduler :: LogType
+pattern LogType_Scheduler = LogType' "scheduler"
+
+{-# COMPLETE
+  LogType_Api,
+  LogType_Audit,
+  LogType_Authenticator,
+  LogType_ControllerManager,
+  LogType_Scheduler,
+  LogType'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/Logging.hs b/gen/Amazonka/EKS/Types/Logging.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/Logging.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.Logging
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.Logging where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.LogSetup
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing the logging configuration for resources in your
+-- cluster.
+--
+-- /See:/ 'newLogging' smart constructor.
+data Logging = Logging'
+  { -- | The cluster control plane logging configuration for your cluster.
+    clusterLogging :: Prelude.Maybe [LogSetup]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Logging' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterLogging', 'logging_clusterLogging' - The cluster control plane logging configuration for your cluster.
+newLogging ::
+  Logging
+newLogging =
+  Logging' {clusterLogging = Prelude.Nothing}
+
+-- | The cluster control plane logging configuration for your cluster.
+logging_clusterLogging :: Lens.Lens' Logging (Prelude.Maybe [LogSetup])
+logging_clusterLogging = Lens.lens (\Logging' {clusterLogging} -> clusterLogging) (\s@Logging' {} a -> s {clusterLogging = a} :: Logging) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Logging where
+  parseJSON =
+    Data.withObject
+      "Logging"
+      ( \x ->
+          Logging'
+            Prelude.<$> ( x
+                            Data..:? "clusterLogging"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable Logging where
+  hashWithSalt _salt Logging' {..} =
+    _salt `Prelude.hashWithSalt` clusterLogging
+
+instance Prelude.NFData Logging where
+  rnf Logging' {..} = Prelude.rnf clusterLogging
+
+instance Data.ToJSON Logging where
+  toJSON Logging' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clusterLogging" Data..=)
+              Prelude.<$> clusterLogging
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/MarketplaceInformation.hs b/gen/Amazonka/EKS/Types/MarketplaceInformation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/MarketplaceInformation.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.MarketplaceInformation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.MarketplaceInformation 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
+
+-- | Information about an Amazon EKS add-on from the Amazon Web Services
+-- Marketplace.
+--
+-- /See:/ 'newMarketplaceInformation' smart constructor.
+data MarketplaceInformation = MarketplaceInformation'
+  { -- | The product ID from the Amazon Web Services Marketplace.
+    productId :: Prelude.Maybe Prelude.Text,
+    -- | The product URL from the Amazon Web Services Marketplace.
+    productUrl :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MarketplaceInformation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'productId', 'marketplaceInformation_productId' - The product ID from the Amazon Web Services Marketplace.
+--
+-- 'productUrl', 'marketplaceInformation_productUrl' - The product URL from the Amazon Web Services Marketplace.
+newMarketplaceInformation ::
+  MarketplaceInformation
+newMarketplaceInformation =
+  MarketplaceInformation'
+    { productId =
+        Prelude.Nothing,
+      productUrl = Prelude.Nothing
+    }
+
+-- | The product ID from the Amazon Web Services Marketplace.
+marketplaceInformation_productId :: Lens.Lens' MarketplaceInformation (Prelude.Maybe Prelude.Text)
+marketplaceInformation_productId = Lens.lens (\MarketplaceInformation' {productId} -> productId) (\s@MarketplaceInformation' {} a -> s {productId = a} :: MarketplaceInformation)
+
+-- | The product URL from the Amazon Web Services Marketplace.
+marketplaceInformation_productUrl :: Lens.Lens' MarketplaceInformation (Prelude.Maybe Prelude.Text)
+marketplaceInformation_productUrl = Lens.lens (\MarketplaceInformation' {productUrl} -> productUrl) (\s@MarketplaceInformation' {} a -> s {productUrl = a} :: MarketplaceInformation)
+
+instance Data.FromJSON MarketplaceInformation where
+  parseJSON =
+    Data.withObject
+      "MarketplaceInformation"
+      ( \x ->
+          MarketplaceInformation'
+            Prelude.<$> (x Data..:? "productId")
+            Prelude.<*> (x Data..:? "productUrl")
+      )
+
+instance Prelude.Hashable MarketplaceInformation where
+  hashWithSalt _salt MarketplaceInformation' {..} =
+    _salt
+      `Prelude.hashWithSalt` productId
+      `Prelude.hashWithSalt` productUrl
+
+instance Prelude.NFData MarketplaceInformation where
+  rnf MarketplaceInformation' {..} =
+    Prelude.rnf productId
+      `Prelude.seq` Prelude.rnf productUrl
diff --git a/gen/Amazonka/EKS/Types/Nodegroup.hs b/gen/Amazonka/EKS/Types/Nodegroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/Nodegroup.hs
@@ -0,0 +1,454 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.Nodegroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.Nodegroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.AMITypes
+import Amazonka.EKS.Types.CapacityTypes
+import Amazonka.EKS.Types.LaunchTemplateSpecification
+import Amazonka.EKS.Types.NodegroupHealth
+import Amazonka.EKS.Types.NodegroupResources
+import Amazonka.EKS.Types.NodegroupScalingConfig
+import Amazonka.EKS.Types.NodegroupStatus
+import Amazonka.EKS.Types.NodegroupUpdateConfig
+import Amazonka.EKS.Types.RemoteAccessConfig
+import Amazonka.EKS.Types.Taint
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing an Amazon EKS managed node group.
+--
+-- /See:/ 'newNodegroup' smart constructor.
+data Nodegroup = Nodegroup'
+  { -- | If the node group was deployed using a launch template with a custom
+    -- AMI, then this is @CUSTOM@. For node groups that weren\'t deployed using
+    -- a launch template, this is the AMI type that was specified in the node
+    -- group configuration.
+    amiType :: Prelude.Maybe AMITypes,
+    -- | The capacity type of your managed node group.
+    capacityType :: Prelude.Maybe CapacityTypes,
+    -- | The name of the cluster that the managed node group resides in.
+    clusterName :: Prelude.Maybe Prelude.Text,
+    -- | The Unix epoch timestamp in seconds for when the managed node group was
+    -- created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | If the node group wasn\'t deployed with a launch template, then this is
+    -- the disk size in the node group configuration. If the node group was
+    -- deployed with a launch template, then this is @null@.
+    diskSize :: Prelude.Maybe Prelude.Int,
+    -- | The health status of the node group. If there are issues with your node
+    -- group\'s health, they are listed here.
+    health :: Prelude.Maybe NodegroupHealth,
+    -- | If the node group wasn\'t deployed with a launch template, then this is
+    -- the instance type that is associated with the node group. If the node
+    -- group was deployed with a launch template, then this is @null@.
+    instanceTypes :: Prelude.Maybe [Prelude.Text],
+    -- | The Kubernetes labels applied to the nodes in the node group.
+    --
+    -- Only labels that are applied with the Amazon EKS API are shown here.
+    -- There may be other Kubernetes labels applied to the nodes in this group.
+    labels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | If a launch template was used to create the node group, then this is the
+    -- launch template that was used.
+    launchTemplate :: Prelude.Maybe LaunchTemplateSpecification,
+    -- | The Unix epoch timestamp in seconds for when the managed node group was
+    -- last modified.
+    modifiedAt :: Prelude.Maybe Data.POSIX,
+    -- | The IAM role associated with your node group. The Amazon EKS node
+    -- @kubelet@ daemon makes calls to Amazon Web Services APIs on your behalf.
+    -- Nodes receive permissions for these API calls through an IAM instance
+    -- profile and associated policies.
+    nodeRole :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) associated with the managed node group.
+    nodegroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The name associated with an Amazon EKS managed node group.
+    nodegroupName :: Prelude.Maybe Prelude.Text,
+    -- | If the node group was deployed using a launch template with a custom
+    -- AMI, then this is the AMI ID that was specified in the launch template.
+    -- For node groups that weren\'t deployed using a launch template, this is
+    -- the version of the Amazon EKS optimized AMI that the node group was
+    -- deployed with.
+    releaseVersion :: Prelude.Maybe Prelude.Text,
+    -- | If the node group wasn\'t deployed with a launch template, then this is
+    -- the remote access configuration that is associated with the node group.
+    -- If the node group was deployed with a launch template, then this is
+    -- @null@.
+    remoteAccess :: Prelude.Maybe RemoteAccessConfig,
+    -- | The resources associated with the node group, such as Auto Scaling
+    -- groups and security groups for remote access.
+    resources :: Prelude.Maybe NodegroupResources,
+    -- | The scaling configuration details for the Auto Scaling group that is
+    -- associated with your node group.
+    scalingConfig :: Prelude.Maybe NodegroupScalingConfig,
+    -- | The current status of the managed node group.
+    status :: Prelude.Maybe NodegroupStatus,
+    -- | The subnets that were specified for the Auto Scaling group that is
+    -- associated with your node group.
+    subnets :: Prelude.Maybe [Prelude.Text],
+    -- | The metadata applied to the node group to assist with categorization and
+    -- organization. Each tag consists of a key and an optional value. You
+    -- define both. Node group tags do not propagate to any other resources
+    -- associated with the node group, such as the Amazon EC2 instances or
+    -- subnets.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Kubernetes taints to be applied to the nodes in the node group when
+    -- they are created. Effect is one of @No_Schedule@, @Prefer_No_Schedule@,
+    -- or @No_Execute@. Kubernetes taints can be used together with tolerations
+    -- to control how workloads are scheduled to your nodes. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html Node taints on managed node groups>.
+    taints :: Prelude.Maybe [Taint],
+    -- | The node group update configuration.
+    updateConfig :: Prelude.Maybe NodegroupUpdateConfig,
+    -- | The Kubernetes version of the managed node group.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Nodegroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'amiType', 'nodegroup_amiType' - If the node group was deployed using a launch template with a custom
+-- AMI, then this is @CUSTOM@. For node groups that weren\'t deployed using
+-- a launch template, this is the AMI type that was specified in the node
+-- group configuration.
+--
+-- 'capacityType', 'nodegroup_capacityType' - The capacity type of your managed node group.
+--
+-- 'clusterName', 'nodegroup_clusterName' - The name of the cluster that the managed node group resides in.
+--
+-- 'createdAt', 'nodegroup_createdAt' - The Unix epoch timestamp in seconds for when the managed node group was
+-- created.
+--
+-- 'diskSize', 'nodegroup_diskSize' - If the node group wasn\'t deployed with a launch template, then this is
+-- the disk size in the node group configuration. If the node group was
+-- deployed with a launch template, then this is @null@.
+--
+-- 'health', 'nodegroup_health' - The health status of the node group. If there are issues with your node
+-- group\'s health, they are listed here.
+--
+-- 'instanceTypes', 'nodegroup_instanceTypes' - If the node group wasn\'t deployed with a launch template, then this is
+-- the instance type that is associated with the node group. If the node
+-- group was deployed with a launch template, then this is @null@.
+--
+-- 'labels', 'nodegroup_labels' - The Kubernetes labels applied to the nodes in the node group.
+--
+-- Only labels that are applied with the Amazon EKS API are shown here.
+-- There may be other Kubernetes labels applied to the nodes in this group.
+--
+-- 'launchTemplate', 'nodegroup_launchTemplate' - If a launch template was used to create the node group, then this is the
+-- launch template that was used.
+--
+-- 'modifiedAt', 'nodegroup_modifiedAt' - The Unix epoch timestamp in seconds for when the managed node group was
+-- last modified.
+--
+-- 'nodeRole', 'nodegroup_nodeRole' - The IAM role associated with your node group. The Amazon EKS node
+-- @kubelet@ daemon makes calls to Amazon Web Services APIs on your behalf.
+-- Nodes receive permissions for these API calls through an IAM instance
+-- profile and associated policies.
+--
+-- 'nodegroupArn', 'nodegroup_nodegroupArn' - The Amazon Resource Name (ARN) associated with the managed node group.
+--
+-- 'nodegroupName', 'nodegroup_nodegroupName' - The name associated with an Amazon EKS managed node group.
+--
+-- 'releaseVersion', 'nodegroup_releaseVersion' - If the node group was deployed using a launch template with a custom
+-- AMI, then this is the AMI ID that was specified in the launch template.
+-- For node groups that weren\'t deployed using a launch template, this is
+-- the version of the Amazon EKS optimized AMI that the node group was
+-- deployed with.
+--
+-- 'remoteAccess', 'nodegroup_remoteAccess' - If the node group wasn\'t deployed with a launch template, then this is
+-- the remote access configuration that is associated with the node group.
+-- If the node group was deployed with a launch template, then this is
+-- @null@.
+--
+-- 'resources', 'nodegroup_resources' - The resources associated with the node group, such as Auto Scaling
+-- groups and security groups for remote access.
+--
+-- 'scalingConfig', 'nodegroup_scalingConfig' - The scaling configuration details for the Auto Scaling group that is
+-- associated with your node group.
+--
+-- 'status', 'nodegroup_status' - The current status of the managed node group.
+--
+-- 'subnets', 'nodegroup_subnets' - The subnets that were specified for the Auto Scaling group that is
+-- associated with your node group.
+--
+-- 'tags', 'nodegroup_tags' - The metadata applied to the node group to assist with categorization and
+-- organization. Each tag consists of a key and an optional value. You
+-- define both. Node group tags do not propagate to any other resources
+-- associated with the node group, such as the Amazon EC2 instances or
+-- subnets.
+--
+-- 'taints', 'nodegroup_taints' - The Kubernetes taints to be applied to the nodes in the node group when
+-- they are created. Effect is one of @No_Schedule@, @Prefer_No_Schedule@,
+-- or @No_Execute@. Kubernetes taints can be used together with tolerations
+-- to control how workloads are scheduled to your nodes. For more
+-- information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html Node taints on managed node groups>.
+--
+-- 'updateConfig', 'nodegroup_updateConfig' - The node group update configuration.
+--
+-- 'version', 'nodegroup_version' - The Kubernetes version of the managed node group.
+newNodegroup ::
+  Nodegroup
+newNodegroup =
+  Nodegroup'
+    { amiType = Prelude.Nothing,
+      capacityType = Prelude.Nothing,
+      clusterName = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      diskSize = Prelude.Nothing,
+      health = Prelude.Nothing,
+      instanceTypes = Prelude.Nothing,
+      labels = Prelude.Nothing,
+      launchTemplate = Prelude.Nothing,
+      modifiedAt = Prelude.Nothing,
+      nodeRole = Prelude.Nothing,
+      nodegroupArn = Prelude.Nothing,
+      nodegroupName = Prelude.Nothing,
+      releaseVersion = Prelude.Nothing,
+      remoteAccess = Prelude.Nothing,
+      resources = Prelude.Nothing,
+      scalingConfig = Prelude.Nothing,
+      status = Prelude.Nothing,
+      subnets = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      taints = Prelude.Nothing,
+      updateConfig = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | If the node group was deployed using a launch template with a custom
+-- AMI, then this is @CUSTOM@. For node groups that weren\'t deployed using
+-- a launch template, this is the AMI type that was specified in the node
+-- group configuration.
+nodegroup_amiType :: Lens.Lens' Nodegroup (Prelude.Maybe AMITypes)
+nodegroup_amiType = Lens.lens (\Nodegroup' {amiType} -> amiType) (\s@Nodegroup' {} a -> s {amiType = a} :: Nodegroup)
+
+-- | The capacity type of your managed node group.
+nodegroup_capacityType :: Lens.Lens' Nodegroup (Prelude.Maybe CapacityTypes)
+nodegroup_capacityType = Lens.lens (\Nodegroup' {capacityType} -> capacityType) (\s@Nodegroup' {} a -> s {capacityType = a} :: Nodegroup)
+
+-- | The name of the cluster that the managed node group resides in.
+nodegroup_clusterName :: Lens.Lens' Nodegroup (Prelude.Maybe Prelude.Text)
+nodegroup_clusterName = Lens.lens (\Nodegroup' {clusterName} -> clusterName) (\s@Nodegroup' {} a -> s {clusterName = a} :: Nodegroup)
+
+-- | The Unix epoch timestamp in seconds for when the managed node group was
+-- created.
+nodegroup_createdAt :: Lens.Lens' Nodegroup (Prelude.Maybe Prelude.UTCTime)
+nodegroup_createdAt = Lens.lens (\Nodegroup' {createdAt} -> createdAt) (\s@Nodegroup' {} a -> s {createdAt = a} :: Nodegroup) Prelude.. Lens.mapping Data._Time
+
+-- | If the node group wasn\'t deployed with a launch template, then this is
+-- the disk size in the node group configuration. If the node group was
+-- deployed with a launch template, then this is @null@.
+nodegroup_diskSize :: Lens.Lens' Nodegroup (Prelude.Maybe Prelude.Int)
+nodegroup_diskSize = Lens.lens (\Nodegroup' {diskSize} -> diskSize) (\s@Nodegroup' {} a -> s {diskSize = a} :: Nodegroup)
+
+-- | The health status of the node group. If there are issues with your node
+-- group\'s health, they are listed here.
+nodegroup_health :: Lens.Lens' Nodegroup (Prelude.Maybe NodegroupHealth)
+nodegroup_health = Lens.lens (\Nodegroup' {health} -> health) (\s@Nodegroup' {} a -> s {health = a} :: Nodegroup)
+
+-- | If the node group wasn\'t deployed with a launch template, then this is
+-- the instance type that is associated with the node group. If the node
+-- group was deployed with a launch template, then this is @null@.
+nodegroup_instanceTypes :: Lens.Lens' Nodegroup (Prelude.Maybe [Prelude.Text])
+nodegroup_instanceTypes = Lens.lens (\Nodegroup' {instanceTypes} -> instanceTypes) (\s@Nodegroup' {} a -> s {instanceTypes = a} :: Nodegroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Kubernetes labels applied to the nodes in the node group.
+--
+-- Only labels that are applied with the Amazon EKS API are shown here.
+-- There may be other Kubernetes labels applied to the nodes in this group.
+nodegroup_labels :: Lens.Lens' Nodegroup (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+nodegroup_labels = Lens.lens (\Nodegroup' {labels} -> labels) (\s@Nodegroup' {} a -> s {labels = a} :: Nodegroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | If a launch template was used to create the node group, then this is the
+-- launch template that was used.
+nodegroup_launchTemplate :: Lens.Lens' Nodegroup (Prelude.Maybe LaunchTemplateSpecification)
+nodegroup_launchTemplate = Lens.lens (\Nodegroup' {launchTemplate} -> launchTemplate) (\s@Nodegroup' {} a -> s {launchTemplate = a} :: Nodegroup)
+
+-- | The Unix epoch timestamp in seconds for when the managed node group was
+-- last modified.
+nodegroup_modifiedAt :: Lens.Lens' Nodegroup (Prelude.Maybe Prelude.UTCTime)
+nodegroup_modifiedAt = Lens.lens (\Nodegroup' {modifiedAt} -> modifiedAt) (\s@Nodegroup' {} a -> s {modifiedAt = a} :: Nodegroup) Prelude.. Lens.mapping Data._Time
+
+-- | The IAM role associated with your node group. The Amazon EKS node
+-- @kubelet@ daemon makes calls to Amazon Web Services APIs on your behalf.
+-- Nodes receive permissions for these API calls through an IAM instance
+-- profile and associated policies.
+nodegroup_nodeRole :: Lens.Lens' Nodegroup (Prelude.Maybe Prelude.Text)
+nodegroup_nodeRole = Lens.lens (\Nodegroup' {nodeRole} -> nodeRole) (\s@Nodegroup' {} a -> s {nodeRole = a} :: Nodegroup)
+
+-- | The Amazon Resource Name (ARN) associated with the managed node group.
+nodegroup_nodegroupArn :: Lens.Lens' Nodegroup (Prelude.Maybe Prelude.Text)
+nodegroup_nodegroupArn = Lens.lens (\Nodegroup' {nodegroupArn} -> nodegroupArn) (\s@Nodegroup' {} a -> s {nodegroupArn = a} :: Nodegroup)
+
+-- | The name associated with an Amazon EKS managed node group.
+nodegroup_nodegroupName :: Lens.Lens' Nodegroup (Prelude.Maybe Prelude.Text)
+nodegroup_nodegroupName = Lens.lens (\Nodegroup' {nodegroupName} -> nodegroupName) (\s@Nodegroup' {} a -> s {nodegroupName = a} :: Nodegroup)
+
+-- | If the node group was deployed using a launch template with a custom
+-- AMI, then this is the AMI ID that was specified in the launch template.
+-- For node groups that weren\'t deployed using a launch template, this is
+-- the version of the Amazon EKS optimized AMI that the node group was
+-- deployed with.
+nodegroup_releaseVersion :: Lens.Lens' Nodegroup (Prelude.Maybe Prelude.Text)
+nodegroup_releaseVersion = Lens.lens (\Nodegroup' {releaseVersion} -> releaseVersion) (\s@Nodegroup' {} a -> s {releaseVersion = a} :: Nodegroup)
+
+-- | If the node group wasn\'t deployed with a launch template, then this is
+-- the remote access configuration that is associated with the node group.
+-- If the node group was deployed with a launch template, then this is
+-- @null@.
+nodegroup_remoteAccess :: Lens.Lens' Nodegroup (Prelude.Maybe RemoteAccessConfig)
+nodegroup_remoteAccess = Lens.lens (\Nodegroup' {remoteAccess} -> remoteAccess) (\s@Nodegroup' {} a -> s {remoteAccess = a} :: Nodegroup)
+
+-- | The resources associated with the node group, such as Auto Scaling
+-- groups and security groups for remote access.
+nodegroup_resources :: Lens.Lens' Nodegroup (Prelude.Maybe NodegroupResources)
+nodegroup_resources = Lens.lens (\Nodegroup' {resources} -> resources) (\s@Nodegroup' {} a -> s {resources = a} :: Nodegroup)
+
+-- | The scaling configuration details for the Auto Scaling group that is
+-- associated with your node group.
+nodegroup_scalingConfig :: Lens.Lens' Nodegroup (Prelude.Maybe NodegroupScalingConfig)
+nodegroup_scalingConfig = Lens.lens (\Nodegroup' {scalingConfig} -> scalingConfig) (\s@Nodegroup' {} a -> s {scalingConfig = a} :: Nodegroup)
+
+-- | The current status of the managed node group.
+nodegroup_status :: Lens.Lens' Nodegroup (Prelude.Maybe NodegroupStatus)
+nodegroup_status = Lens.lens (\Nodegroup' {status} -> status) (\s@Nodegroup' {} a -> s {status = a} :: Nodegroup)
+
+-- | The subnets that were specified for the Auto Scaling group that is
+-- associated with your node group.
+nodegroup_subnets :: Lens.Lens' Nodegroup (Prelude.Maybe [Prelude.Text])
+nodegroup_subnets = Lens.lens (\Nodegroup' {subnets} -> subnets) (\s@Nodegroup' {} a -> s {subnets = a} :: Nodegroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The metadata applied to the node group to assist with categorization and
+-- organization. Each tag consists of a key and an optional value. You
+-- define both. Node group tags do not propagate to any other resources
+-- associated with the node group, such as the Amazon EC2 instances or
+-- subnets.
+nodegroup_tags :: Lens.Lens' Nodegroup (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+nodegroup_tags = Lens.lens (\Nodegroup' {tags} -> tags) (\s@Nodegroup' {} a -> s {tags = a} :: Nodegroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Kubernetes taints to be applied to the nodes in the node group when
+-- they are created. Effect is one of @No_Schedule@, @Prefer_No_Schedule@,
+-- or @No_Execute@. Kubernetes taints can be used together with tolerations
+-- to control how workloads are scheduled to your nodes. For more
+-- information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html Node taints on managed node groups>.
+nodegroup_taints :: Lens.Lens' Nodegroup (Prelude.Maybe [Taint])
+nodegroup_taints = Lens.lens (\Nodegroup' {taints} -> taints) (\s@Nodegroup' {} a -> s {taints = a} :: Nodegroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The node group update configuration.
+nodegroup_updateConfig :: Lens.Lens' Nodegroup (Prelude.Maybe NodegroupUpdateConfig)
+nodegroup_updateConfig = Lens.lens (\Nodegroup' {updateConfig} -> updateConfig) (\s@Nodegroup' {} a -> s {updateConfig = a} :: Nodegroup)
+
+-- | The Kubernetes version of the managed node group.
+nodegroup_version :: Lens.Lens' Nodegroup (Prelude.Maybe Prelude.Text)
+nodegroup_version = Lens.lens (\Nodegroup' {version} -> version) (\s@Nodegroup' {} a -> s {version = a} :: Nodegroup)
+
+instance Data.FromJSON Nodegroup where
+  parseJSON =
+    Data.withObject
+      "Nodegroup"
+      ( \x ->
+          Nodegroup'
+            Prelude.<$> (x Data..:? "amiType")
+            Prelude.<*> (x Data..:? "capacityType")
+            Prelude.<*> (x Data..:? "clusterName")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "diskSize")
+            Prelude.<*> (x Data..:? "health")
+            Prelude.<*> (x Data..:? "instanceTypes" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "labels" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "launchTemplate")
+            Prelude.<*> (x Data..:? "modifiedAt")
+            Prelude.<*> (x Data..:? "nodeRole")
+            Prelude.<*> (x Data..:? "nodegroupArn")
+            Prelude.<*> (x Data..:? "nodegroupName")
+            Prelude.<*> (x Data..:? "releaseVersion")
+            Prelude.<*> (x Data..:? "remoteAccess")
+            Prelude.<*> (x Data..:? "resources")
+            Prelude.<*> (x Data..:? "scalingConfig")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "subnets" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "taints" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "updateConfig")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable Nodegroup where
+  hashWithSalt _salt Nodegroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` amiType
+      `Prelude.hashWithSalt` capacityType
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` diskSize
+      `Prelude.hashWithSalt` health
+      `Prelude.hashWithSalt` instanceTypes
+      `Prelude.hashWithSalt` labels
+      `Prelude.hashWithSalt` launchTemplate
+      `Prelude.hashWithSalt` modifiedAt
+      `Prelude.hashWithSalt` nodeRole
+      `Prelude.hashWithSalt` nodegroupArn
+      `Prelude.hashWithSalt` nodegroupName
+      `Prelude.hashWithSalt` releaseVersion
+      `Prelude.hashWithSalt` remoteAccess
+      `Prelude.hashWithSalt` resources
+      `Prelude.hashWithSalt` scalingConfig
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` subnets
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` taints
+      `Prelude.hashWithSalt` updateConfig
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData Nodegroup where
+  rnf Nodegroup' {..} =
+    Prelude.rnf amiType
+      `Prelude.seq` Prelude.rnf capacityType
+      `Prelude.seq` Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf diskSize
+      `Prelude.seq` Prelude.rnf health
+      `Prelude.seq` Prelude.rnf instanceTypes
+      `Prelude.seq` Prelude.rnf labels
+      `Prelude.seq` Prelude.rnf launchTemplate
+      `Prelude.seq` Prelude.rnf modifiedAt
+      `Prelude.seq` Prelude.rnf nodeRole
+      `Prelude.seq` Prelude.rnf nodegroupArn
+      `Prelude.seq` Prelude.rnf nodegroupName
+      `Prelude.seq` Prelude.rnf releaseVersion
+      `Prelude.seq` Prelude.rnf remoteAccess
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf scalingConfig
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf subnets
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf taints
+      `Prelude.seq` Prelude.rnf updateConfig
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/EKS/Types/NodegroupHealth.hs b/gen/Amazonka/EKS/Types/NodegroupHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/NodegroupHealth.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.NodegroupHealth
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.NodegroupHealth where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.Issue
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing the health status of the node group.
+--
+-- /See:/ 'newNodegroupHealth' smart constructor.
+data NodegroupHealth = NodegroupHealth'
+  { -- | Any issues that are associated with the node group.
+    issues :: Prelude.Maybe [Issue]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NodegroupHealth' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'issues', 'nodegroupHealth_issues' - Any issues that are associated with the node group.
+newNodegroupHealth ::
+  NodegroupHealth
+newNodegroupHealth =
+  NodegroupHealth' {issues = Prelude.Nothing}
+
+-- | Any issues that are associated with the node group.
+nodegroupHealth_issues :: Lens.Lens' NodegroupHealth (Prelude.Maybe [Issue])
+nodegroupHealth_issues = Lens.lens (\NodegroupHealth' {issues} -> issues) (\s@NodegroupHealth' {} a -> s {issues = a} :: NodegroupHealth) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON NodegroupHealth where
+  parseJSON =
+    Data.withObject
+      "NodegroupHealth"
+      ( \x ->
+          NodegroupHealth'
+            Prelude.<$> (x Data..:? "issues" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable NodegroupHealth where
+  hashWithSalt _salt NodegroupHealth' {..} =
+    _salt `Prelude.hashWithSalt` issues
+
+instance Prelude.NFData NodegroupHealth where
+  rnf NodegroupHealth' {..} = Prelude.rnf issues
diff --git a/gen/Amazonka/EKS/Types/NodegroupIssueCode.hs b/gen/Amazonka/EKS/Types/NodegroupIssueCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/NodegroupIssueCode.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.NodegroupIssueCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.NodegroupIssueCode
+  ( NodegroupIssueCode
+      ( ..,
+        NodegroupIssueCode_AccessDenied,
+        NodegroupIssueCode_AsgInstanceLaunchFailures,
+        NodegroupIssueCode_AutoScalingGroupInvalidConfiguration,
+        NodegroupIssueCode_AutoScalingGroupNotFound,
+        NodegroupIssueCode_ClusterUnreachable,
+        NodegroupIssueCode_Ec2LaunchTemplateNotFound,
+        NodegroupIssueCode_Ec2LaunchTemplateVersionMismatch,
+        NodegroupIssueCode_Ec2SecurityGroupDeletionFailure,
+        NodegroupIssueCode_Ec2SecurityGroupNotFound,
+        NodegroupIssueCode_Ec2SubnetInvalidConfiguration,
+        NodegroupIssueCode_Ec2SubnetMissingIpv6Assignment,
+        NodegroupIssueCode_Ec2SubnetNotFound,
+        NodegroupIssueCode_IamInstanceProfileNotFound,
+        NodegroupIssueCode_IamLimitExceeded,
+        NodegroupIssueCode_IamNodeRoleNotFound,
+        NodegroupIssueCode_InstanceLimitExceeded,
+        NodegroupIssueCode_InsufficientFreeAddresses,
+        NodegroupIssueCode_InternalFailure,
+        NodegroupIssueCode_NodeCreationFailure
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype NodegroupIssueCode = NodegroupIssueCode'
+  { fromNodegroupIssueCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern NodegroupIssueCode_AccessDenied :: NodegroupIssueCode
+pattern NodegroupIssueCode_AccessDenied = NodegroupIssueCode' "AccessDenied"
+
+pattern NodegroupIssueCode_AsgInstanceLaunchFailures :: NodegroupIssueCode
+pattern NodegroupIssueCode_AsgInstanceLaunchFailures = NodegroupIssueCode' "AsgInstanceLaunchFailures"
+
+pattern NodegroupIssueCode_AutoScalingGroupInvalidConfiguration :: NodegroupIssueCode
+pattern NodegroupIssueCode_AutoScalingGroupInvalidConfiguration = NodegroupIssueCode' "AutoScalingGroupInvalidConfiguration"
+
+pattern NodegroupIssueCode_AutoScalingGroupNotFound :: NodegroupIssueCode
+pattern NodegroupIssueCode_AutoScalingGroupNotFound = NodegroupIssueCode' "AutoScalingGroupNotFound"
+
+pattern NodegroupIssueCode_ClusterUnreachable :: NodegroupIssueCode
+pattern NodegroupIssueCode_ClusterUnreachable = NodegroupIssueCode' "ClusterUnreachable"
+
+pattern NodegroupIssueCode_Ec2LaunchTemplateNotFound :: NodegroupIssueCode
+pattern NodegroupIssueCode_Ec2LaunchTemplateNotFound = NodegroupIssueCode' "Ec2LaunchTemplateNotFound"
+
+pattern NodegroupIssueCode_Ec2LaunchTemplateVersionMismatch :: NodegroupIssueCode
+pattern NodegroupIssueCode_Ec2LaunchTemplateVersionMismatch = NodegroupIssueCode' "Ec2LaunchTemplateVersionMismatch"
+
+pattern NodegroupIssueCode_Ec2SecurityGroupDeletionFailure :: NodegroupIssueCode
+pattern NodegroupIssueCode_Ec2SecurityGroupDeletionFailure = NodegroupIssueCode' "Ec2SecurityGroupDeletionFailure"
+
+pattern NodegroupIssueCode_Ec2SecurityGroupNotFound :: NodegroupIssueCode
+pattern NodegroupIssueCode_Ec2SecurityGroupNotFound = NodegroupIssueCode' "Ec2SecurityGroupNotFound"
+
+pattern NodegroupIssueCode_Ec2SubnetInvalidConfiguration :: NodegroupIssueCode
+pattern NodegroupIssueCode_Ec2SubnetInvalidConfiguration = NodegroupIssueCode' "Ec2SubnetInvalidConfiguration"
+
+pattern NodegroupIssueCode_Ec2SubnetMissingIpv6Assignment :: NodegroupIssueCode
+pattern NodegroupIssueCode_Ec2SubnetMissingIpv6Assignment = NodegroupIssueCode' "Ec2SubnetMissingIpv6Assignment"
+
+pattern NodegroupIssueCode_Ec2SubnetNotFound :: NodegroupIssueCode
+pattern NodegroupIssueCode_Ec2SubnetNotFound = NodegroupIssueCode' "Ec2SubnetNotFound"
+
+pattern NodegroupIssueCode_IamInstanceProfileNotFound :: NodegroupIssueCode
+pattern NodegroupIssueCode_IamInstanceProfileNotFound = NodegroupIssueCode' "IamInstanceProfileNotFound"
+
+pattern NodegroupIssueCode_IamLimitExceeded :: NodegroupIssueCode
+pattern NodegroupIssueCode_IamLimitExceeded = NodegroupIssueCode' "IamLimitExceeded"
+
+pattern NodegroupIssueCode_IamNodeRoleNotFound :: NodegroupIssueCode
+pattern NodegroupIssueCode_IamNodeRoleNotFound = NodegroupIssueCode' "IamNodeRoleNotFound"
+
+pattern NodegroupIssueCode_InstanceLimitExceeded :: NodegroupIssueCode
+pattern NodegroupIssueCode_InstanceLimitExceeded = NodegroupIssueCode' "InstanceLimitExceeded"
+
+pattern NodegroupIssueCode_InsufficientFreeAddresses :: NodegroupIssueCode
+pattern NodegroupIssueCode_InsufficientFreeAddresses = NodegroupIssueCode' "InsufficientFreeAddresses"
+
+pattern NodegroupIssueCode_InternalFailure :: NodegroupIssueCode
+pattern NodegroupIssueCode_InternalFailure = NodegroupIssueCode' "InternalFailure"
+
+pattern NodegroupIssueCode_NodeCreationFailure :: NodegroupIssueCode
+pattern NodegroupIssueCode_NodeCreationFailure = NodegroupIssueCode' "NodeCreationFailure"
+
+{-# COMPLETE
+  NodegroupIssueCode_AccessDenied,
+  NodegroupIssueCode_AsgInstanceLaunchFailures,
+  NodegroupIssueCode_AutoScalingGroupInvalidConfiguration,
+  NodegroupIssueCode_AutoScalingGroupNotFound,
+  NodegroupIssueCode_ClusterUnreachable,
+  NodegroupIssueCode_Ec2LaunchTemplateNotFound,
+  NodegroupIssueCode_Ec2LaunchTemplateVersionMismatch,
+  NodegroupIssueCode_Ec2SecurityGroupDeletionFailure,
+  NodegroupIssueCode_Ec2SecurityGroupNotFound,
+  NodegroupIssueCode_Ec2SubnetInvalidConfiguration,
+  NodegroupIssueCode_Ec2SubnetMissingIpv6Assignment,
+  NodegroupIssueCode_Ec2SubnetNotFound,
+  NodegroupIssueCode_IamInstanceProfileNotFound,
+  NodegroupIssueCode_IamLimitExceeded,
+  NodegroupIssueCode_IamNodeRoleNotFound,
+  NodegroupIssueCode_InstanceLimitExceeded,
+  NodegroupIssueCode_InsufficientFreeAddresses,
+  NodegroupIssueCode_InternalFailure,
+  NodegroupIssueCode_NodeCreationFailure,
+  NodegroupIssueCode'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/NodegroupResources.hs b/gen/Amazonka/EKS/Types/NodegroupResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/NodegroupResources.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.EKS.Types.NodegroupResources
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.NodegroupResources where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.AutoScalingGroup
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing the resources associated with the node group,
+-- such as Auto Scaling groups and security groups for remote access.
+--
+-- /See:/ 'newNodegroupResources' smart constructor.
+data NodegroupResources = NodegroupResources'
+  { -- | The Auto Scaling groups associated with the node group.
+    autoScalingGroups :: Prelude.Maybe [AutoScalingGroup],
+    -- | The remote access security group associated with the node group. This
+    -- security group controls SSH access to the nodes.
+    remoteAccessSecurityGroup :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NodegroupResources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoScalingGroups', 'nodegroupResources_autoScalingGroups' - The Auto Scaling groups associated with the node group.
+--
+-- 'remoteAccessSecurityGroup', 'nodegroupResources_remoteAccessSecurityGroup' - The remote access security group associated with the node group. This
+-- security group controls SSH access to the nodes.
+newNodegroupResources ::
+  NodegroupResources
+newNodegroupResources =
+  NodegroupResources'
+    { autoScalingGroups =
+        Prelude.Nothing,
+      remoteAccessSecurityGroup = Prelude.Nothing
+    }
+
+-- | The Auto Scaling groups associated with the node group.
+nodegroupResources_autoScalingGroups :: Lens.Lens' NodegroupResources (Prelude.Maybe [AutoScalingGroup])
+nodegroupResources_autoScalingGroups = Lens.lens (\NodegroupResources' {autoScalingGroups} -> autoScalingGroups) (\s@NodegroupResources' {} a -> s {autoScalingGroups = a} :: NodegroupResources) Prelude.. Lens.mapping Lens.coerced
+
+-- | The remote access security group associated with the node group. This
+-- security group controls SSH access to the nodes.
+nodegroupResources_remoteAccessSecurityGroup :: Lens.Lens' NodegroupResources (Prelude.Maybe Prelude.Text)
+nodegroupResources_remoteAccessSecurityGroup = Lens.lens (\NodegroupResources' {remoteAccessSecurityGroup} -> remoteAccessSecurityGroup) (\s@NodegroupResources' {} a -> s {remoteAccessSecurityGroup = a} :: NodegroupResources)
+
+instance Data.FromJSON NodegroupResources where
+  parseJSON =
+    Data.withObject
+      "NodegroupResources"
+      ( \x ->
+          NodegroupResources'
+            Prelude.<$> ( x
+                            Data..:? "autoScalingGroups"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "remoteAccessSecurityGroup")
+      )
+
+instance Prelude.Hashable NodegroupResources where
+  hashWithSalt _salt NodegroupResources' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoScalingGroups
+      `Prelude.hashWithSalt` remoteAccessSecurityGroup
+
+instance Prelude.NFData NodegroupResources where
+  rnf NodegroupResources' {..} =
+    Prelude.rnf autoScalingGroups
+      `Prelude.seq` Prelude.rnf remoteAccessSecurityGroup
diff --git a/gen/Amazonka/EKS/Types/NodegroupScalingConfig.hs b/gen/Amazonka/EKS/Types/NodegroupScalingConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/NodegroupScalingConfig.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.NodegroupScalingConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.NodegroupScalingConfig 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 object representing the scaling configuration details for the Auto
+-- Scaling group that is associated with your node group. When creating a
+-- node group, you must specify all or none of the properties. When
+-- updating a node group, you can specify any or none of the properties.
+--
+-- /See:/ 'newNodegroupScalingConfig' smart constructor.
+data NodegroupScalingConfig = NodegroupScalingConfig'
+  { -- | The current number of nodes that the managed node group should maintain.
+    --
+    -- If you use Cluster Autoscaler, you shouldn\'t change the desiredSize
+    -- value directly, as this can cause the Cluster Autoscaler to suddenly
+    -- scale up or scale down.
+    --
+    -- Whenever this parameter changes, the number of worker nodes in the node
+    -- group is updated to the specified size. If this parameter is given a
+    -- value that is smaller than the current number of running worker nodes,
+    -- the necessary number of worker nodes are terminated to match the given
+    -- value. When using CloudFormation, no action occurs if you remove this
+    -- parameter from your CFN template.
+    --
+    -- This parameter can be different from minSize in some cases, such as when
+    -- starting with extra hosts for testing. This parameter can also be
+    -- different when you want to start with an estimated number of needed
+    -- hosts, but let Cluster Autoscaler reduce the number if there are too
+    -- many. When Cluster Autoscaler is used, the desiredSize parameter is
+    -- altered by Cluster Autoscaler (but can be out-of-date for short periods
+    -- of time). Cluster Autoscaler doesn\'t scale a managed node group lower
+    -- than minSize or higher than maxSize.
+    desiredSize :: Prelude.Maybe Prelude.Natural,
+    -- | The maximum number of nodes that the managed node group can scale out
+    -- to. For information about the maximum number that you can specify, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/service-quotas.html Amazon EKS service quotas>
+    -- in the /Amazon EKS User Guide/.
+    maxSize :: Prelude.Maybe Prelude.Natural,
+    -- | The minimum number of nodes that the managed node group can scale in to.
+    minSize :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NodegroupScalingConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'desiredSize', 'nodegroupScalingConfig_desiredSize' - The current number of nodes that the managed node group should maintain.
+--
+-- If you use Cluster Autoscaler, you shouldn\'t change the desiredSize
+-- value directly, as this can cause the Cluster Autoscaler to suddenly
+-- scale up or scale down.
+--
+-- Whenever this parameter changes, the number of worker nodes in the node
+-- group is updated to the specified size. If this parameter is given a
+-- value that is smaller than the current number of running worker nodes,
+-- the necessary number of worker nodes are terminated to match the given
+-- value. When using CloudFormation, no action occurs if you remove this
+-- parameter from your CFN template.
+--
+-- This parameter can be different from minSize in some cases, such as when
+-- starting with extra hosts for testing. This parameter can also be
+-- different when you want to start with an estimated number of needed
+-- hosts, but let Cluster Autoscaler reduce the number if there are too
+-- many. When Cluster Autoscaler is used, the desiredSize parameter is
+-- altered by Cluster Autoscaler (but can be out-of-date for short periods
+-- of time). Cluster Autoscaler doesn\'t scale a managed node group lower
+-- than minSize or higher than maxSize.
+--
+-- 'maxSize', 'nodegroupScalingConfig_maxSize' - The maximum number of nodes that the managed node group can scale out
+-- to. For information about the maximum number that you can specify, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/service-quotas.html Amazon EKS service quotas>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'minSize', 'nodegroupScalingConfig_minSize' - The minimum number of nodes that the managed node group can scale in to.
+newNodegroupScalingConfig ::
+  NodegroupScalingConfig
+newNodegroupScalingConfig =
+  NodegroupScalingConfig'
+    { desiredSize =
+        Prelude.Nothing,
+      maxSize = Prelude.Nothing,
+      minSize = Prelude.Nothing
+    }
+
+-- | The current number of nodes that the managed node group should maintain.
+--
+-- If you use Cluster Autoscaler, you shouldn\'t change the desiredSize
+-- value directly, as this can cause the Cluster Autoscaler to suddenly
+-- scale up or scale down.
+--
+-- Whenever this parameter changes, the number of worker nodes in the node
+-- group is updated to the specified size. If this parameter is given a
+-- value that is smaller than the current number of running worker nodes,
+-- the necessary number of worker nodes are terminated to match the given
+-- value. When using CloudFormation, no action occurs if you remove this
+-- parameter from your CFN template.
+--
+-- This parameter can be different from minSize in some cases, such as when
+-- starting with extra hosts for testing. This parameter can also be
+-- different when you want to start with an estimated number of needed
+-- hosts, but let Cluster Autoscaler reduce the number if there are too
+-- many. When Cluster Autoscaler is used, the desiredSize parameter is
+-- altered by Cluster Autoscaler (but can be out-of-date for short periods
+-- of time). Cluster Autoscaler doesn\'t scale a managed node group lower
+-- than minSize or higher than maxSize.
+nodegroupScalingConfig_desiredSize :: Lens.Lens' NodegroupScalingConfig (Prelude.Maybe Prelude.Natural)
+nodegroupScalingConfig_desiredSize = Lens.lens (\NodegroupScalingConfig' {desiredSize} -> desiredSize) (\s@NodegroupScalingConfig' {} a -> s {desiredSize = a} :: NodegroupScalingConfig)
+
+-- | The maximum number of nodes that the managed node group can scale out
+-- to. For information about the maximum number that you can specify, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/service-quotas.html Amazon EKS service quotas>
+-- in the /Amazon EKS User Guide/.
+nodegroupScalingConfig_maxSize :: Lens.Lens' NodegroupScalingConfig (Prelude.Maybe Prelude.Natural)
+nodegroupScalingConfig_maxSize = Lens.lens (\NodegroupScalingConfig' {maxSize} -> maxSize) (\s@NodegroupScalingConfig' {} a -> s {maxSize = a} :: NodegroupScalingConfig)
+
+-- | The minimum number of nodes that the managed node group can scale in to.
+nodegroupScalingConfig_minSize :: Lens.Lens' NodegroupScalingConfig (Prelude.Maybe Prelude.Natural)
+nodegroupScalingConfig_minSize = Lens.lens (\NodegroupScalingConfig' {minSize} -> minSize) (\s@NodegroupScalingConfig' {} a -> s {minSize = a} :: NodegroupScalingConfig)
+
+instance Data.FromJSON NodegroupScalingConfig where
+  parseJSON =
+    Data.withObject
+      "NodegroupScalingConfig"
+      ( \x ->
+          NodegroupScalingConfig'
+            Prelude.<$> (x Data..:? "desiredSize")
+            Prelude.<*> (x Data..:? "maxSize")
+            Prelude.<*> (x Data..:? "minSize")
+      )
+
+instance Prelude.Hashable NodegroupScalingConfig where
+  hashWithSalt _salt NodegroupScalingConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` desiredSize
+      `Prelude.hashWithSalt` maxSize
+      `Prelude.hashWithSalt` minSize
+
+instance Prelude.NFData NodegroupScalingConfig where
+  rnf NodegroupScalingConfig' {..} =
+    Prelude.rnf desiredSize
+      `Prelude.seq` Prelude.rnf maxSize
+      `Prelude.seq` Prelude.rnf minSize
+
+instance Data.ToJSON NodegroupScalingConfig where
+  toJSON NodegroupScalingConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("desiredSize" Data..=) Prelude.<$> desiredSize,
+            ("maxSize" Data..=) Prelude.<$> maxSize,
+            ("minSize" Data..=) Prelude.<$> minSize
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/NodegroupStatus.hs b/gen/Amazonka/EKS/Types/NodegroupStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/NodegroupStatus.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.NodegroupStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.NodegroupStatus
+  ( NodegroupStatus
+      ( ..,
+        NodegroupStatus_ACTIVE,
+        NodegroupStatus_CREATE_FAILED,
+        NodegroupStatus_CREATING,
+        NodegroupStatus_DEGRADED,
+        NodegroupStatus_DELETE_FAILED,
+        NodegroupStatus_DELETING,
+        NodegroupStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype NodegroupStatus = NodegroupStatus'
+  { fromNodegroupStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern NodegroupStatus_ACTIVE :: NodegroupStatus
+pattern NodegroupStatus_ACTIVE = NodegroupStatus' "ACTIVE"
+
+pattern NodegroupStatus_CREATE_FAILED :: NodegroupStatus
+pattern NodegroupStatus_CREATE_FAILED = NodegroupStatus' "CREATE_FAILED"
+
+pattern NodegroupStatus_CREATING :: NodegroupStatus
+pattern NodegroupStatus_CREATING = NodegroupStatus' "CREATING"
+
+pattern NodegroupStatus_DEGRADED :: NodegroupStatus
+pattern NodegroupStatus_DEGRADED = NodegroupStatus' "DEGRADED"
+
+pattern NodegroupStatus_DELETE_FAILED :: NodegroupStatus
+pattern NodegroupStatus_DELETE_FAILED = NodegroupStatus' "DELETE_FAILED"
+
+pattern NodegroupStatus_DELETING :: NodegroupStatus
+pattern NodegroupStatus_DELETING = NodegroupStatus' "DELETING"
+
+pattern NodegroupStatus_UPDATING :: NodegroupStatus
+pattern NodegroupStatus_UPDATING = NodegroupStatus' "UPDATING"
+
+{-# COMPLETE
+  NodegroupStatus_ACTIVE,
+  NodegroupStatus_CREATE_FAILED,
+  NodegroupStatus_CREATING,
+  NodegroupStatus_DEGRADED,
+  NodegroupStatus_DELETE_FAILED,
+  NodegroupStatus_DELETING,
+  NodegroupStatus_UPDATING,
+  NodegroupStatus'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/NodegroupUpdateConfig.hs b/gen/Amazonka/EKS/Types/NodegroupUpdateConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/NodegroupUpdateConfig.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.NodegroupUpdateConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.NodegroupUpdateConfig 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 node group update configuration.
+--
+-- /See:/ 'newNodegroupUpdateConfig' smart constructor.
+data NodegroupUpdateConfig = NodegroupUpdateConfig'
+  { -- | The maximum number of nodes unavailable at once during a version update.
+    -- Nodes will be updated in parallel. This value or
+    -- @maxUnavailablePercentage@ is required to have a value.The maximum
+    -- number is 100.
+    maxUnavailable :: Prelude.Maybe Prelude.Natural,
+    -- | The maximum percentage of nodes unavailable during a version update.
+    -- This percentage of nodes will be updated in parallel, up to 100 nodes at
+    -- once. This value or @maxUnavailable@ is required to have a value.
+    maxUnavailablePercentage :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NodegroupUpdateConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxUnavailable', 'nodegroupUpdateConfig_maxUnavailable' - The maximum number of nodes unavailable at once during a version update.
+-- Nodes will be updated in parallel. This value or
+-- @maxUnavailablePercentage@ is required to have a value.The maximum
+-- number is 100.
+--
+-- 'maxUnavailablePercentage', 'nodegroupUpdateConfig_maxUnavailablePercentage' - The maximum percentage of nodes unavailable during a version update.
+-- This percentage of nodes will be updated in parallel, up to 100 nodes at
+-- once. This value or @maxUnavailable@ is required to have a value.
+newNodegroupUpdateConfig ::
+  NodegroupUpdateConfig
+newNodegroupUpdateConfig =
+  NodegroupUpdateConfig'
+    { maxUnavailable =
+        Prelude.Nothing,
+      maxUnavailablePercentage = Prelude.Nothing
+    }
+
+-- | The maximum number of nodes unavailable at once during a version update.
+-- Nodes will be updated in parallel. This value or
+-- @maxUnavailablePercentage@ is required to have a value.The maximum
+-- number is 100.
+nodegroupUpdateConfig_maxUnavailable :: Lens.Lens' NodegroupUpdateConfig (Prelude.Maybe Prelude.Natural)
+nodegroupUpdateConfig_maxUnavailable = Lens.lens (\NodegroupUpdateConfig' {maxUnavailable} -> maxUnavailable) (\s@NodegroupUpdateConfig' {} a -> s {maxUnavailable = a} :: NodegroupUpdateConfig)
+
+-- | The maximum percentage of nodes unavailable during a version update.
+-- This percentage of nodes will be updated in parallel, up to 100 nodes at
+-- once. This value or @maxUnavailable@ is required to have a value.
+nodegroupUpdateConfig_maxUnavailablePercentage :: Lens.Lens' NodegroupUpdateConfig (Prelude.Maybe Prelude.Natural)
+nodegroupUpdateConfig_maxUnavailablePercentage = Lens.lens (\NodegroupUpdateConfig' {maxUnavailablePercentage} -> maxUnavailablePercentage) (\s@NodegroupUpdateConfig' {} a -> s {maxUnavailablePercentage = a} :: NodegroupUpdateConfig)
+
+instance Data.FromJSON NodegroupUpdateConfig where
+  parseJSON =
+    Data.withObject
+      "NodegroupUpdateConfig"
+      ( \x ->
+          NodegroupUpdateConfig'
+            Prelude.<$> (x Data..:? "maxUnavailable")
+            Prelude.<*> (x Data..:? "maxUnavailablePercentage")
+      )
+
+instance Prelude.Hashable NodegroupUpdateConfig where
+  hashWithSalt _salt NodegroupUpdateConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxUnavailable
+      `Prelude.hashWithSalt` maxUnavailablePercentage
+
+instance Prelude.NFData NodegroupUpdateConfig where
+  rnf NodegroupUpdateConfig' {..} =
+    Prelude.rnf maxUnavailable
+      `Prelude.seq` Prelude.rnf maxUnavailablePercentage
+
+instance Data.ToJSON NodegroupUpdateConfig where
+  toJSON NodegroupUpdateConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxUnavailable" Data..=)
+              Prelude.<$> maxUnavailable,
+            ("maxUnavailablePercentage" Data..=)
+              Prelude.<$> maxUnavailablePercentage
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/OIDC.hs b/gen/Amazonka/EKS/Types/OIDC.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/OIDC.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.OIDC
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.OIDC 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 object representing the <https://openid.net/connect/ OpenID Connect>
+-- (OIDC) identity provider information for the cluster.
+--
+-- /See:/ 'newOIDC' smart constructor.
+data OIDC = OIDC'
+  { -- | The issuer URL for the OIDC identity provider.
+    issuer :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OIDC' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'issuer', 'oidc_issuer' - The issuer URL for the OIDC identity provider.
+newOIDC ::
+  OIDC
+newOIDC = OIDC' {issuer = Prelude.Nothing}
+
+-- | The issuer URL for the OIDC identity provider.
+oidc_issuer :: Lens.Lens' OIDC (Prelude.Maybe Prelude.Text)
+oidc_issuer = Lens.lens (\OIDC' {issuer} -> issuer) (\s@OIDC' {} a -> s {issuer = a} :: OIDC)
+
+instance Data.FromJSON OIDC where
+  parseJSON =
+    Data.withObject
+      "OIDC"
+      (\x -> OIDC' Prelude.<$> (x Data..:? "issuer"))
+
+instance Prelude.Hashable OIDC where
+  hashWithSalt _salt OIDC' {..} =
+    _salt `Prelude.hashWithSalt` issuer
+
+instance Prelude.NFData OIDC where
+  rnf OIDC' {..} = Prelude.rnf issuer
diff --git a/gen/Amazonka/EKS/Types/OidcIdentityProviderConfig.hs b/gen/Amazonka/EKS/Types/OidcIdentityProviderConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/OidcIdentityProviderConfig.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.OidcIdentityProviderConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.OidcIdentityProviderConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.ConfigStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing the configuration for an OpenID Connect (OIDC)
+-- identity provider.
+--
+-- /See:/ 'newOidcIdentityProviderConfig' smart constructor.
+data OidcIdentityProviderConfig = OidcIdentityProviderConfig'
+  { -- | This is also known as /audience/. The ID of the client application that
+    -- makes authentication requests to the OIDC identity provider.
+    clientId :: Prelude.Maybe Prelude.Text,
+    -- | The cluster that the configuration is associated to.
+    clusterName :: Prelude.Maybe Prelude.Text,
+    -- | The JSON web token (JWT) claim that the provider uses to return your
+    -- groups.
+    groupsClaim :: Prelude.Maybe Prelude.Text,
+    -- | The prefix that is prepended to group claims to prevent clashes with
+    -- existing names (such as @system:@ groups). For example, the
+    -- value@ oidc:@ creates group names like @oidc:engineering@ and
+    -- @oidc:infra@. The prefix can\'t contain @system:@
+    groupsPrefix :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the configuration.
+    identityProviderConfigArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the configuration.
+    identityProviderConfigName :: Prelude.Maybe Prelude.Text,
+    -- | The URL of the OIDC identity provider that allows the API server to
+    -- discover public signing keys for verifying tokens.
+    issuerUrl :: Prelude.Maybe Prelude.Text,
+    -- | The key-value pairs that describe required claims in the identity token.
+    -- If set, each claim is verified to be present in the token with a
+    -- matching value.
+    requiredClaims :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The status of the OIDC identity provider.
+    status :: Prelude.Maybe ConfigStatus,
+    -- | The metadata to apply to the provider configuration to assist with
+    -- categorization and organization. Each tag consists of a key and an
+    -- optional value. You define both.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The JSON Web token (JWT) claim that is used as the username.
+    usernameClaim :: Prelude.Maybe Prelude.Text,
+    -- | The prefix that is prepended to username claims to prevent clashes with
+    -- existing names. The prefix can\'t contain @system:@
+    usernamePrefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OidcIdentityProviderConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientId', 'oidcIdentityProviderConfig_clientId' - This is also known as /audience/. The ID of the client application that
+-- makes authentication requests to the OIDC identity provider.
+--
+-- 'clusterName', 'oidcIdentityProviderConfig_clusterName' - The cluster that the configuration is associated to.
+--
+-- 'groupsClaim', 'oidcIdentityProviderConfig_groupsClaim' - The JSON web token (JWT) claim that the provider uses to return your
+-- groups.
+--
+-- 'groupsPrefix', 'oidcIdentityProviderConfig_groupsPrefix' - The prefix that is prepended to group claims to prevent clashes with
+-- existing names (such as @system:@ groups). For example, the
+-- value@ oidc:@ creates group names like @oidc:engineering@ and
+-- @oidc:infra@. The prefix can\'t contain @system:@
+--
+-- 'identityProviderConfigArn', 'oidcIdentityProviderConfig_identityProviderConfigArn' - The ARN of the configuration.
+--
+-- 'identityProviderConfigName', 'oidcIdentityProviderConfig_identityProviderConfigName' - The name of the configuration.
+--
+-- 'issuerUrl', 'oidcIdentityProviderConfig_issuerUrl' - The URL of the OIDC identity provider that allows the API server to
+-- discover public signing keys for verifying tokens.
+--
+-- 'requiredClaims', 'oidcIdentityProviderConfig_requiredClaims' - The key-value pairs that describe required claims in the identity token.
+-- If set, each claim is verified to be present in the token with a
+-- matching value.
+--
+-- 'status', 'oidcIdentityProviderConfig_status' - The status of the OIDC identity provider.
+--
+-- 'tags', 'oidcIdentityProviderConfig_tags' - The metadata to apply to the provider configuration to assist with
+-- categorization and organization. Each tag consists of a key and an
+-- optional value. You define both.
+--
+-- 'usernameClaim', 'oidcIdentityProviderConfig_usernameClaim' - The JSON Web token (JWT) claim that is used as the username.
+--
+-- 'usernamePrefix', 'oidcIdentityProviderConfig_usernamePrefix' - The prefix that is prepended to username claims to prevent clashes with
+-- existing names. The prefix can\'t contain @system:@
+newOidcIdentityProviderConfig ::
+  OidcIdentityProviderConfig
+newOidcIdentityProviderConfig =
+  OidcIdentityProviderConfig'
+    { clientId =
+        Prelude.Nothing,
+      clusterName = Prelude.Nothing,
+      groupsClaim = Prelude.Nothing,
+      groupsPrefix = Prelude.Nothing,
+      identityProviderConfigArn = Prelude.Nothing,
+      identityProviderConfigName = Prelude.Nothing,
+      issuerUrl = Prelude.Nothing,
+      requiredClaims = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      usernameClaim = Prelude.Nothing,
+      usernamePrefix = Prelude.Nothing
+    }
+
+-- | This is also known as /audience/. The ID of the client application that
+-- makes authentication requests to the OIDC identity provider.
+oidcIdentityProviderConfig_clientId :: Lens.Lens' OidcIdentityProviderConfig (Prelude.Maybe Prelude.Text)
+oidcIdentityProviderConfig_clientId = Lens.lens (\OidcIdentityProviderConfig' {clientId} -> clientId) (\s@OidcIdentityProviderConfig' {} a -> s {clientId = a} :: OidcIdentityProviderConfig)
+
+-- | The cluster that the configuration is associated to.
+oidcIdentityProviderConfig_clusterName :: Lens.Lens' OidcIdentityProviderConfig (Prelude.Maybe Prelude.Text)
+oidcIdentityProviderConfig_clusterName = Lens.lens (\OidcIdentityProviderConfig' {clusterName} -> clusterName) (\s@OidcIdentityProviderConfig' {} a -> s {clusterName = a} :: OidcIdentityProviderConfig)
+
+-- | The JSON web token (JWT) claim that the provider uses to return your
+-- groups.
+oidcIdentityProviderConfig_groupsClaim :: Lens.Lens' OidcIdentityProviderConfig (Prelude.Maybe Prelude.Text)
+oidcIdentityProviderConfig_groupsClaim = Lens.lens (\OidcIdentityProviderConfig' {groupsClaim} -> groupsClaim) (\s@OidcIdentityProviderConfig' {} a -> s {groupsClaim = a} :: OidcIdentityProviderConfig)
+
+-- | The prefix that is prepended to group claims to prevent clashes with
+-- existing names (such as @system:@ groups). For example, the
+-- value@ oidc:@ creates group names like @oidc:engineering@ and
+-- @oidc:infra@. The prefix can\'t contain @system:@
+oidcIdentityProviderConfig_groupsPrefix :: Lens.Lens' OidcIdentityProviderConfig (Prelude.Maybe Prelude.Text)
+oidcIdentityProviderConfig_groupsPrefix = Lens.lens (\OidcIdentityProviderConfig' {groupsPrefix} -> groupsPrefix) (\s@OidcIdentityProviderConfig' {} a -> s {groupsPrefix = a} :: OidcIdentityProviderConfig)
+
+-- | The ARN of the configuration.
+oidcIdentityProviderConfig_identityProviderConfigArn :: Lens.Lens' OidcIdentityProviderConfig (Prelude.Maybe Prelude.Text)
+oidcIdentityProviderConfig_identityProviderConfigArn = Lens.lens (\OidcIdentityProviderConfig' {identityProviderConfigArn} -> identityProviderConfigArn) (\s@OidcIdentityProviderConfig' {} a -> s {identityProviderConfigArn = a} :: OidcIdentityProviderConfig)
+
+-- | The name of the configuration.
+oidcIdentityProviderConfig_identityProviderConfigName :: Lens.Lens' OidcIdentityProviderConfig (Prelude.Maybe Prelude.Text)
+oidcIdentityProviderConfig_identityProviderConfigName = Lens.lens (\OidcIdentityProviderConfig' {identityProviderConfigName} -> identityProviderConfigName) (\s@OidcIdentityProviderConfig' {} a -> s {identityProviderConfigName = a} :: OidcIdentityProviderConfig)
+
+-- | The URL of the OIDC identity provider that allows the API server to
+-- discover public signing keys for verifying tokens.
+oidcIdentityProviderConfig_issuerUrl :: Lens.Lens' OidcIdentityProviderConfig (Prelude.Maybe Prelude.Text)
+oidcIdentityProviderConfig_issuerUrl = Lens.lens (\OidcIdentityProviderConfig' {issuerUrl} -> issuerUrl) (\s@OidcIdentityProviderConfig' {} a -> s {issuerUrl = a} :: OidcIdentityProviderConfig)
+
+-- | The key-value pairs that describe required claims in the identity token.
+-- If set, each claim is verified to be present in the token with a
+-- matching value.
+oidcIdentityProviderConfig_requiredClaims :: Lens.Lens' OidcIdentityProviderConfig (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+oidcIdentityProviderConfig_requiredClaims = Lens.lens (\OidcIdentityProviderConfig' {requiredClaims} -> requiredClaims) (\s@OidcIdentityProviderConfig' {} a -> s {requiredClaims = a} :: OidcIdentityProviderConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the OIDC identity provider.
+oidcIdentityProviderConfig_status :: Lens.Lens' OidcIdentityProviderConfig (Prelude.Maybe ConfigStatus)
+oidcIdentityProviderConfig_status = Lens.lens (\OidcIdentityProviderConfig' {status} -> status) (\s@OidcIdentityProviderConfig' {} a -> s {status = a} :: OidcIdentityProviderConfig)
+
+-- | The metadata to apply to the provider configuration to assist with
+-- categorization and organization. Each tag consists of a key and an
+-- optional value. You define both.
+oidcIdentityProviderConfig_tags :: Lens.Lens' OidcIdentityProviderConfig (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+oidcIdentityProviderConfig_tags = Lens.lens (\OidcIdentityProviderConfig' {tags} -> tags) (\s@OidcIdentityProviderConfig' {} a -> s {tags = a} :: OidcIdentityProviderConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The JSON Web token (JWT) claim that is used as the username.
+oidcIdentityProviderConfig_usernameClaim :: Lens.Lens' OidcIdentityProviderConfig (Prelude.Maybe Prelude.Text)
+oidcIdentityProviderConfig_usernameClaim = Lens.lens (\OidcIdentityProviderConfig' {usernameClaim} -> usernameClaim) (\s@OidcIdentityProviderConfig' {} a -> s {usernameClaim = a} :: OidcIdentityProviderConfig)
+
+-- | The prefix that is prepended to username claims to prevent clashes with
+-- existing names. The prefix can\'t contain @system:@
+oidcIdentityProviderConfig_usernamePrefix :: Lens.Lens' OidcIdentityProviderConfig (Prelude.Maybe Prelude.Text)
+oidcIdentityProviderConfig_usernamePrefix = Lens.lens (\OidcIdentityProviderConfig' {usernamePrefix} -> usernamePrefix) (\s@OidcIdentityProviderConfig' {} a -> s {usernamePrefix = a} :: OidcIdentityProviderConfig)
+
+instance Data.FromJSON OidcIdentityProviderConfig where
+  parseJSON =
+    Data.withObject
+      "OidcIdentityProviderConfig"
+      ( \x ->
+          OidcIdentityProviderConfig'
+            Prelude.<$> (x Data..:? "clientId")
+            Prelude.<*> (x Data..:? "clusterName")
+            Prelude.<*> (x Data..:? "groupsClaim")
+            Prelude.<*> (x Data..:? "groupsPrefix")
+            Prelude.<*> (x Data..:? "identityProviderConfigArn")
+            Prelude.<*> (x Data..:? "identityProviderConfigName")
+            Prelude.<*> (x Data..:? "issuerUrl")
+            Prelude.<*> (x Data..:? "requiredClaims" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "usernameClaim")
+            Prelude.<*> (x Data..:? "usernamePrefix")
+      )
+
+instance Prelude.Hashable OidcIdentityProviderConfig where
+  hashWithSalt _salt OidcIdentityProviderConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientId
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` groupsClaim
+      `Prelude.hashWithSalt` groupsPrefix
+      `Prelude.hashWithSalt` identityProviderConfigArn
+      `Prelude.hashWithSalt` identityProviderConfigName
+      `Prelude.hashWithSalt` issuerUrl
+      `Prelude.hashWithSalt` requiredClaims
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` usernameClaim
+      `Prelude.hashWithSalt` usernamePrefix
+
+instance Prelude.NFData OidcIdentityProviderConfig where
+  rnf OidcIdentityProviderConfig' {..} =
+    Prelude.rnf clientId
+      `Prelude.seq` Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf groupsClaim
+      `Prelude.seq` Prelude.rnf groupsPrefix
+      `Prelude.seq` Prelude.rnf identityProviderConfigArn
+      `Prelude.seq` Prelude.rnf identityProviderConfigName
+      `Prelude.seq` Prelude.rnf issuerUrl
+      `Prelude.seq` Prelude.rnf requiredClaims
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf usernameClaim
+      `Prelude.seq` Prelude.rnf usernamePrefix
diff --git a/gen/Amazonka/EKS/Types/OidcIdentityProviderConfigRequest.hs b/gen/Amazonka/EKS/Types/OidcIdentityProviderConfigRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/OidcIdentityProviderConfigRequest.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.OidcIdentityProviderConfigRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.OidcIdentityProviderConfigRequest 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 object representing an OpenID Connect (OIDC) configuration. Before
+-- associating an OIDC identity provider to your cluster, review the
+-- considerations in
+-- <https://docs.aws.amazon.com/eks/latest/userguide/authenticate-oidc-identity-provider.html Authenticating users for your cluster from an OpenID Connect identity provider>
+-- in the /Amazon EKS User Guide/.
+--
+-- /See:/ 'newOidcIdentityProviderConfigRequest' smart constructor.
+data OidcIdentityProviderConfigRequest = OidcIdentityProviderConfigRequest'
+  { -- | The JWT claim that the provider uses to return your groups.
+    groupsClaim :: Prelude.Maybe Prelude.Text,
+    -- | The prefix that is prepended to group claims to prevent clashes with
+    -- existing names (such as @system:@ groups). For example, the
+    -- value@ oidc:@ will create group names like @oidc:engineering@ and
+    -- @oidc:infra@.
+    groupsPrefix :: Prelude.Maybe Prelude.Text,
+    -- | The key value pairs that describe required claims in the identity token.
+    -- If set, each claim is verified to be present in the token with a
+    -- matching value. For the maximum number of claims that you can require,
+    -- see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/service-quotas.html Amazon EKS service quotas>
+    -- in the /Amazon EKS User Guide/.
+    requiredClaims :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The JSON Web Token (JWT) claim to use as the username. The default is
+    -- @sub@, which is expected to be a unique identifier of the end user. You
+    -- can choose other claims, such as @email@ or @name@, depending on the
+    -- OpenID identity provider. Claims other than @email@ are prefixed with
+    -- the issuer URL to prevent naming clashes with other plug-ins.
+    usernameClaim :: Prelude.Maybe Prelude.Text,
+    -- | The prefix that is prepended to username claims to prevent clashes with
+    -- existing names. If you do not provide this field, and @username@ is a
+    -- value other than @email@, the prefix defaults to @issuerurl#@. You can
+    -- use the value @-@ to disable all prefixing.
+    usernamePrefix :: Prelude.Maybe Prelude.Text,
+    -- | The name of the OIDC provider configuration.
+    identityProviderConfigName :: Prelude.Text,
+    -- | The URL of the OpenID identity provider that allows the API server to
+    -- discover public signing keys for verifying tokens. The URL must begin
+    -- with @https:\/\/@ and should correspond to the @iss@ claim in the
+    -- provider\'s OIDC ID tokens. Per the OIDC standard, path components are
+    -- allowed but query parameters are not. Typically the URL consists of only
+    -- a hostname, like @https:\/\/server.example.org@ or
+    -- @https:\/\/example.com@. This URL should point to the level below
+    -- @.well-known\/openid-configuration@ and must be publicly accessible over
+    -- the internet.
+    issuerUrl :: Prelude.Text,
+    -- | This is also known as /audience/. The ID for the client application that
+    -- makes authentication requests to the OpenID identity provider.
+    clientId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OidcIdentityProviderConfigRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupsClaim', 'oidcIdentityProviderConfigRequest_groupsClaim' - The JWT claim that the provider uses to return your groups.
+--
+-- 'groupsPrefix', 'oidcIdentityProviderConfigRequest_groupsPrefix' - The prefix that is prepended to group claims to prevent clashes with
+-- existing names (such as @system:@ groups). For example, the
+-- value@ oidc:@ will create group names like @oidc:engineering@ and
+-- @oidc:infra@.
+--
+-- 'requiredClaims', 'oidcIdentityProviderConfigRequest_requiredClaims' - The key value pairs that describe required claims in the identity token.
+-- If set, each claim is verified to be present in the token with a
+-- matching value. For the maximum number of claims that you can require,
+-- see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/service-quotas.html Amazon EKS service quotas>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'usernameClaim', 'oidcIdentityProviderConfigRequest_usernameClaim' - The JSON Web Token (JWT) claim to use as the username. The default is
+-- @sub@, which is expected to be a unique identifier of the end user. You
+-- can choose other claims, such as @email@ or @name@, depending on the
+-- OpenID identity provider. Claims other than @email@ are prefixed with
+-- the issuer URL to prevent naming clashes with other plug-ins.
+--
+-- 'usernamePrefix', 'oidcIdentityProviderConfigRequest_usernamePrefix' - The prefix that is prepended to username claims to prevent clashes with
+-- existing names. If you do not provide this field, and @username@ is a
+-- value other than @email@, the prefix defaults to @issuerurl#@. You can
+-- use the value @-@ to disable all prefixing.
+--
+-- 'identityProviderConfigName', 'oidcIdentityProviderConfigRequest_identityProviderConfigName' - The name of the OIDC provider configuration.
+--
+-- 'issuerUrl', 'oidcIdentityProviderConfigRequest_issuerUrl' - The URL of the OpenID identity provider that allows the API server to
+-- discover public signing keys for verifying tokens. The URL must begin
+-- with @https:\/\/@ and should correspond to the @iss@ claim in the
+-- provider\'s OIDC ID tokens. Per the OIDC standard, path components are
+-- allowed but query parameters are not. Typically the URL consists of only
+-- a hostname, like @https:\/\/server.example.org@ or
+-- @https:\/\/example.com@. This URL should point to the level below
+-- @.well-known\/openid-configuration@ and must be publicly accessible over
+-- the internet.
+--
+-- 'clientId', 'oidcIdentityProviderConfigRequest_clientId' - This is also known as /audience/. The ID for the client application that
+-- makes authentication requests to the OpenID identity provider.
+newOidcIdentityProviderConfigRequest ::
+  -- | 'identityProviderConfigName'
+  Prelude.Text ->
+  -- | 'issuerUrl'
+  Prelude.Text ->
+  -- | 'clientId'
+  Prelude.Text ->
+  OidcIdentityProviderConfigRequest
+newOidcIdentityProviderConfigRequest
+  pIdentityProviderConfigName_
+  pIssuerUrl_
+  pClientId_ =
+    OidcIdentityProviderConfigRequest'
+      { groupsClaim =
+          Prelude.Nothing,
+        groupsPrefix = Prelude.Nothing,
+        requiredClaims = Prelude.Nothing,
+        usernameClaim = Prelude.Nothing,
+        usernamePrefix = Prelude.Nothing,
+        identityProviderConfigName =
+          pIdentityProviderConfigName_,
+        issuerUrl = pIssuerUrl_,
+        clientId = pClientId_
+      }
+
+-- | The JWT claim that the provider uses to return your groups.
+oidcIdentityProviderConfigRequest_groupsClaim :: Lens.Lens' OidcIdentityProviderConfigRequest (Prelude.Maybe Prelude.Text)
+oidcIdentityProviderConfigRequest_groupsClaim = Lens.lens (\OidcIdentityProviderConfigRequest' {groupsClaim} -> groupsClaim) (\s@OidcIdentityProviderConfigRequest' {} a -> s {groupsClaim = a} :: OidcIdentityProviderConfigRequest)
+
+-- | The prefix that is prepended to group claims to prevent clashes with
+-- existing names (such as @system:@ groups). For example, the
+-- value@ oidc:@ will create group names like @oidc:engineering@ and
+-- @oidc:infra@.
+oidcIdentityProviderConfigRequest_groupsPrefix :: Lens.Lens' OidcIdentityProviderConfigRequest (Prelude.Maybe Prelude.Text)
+oidcIdentityProviderConfigRequest_groupsPrefix = Lens.lens (\OidcIdentityProviderConfigRequest' {groupsPrefix} -> groupsPrefix) (\s@OidcIdentityProviderConfigRequest' {} a -> s {groupsPrefix = a} :: OidcIdentityProviderConfigRequest)
+
+-- | The key value pairs that describe required claims in the identity token.
+-- If set, each claim is verified to be present in the token with a
+-- matching value. For the maximum number of claims that you can require,
+-- see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/service-quotas.html Amazon EKS service quotas>
+-- in the /Amazon EKS User Guide/.
+oidcIdentityProviderConfigRequest_requiredClaims :: Lens.Lens' OidcIdentityProviderConfigRequest (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+oidcIdentityProviderConfigRequest_requiredClaims = Lens.lens (\OidcIdentityProviderConfigRequest' {requiredClaims} -> requiredClaims) (\s@OidcIdentityProviderConfigRequest' {} a -> s {requiredClaims = a} :: OidcIdentityProviderConfigRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The JSON Web Token (JWT) claim to use as the username. The default is
+-- @sub@, which is expected to be a unique identifier of the end user. You
+-- can choose other claims, such as @email@ or @name@, depending on the
+-- OpenID identity provider. Claims other than @email@ are prefixed with
+-- the issuer URL to prevent naming clashes with other plug-ins.
+oidcIdentityProviderConfigRequest_usernameClaim :: Lens.Lens' OidcIdentityProviderConfigRequest (Prelude.Maybe Prelude.Text)
+oidcIdentityProviderConfigRequest_usernameClaim = Lens.lens (\OidcIdentityProviderConfigRequest' {usernameClaim} -> usernameClaim) (\s@OidcIdentityProviderConfigRequest' {} a -> s {usernameClaim = a} :: OidcIdentityProviderConfigRequest)
+
+-- | The prefix that is prepended to username claims to prevent clashes with
+-- existing names. If you do not provide this field, and @username@ is a
+-- value other than @email@, the prefix defaults to @issuerurl#@. You can
+-- use the value @-@ to disable all prefixing.
+oidcIdentityProviderConfigRequest_usernamePrefix :: Lens.Lens' OidcIdentityProviderConfigRequest (Prelude.Maybe Prelude.Text)
+oidcIdentityProviderConfigRequest_usernamePrefix = Lens.lens (\OidcIdentityProviderConfigRequest' {usernamePrefix} -> usernamePrefix) (\s@OidcIdentityProviderConfigRequest' {} a -> s {usernamePrefix = a} :: OidcIdentityProviderConfigRequest)
+
+-- | The name of the OIDC provider configuration.
+oidcIdentityProviderConfigRequest_identityProviderConfigName :: Lens.Lens' OidcIdentityProviderConfigRequest Prelude.Text
+oidcIdentityProviderConfigRequest_identityProviderConfigName = Lens.lens (\OidcIdentityProviderConfigRequest' {identityProviderConfigName} -> identityProviderConfigName) (\s@OidcIdentityProviderConfigRequest' {} a -> s {identityProviderConfigName = a} :: OidcIdentityProviderConfigRequest)
+
+-- | The URL of the OpenID identity provider that allows the API server to
+-- discover public signing keys for verifying tokens. The URL must begin
+-- with @https:\/\/@ and should correspond to the @iss@ claim in the
+-- provider\'s OIDC ID tokens. Per the OIDC standard, path components are
+-- allowed but query parameters are not. Typically the URL consists of only
+-- a hostname, like @https:\/\/server.example.org@ or
+-- @https:\/\/example.com@. This URL should point to the level below
+-- @.well-known\/openid-configuration@ and must be publicly accessible over
+-- the internet.
+oidcIdentityProviderConfigRequest_issuerUrl :: Lens.Lens' OidcIdentityProviderConfigRequest Prelude.Text
+oidcIdentityProviderConfigRequest_issuerUrl = Lens.lens (\OidcIdentityProviderConfigRequest' {issuerUrl} -> issuerUrl) (\s@OidcIdentityProviderConfigRequest' {} a -> s {issuerUrl = a} :: OidcIdentityProviderConfigRequest)
+
+-- | This is also known as /audience/. The ID for the client application that
+-- makes authentication requests to the OpenID identity provider.
+oidcIdentityProviderConfigRequest_clientId :: Lens.Lens' OidcIdentityProviderConfigRequest Prelude.Text
+oidcIdentityProviderConfigRequest_clientId = Lens.lens (\OidcIdentityProviderConfigRequest' {clientId} -> clientId) (\s@OidcIdentityProviderConfigRequest' {} a -> s {clientId = a} :: OidcIdentityProviderConfigRequest)
+
+instance
+  Prelude.Hashable
+    OidcIdentityProviderConfigRequest
+  where
+  hashWithSalt
+    _salt
+    OidcIdentityProviderConfigRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` groupsClaim
+        `Prelude.hashWithSalt` groupsPrefix
+        `Prelude.hashWithSalt` requiredClaims
+        `Prelude.hashWithSalt` usernameClaim
+        `Prelude.hashWithSalt` usernamePrefix
+        `Prelude.hashWithSalt` identityProviderConfigName
+        `Prelude.hashWithSalt` issuerUrl
+        `Prelude.hashWithSalt` clientId
+
+instance
+  Prelude.NFData
+    OidcIdentityProviderConfigRequest
+  where
+  rnf OidcIdentityProviderConfigRequest' {..} =
+    Prelude.rnf groupsClaim
+      `Prelude.seq` Prelude.rnf groupsPrefix
+      `Prelude.seq` Prelude.rnf requiredClaims
+      `Prelude.seq` Prelude.rnf usernameClaim
+      `Prelude.seq` Prelude.rnf usernamePrefix
+      `Prelude.seq` Prelude.rnf identityProviderConfigName
+      `Prelude.seq` Prelude.rnf issuerUrl
+      `Prelude.seq` Prelude.rnf clientId
+
+instance
+  Data.ToJSON
+    OidcIdentityProviderConfigRequest
+  where
+  toJSON OidcIdentityProviderConfigRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("groupsClaim" Data..=) Prelude.<$> groupsClaim,
+            ("groupsPrefix" Data..=) Prelude.<$> groupsPrefix,
+            ("requiredClaims" Data..=)
+              Prelude.<$> requiredClaims,
+            ("usernameClaim" Data..=) Prelude.<$> usernameClaim,
+            ("usernamePrefix" Data..=)
+              Prelude.<$> usernamePrefix,
+            Prelude.Just
+              ( "identityProviderConfigName"
+                  Data..= identityProviderConfigName
+              ),
+            Prelude.Just ("issuerUrl" Data..= issuerUrl),
+            Prelude.Just ("clientId" Data..= clientId)
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/OutpostConfigRequest.hs b/gen/Amazonka/EKS/Types/OutpostConfigRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/OutpostConfigRequest.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.OutpostConfigRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.OutpostConfigRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.ControlPlanePlacementRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration of your local Amazon EKS cluster on an Amazon Web
+-- Services Outpost. Before creating a cluster on an Outpost, review
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-local-cluster-create.html Creating a local cluster on an Outpost>
+-- in the /Amazon EKS User Guide/. This API isn\'t available for Amazon EKS
+-- clusters on the Amazon Web Services cloud.
+--
+-- /See:/ 'newOutpostConfigRequest' smart constructor.
+data OutpostConfigRequest = OutpostConfigRequest'
+  { -- | An object representing the placement configuration for all the control
+    -- plane instances of your local Amazon EKS cluster on an Amazon Web
+    -- Services Outpost. For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-capacity-considerations.html Capacity considerations>
+    -- in the /Amazon EKS User Guide/.
+    controlPlanePlacement :: Prelude.Maybe ControlPlanePlacementRequest,
+    -- | The ARN of the Outpost that you want to use for your local Amazon EKS
+    -- cluster on Outposts. Only a single Outpost ARN is supported.
+    outpostArns :: [Prelude.Text],
+    -- | The Amazon EC2 instance type that you want to use for your local Amazon
+    -- EKS cluster on Outposts. Choose an instance type based on the number of
+    -- nodes that your cluster will have. For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-capacity-considerations.html Capacity considerations>
+    -- in the /Amazon EKS User Guide/.
+    --
+    -- The instance type that you specify is used for all Kubernetes control
+    -- plane instances. The instance type can\'t be changed after cluster
+    -- creation. The control plane is not automatically scaled by Amazon EKS.
+    controlPlaneInstanceType :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OutpostConfigRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'controlPlanePlacement', 'outpostConfigRequest_controlPlanePlacement' - An object representing the placement configuration for all the control
+-- plane instances of your local Amazon EKS cluster on an Amazon Web
+-- Services Outpost. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-capacity-considerations.html Capacity considerations>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'outpostArns', 'outpostConfigRequest_outpostArns' - The ARN of the Outpost that you want to use for your local Amazon EKS
+-- cluster on Outposts. Only a single Outpost ARN is supported.
+--
+-- 'controlPlaneInstanceType', 'outpostConfigRequest_controlPlaneInstanceType' - The Amazon EC2 instance type that you want to use for your local Amazon
+-- EKS cluster on Outposts. Choose an instance type based on the number of
+-- nodes that your cluster will have. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-capacity-considerations.html Capacity considerations>
+-- in the /Amazon EKS User Guide/.
+--
+-- The instance type that you specify is used for all Kubernetes control
+-- plane instances. The instance type can\'t be changed after cluster
+-- creation. The control plane is not automatically scaled by Amazon EKS.
+newOutpostConfigRequest ::
+  -- | 'controlPlaneInstanceType'
+  Prelude.Text ->
+  OutpostConfigRequest
+newOutpostConfigRequest pControlPlaneInstanceType_ =
+  OutpostConfigRequest'
+    { controlPlanePlacement =
+        Prelude.Nothing,
+      outpostArns = Prelude.mempty,
+      controlPlaneInstanceType =
+        pControlPlaneInstanceType_
+    }
+
+-- | An object representing the placement configuration for all the control
+-- plane instances of your local Amazon EKS cluster on an Amazon Web
+-- Services Outpost. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-capacity-considerations.html Capacity considerations>
+-- in the /Amazon EKS User Guide/.
+outpostConfigRequest_controlPlanePlacement :: Lens.Lens' OutpostConfigRequest (Prelude.Maybe ControlPlanePlacementRequest)
+outpostConfigRequest_controlPlanePlacement = Lens.lens (\OutpostConfigRequest' {controlPlanePlacement} -> controlPlanePlacement) (\s@OutpostConfigRequest' {} a -> s {controlPlanePlacement = a} :: OutpostConfigRequest)
+
+-- | The ARN of the Outpost that you want to use for your local Amazon EKS
+-- cluster on Outposts. Only a single Outpost ARN is supported.
+outpostConfigRequest_outpostArns :: Lens.Lens' OutpostConfigRequest [Prelude.Text]
+outpostConfigRequest_outpostArns = Lens.lens (\OutpostConfigRequest' {outpostArns} -> outpostArns) (\s@OutpostConfigRequest' {} a -> s {outpostArns = a} :: OutpostConfigRequest) Prelude.. Lens.coerced
+
+-- | The Amazon EC2 instance type that you want to use for your local Amazon
+-- EKS cluster on Outposts. Choose an instance type based on the number of
+-- nodes that your cluster will have. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-capacity-considerations.html Capacity considerations>
+-- in the /Amazon EKS User Guide/.
+--
+-- The instance type that you specify is used for all Kubernetes control
+-- plane instances. The instance type can\'t be changed after cluster
+-- creation. The control plane is not automatically scaled by Amazon EKS.
+outpostConfigRequest_controlPlaneInstanceType :: Lens.Lens' OutpostConfigRequest Prelude.Text
+outpostConfigRequest_controlPlaneInstanceType = Lens.lens (\OutpostConfigRequest' {controlPlaneInstanceType} -> controlPlaneInstanceType) (\s@OutpostConfigRequest' {} a -> s {controlPlaneInstanceType = a} :: OutpostConfigRequest)
+
+instance Prelude.Hashable OutpostConfigRequest where
+  hashWithSalt _salt OutpostConfigRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` controlPlanePlacement
+      `Prelude.hashWithSalt` outpostArns
+      `Prelude.hashWithSalt` controlPlaneInstanceType
+
+instance Prelude.NFData OutpostConfigRequest where
+  rnf OutpostConfigRequest' {..} =
+    Prelude.rnf controlPlanePlacement
+      `Prelude.seq` Prelude.rnf outpostArns
+      `Prelude.seq` Prelude.rnf controlPlaneInstanceType
+
+instance Data.ToJSON OutpostConfigRequest where
+  toJSON OutpostConfigRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("controlPlanePlacement" Data..=)
+              Prelude.<$> controlPlanePlacement,
+            Prelude.Just ("outpostArns" Data..= outpostArns),
+            Prelude.Just
+              ( "controlPlaneInstanceType"
+                  Data..= controlPlaneInstanceType
+              )
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/OutpostConfigResponse.hs b/gen/Amazonka/EKS/Types/OutpostConfigResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/OutpostConfigResponse.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.EKS.Types.OutpostConfigResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.OutpostConfigResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.ControlPlanePlacementResponse
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing the configuration of your local Amazon EKS
+-- cluster on an Amazon Web Services Outpost. This API isn\'t available for
+-- Amazon EKS clusters on the Amazon Web Services cloud.
+--
+-- /See:/ 'newOutpostConfigResponse' smart constructor.
+data OutpostConfigResponse = OutpostConfigResponse'
+  { -- | An object representing the placement configuration for all the control
+    -- plane instances of your local Amazon EKS cluster on an Amazon Web
+    -- Services Outpost. For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-capacity-considerations.html Capacity considerations>
+    -- in the /Amazon EKS User Guide/.
+    controlPlanePlacement :: Prelude.Maybe ControlPlanePlacementResponse,
+    -- | The ARN of the Outpost that you specified for use with your local Amazon
+    -- EKS cluster on Outposts.
+    outpostArns :: [Prelude.Text],
+    -- | The Amazon EC2 instance type used for the control plane. The instance
+    -- type is the same for all control plane instances.
+    controlPlaneInstanceType :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OutpostConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'controlPlanePlacement', 'outpostConfigResponse_controlPlanePlacement' - An object representing the placement configuration for all the control
+-- plane instances of your local Amazon EKS cluster on an Amazon Web
+-- Services Outpost. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-capacity-considerations.html Capacity considerations>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'outpostArns', 'outpostConfigResponse_outpostArns' - The ARN of the Outpost that you specified for use with your local Amazon
+-- EKS cluster on Outposts.
+--
+-- 'controlPlaneInstanceType', 'outpostConfigResponse_controlPlaneInstanceType' - The Amazon EC2 instance type used for the control plane. The instance
+-- type is the same for all control plane instances.
+newOutpostConfigResponse ::
+  -- | 'controlPlaneInstanceType'
+  Prelude.Text ->
+  OutpostConfigResponse
+newOutpostConfigResponse pControlPlaneInstanceType_ =
+  OutpostConfigResponse'
+    { controlPlanePlacement =
+        Prelude.Nothing,
+      outpostArns = Prelude.mempty,
+      controlPlaneInstanceType =
+        pControlPlaneInstanceType_
+    }
+
+-- | An object representing the placement configuration for all the control
+-- plane instances of your local Amazon EKS cluster on an Amazon Web
+-- Services Outpost. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-capacity-considerations.html Capacity considerations>
+-- in the /Amazon EKS User Guide/.
+outpostConfigResponse_controlPlanePlacement :: Lens.Lens' OutpostConfigResponse (Prelude.Maybe ControlPlanePlacementResponse)
+outpostConfigResponse_controlPlanePlacement = Lens.lens (\OutpostConfigResponse' {controlPlanePlacement} -> controlPlanePlacement) (\s@OutpostConfigResponse' {} a -> s {controlPlanePlacement = a} :: OutpostConfigResponse)
+
+-- | The ARN of the Outpost that you specified for use with your local Amazon
+-- EKS cluster on Outposts.
+outpostConfigResponse_outpostArns :: Lens.Lens' OutpostConfigResponse [Prelude.Text]
+outpostConfigResponse_outpostArns = Lens.lens (\OutpostConfigResponse' {outpostArns} -> outpostArns) (\s@OutpostConfigResponse' {} a -> s {outpostArns = a} :: OutpostConfigResponse) Prelude.. Lens.coerced
+
+-- | The Amazon EC2 instance type used for the control plane. The instance
+-- type is the same for all control plane instances.
+outpostConfigResponse_controlPlaneInstanceType :: Lens.Lens' OutpostConfigResponse Prelude.Text
+outpostConfigResponse_controlPlaneInstanceType = Lens.lens (\OutpostConfigResponse' {controlPlaneInstanceType} -> controlPlaneInstanceType) (\s@OutpostConfigResponse' {} a -> s {controlPlaneInstanceType = a} :: OutpostConfigResponse)
+
+instance Data.FromJSON OutpostConfigResponse where
+  parseJSON =
+    Data.withObject
+      "OutpostConfigResponse"
+      ( \x ->
+          OutpostConfigResponse'
+            Prelude.<$> (x Data..:? "controlPlanePlacement")
+            Prelude.<*> (x Data..:? "outpostArns" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "controlPlaneInstanceType")
+      )
+
+instance Prelude.Hashable OutpostConfigResponse where
+  hashWithSalt _salt OutpostConfigResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` controlPlanePlacement
+      `Prelude.hashWithSalt` outpostArns
+      `Prelude.hashWithSalt` controlPlaneInstanceType
+
+instance Prelude.NFData OutpostConfigResponse where
+  rnf OutpostConfigResponse' {..} =
+    Prelude.rnf controlPlanePlacement
+      `Prelude.seq` Prelude.rnf outpostArns
+      `Prelude.seq` Prelude.rnf controlPlaneInstanceType
diff --git a/gen/Amazonka/EKS/Types/Provider.hs b/gen/Amazonka/EKS/Types/Provider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/Provider.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.Provider
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.Provider 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
+
+-- | Identifies the Key Management Service (KMS) key used to encrypt the
+-- secrets.
+--
+-- /See:/ 'newProvider' smart constructor.
+data Provider = Provider'
+  { -- | Amazon Resource Name (ARN) or alias of the KMS key. The KMS key must be
+    -- symmetric, created in the same region as the cluster, and if the KMS key
+    -- was created in a different account, the user must have access to the KMS
+    -- key. For more information, see
+    -- <https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html Allowing Users in Other Accounts to Use a KMS key>
+    -- in the /Key Management Service Developer Guide/.
+    keyArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Provider' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyArn', 'provider_keyArn' - Amazon Resource Name (ARN) or alias of the KMS key. The KMS key must be
+-- symmetric, created in the same region as the cluster, and if the KMS key
+-- was created in a different account, the user must have access to the KMS
+-- key. For more information, see
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html Allowing Users in Other Accounts to Use a KMS key>
+-- in the /Key Management Service Developer Guide/.
+newProvider ::
+  Provider
+newProvider = Provider' {keyArn = Prelude.Nothing}
+
+-- | Amazon Resource Name (ARN) or alias of the KMS key. The KMS key must be
+-- symmetric, created in the same region as the cluster, and if the KMS key
+-- was created in a different account, the user must have access to the KMS
+-- key. For more information, see
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html Allowing Users in Other Accounts to Use a KMS key>
+-- in the /Key Management Service Developer Guide/.
+provider_keyArn :: Lens.Lens' Provider (Prelude.Maybe Prelude.Text)
+provider_keyArn = Lens.lens (\Provider' {keyArn} -> keyArn) (\s@Provider' {} a -> s {keyArn = a} :: Provider)
+
+instance Data.FromJSON Provider where
+  parseJSON =
+    Data.withObject
+      "Provider"
+      (\x -> Provider' Prelude.<$> (x Data..:? "keyArn"))
+
+instance Prelude.Hashable Provider where
+  hashWithSalt _salt Provider' {..} =
+    _salt `Prelude.hashWithSalt` keyArn
+
+instance Prelude.NFData Provider where
+  rnf Provider' {..} = Prelude.rnf keyArn
+
+instance Data.ToJSON Provider where
+  toJSON Provider' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("keyArn" Data..=) Prelude.<$> keyArn]
+      )
diff --git a/gen/Amazonka/EKS/Types/RemoteAccessConfig.hs b/gen/Amazonka/EKS/Types/RemoteAccessConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/RemoteAccessConfig.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.RemoteAccessConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.RemoteAccessConfig 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 object representing the remote access configuration for the managed
+-- node group.
+--
+-- /See:/ 'newRemoteAccessConfig' smart constructor.
+data RemoteAccessConfig = RemoteAccessConfig'
+  { -- | The Amazon EC2 SSH key name that provides access for SSH communication
+    -- with the nodes in the managed node group. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Amazon EC2 key pairs and Linux instances>
+    -- in the /Amazon Elastic Compute Cloud User Guide for Linux Instances/.
+    -- For Windows, an Amazon EC2 SSH key is used to obtain the RDP password.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-key-pairs.html Amazon EC2 key pairs and Windows instances>
+    -- in the /Amazon Elastic Compute Cloud User Guide for Windows Instances/.
+    ec2SshKey :: Prelude.Maybe Prelude.Text,
+    -- | The security group IDs that are allowed SSH access (port 22) to the
+    -- nodes. For Windows, the port is 3389. If you specify an Amazon EC2 SSH
+    -- key but don\'t specify a source security group when you create a managed
+    -- node group, then the port on the nodes is opened to the internet
+    -- (@0.0.0.0\/0@). For more information, see
+    -- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html Security Groups for Your VPC>
+    -- in the /Amazon Virtual Private Cloud User Guide/.
+    sourceSecurityGroups :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoteAccessConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ec2SshKey', 'remoteAccessConfig_ec2SshKey' - The Amazon EC2 SSH key name that provides access for SSH communication
+-- with the nodes in the managed node group. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Amazon EC2 key pairs and Linux instances>
+-- in the /Amazon Elastic Compute Cloud User Guide for Linux Instances/.
+-- For Windows, an Amazon EC2 SSH key is used to obtain the RDP password.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-key-pairs.html Amazon EC2 key pairs and Windows instances>
+-- in the /Amazon Elastic Compute Cloud User Guide for Windows Instances/.
+--
+-- 'sourceSecurityGroups', 'remoteAccessConfig_sourceSecurityGroups' - The security group IDs that are allowed SSH access (port 22) to the
+-- nodes. For Windows, the port is 3389. If you specify an Amazon EC2 SSH
+-- key but don\'t specify a source security group when you create a managed
+-- node group, then the port on the nodes is opened to the internet
+-- (@0.0.0.0\/0@). For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html Security Groups for Your VPC>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+newRemoteAccessConfig ::
+  RemoteAccessConfig
+newRemoteAccessConfig =
+  RemoteAccessConfig'
+    { ec2SshKey = Prelude.Nothing,
+      sourceSecurityGroups = Prelude.Nothing
+    }
+
+-- | The Amazon EC2 SSH key name that provides access for SSH communication
+-- with the nodes in the managed node group. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Amazon EC2 key pairs and Linux instances>
+-- in the /Amazon Elastic Compute Cloud User Guide for Linux Instances/.
+-- For Windows, an Amazon EC2 SSH key is used to obtain the RDP password.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-key-pairs.html Amazon EC2 key pairs and Windows instances>
+-- in the /Amazon Elastic Compute Cloud User Guide for Windows Instances/.
+remoteAccessConfig_ec2SshKey :: Lens.Lens' RemoteAccessConfig (Prelude.Maybe Prelude.Text)
+remoteAccessConfig_ec2SshKey = Lens.lens (\RemoteAccessConfig' {ec2SshKey} -> ec2SshKey) (\s@RemoteAccessConfig' {} a -> s {ec2SshKey = a} :: RemoteAccessConfig)
+
+-- | The security group IDs that are allowed SSH access (port 22) to the
+-- nodes. For Windows, the port is 3389. If you specify an Amazon EC2 SSH
+-- key but don\'t specify a source security group when you create a managed
+-- node group, then the port on the nodes is opened to the internet
+-- (@0.0.0.0\/0@). For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html Security Groups for Your VPC>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+remoteAccessConfig_sourceSecurityGroups :: Lens.Lens' RemoteAccessConfig (Prelude.Maybe [Prelude.Text])
+remoteAccessConfig_sourceSecurityGroups = Lens.lens (\RemoteAccessConfig' {sourceSecurityGroups} -> sourceSecurityGroups) (\s@RemoteAccessConfig' {} a -> s {sourceSecurityGroups = a} :: RemoteAccessConfig) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON RemoteAccessConfig where
+  parseJSON =
+    Data.withObject
+      "RemoteAccessConfig"
+      ( \x ->
+          RemoteAccessConfig'
+            Prelude.<$> (x Data..:? "ec2SshKey")
+            Prelude.<*> ( x
+                            Data..:? "sourceSecurityGroups"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable RemoteAccessConfig where
+  hashWithSalt _salt RemoteAccessConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` ec2SshKey
+      `Prelude.hashWithSalt` sourceSecurityGroups
+
+instance Prelude.NFData RemoteAccessConfig where
+  rnf RemoteAccessConfig' {..} =
+    Prelude.rnf ec2SshKey
+      `Prelude.seq` Prelude.rnf sourceSecurityGroups
+
+instance Data.ToJSON RemoteAccessConfig where
+  toJSON RemoteAccessConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ec2SshKey" Data..=) Prelude.<$> ec2SshKey,
+            ("sourceSecurityGroups" Data..=)
+              Prelude.<$> sourceSecurityGroups
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/ResolveConflicts.hs b/gen/Amazonka/EKS/Types/ResolveConflicts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/ResolveConflicts.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.EKS.Types.ResolveConflicts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.ResolveConflicts
+  ( ResolveConflicts
+      ( ..,
+        ResolveConflicts_NONE,
+        ResolveConflicts_OVERWRITE,
+        ResolveConflicts_PRESERVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResolveConflicts = ResolveConflicts'
+  { fromResolveConflicts ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ResolveConflicts_NONE :: ResolveConflicts
+pattern ResolveConflicts_NONE = ResolveConflicts' "NONE"
+
+pattern ResolveConflicts_OVERWRITE :: ResolveConflicts
+pattern ResolveConflicts_OVERWRITE = ResolveConflicts' "OVERWRITE"
+
+pattern ResolveConflicts_PRESERVE :: ResolveConflicts
+pattern ResolveConflicts_PRESERVE = ResolveConflicts' "PRESERVE"
+
+{-# COMPLETE
+  ResolveConflicts_NONE,
+  ResolveConflicts_OVERWRITE,
+  ResolveConflicts_PRESERVE,
+  ResolveConflicts'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/Taint.hs b/gen/Amazonka/EKS/Types/Taint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/Taint.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.Taint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.Taint where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.TaintEffect
+import qualified Amazonka.Prelude as Prelude
+
+-- | A property that allows a node to repel a set of pods. For more
+-- information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html Node taints on managed node groups>.
+--
+-- /See:/ 'newTaint' smart constructor.
+data Taint = Taint'
+  { -- | The effect of the taint.
+    effect :: Prelude.Maybe TaintEffect,
+    -- | The key of the taint.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The value of the taint.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Taint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'effect', 'taint_effect' - The effect of the taint.
+--
+-- 'key', 'taint_key' - The key of the taint.
+--
+-- 'value', 'taint_value' - The value of the taint.
+newTaint ::
+  Taint
+newTaint =
+  Taint'
+    { effect = Prelude.Nothing,
+      key = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The effect of the taint.
+taint_effect :: Lens.Lens' Taint (Prelude.Maybe TaintEffect)
+taint_effect = Lens.lens (\Taint' {effect} -> effect) (\s@Taint' {} a -> s {effect = a} :: Taint)
+
+-- | The key of the taint.
+taint_key :: Lens.Lens' Taint (Prelude.Maybe Prelude.Text)
+taint_key = Lens.lens (\Taint' {key} -> key) (\s@Taint' {} a -> s {key = a} :: Taint)
+
+-- | The value of the taint.
+taint_value :: Lens.Lens' Taint (Prelude.Maybe Prelude.Text)
+taint_value = Lens.lens (\Taint' {value} -> value) (\s@Taint' {} a -> s {value = a} :: Taint)
+
+instance Data.FromJSON Taint where
+  parseJSON =
+    Data.withObject
+      "Taint"
+      ( \x ->
+          Taint'
+            Prelude.<$> (x Data..:? "effect")
+            Prelude.<*> (x Data..:? "key")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable Taint where
+  hashWithSalt _salt Taint' {..} =
+    _salt
+      `Prelude.hashWithSalt` effect
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Taint where
+  rnf Taint' {..} =
+    Prelude.rnf effect
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Taint where
+  toJSON Taint' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("effect" Data..=) Prelude.<$> effect,
+            ("key" Data..=) Prelude.<$> key,
+            ("value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/TaintEffect.hs b/gen/Amazonka/EKS/Types/TaintEffect.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/TaintEffect.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.EKS.Types.TaintEffect
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.TaintEffect
+  ( TaintEffect
+      ( ..,
+        TaintEffect_NO_EXECUTE,
+        TaintEffect_NO_SCHEDULE,
+        TaintEffect_PREFER_NO_SCHEDULE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TaintEffect = TaintEffect'
+  { fromTaintEffect ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TaintEffect_NO_EXECUTE :: TaintEffect
+pattern TaintEffect_NO_EXECUTE = TaintEffect' "NO_EXECUTE"
+
+pattern TaintEffect_NO_SCHEDULE :: TaintEffect
+pattern TaintEffect_NO_SCHEDULE = TaintEffect' "NO_SCHEDULE"
+
+pattern TaintEffect_PREFER_NO_SCHEDULE :: TaintEffect
+pattern TaintEffect_PREFER_NO_SCHEDULE = TaintEffect' "PREFER_NO_SCHEDULE"
+
+{-# COMPLETE
+  TaintEffect_NO_EXECUTE,
+  TaintEffect_NO_SCHEDULE,
+  TaintEffect_PREFER_NO_SCHEDULE,
+  TaintEffect'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/Update.hs b/gen/Amazonka/EKS/Types/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/Update.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.Update
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.Update where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.ErrorDetail
+import Amazonka.EKS.Types.UpdateParam
+import Amazonka.EKS.Types.UpdateStatus
+import Amazonka.EKS.Types.UpdateType
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing an asynchronous update.
+--
+-- /See:/ 'newUpdate' smart constructor.
+data Update = Update'
+  { -- | The Unix epoch timestamp in seconds for when the update was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | Any errors associated with a @Failed@ update.
+    errors :: Prelude.Maybe [ErrorDetail],
+    -- | A UUID that is used to track the update.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | A key-value map that contains the parameters associated with the update.
+    params :: Prelude.Maybe [UpdateParam],
+    -- | The current status of the update.
+    status :: Prelude.Maybe UpdateStatus,
+    -- | The type of the update.
+    type' :: Prelude.Maybe UpdateType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Update' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'update_createdAt' - The Unix epoch timestamp in seconds for when the update was created.
+--
+-- 'errors', 'update_errors' - Any errors associated with a @Failed@ update.
+--
+-- 'id', 'update_id' - A UUID that is used to track the update.
+--
+-- 'params', 'update_params' - A key-value map that contains the parameters associated with the update.
+--
+-- 'status', 'update_status' - The current status of the update.
+--
+-- 'type'', 'update_type' - The type of the update.
+newUpdate ::
+  Update
+newUpdate =
+  Update'
+    { createdAt = Prelude.Nothing,
+      errors = Prelude.Nothing,
+      id = Prelude.Nothing,
+      params = Prelude.Nothing,
+      status = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The Unix epoch timestamp in seconds for when the update was created.
+update_createdAt :: Lens.Lens' Update (Prelude.Maybe Prelude.UTCTime)
+update_createdAt = Lens.lens (\Update' {createdAt} -> createdAt) (\s@Update' {} a -> s {createdAt = a} :: Update) Prelude.. Lens.mapping Data._Time
+
+-- | Any errors associated with a @Failed@ update.
+update_errors :: Lens.Lens' Update (Prelude.Maybe [ErrorDetail])
+update_errors = Lens.lens (\Update' {errors} -> errors) (\s@Update' {} a -> s {errors = a} :: Update) Prelude.. Lens.mapping Lens.coerced
+
+-- | A UUID that is used to track the update.
+update_id :: Lens.Lens' Update (Prelude.Maybe Prelude.Text)
+update_id = Lens.lens (\Update' {id} -> id) (\s@Update' {} a -> s {id = a} :: Update)
+
+-- | A key-value map that contains the parameters associated with the update.
+update_params :: Lens.Lens' Update (Prelude.Maybe [UpdateParam])
+update_params = Lens.lens (\Update' {params} -> params) (\s@Update' {} a -> s {params = a} :: Update) Prelude.. Lens.mapping Lens.coerced
+
+-- | The current status of the update.
+update_status :: Lens.Lens' Update (Prelude.Maybe UpdateStatus)
+update_status = Lens.lens (\Update' {status} -> status) (\s@Update' {} a -> s {status = a} :: Update)
+
+-- | The type of the update.
+update_type :: Lens.Lens' Update (Prelude.Maybe UpdateType)
+update_type = Lens.lens (\Update' {type'} -> type') (\s@Update' {} a -> s {type' = a} :: Update)
+
+instance Data.FromJSON Update where
+  parseJSON =
+    Data.withObject
+      "Update"
+      ( \x ->
+          Update'
+            Prelude.<$> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "errors" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "params" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable Update where
+  hashWithSalt _salt Update' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` errors
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` params
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData Update where
+  rnf Update' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf params
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/EKS/Types/UpdateLabelsPayload.hs b/gen/Amazonka/EKS/Types/UpdateLabelsPayload.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/UpdateLabelsPayload.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.UpdateLabelsPayload
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.UpdateLabelsPayload 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 object representing a Kubernetes label change for a managed node
+-- group.
+--
+-- /See:/ 'newUpdateLabelsPayload' smart constructor.
+data UpdateLabelsPayload = UpdateLabelsPayload'
+  { -- | Kubernetes labels to be added or updated.
+    addOrUpdateLabels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Kubernetes labels to be removed.
+    removeLabels :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLabelsPayload' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addOrUpdateLabels', 'updateLabelsPayload_addOrUpdateLabels' - Kubernetes labels to be added or updated.
+--
+-- 'removeLabels', 'updateLabelsPayload_removeLabels' - Kubernetes labels to be removed.
+newUpdateLabelsPayload ::
+  UpdateLabelsPayload
+newUpdateLabelsPayload =
+  UpdateLabelsPayload'
+    { addOrUpdateLabels =
+        Prelude.Nothing,
+      removeLabels = Prelude.Nothing
+    }
+
+-- | Kubernetes labels to be added or updated.
+updateLabelsPayload_addOrUpdateLabels :: Lens.Lens' UpdateLabelsPayload (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateLabelsPayload_addOrUpdateLabels = Lens.lens (\UpdateLabelsPayload' {addOrUpdateLabels} -> addOrUpdateLabels) (\s@UpdateLabelsPayload' {} a -> s {addOrUpdateLabels = a} :: UpdateLabelsPayload) Prelude.. Lens.mapping Lens.coerced
+
+-- | Kubernetes labels to be removed.
+updateLabelsPayload_removeLabels :: Lens.Lens' UpdateLabelsPayload (Prelude.Maybe [Prelude.Text])
+updateLabelsPayload_removeLabels = Lens.lens (\UpdateLabelsPayload' {removeLabels} -> removeLabels) (\s@UpdateLabelsPayload' {} a -> s {removeLabels = a} :: UpdateLabelsPayload) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable UpdateLabelsPayload where
+  hashWithSalt _salt UpdateLabelsPayload' {..} =
+    _salt
+      `Prelude.hashWithSalt` addOrUpdateLabels
+      `Prelude.hashWithSalt` removeLabels
+
+instance Prelude.NFData UpdateLabelsPayload where
+  rnf UpdateLabelsPayload' {..} =
+    Prelude.rnf addOrUpdateLabels
+      `Prelude.seq` Prelude.rnf removeLabels
+
+instance Data.ToJSON UpdateLabelsPayload where
+  toJSON UpdateLabelsPayload' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("addOrUpdateLabels" Data..=)
+              Prelude.<$> addOrUpdateLabels,
+            ("removeLabels" Data..=) Prelude.<$> removeLabels
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/UpdateParam.hs b/gen/Amazonka/EKS/Types/UpdateParam.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/UpdateParam.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.EKS.Types.UpdateParam
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.UpdateParam where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.UpdateParamType
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing the details of an update request.
+--
+-- /See:/ 'newUpdateParam' smart constructor.
+data UpdateParam = UpdateParam'
+  { -- | The keys associated with an update request.
+    type' :: Prelude.Maybe UpdateParamType,
+    -- | The value of the keys submitted as part of an update request.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateParam' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'type'', 'updateParam_type' - The keys associated with an update request.
+--
+-- 'value', 'updateParam_value' - The value of the keys submitted as part of an update request.
+newUpdateParam ::
+  UpdateParam
+newUpdateParam =
+  UpdateParam'
+    { type' = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The keys associated with an update request.
+updateParam_type :: Lens.Lens' UpdateParam (Prelude.Maybe UpdateParamType)
+updateParam_type = Lens.lens (\UpdateParam' {type'} -> type') (\s@UpdateParam' {} a -> s {type' = a} :: UpdateParam)
+
+-- | The value of the keys submitted as part of an update request.
+updateParam_value :: Lens.Lens' UpdateParam (Prelude.Maybe Prelude.Text)
+updateParam_value = Lens.lens (\UpdateParam' {value} -> value) (\s@UpdateParam' {} a -> s {value = a} :: UpdateParam)
+
+instance Data.FromJSON UpdateParam where
+  parseJSON =
+    Data.withObject
+      "UpdateParam"
+      ( \x ->
+          UpdateParam'
+            Prelude.<$> (x Data..:? "type")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable UpdateParam where
+  hashWithSalt _salt UpdateParam' {..} =
+    _salt
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData UpdateParam where
+  rnf UpdateParam' {..} =
+    Prelude.rnf type' `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/EKS/Types/UpdateParamType.hs b/gen/Amazonka/EKS/Types/UpdateParamType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/UpdateParamType.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.UpdateParamType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.UpdateParamType
+  ( UpdateParamType
+      ( ..,
+        UpdateParamType_AddonVersion,
+        UpdateParamType_ClusterLogging,
+        UpdateParamType_DesiredSize,
+        UpdateParamType_EncryptionConfig,
+        UpdateParamType_EndpointPrivateAccess,
+        UpdateParamType_EndpointPublicAccess,
+        UpdateParamType_IdentityProviderConfig,
+        UpdateParamType_LabelsToAdd,
+        UpdateParamType_LabelsToRemove,
+        UpdateParamType_LaunchTemplateName,
+        UpdateParamType_LaunchTemplateVersion,
+        UpdateParamType_MaxSize,
+        UpdateParamType_MaxUnavailable,
+        UpdateParamType_MaxUnavailablePercentage,
+        UpdateParamType_MinSize,
+        UpdateParamType_PlatformVersion,
+        UpdateParamType_PublicAccessCidrs,
+        UpdateParamType_ReleaseVersion,
+        UpdateParamType_ResolveConflicts,
+        UpdateParamType_ServiceAccountRoleArn,
+        UpdateParamType_TaintsToAdd,
+        UpdateParamType_TaintsToRemove,
+        UpdateParamType_Version
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype UpdateParamType = UpdateParamType'
+  { fromUpdateParamType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern UpdateParamType_AddonVersion :: UpdateParamType
+pattern UpdateParamType_AddonVersion = UpdateParamType' "AddonVersion"
+
+pattern UpdateParamType_ClusterLogging :: UpdateParamType
+pattern UpdateParamType_ClusterLogging = UpdateParamType' "ClusterLogging"
+
+pattern UpdateParamType_DesiredSize :: UpdateParamType
+pattern UpdateParamType_DesiredSize = UpdateParamType' "DesiredSize"
+
+pattern UpdateParamType_EncryptionConfig :: UpdateParamType
+pattern UpdateParamType_EncryptionConfig = UpdateParamType' "EncryptionConfig"
+
+pattern UpdateParamType_EndpointPrivateAccess :: UpdateParamType
+pattern UpdateParamType_EndpointPrivateAccess = UpdateParamType' "EndpointPrivateAccess"
+
+pattern UpdateParamType_EndpointPublicAccess :: UpdateParamType
+pattern UpdateParamType_EndpointPublicAccess = UpdateParamType' "EndpointPublicAccess"
+
+pattern UpdateParamType_IdentityProviderConfig :: UpdateParamType
+pattern UpdateParamType_IdentityProviderConfig = UpdateParamType' "IdentityProviderConfig"
+
+pattern UpdateParamType_LabelsToAdd :: UpdateParamType
+pattern UpdateParamType_LabelsToAdd = UpdateParamType' "LabelsToAdd"
+
+pattern UpdateParamType_LabelsToRemove :: UpdateParamType
+pattern UpdateParamType_LabelsToRemove = UpdateParamType' "LabelsToRemove"
+
+pattern UpdateParamType_LaunchTemplateName :: UpdateParamType
+pattern UpdateParamType_LaunchTemplateName = UpdateParamType' "LaunchTemplateName"
+
+pattern UpdateParamType_LaunchTemplateVersion :: UpdateParamType
+pattern UpdateParamType_LaunchTemplateVersion = UpdateParamType' "LaunchTemplateVersion"
+
+pattern UpdateParamType_MaxSize :: UpdateParamType
+pattern UpdateParamType_MaxSize = UpdateParamType' "MaxSize"
+
+pattern UpdateParamType_MaxUnavailable :: UpdateParamType
+pattern UpdateParamType_MaxUnavailable = UpdateParamType' "MaxUnavailable"
+
+pattern UpdateParamType_MaxUnavailablePercentage :: UpdateParamType
+pattern UpdateParamType_MaxUnavailablePercentage = UpdateParamType' "MaxUnavailablePercentage"
+
+pattern UpdateParamType_MinSize :: UpdateParamType
+pattern UpdateParamType_MinSize = UpdateParamType' "MinSize"
+
+pattern UpdateParamType_PlatformVersion :: UpdateParamType
+pattern UpdateParamType_PlatformVersion = UpdateParamType' "PlatformVersion"
+
+pattern UpdateParamType_PublicAccessCidrs :: UpdateParamType
+pattern UpdateParamType_PublicAccessCidrs = UpdateParamType' "PublicAccessCidrs"
+
+pattern UpdateParamType_ReleaseVersion :: UpdateParamType
+pattern UpdateParamType_ReleaseVersion = UpdateParamType' "ReleaseVersion"
+
+pattern UpdateParamType_ResolveConflicts :: UpdateParamType
+pattern UpdateParamType_ResolveConflicts = UpdateParamType' "ResolveConflicts"
+
+pattern UpdateParamType_ServiceAccountRoleArn :: UpdateParamType
+pattern UpdateParamType_ServiceAccountRoleArn = UpdateParamType' "ServiceAccountRoleArn"
+
+pattern UpdateParamType_TaintsToAdd :: UpdateParamType
+pattern UpdateParamType_TaintsToAdd = UpdateParamType' "TaintsToAdd"
+
+pattern UpdateParamType_TaintsToRemove :: UpdateParamType
+pattern UpdateParamType_TaintsToRemove = UpdateParamType' "TaintsToRemove"
+
+pattern UpdateParamType_Version :: UpdateParamType
+pattern UpdateParamType_Version = UpdateParamType' "Version"
+
+{-# COMPLETE
+  UpdateParamType_AddonVersion,
+  UpdateParamType_ClusterLogging,
+  UpdateParamType_DesiredSize,
+  UpdateParamType_EncryptionConfig,
+  UpdateParamType_EndpointPrivateAccess,
+  UpdateParamType_EndpointPublicAccess,
+  UpdateParamType_IdentityProviderConfig,
+  UpdateParamType_LabelsToAdd,
+  UpdateParamType_LabelsToRemove,
+  UpdateParamType_LaunchTemplateName,
+  UpdateParamType_LaunchTemplateVersion,
+  UpdateParamType_MaxSize,
+  UpdateParamType_MaxUnavailable,
+  UpdateParamType_MaxUnavailablePercentage,
+  UpdateParamType_MinSize,
+  UpdateParamType_PlatformVersion,
+  UpdateParamType_PublicAccessCidrs,
+  UpdateParamType_ReleaseVersion,
+  UpdateParamType_ResolveConflicts,
+  UpdateParamType_ServiceAccountRoleArn,
+  UpdateParamType_TaintsToAdd,
+  UpdateParamType_TaintsToRemove,
+  UpdateParamType_Version,
+  UpdateParamType'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/UpdateStatus.hs b/gen/Amazonka/EKS/Types/UpdateStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/UpdateStatus.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.UpdateStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.UpdateStatus
+  ( UpdateStatus
+      ( ..,
+        UpdateStatus_Cancelled,
+        UpdateStatus_Failed,
+        UpdateStatus_InProgress,
+        UpdateStatus_Successful
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype UpdateStatus = UpdateStatus'
+  { fromUpdateStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern UpdateStatus_Cancelled :: UpdateStatus
+pattern UpdateStatus_Cancelled = UpdateStatus' "Cancelled"
+
+pattern UpdateStatus_Failed :: UpdateStatus
+pattern UpdateStatus_Failed = UpdateStatus' "Failed"
+
+pattern UpdateStatus_InProgress :: UpdateStatus
+pattern UpdateStatus_InProgress = UpdateStatus' "InProgress"
+
+pattern UpdateStatus_Successful :: UpdateStatus
+pattern UpdateStatus_Successful = UpdateStatus' "Successful"
+
+{-# COMPLETE
+  UpdateStatus_Cancelled,
+  UpdateStatus_Failed,
+  UpdateStatus_InProgress,
+  UpdateStatus_Successful,
+  UpdateStatus'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/UpdateTaintsPayload.hs b/gen/Amazonka/EKS/Types/UpdateTaintsPayload.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/UpdateTaintsPayload.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.EKS.Types.UpdateTaintsPayload
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.UpdateTaintsPayload where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types.Taint
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing the details of an update to a taints payload. For
+-- more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html Node taints on managed node groups>.
+--
+-- /See:/ 'newUpdateTaintsPayload' smart constructor.
+data UpdateTaintsPayload = UpdateTaintsPayload'
+  { -- | Kubernetes taints to be added or updated.
+    addOrUpdateTaints :: Prelude.Maybe [Taint],
+    -- | Kubernetes taints to remove.
+    removeTaints :: Prelude.Maybe [Taint]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateTaintsPayload' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addOrUpdateTaints', 'updateTaintsPayload_addOrUpdateTaints' - Kubernetes taints to be added or updated.
+--
+-- 'removeTaints', 'updateTaintsPayload_removeTaints' - Kubernetes taints to remove.
+newUpdateTaintsPayload ::
+  UpdateTaintsPayload
+newUpdateTaintsPayload =
+  UpdateTaintsPayload'
+    { addOrUpdateTaints =
+        Prelude.Nothing,
+      removeTaints = Prelude.Nothing
+    }
+
+-- | Kubernetes taints to be added or updated.
+updateTaintsPayload_addOrUpdateTaints :: Lens.Lens' UpdateTaintsPayload (Prelude.Maybe [Taint])
+updateTaintsPayload_addOrUpdateTaints = Lens.lens (\UpdateTaintsPayload' {addOrUpdateTaints} -> addOrUpdateTaints) (\s@UpdateTaintsPayload' {} a -> s {addOrUpdateTaints = a} :: UpdateTaintsPayload) Prelude.. Lens.mapping Lens.coerced
+
+-- | Kubernetes taints to remove.
+updateTaintsPayload_removeTaints :: Lens.Lens' UpdateTaintsPayload (Prelude.Maybe [Taint])
+updateTaintsPayload_removeTaints = Lens.lens (\UpdateTaintsPayload' {removeTaints} -> removeTaints) (\s@UpdateTaintsPayload' {} a -> s {removeTaints = a} :: UpdateTaintsPayload) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable UpdateTaintsPayload where
+  hashWithSalt _salt UpdateTaintsPayload' {..} =
+    _salt
+      `Prelude.hashWithSalt` addOrUpdateTaints
+      `Prelude.hashWithSalt` removeTaints
+
+instance Prelude.NFData UpdateTaintsPayload where
+  rnf UpdateTaintsPayload' {..} =
+    Prelude.rnf addOrUpdateTaints
+      `Prelude.seq` Prelude.rnf removeTaints
+
+instance Data.ToJSON UpdateTaintsPayload where
+  toJSON UpdateTaintsPayload' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("addOrUpdateTaints" Data..=)
+              Prelude.<$> addOrUpdateTaints,
+            ("removeTaints" Data..=) Prelude.<$> removeTaints
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/UpdateType.hs b/gen/Amazonka/EKS/Types/UpdateType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/UpdateType.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.UpdateType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.UpdateType
+  ( UpdateType
+      ( ..,
+        UpdateType_AddonUpdate,
+        UpdateType_AssociateEncryptionConfig,
+        UpdateType_AssociateIdentityProviderConfig,
+        UpdateType_ConfigUpdate,
+        UpdateType_DisassociateIdentityProviderConfig,
+        UpdateType_EndpointAccessUpdate,
+        UpdateType_LoggingUpdate,
+        UpdateType_VersionUpdate
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype UpdateType = UpdateType'
+  { fromUpdateType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern UpdateType_AddonUpdate :: UpdateType
+pattern UpdateType_AddonUpdate = UpdateType' "AddonUpdate"
+
+pattern UpdateType_AssociateEncryptionConfig :: UpdateType
+pattern UpdateType_AssociateEncryptionConfig = UpdateType' "AssociateEncryptionConfig"
+
+pattern UpdateType_AssociateIdentityProviderConfig :: UpdateType
+pattern UpdateType_AssociateIdentityProviderConfig = UpdateType' "AssociateIdentityProviderConfig"
+
+pattern UpdateType_ConfigUpdate :: UpdateType
+pattern UpdateType_ConfigUpdate = UpdateType' "ConfigUpdate"
+
+pattern UpdateType_DisassociateIdentityProviderConfig :: UpdateType
+pattern UpdateType_DisassociateIdentityProviderConfig = UpdateType' "DisassociateIdentityProviderConfig"
+
+pattern UpdateType_EndpointAccessUpdate :: UpdateType
+pattern UpdateType_EndpointAccessUpdate = UpdateType' "EndpointAccessUpdate"
+
+pattern UpdateType_LoggingUpdate :: UpdateType
+pattern UpdateType_LoggingUpdate = UpdateType' "LoggingUpdate"
+
+pattern UpdateType_VersionUpdate :: UpdateType
+pattern UpdateType_VersionUpdate = UpdateType' "VersionUpdate"
+
+{-# COMPLETE
+  UpdateType_AddonUpdate,
+  UpdateType_AssociateEncryptionConfig,
+  UpdateType_AssociateIdentityProviderConfig,
+  UpdateType_ConfigUpdate,
+  UpdateType_DisassociateIdentityProviderConfig,
+  UpdateType_EndpointAccessUpdate,
+  UpdateType_LoggingUpdate,
+  UpdateType_VersionUpdate,
+  UpdateType'
+  #-}
diff --git a/gen/Amazonka/EKS/Types/VpcConfigRequest.hs b/gen/Amazonka/EKS/Types/VpcConfigRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/VpcConfigRequest.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.VpcConfigRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.VpcConfigRequest 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 object representing the VPC configuration to use for an Amazon EKS
+-- cluster.
+--
+-- /See:/ 'newVpcConfigRequest' smart constructor.
+data VpcConfigRequest = VpcConfigRequest'
+  { -- | Set this value to @true@ to enable private access for your cluster\'s
+    -- Kubernetes API server endpoint. If you enable private access, Kubernetes
+    -- API requests from within your cluster\'s VPC use the private VPC
+    -- endpoint. The default value for this parameter is @false@, which
+    -- disables private access for your Kubernetes API server. If you disable
+    -- private access and you have nodes or Fargate pods in the cluster, then
+    -- ensure that @publicAccessCidrs@ includes the necessary CIDR blocks for
+    -- communication with the nodes or Fargate pods. For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+    -- in the //Amazon EKS User Guide// .
+    endpointPrivateAccess :: Prelude.Maybe Prelude.Bool,
+    -- | Set this value to @false@ to disable public access to your cluster\'s
+    -- Kubernetes API server endpoint. If you disable public access, your
+    -- cluster\'s Kubernetes API server can only receive requests from within
+    -- the cluster VPC. The default value for this parameter is @true@, which
+    -- enables public access for your Kubernetes API server. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+    -- in the //Amazon EKS User Guide// .
+    endpointPublicAccess :: Prelude.Maybe Prelude.Bool,
+    -- | The CIDR blocks that are allowed access to your cluster\'s public
+    -- Kubernetes API server endpoint. Communication to the endpoint from
+    -- addresses outside of the CIDR blocks that you specify is denied. The
+    -- default value is @0.0.0.0\/0@. If you\'ve disabled private endpoint
+    -- access and you have nodes or Fargate pods in the cluster, then ensure
+    -- that you specify the necessary CIDR blocks. For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+    -- in the //Amazon EKS User Guide// .
+    publicAccessCidrs :: Prelude.Maybe [Prelude.Text],
+    -- | Specify one or more security groups for the cross-account elastic
+    -- network interfaces that Amazon EKS creates to use that allow
+    -- communication between your nodes and the Kubernetes control plane. If
+    -- you don\'t specify any security groups, then familiarize yourself with
+    -- the difference between Amazon EKS defaults for clusters deployed with
+    -- Kubernetes. For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html Amazon EKS security group considerations>
+    -- in the //Amazon EKS User Guide// .
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | Specify subnets for your Amazon EKS nodes. Amazon EKS creates
+    -- cross-account elastic network interfaces in these subnets to allow
+    -- communication between your nodes and the Kubernetes control plane.
+    subnetIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcConfigRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpointPrivateAccess', 'vpcConfigRequest_endpointPrivateAccess' - Set this value to @true@ to enable private access for your cluster\'s
+-- Kubernetes API server endpoint. If you enable private access, Kubernetes
+-- API requests from within your cluster\'s VPC use the private VPC
+-- endpoint. The default value for this parameter is @false@, which
+-- disables private access for your Kubernetes API server. If you disable
+-- private access and you have nodes or Fargate pods in the cluster, then
+-- ensure that @publicAccessCidrs@ includes the necessary CIDR blocks for
+-- communication with the nodes or Fargate pods. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+-- in the //Amazon EKS User Guide// .
+--
+-- 'endpointPublicAccess', 'vpcConfigRequest_endpointPublicAccess' - Set this value to @false@ to disable public access to your cluster\'s
+-- Kubernetes API server endpoint. If you disable public access, your
+-- cluster\'s Kubernetes API server can only receive requests from within
+-- the cluster VPC. The default value for this parameter is @true@, which
+-- enables public access for your Kubernetes API server. For more
+-- information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+-- in the //Amazon EKS User Guide// .
+--
+-- 'publicAccessCidrs', 'vpcConfigRequest_publicAccessCidrs' - The CIDR blocks that are allowed access to your cluster\'s public
+-- Kubernetes API server endpoint. Communication to the endpoint from
+-- addresses outside of the CIDR blocks that you specify is denied. The
+-- default value is @0.0.0.0\/0@. If you\'ve disabled private endpoint
+-- access and you have nodes or Fargate pods in the cluster, then ensure
+-- that you specify the necessary CIDR blocks. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+-- in the //Amazon EKS User Guide// .
+--
+-- 'securityGroupIds', 'vpcConfigRequest_securityGroupIds' - Specify one or more security groups for the cross-account elastic
+-- network interfaces that Amazon EKS creates to use that allow
+-- communication between your nodes and the Kubernetes control plane. If
+-- you don\'t specify any security groups, then familiarize yourself with
+-- the difference between Amazon EKS defaults for clusters deployed with
+-- Kubernetes. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html Amazon EKS security group considerations>
+-- in the //Amazon EKS User Guide// .
+--
+-- 'subnetIds', 'vpcConfigRequest_subnetIds' - Specify subnets for your Amazon EKS nodes. Amazon EKS creates
+-- cross-account elastic network interfaces in these subnets to allow
+-- communication between your nodes and the Kubernetes control plane.
+newVpcConfigRequest ::
+  VpcConfigRequest
+newVpcConfigRequest =
+  VpcConfigRequest'
+    { endpointPrivateAccess =
+        Prelude.Nothing,
+      endpointPublicAccess = Prelude.Nothing,
+      publicAccessCidrs = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      subnetIds = Prelude.Nothing
+    }
+
+-- | Set this value to @true@ to enable private access for your cluster\'s
+-- Kubernetes API server endpoint. If you enable private access, Kubernetes
+-- API requests from within your cluster\'s VPC use the private VPC
+-- endpoint. The default value for this parameter is @false@, which
+-- disables private access for your Kubernetes API server. If you disable
+-- private access and you have nodes or Fargate pods in the cluster, then
+-- ensure that @publicAccessCidrs@ includes the necessary CIDR blocks for
+-- communication with the nodes or Fargate pods. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+-- in the //Amazon EKS User Guide// .
+vpcConfigRequest_endpointPrivateAccess :: Lens.Lens' VpcConfigRequest (Prelude.Maybe Prelude.Bool)
+vpcConfigRequest_endpointPrivateAccess = Lens.lens (\VpcConfigRequest' {endpointPrivateAccess} -> endpointPrivateAccess) (\s@VpcConfigRequest' {} a -> s {endpointPrivateAccess = a} :: VpcConfigRequest)
+
+-- | Set this value to @false@ to disable public access to your cluster\'s
+-- Kubernetes API server endpoint. If you disable public access, your
+-- cluster\'s Kubernetes API server can only receive requests from within
+-- the cluster VPC. The default value for this parameter is @true@, which
+-- enables public access for your Kubernetes API server. For more
+-- information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+-- in the //Amazon EKS User Guide// .
+vpcConfigRequest_endpointPublicAccess :: Lens.Lens' VpcConfigRequest (Prelude.Maybe Prelude.Bool)
+vpcConfigRequest_endpointPublicAccess = Lens.lens (\VpcConfigRequest' {endpointPublicAccess} -> endpointPublicAccess) (\s@VpcConfigRequest' {} a -> s {endpointPublicAccess = a} :: VpcConfigRequest)
+
+-- | The CIDR blocks that are allowed access to your cluster\'s public
+-- Kubernetes API server endpoint. Communication to the endpoint from
+-- addresses outside of the CIDR blocks that you specify is denied. The
+-- default value is @0.0.0.0\/0@. If you\'ve disabled private endpoint
+-- access and you have nodes or Fargate pods in the cluster, then ensure
+-- that you specify the necessary CIDR blocks. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+-- in the //Amazon EKS User Guide// .
+vpcConfigRequest_publicAccessCidrs :: Lens.Lens' VpcConfigRequest (Prelude.Maybe [Prelude.Text])
+vpcConfigRequest_publicAccessCidrs = Lens.lens (\VpcConfigRequest' {publicAccessCidrs} -> publicAccessCidrs) (\s@VpcConfigRequest' {} a -> s {publicAccessCidrs = a} :: VpcConfigRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specify one or more security groups for the cross-account elastic
+-- network interfaces that Amazon EKS creates to use that allow
+-- communication between your nodes and the Kubernetes control plane. If
+-- you don\'t specify any security groups, then familiarize yourself with
+-- the difference between Amazon EKS defaults for clusters deployed with
+-- Kubernetes. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html Amazon EKS security group considerations>
+-- in the //Amazon EKS User Guide// .
+vpcConfigRequest_securityGroupIds :: Lens.Lens' VpcConfigRequest (Prelude.Maybe [Prelude.Text])
+vpcConfigRequest_securityGroupIds = Lens.lens (\VpcConfigRequest' {securityGroupIds} -> securityGroupIds) (\s@VpcConfigRequest' {} a -> s {securityGroupIds = a} :: VpcConfigRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specify subnets for your Amazon EKS nodes. Amazon EKS creates
+-- cross-account elastic network interfaces in these subnets to allow
+-- communication between your nodes and the Kubernetes control plane.
+vpcConfigRequest_subnetIds :: Lens.Lens' VpcConfigRequest (Prelude.Maybe [Prelude.Text])
+vpcConfigRequest_subnetIds = Lens.lens (\VpcConfigRequest' {subnetIds} -> subnetIds) (\s@VpcConfigRequest' {} a -> s {subnetIds = a} :: VpcConfigRequest) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable VpcConfigRequest where
+  hashWithSalt _salt VpcConfigRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` endpointPrivateAccess
+      `Prelude.hashWithSalt` endpointPublicAccess
+      `Prelude.hashWithSalt` publicAccessCidrs
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` subnetIds
+
+instance Prelude.NFData VpcConfigRequest where
+  rnf VpcConfigRequest' {..} =
+    Prelude.rnf endpointPrivateAccess
+      `Prelude.seq` Prelude.rnf endpointPublicAccess
+      `Prelude.seq` Prelude.rnf publicAccessCidrs
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf subnetIds
+
+instance Data.ToJSON VpcConfigRequest where
+  toJSON VpcConfigRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("endpointPrivateAccess" Data..=)
+              Prelude.<$> endpointPrivateAccess,
+            ("endpointPublicAccess" Data..=)
+              Prelude.<$> endpointPublicAccess,
+            ("publicAccessCidrs" Data..=)
+              Prelude.<$> publicAccessCidrs,
+            ("securityGroupIds" Data..=)
+              Prelude.<$> securityGroupIds,
+            ("subnetIds" Data..=) Prelude.<$> subnetIds
+          ]
+      )
diff --git a/gen/Amazonka/EKS/Types/VpcConfigResponse.hs b/gen/Amazonka/EKS/Types/VpcConfigResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Types/VpcConfigResponse.hs
@@ -0,0 +1,220 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.Types.VpcConfigResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EKS.Types.VpcConfigResponse 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 object representing an Amazon EKS cluster VPC configuration response.
+--
+-- /See:/ 'newVpcConfigResponse' smart constructor.
+data VpcConfigResponse = VpcConfigResponse'
+  { -- | The cluster security group that was created by Amazon EKS for the
+    -- cluster. Managed node groups use this security group for
+    -- control-plane-to-data-plane communication.
+    clusterSecurityGroupId :: Prelude.Maybe Prelude.Text,
+    -- | This parameter indicates whether the Amazon EKS private API server
+    -- endpoint is enabled. If the Amazon EKS private API server endpoint is
+    -- enabled, Kubernetes API requests that originate from within your
+    -- cluster\'s VPC use the private VPC endpoint instead of traversing the
+    -- internet. If this value is disabled and you have nodes or Fargate pods
+    -- in the cluster, then ensure that @publicAccessCidrs@ includes the
+    -- necessary CIDR blocks for communication with the nodes or Fargate pods.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+    -- in the //Amazon EKS User Guide// .
+    endpointPrivateAccess :: Prelude.Maybe Prelude.Bool,
+    -- | This parameter indicates whether the Amazon EKS public API server
+    -- endpoint is enabled. If the Amazon EKS public API server endpoint is
+    -- disabled, your cluster\'s Kubernetes API server can only receive
+    -- requests that originate from within the cluster VPC.
+    endpointPublicAccess :: Prelude.Maybe Prelude.Bool,
+    -- | The CIDR blocks that are allowed access to your cluster\'s public
+    -- Kubernetes API server endpoint. Communication to the endpoint from
+    -- addresses outside of the listed CIDR blocks is denied. The default value
+    -- is @0.0.0.0\/0@. If you\'ve disabled private endpoint access and you
+    -- have nodes or Fargate pods in the cluster, then ensure that the
+    -- necessary CIDR blocks are listed. For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+    -- in the //Amazon EKS User Guide// .
+    publicAccessCidrs :: Prelude.Maybe [Prelude.Text],
+    -- | The security groups associated with the cross-account elastic network
+    -- interfaces that are used to allow communication between your nodes and
+    -- the Kubernetes control plane.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The subnets associated with your cluster.
+    subnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | The VPC associated with your cluster.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterSecurityGroupId', 'vpcConfigResponse_clusterSecurityGroupId' - The cluster security group that was created by Amazon EKS for the
+-- cluster. Managed node groups use this security group for
+-- control-plane-to-data-plane communication.
+--
+-- 'endpointPrivateAccess', 'vpcConfigResponse_endpointPrivateAccess' - This parameter indicates whether the Amazon EKS private API server
+-- endpoint is enabled. If the Amazon EKS private API server endpoint is
+-- enabled, Kubernetes API requests that originate from within your
+-- cluster\'s VPC use the private VPC endpoint instead of traversing the
+-- internet. If this value is disabled and you have nodes or Fargate pods
+-- in the cluster, then ensure that @publicAccessCidrs@ includes the
+-- necessary CIDR blocks for communication with the nodes or Fargate pods.
+-- For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+-- in the //Amazon EKS User Guide// .
+--
+-- 'endpointPublicAccess', 'vpcConfigResponse_endpointPublicAccess' - This parameter indicates whether the Amazon EKS public API server
+-- endpoint is enabled. If the Amazon EKS public API server endpoint is
+-- disabled, your cluster\'s Kubernetes API server can only receive
+-- requests that originate from within the cluster VPC.
+--
+-- 'publicAccessCidrs', 'vpcConfigResponse_publicAccessCidrs' - The CIDR blocks that are allowed access to your cluster\'s public
+-- Kubernetes API server endpoint. Communication to the endpoint from
+-- addresses outside of the listed CIDR blocks is denied. The default value
+-- is @0.0.0.0\/0@. If you\'ve disabled private endpoint access and you
+-- have nodes or Fargate pods in the cluster, then ensure that the
+-- necessary CIDR blocks are listed. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+-- in the //Amazon EKS User Guide// .
+--
+-- 'securityGroupIds', 'vpcConfigResponse_securityGroupIds' - The security groups associated with the cross-account elastic network
+-- interfaces that are used to allow communication between your nodes and
+-- the Kubernetes control plane.
+--
+-- 'subnetIds', 'vpcConfigResponse_subnetIds' - The subnets associated with your cluster.
+--
+-- 'vpcId', 'vpcConfigResponse_vpcId' - The VPC associated with your cluster.
+newVpcConfigResponse ::
+  VpcConfigResponse
+newVpcConfigResponse =
+  VpcConfigResponse'
+    { clusterSecurityGroupId =
+        Prelude.Nothing,
+      endpointPrivateAccess = Prelude.Nothing,
+      endpointPublicAccess = Prelude.Nothing,
+      publicAccessCidrs = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      subnetIds = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | The cluster security group that was created by Amazon EKS for the
+-- cluster. Managed node groups use this security group for
+-- control-plane-to-data-plane communication.
+vpcConfigResponse_clusterSecurityGroupId :: Lens.Lens' VpcConfigResponse (Prelude.Maybe Prelude.Text)
+vpcConfigResponse_clusterSecurityGroupId = Lens.lens (\VpcConfigResponse' {clusterSecurityGroupId} -> clusterSecurityGroupId) (\s@VpcConfigResponse' {} a -> s {clusterSecurityGroupId = a} :: VpcConfigResponse)
+
+-- | This parameter indicates whether the Amazon EKS private API server
+-- endpoint is enabled. If the Amazon EKS private API server endpoint is
+-- enabled, Kubernetes API requests that originate from within your
+-- cluster\'s VPC use the private VPC endpoint instead of traversing the
+-- internet. If this value is disabled and you have nodes or Fargate pods
+-- in the cluster, then ensure that @publicAccessCidrs@ includes the
+-- necessary CIDR blocks for communication with the nodes or Fargate pods.
+-- For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+-- in the //Amazon EKS User Guide// .
+vpcConfigResponse_endpointPrivateAccess :: Lens.Lens' VpcConfigResponse (Prelude.Maybe Prelude.Bool)
+vpcConfigResponse_endpointPrivateAccess = Lens.lens (\VpcConfigResponse' {endpointPrivateAccess} -> endpointPrivateAccess) (\s@VpcConfigResponse' {} a -> s {endpointPrivateAccess = a} :: VpcConfigResponse)
+
+-- | This parameter indicates whether the Amazon EKS public API server
+-- endpoint is enabled. If the Amazon EKS public API server endpoint is
+-- disabled, your cluster\'s Kubernetes API server can only receive
+-- requests that originate from within the cluster VPC.
+vpcConfigResponse_endpointPublicAccess :: Lens.Lens' VpcConfigResponse (Prelude.Maybe Prelude.Bool)
+vpcConfigResponse_endpointPublicAccess = Lens.lens (\VpcConfigResponse' {endpointPublicAccess} -> endpointPublicAccess) (\s@VpcConfigResponse' {} a -> s {endpointPublicAccess = a} :: VpcConfigResponse)
+
+-- | The CIDR blocks that are allowed access to your cluster\'s public
+-- Kubernetes API server endpoint. Communication to the endpoint from
+-- addresses outside of the listed CIDR blocks is denied. The default value
+-- is @0.0.0.0\/0@. If you\'ve disabled private endpoint access and you
+-- have nodes or Fargate pods in the cluster, then ensure that the
+-- necessary CIDR blocks are listed. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+-- in the //Amazon EKS User Guide// .
+vpcConfigResponse_publicAccessCidrs :: Lens.Lens' VpcConfigResponse (Prelude.Maybe [Prelude.Text])
+vpcConfigResponse_publicAccessCidrs = Lens.lens (\VpcConfigResponse' {publicAccessCidrs} -> publicAccessCidrs) (\s@VpcConfigResponse' {} a -> s {publicAccessCidrs = a} :: VpcConfigResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The security groups associated with the cross-account elastic network
+-- interfaces that are used to allow communication between your nodes and
+-- the Kubernetes control plane.
+vpcConfigResponse_securityGroupIds :: Lens.Lens' VpcConfigResponse (Prelude.Maybe [Prelude.Text])
+vpcConfigResponse_securityGroupIds = Lens.lens (\VpcConfigResponse' {securityGroupIds} -> securityGroupIds) (\s@VpcConfigResponse' {} a -> s {securityGroupIds = a} :: VpcConfigResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The subnets associated with your cluster.
+vpcConfigResponse_subnetIds :: Lens.Lens' VpcConfigResponse (Prelude.Maybe [Prelude.Text])
+vpcConfigResponse_subnetIds = Lens.lens (\VpcConfigResponse' {subnetIds} -> subnetIds) (\s@VpcConfigResponse' {} a -> s {subnetIds = a} :: VpcConfigResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The VPC associated with your cluster.
+vpcConfigResponse_vpcId :: Lens.Lens' VpcConfigResponse (Prelude.Maybe Prelude.Text)
+vpcConfigResponse_vpcId = Lens.lens (\VpcConfigResponse' {vpcId} -> vpcId) (\s@VpcConfigResponse' {} a -> s {vpcId = a} :: VpcConfigResponse)
+
+instance Data.FromJSON VpcConfigResponse where
+  parseJSON =
+    Data.withObject
+      "VpcConfigResponse"
+      ( \x ->
+          VpcConfigResponse'
+            Prelude.<$> (x Data..:? "clusterSecurityGroupId")
+            Prelude.<*> (x Data..:? "endpointPrivateAccess")
+            Prelude.<*> (x Data..:? "endpointPublicAccess")
+            Prelude.<*> ( x
+                            Data..:? "publicAccessCidrs"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "securityGroupIds"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "subnetIds" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "vpcId")
+      )
+
+instance Prelude.Hashable VpcConfigResponse where
+  hashWithSalt _salt VpcConfigResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` clusterSecurityGroupId
+      `Prelude.hashWithSalt` endpointPrivateAccess
+      `Prelude.hashWithSalt` endpointPublicAccess
+      `Prelude.hashWithSalt` publicAccessCidrs
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` subnetIds
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData VpcConfigResponse where
+  rnf VpcConfigResponse' {..} =
+    Prelude.rnf clusterSecurityGroupId
+      `Prelude.seq` Prelude.rnf endpointPrivateAccess
+      `Prelude.seq` Prelude.rnf endpointPublicAccess
+      `Prelude.seq` Prelude.rnf publicAccessCidrs
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EKS/UntagResource.hs b/gen/Amazonka/EKS/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/UntagResource.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.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)
+--
+-- Deletes specified tags from a resource.
+module Amazonka.EKS.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.EKS.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 resource from which to delete
+    -- tags. Currently, the supported resources are Amazon EKS clusters and
+    -- managed node groups.
+    resourceArn :: Prelude.Text,
+    -- | The keys of the tags to be removed.
+    tagKeys :: Prelude.NonEmpty 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 resource from which to delete
+-- tags. Currently, the supported resources are Amazon EKS clusters and
+-- managed node groups.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The keys of the tags to be removed.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pTagKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource from which to delete
+-- tags. Currently, the supported resources are Amazon EKS clusters and
+-- managed node groups.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The keys of the tags to be removed.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty 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.delete (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
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /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/EKS/UpdateAddon.hs b/gen/Amazonka/EKS/UpdateAddon.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/UpdateAddon.hs
@@ -0,0 +1,350 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.UpdateAddon
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an Amazon EKS add-on.
+module Amazonka.EKS.UpdateAddon
+  ( -- * Creating a Request
+    UpdateAddon (..),
+    newUpdateAddon,
+
+    -- * Request Lenses
+    updateAddon_addonVersion,
+    updateAddon_clientRequestToken,
+    updateAddon_configurationValues,
+    updateAddon_resolveConflicts,
+    updateAddon_serviceAccountRoleArn,
+    updateAddon_clusterName,
+    updateAddon_addonName,
+
+    -- * Destructuring the Response
+    UpdateAddonResponse (..),
+    newUpdateAddonResponse,
+
+    -- * Response Lenses
+    updateAddonResponse_update,
+    updateAddonResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateAddon' smart constructor.
+data UpdateAddon = UpdateAddon'
+  { -- | The version of the add-on. The version must match one of the versions
+    -- returned by
+    -- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+    -- .
+    addonVersion :: Prelude.Maybe Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The set of configuration values for the add-on that\'s created. The
+    -- values that you provide are validated against the schema in
+    -- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonConfiguration.html DescribeAddonConfiguration>.
+    configurationValues :: Prelude.Maybe Prelude.Text,
+    -- | How to resolve field value conflicts for an Amazon EKS add-on if you\'ve
+    -- changed a value from the Amazon EKS default value. Conflicts are handled
+    -- based on the option you choose:
+    --
+    -- -   __None__ – Amazon EKS doesn\'t change the value. The update might
+    --     fail.
+    --
+    -- -   __Overwrite__ – Amazon EKS overwrites the changed value back to the
+    --     Amazon EKS default value.
+    --
+    -- -   __Preserve__ – Amazon EKS preserves the value. If you choose this
+    --     option, we recommend that you test any field and value changes on a
+    --     non-production cluster before updating the add-on on your production
+    --     cluster.
+    resolveConflicts :: Prelude.Maybe ResolveConflicts,
+    -- | The Amazon Resource Name (ARN) of an existing IAM role to bind to the
+    -- add-on\'s service account. The role must be assigned the IAM permissions
+    -- required by the add-on. If you don\'t specify an existing IAM role, then
+    -- the add-on uses the permissions assigned to the node IAM role. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html Amazon EKS node IAM role>
+    -- in the /Amazon EKS User Guide/.
+    --
+    -- To specify an existing IAM role, you must have an IAM OpenID Connect
+    -- (OIDC) provider created for your cluster. For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html Enabling IAM roles for service accounts on your cluster>
+    -- in the /Amazon EKS User Guide/.
+    serviceAccountRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the cluster.
+    clusterName :: Prelude.Text,
+    -- | The name of the add-on. The name must match one of the names returned by
+    -- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
+    -- .
+    addonName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAddon' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addonVersion', 'updateAddon_addonVersion' - The version of the add-on. The version must match one of the versions
+-- returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+-- .
+--
+-- 'clientRequestToken', 'updateAddon_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'configurationValues', 'updateAddon_configurationValues' - The set of configuration values for the add-on that\'s created. The
+-- values that you provide are validated against the schema in
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonConfiguration.html DescribeAddonConfiguration>.
+--
+-- 'resolveConflicts', 'updateAddon_resolveConflicts' - How to resolve field value conflicts for an Amazon EKS add-on if you\'ve
+-- changed a value from the Amazon EKS default value. Conflicts are handled
+-- based on the option you choose:
+--
+-- -   __None__ – Amazon EKS doesn\'t change the value. The update might
+--     fail.
+--
+-- -   __Overwrite__ – Amazon EKS overwrites the changed value back to the
+--     Amazon EKS default value.
+--
+-- -   __Preserve__ – Amazon EKS preserves the value. If you choose this
+--     option, we recommend that you test any field and value changes on a
+--     non-production cluster before updating the add-on on your production
+--     cluster.
+--
+-- 'serviceAccountRoleArn', 'updateAddon_serviceAccountRoleArn' - The Amazon Resource Name (ARN) of an existing IAM role to bind to the
+-- add-on\'s service account. The role must be assigned the IAM permissions
+-- required by the add-on. If you don\'t specify an existing IAM role, then
+-- the add-on uses the permissions assigned to the node IAM role. For more
+-- information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html Amazon EKS node IAM role>
+-- in the /Amazon EKS User Guide/.
+--
+-- To specify an existing IAM role, you must have an IAM OpenID Connect
+-- (OIDC) provider created for your cluster. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html Enabling IAM roles for service accounts on your cluster>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'clusterName', 'updateAddon_clusterName' - The name of the cluster.
+--
+-- 'addonName', 'updateAddon_addonName' - The name of the add-on. The name must match one of the names returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
+-- .
+newUpdateAddon ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  -- | 'addonName'
+  Prelude.Text ->
+  UpdateAddon
+newUpdateAddon pClusterName_ pAddonName_ =
+  UpdateAddon'
+    { addonVersion = Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      configurationValues = Prelude.Nothing,
+      resolveConflicts = Prelude.Nothing,
+      serviceAccountRoleArn = Prelude.Nothing,
+      clusterName = pClusterName_,
+      addonName = pAddonName_
+    }
+
+-- | The version of the add-on. The version must match one of the versions
+-- returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html DescribeAddonVersions>
+-- .
+updateAddon_addonVersion :: Lens.Lens' UpdateAddon (Prelude.Maybe Prelude.Text)
+updateAddon_addonVersion = Lens.lens (\UpdateAddon' {addonVersion} -> addonVersion) (\s@UpdateAddon' {} a -> s {addonVersion = a} :: UpdateAddon)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+updateAddon_clientRequestToken :: Lens.Lens' UpdateAddon (Prelude.Maybe Prelude.Text)
+updateAddon_clientRequestToken = Lens.lens (\UpdateAddon' {clientRequestToken} -> clientRequestToken) (\s@UpdateAddon' {} a -> s {clientRequestToken = a} :: UpdateAddon)
+
+-- | The set of configuration values for the add-on that\'s created. The
+-- values that you provide are validated against the schema in
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonConfiguration.html DescribeAddonConfiguration>.
+updateAddon_configurationValues :: Lens.Lens' UpdateAddon (Prelude.Maybe Prelude.Text)
+updateAddon_configurationValues = Lens.lens (\UpdateAddon' {configurationValues} -> configurationValues) (\s@UpdateAddon' {} a -> s {configurationValues = a} :: UpdateAddon)
+
+-- | How to resolve field value conflicts for an Amazon EKS add-on if you\'ve
+-- changed a value from the Amazon EKS default value. Conflicts are handled
+-- based on the option you choose:
+--
+-- -   __None__ – Amazon EKS doesn\'t change the value. The update might
+--     fail.
+--
+-- -   __Overwrite__ – Amazon EKS overwrites the changed value back to the
+--     Amazon EKS default value.
+--
+-- -   __Preserve__ – Amazon EKS preserves the value. If you choose this
+--     option, we recommend that you test any field and value changes on a
+--     non-production cluster before updating the add-on on your production
+--     cluster.
+updateAddon_resolveConflicts :: Lens.Lens' UpdateAddon (Prelude.Maybe ResolveConflicts)
+updateAddon_resolveConflicts = Lens.lens (\UpdateAddon' {resolveConflicts} -> resolveConflicts) (\s@UpdateAddon' {} a -> s {resolveConflicts = a} :: UpdateAddon)
+
+-- | The Amazon Resource Name (ARN) of an existing IAM role to bind to the
+-- add-on\'s service account. The role must be assigned the IAM permissions
+-- required by the add-on. If you don\'t specify an existing IAM role, then
+-- the add-on uses the permissions assigned to the node IAM role. For more
+-- information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html Amazon EKS node IAM role>
+-- in the /Amazon EKS User Guide/.
+--
+-- To specify an existing IAM role, you must have an IAM OpenID Connect
+-- (OIDC) provider created for your cluster. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html Enabling IAM roles for service accounts on your cluster>
+-- in the /Amazon EKS User Guide/.
+updateAddon_serviceAccountRoleArn :: Lens.Lens' UpdateAddon (Prelude.Maybe Prelude.Text)
+updateAddon_serviceAccountRoleArn = Lens.lens (\UpdateAddon' {serviceAccountRoleArn} -> serviceAccountRoleArn) (\s@UpdateAddon' {} a -> s {serviceAccountRoleArn = a} :: UpdateAddon)
+
+-- | The name of the cluster.
+updateAddon_clusterName :: Lens.Lens' UpdateAddon Prelude.Text
+updateAddon_clusterName = Lens.lens (\UpdateAddon' {clusterName} -> clusterName) (\s@UpdateAddon' {} a -> s {clusterName = a} :: UpdateAddon)
+
+-- | The name of the add-on. The name must match one of the names returned by
+-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
+-- .
+updateAddon_addonName :: Lens.Lens' UpdateAddon Prelude.Text
+updateAddon_addonName = Lens.lens (\UpdateAddon' {addonName} -> addonName) (\s@UpdateAddon' {} a -> s {addonName = a} :: UpdateAddon)
+
+instance Core.AWSRequest UpdateAddon where
+  type AWSResponse UpdateAddon = UpdateAddonResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAddonResponse'
+            Prelude.<$> (x Data..?> "update")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAddon where
+  hashWithSalt _salt UpdateAddon' {..} =
+    _salt
+      `Prelude.hashWithSalt` addonVersion
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` configurationValues
+      `Prelude.hashWithSalt` resolveConflicts
+      `Prelude.hashWithSalt` serviceAccountRoleArn
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` addonName
+
+instance Prelude.NFData UpdateAddon where
+  rnf UpdateAddon' {..} =
+    Prelude.rnf addonVersion
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf configurationValues
+      `Prelude.seq` Prelude.rnf resolveConflicts
+      `Prelude.seq` Prelude.rnf serviceAccountRoleArn
+      `Prelude.seq` Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf addonName
+
+instance Data.ToHeaders UpdateAddon where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateAddon where
+  toJSON UpdateAddon' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("addonVersion" Data..=) Prelude.<$> addonVersion,
+            ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("configurationValues" Data..=)
+              Prelude.<$> configurationValues,
+            ("resolveConflicts" Data..=)
+              Prelude.<$> resolveConflicts,
+            ("serviceAccountRoleArn" Data..=)
+              Prelude.<$> serviceAccountRoleArn
+          ]
+      )
+
+instance Data.ToPath UpdateAddon where
+  toPath UpdateAddon' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/addons/",
+        Data.toBS addonName,
+        "/update"
+      ]
+
+instance Data.ToQuery UpdateAddon where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAddonResponse' smart constructor.
+data UpdateAddonResponse = UpdateAddonResponse'
+  { update :: Prelude.Maybe Update,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAddonResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'update', 'updateAddonResponse_update' - Undocumented member.
+--
+-- 'httpStatus', 'updateAddonResponse_httpStatus' - The response's http status code.
+newUpdateAddonResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAddonResponse
+newUpdateAddonResponse pHttpStatus_ =
+  UpdateAddonResponse'
+    { update = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+updateAddonResponse_update :: Lens.Lens' UpdateAddonResponse (Prelude.Maybe Update)
+updateAddonResponse_update = Lens.lens (\UpdateAddonResponse' {update} -> update) (\s@UpdateAddonResponse' {} a -> s {update = a} :: UpdateAddonResponse)
+
+-- | The response's http status code.
+updateAddonResponse_httpStatus :: Lens.Lens' UpdateAddonResponse Prelude.Int
+updateAddonResponse_httpStatus = Lens.lens (\UpdateAddonResponse' {httpStatus} -> httpStatus) (\s@UpdateAddonResponse' {} a -> s {httpStatus = a} :: UpdateAddonResponse)
+
+instance Prelude.NFData UpdateAddonResponse where
+  rnf UpdateAddonResponse' {..} =
+    Prelude.rnf update
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/UpdateClusterConfig.hs b/gen/Amazonka/EKS/UpdateClusterConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/UpdateClusterConfig.hs
@@ -0,0 +1,266 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.UpdateClusterConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an Amazon EKS cluster configuration. Your cluster continues to
+-- function during the update. The response output includes an update ID
+-- that you can use to track the status of your cluster update with the
+-- DescribeUpdate API operation.
+--
+-- You can use this API operation to enable or disable exporting the
+-- Kubernetes control plane logs for your cluster to CloudWatch Logs. By
+-- default, cluster control plane logs aren\'t exported to CloudWatch Logs.
+-- For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html Amazon EKS Cluster Control Plane Logs>
+-- in the //Amazon EKS User Guide// .
+--
+-- CloudWatch Logs ingestion, archive storage, and data scanning rates
+-- apply to exported control plane logs. For more information, see
+-- <http://aws.amazon.com/cloudwatch/pricing/ CloudWatch Pricing>.
+--
+-- You can also use this API operation to enable or disable public and
+-- private access to your cluster\'s Kubernetes API server endpoint. By
+-- default, public access is enabled, and private access is disabled. For
+-- more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html Amazon EKS cluster endpoint access control>
+-- in the //Amazon EKS User Guide// .
+--
+-- You can\'t update the subnets or security group IDs for an existing
+-- cluster.
+--
+-- Cluster updates are asynchronous, and they should finish within a few
+-- minutes. During an update, the cluster status moves to @UPDATING@ (this
+-- status transition is eventually consistent). When the update is complete
+-- (either @Failed@ or @Successful@), the cluster status moves to @Active@.
+module Amazonka.EKS.UpdateClusterConfig
+  ( -- * Creating a Request
+    UpdateClusterConfig (..),
+    newUpdateClusterConfig,
+
+    -- * Request Lenses
+    updateClusterConfig_clientRequestToken,
+    updateClusterConfig_logging,
+    updateClusterConfig_resourcesVpcConfig,
+    updateClusterConfig_name,
+
+    -- * Destructuring the Response
+    UpdateClusterConfigResponse (..),
+    newUpdateClusterConfigResponse,
+
+    -- * Response Lenses
+    updateClusterConfigResponse_update,
+    updateClusterConfigResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateClusterConfig' smart constructor.
+data UpdateClusterConfig = UpdateClusterConfig'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | Enable or disable exporting the Kubernetes control plane logs for your
+    -- cluster to CloudWatch Logs. By default, cluster control plane logs
+    -- aren\'t exported to CloudWatch Logs. For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html Amazon EKS cluster control plane logs>
+    -- in the //Amazon EKS User Guide// .
+    --
+    -- CloudWatch Logs ingestion, archive storage, and data scanning rates
+    -- apply to exported control plane logs. For more information, see
+    -- <http://aws.amazon.com/cloudwatch/pricing/ CloudWatch Pricing>.
+    logging :: Prelude.Maybe Logging,
+    resourcesVpcConfig :: Prelude.Maybe VpcConfigRequest,
+    -- | The name of the Amazon EKS cluster to update.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateClusterConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'updateClusterConfig_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'logging', 'updateClusterConfig_logging' - Enable or disable exporting the Kubernetes control plane logs for your
+-- cluster to CloudWatch Logs. By default, cluster control plane logs
+-- aren\'t exported to CloudWatch Logs. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html Amazon EKS cluster control plane logs>
+-- in the //Amazon EKS User Guide// .
+--
+-- CloudWatch Logs ingestion, archive storage, and data scanning rates
+-- apply to exported control plane logs. For more information, see
+-- <http://aws.amazon.com/cloudwatch/pricing/ CloudWatch Pricing>.
+--
+-- 'resourcesVpcConfig', 'updateClusterConfig_resourcesVpcConfig' - Undocumented member.
+--
+-- 'name', 'updateClusterConfig_name' - The name of the Amazon EKS cluster to update.
+newUpdateClusterConfig ::
+  -- | 'name'
+  Prelude.Text ->
+  UpdateClusterConfig
+newUpdateClusterConfig pName_ =
+  UpdateClusterConfig'
+    { clientRequestToken =
+        Prelude.Nothing,
+      logging = Prelude.Nothing,
+      resourcesVpcConfig = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+updateClusterConfig_clientRequestToken :: Lens.Lens' UpdateClusterConfig (Prelude.Maybe Prelude.Text)
+updateClusterConfig_clientRequestToken = Lens.lens (\UpdateClusterConfig' {clientRequestToken} -> clientRequestToken) (\s@UpdateClusterConfig' {} a -> s {clientRequestToken = a} :: UpdateClusterConfig)
+
+-- | Enable or disable exporting the Kubernetes control plane logs for your
+-- cluster to CloudWatch Logs. By default, cluster control plane logs
+-- aren\'t exported to CloudWatch Logs. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html Amazon EKS cluster control plane logs>
+-- in the //Amazon EKS User Guide// .
+--
+-- CloudWatch Logs ingestion, archive storage, and data scanning rates
+-- apply to exported control plane logs. For more information, see
+-- <http://aws.amazon.com/cloudwatch/pricing/ CloudWatch Pricing>.
+updateClusterConfig_logging :: Lens.Lens' UpdateClusterConfig (Prelude.Maybe Logging)
+updateClusterConfig_logging = Lens.lens (\UpdateClusterConfig' {logging} -> logging) (\s@UpdateClusterConfig' {} a -> s {logging = a} :: UpdateClusterConfig)
+
+-- | Undocumented member.
+updateClusterConfig_resourcesVpcConfig :: Lens.Lens' UpdateClusterConfig (Prelude.Maybe VpcConfigRequest)
+updateClusterConfig_resourcesVpcConfig = Lens.lens (\UpdateClusterConfig' {resourcesVpcConfig} -> resourcesVpcConfig) (\s@UpdateClusterConfig' {} a -> s {resourcesVpcConfig = a} :: UpdateClusterConfig)
+
+-- | The name of the Amazon EKS cluster to update.
+updateClusterConfig_name :: Lens.Lens' UpdateClusterConfig Prelude.Text
+updateClusterConfig_name = Lens.lens (\UpdateClusterConfig' {name} -> name) (\s@UpdateClusterConfig' {} a -> s {name = a} :: UpdateClusterConfig)
+
+instance Core.AWSRequest UpdateClusterConfig where
+  type
+    AWSResponse UpdateClusterConfig =
+      UpdateClusterConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateClusterConfigResponse'
+            Prelude.<$> (x Data..?> "update")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateClusterConfig where
+  hashWithSalt _salt UpdateClusterConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` logging
+      `Prelude.hashWithSalt` resourcesVpcConfig
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData UpdateClusterConfig where
+  rnf UpdateClusterConfig' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf logging
+      `Prelude.seq` Prelude.rnf resourcesVpcConfig
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders UpdateClusterConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateClusterConfig where
+  toJSON UpdateClusterConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("logging" Data..=) Prelude.<$> logging,
+            ("resourcesVpcConfig" Data..=)
+              Prelude.<$> resourcesVpcConfig
+          ]
+      )
+
+instance Data.ToPath UpdateClusterConfig where
+  toPath UpdateClusterConfig' {..} =
+    Prelude.mconcat
+      ["/clusters/", Data.toBS name, "/update-config"]
+
+instance Data.ToQuery UpdateClusterConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateClusterConfigResponse' smart constructor.
+data UpdateClusterConfigResponse = UpdateClusterConfigResponse'
+  { update :: Prelude.Maybe Update,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateClusterConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'update', 'updateClusterConfigResponse_update' - Undocumented member.
+--
+-- 'httpStatus', 'updateClusterConfigResponse_httpStatus' - The response's http status code.
+newUpdateClusterConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateClusterConfigResponse
+newUpdateClusterConfigResponse pHttpStatus_ =
+  UpdateClusterConfigResponse'
+    { update =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+updateClusterConfigResponse_update :: Lens.Lens' UpdateClusterConfigResponse (Prelude.Maybe Update)
+updateClusterConfigResponse_update = Lens.lens (\UpdateClusterConfigResponse' {update} -> update) (\s@UpdateClusterConfigResponse' {} a -> s {update = a} :: UpdateClusterConfigResponse)
+
+-- | The response's http status code.
+updateClusterConfigResponse_httpStatus :: Lens.Lens' UpdateClusterConfigResponse Prelude.Int
+updateClusterConfigResponse_httpStatus = Lens.lens (\UpdateClusterConfigResponse' {httpStatus} -> httpStatus) (\s@UpdateClusterConfigResponse' {} a -> s {httpStatus = a} :: UpdateClusterConfigResponse)
+
+instance Prelude.NFData UpdateClusterConfigResponse where
+  rnf UpdateClusterConfigResponse' {..} =
+    Prelude.rnf update
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/UpdateClusterVersion.hs b/gen/Amazonka/EKS/UpdateClusterVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/UpdateClusterVersion.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.UpdateClusterVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an Amazon EKS cluster to the specified Kubernetes version. Your
+-- cluster continues to function during the update. The response output
+-- includes an update ID that you can use to track the status of your
+-- cluster update with the DescribeUpdate API operation.
+--
+-- Cluster updates are asynchronous, and they should finish within a few
+-- minutes. During an update, the cluster status moves to @UPDATING@ (this
+-- status transition is eventually consistent). When the update is complete
+-- (either @Failed@ or @Successful@), the cluster status moves to @Active@.
+--
+-- If your cluster has managed node groups attached to it, all of your node
+-- groups’ Kubernetes versions must match the cluster’s Kubernetes version
+-- in order to update the cluster to a new Kubernetes version.
+module Amazonka.EKS.UpdateClusterVersion
+  ( -- * Creating a Request
+    UpdateClusterVersion (..),
+    newUpdateClusterVersion,
+
+    -- * Request Lenses
+    updateClusterVersion_clientRequestToken,
+    updateClusterVersion_name,
+    updateClusterVersion_version,
+
+    -- * Destructuring the Response
+    UpdateClusterVersionResponse (..),
+    newUpdateClusterVersionResponse,
+
+    -- * Response Lenses
+    updateClusterVersionResponse_update,
+    updateClusterVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateClusterVersion' smart constructor.
+data UpdateClusterVersion = UpdateClusterVersion'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Amazon EKS cluster to update.
+    name :: Prelude.Text,
+    -- | The desired Kubernetes version following a successful update.
+    version :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateClusterVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'updateClusterVersion_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'name', 'updateClusterVersion_name' - The name of the Amazon EKS cluster to update.
+--
+-- 'version', 'updateClusterVersion_version' - The desired Kubernetes version following a successful update.
+newUpdateClusterVersion ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'version'
+  Prelude.Text ->
+  UpdateClusterVersion
+newUpdateClusterVersion pName_ pVersion_ =
+  UpdateClusterVersion'
+    { clientRequestToken =
+        Prelude.Nothing,
+      name = pName_,
+      version = pVersion_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+updateClusterVersion_clientRequestToken :: Lens.Lens' UpdateClusterVersion (Prelude.Maybe Prelude.Text)
+updateClusterVersion_clientRequestToken = Lens.lens (\UpdateClusterVersion' {clientRequestToken} -> clientRequestToken) (\s@UpdateClusterVersion' {} a -> s {clientRequestToken = a} :: UpdateClusterVersion)
+
+-- | The name of the Amazon EKS cluster to update.
+updateClusterVersion_name :: Lens.Lens' UpdateClusterVersion Prelude.Text
+updateClusterVersion_name = Lens.lens (\UpdateClusterVersion' {name} -> name) (\s@UpdateClusterVersion' {} a -> s {name = a} :: UpdateClusterVersion)
+
+-- | The desired Kubernetes version following a successful update.
+updateClusterVersion_version :: Lens.Lens' UpdateClusterVersion Prelude.Text
+updateClusterVersion_version = Lens.lens (\UpdateClusterVersion' {version} -> version) (\s@UpdateClusterVersion' {} a -> s {version = a} :: UpdateClusterVersion)
+
+instance Core.AWSRequest UpdateClusterVersion where
+  type
+    AWSResponse UpdateClusterVersion =
+      UpdateClusterVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateClusterVersionResponse'
+            Prelude.<$> (x Data..?> "update")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateClusterVersion where
+  hashWithSalt _salt UpdateClusterVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData UpdateClusterVersion where
+  rnf UpdateClusterVersion' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf version
+
+instance Data.ToHeaders UpdateClusterVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateClusterVersion where
+  toJSON UpdateClusterVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            Prelude.Just ("version" Data..= version)
+          ]
+      )
+
+instance Data.ToPath UpdateClusterVersion where
+  toPath UpdateClusterVersion' {..} =
+    Prelude.mconcat
+      ["/clusters/", Data.toBS name, "/updates"]
+
+instance Data.ToQuery UpdateClusterVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateClusterVersionResponse' smart constructor.
+data UpdateClusterVersionResponse = UpdateClusterVersionResponse'
+  { -- | The full description of the specified update
+    update :: Prelude.Maybe Update,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateClusterVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'update', 'updateClusterVersionResponse_update' - The full description of the specified update
+--
+-- 'httpStatus', 'updateClusterVersionResponse_httpStatus' - The response's http status code.
+newUpdateClusterVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateClusterVersionResponse
+newUpdateClusterVersionResponse pHttpStatus_ =
+  UpdateClusterVersionResponse'
+    { update =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The full description of the specified update
+updateClusterVersionResponse_update :: Lens.Lens' UpdateClusterVersionResponse (Prelude.Maybe Update)
+updateClusterVersionResponse_update = Lens.lens (\UpdateClusterVersionResponse' {update} -> update) (\s@UpdateClusterVersionResponse' {} a -> s {update = a} :: UpdateClusterVersionResponse)
+
+-- | The response's http status code.
+updateClusterVersionResponse_httpStatus :: Lens.Lens' UpdateClusterVersionResponse Prelude.Int
+updateClusterVersionResponse_httpStatus = Lens.lens (\UpdateClusterVersionResponse' {httpStatus} -> httpStatus) (\s@UpdateClusterVersionResponse' {} a -> s {httpStatus = a} :: UpdateClusterVersionResponse)
+
+instance Prelude.NFData UpdateClusterVersionResponse where
+  rnf UpdateClusterVersionResponse' {..} =
+    Prelude.rnf update
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/UpdateNodegroupConfig.hs b/gen/Amazonka/EKS/UpdateNodegroupConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/UpdateNodegroupConfig.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.EKS.UpdateNodegroupConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an Amazon EKS managed node group configuration. Your node group
+-- continues to function during the update. The response output includes an
+-- update ID that you can use to track the status of your node group update
+-- with the DescribeUpdate API operation. Currently you can update the
+-- Kubernetes labels for a node group or the scaling configuration.
+module Amazonka.EKS.UpdateNodegroupConfig
+  ( -- * Creating a Request
+    UpdateNodegroupConfig (..),
+    newUpdateNodegroupConfig,
+
+    -- * Request Lenses
+    updateNodegroupConfig_clientRequestToken,
+    updateNodegroupConfig_labels,
+    updateNodegroupConfig_scalingConfig,
+    updateNodegroupConfig_taints,
+    updateNodegroupConfig_updateConfig,
+    updateNodegroupConfig_clusterName,
+    updateNodegroupConfig_nodegroupName,
+
+    -- * Destructuring the Response
+    UpdateNodegroupConfigResponse (..),
+    newUpdateNodegroupConfigResponse,
+
+    -- * Response Lenses
+    updateNodegroupConfigResponse_update,
+    updateNodegroupConfigResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateNodegroupConfig' smart constructor.
+data UpdateNodegroupConfig = UpdateNodegroupConfig'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The Kubernetes labels to be applied to the nodes in the node group after
+    -- the update.
+    labels :: Prelude.Maybe UpdateLabelsPayload,
+    -- | The scaling configuration details for the Auto Scaling group after the
+    -- update.
+    scalingConfig :: Prelude.Maybe NodegroupScalingConfig,
+    -- | The Kubernetes taints to be applied to the nodes in the node group after
+    -- the update. For more information, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html Node taints on managed node groups>.
+    taints :: Prelude.Maybe UpdateTaintsPayload,
+    -- | The node group update configuration.
+    updateConfig :: Prelude.Maybe NodegroupUpdateConfig,
+    -- | The name of the Amazon EKS cluster that the managed node group resides
+    -- in.
+    clusterName :: Prelude.Text,
+    -- | The name of the managed node group to update.
+    nodegroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateNodegroupConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'updateNodegroupConfig_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'labels', 'updateNodegroupConfig_labels' - The Kubernetes labels to be applied to the nodes in the node group after
+-- the update.
+--
+-- 'scalingConfig', 'updateNodegroupConfig_scalingConfig' - The scaling configuration details for the Auto Scaling group after the
+-- update.
+--
+-- 'taints', 'updateNodegroupConfig_taints' - The Kubernetes taints to be applied to the nodes in the node group after
+-- the update. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html Node taints on managed node groups>.
+--
+-- 'updateConfig', 'updateNodegroupConfig_updateConfig' - The node group update configuration.
+--
+-- 'clusterName', 'updateNodegroupConfig_clusterName' - The name of the Amazon EKS cluster that the managed node group resides
+-- in.
+--
+-- 'nodegroupName', 'updateNodegroupConfig_nodegroupName' - The name of the managed node group to update.
+newUpdateNodegroupConfig ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  -- | 'nodegroupName'
+  Prelude.Text ->
+  UpdateNodegroupConfig
+newUpdateNodegroupConfig
+  pClusterName_
+  pNodegroupName_ =
+    UpdateNodegroupConfig'
+      { clientRequestToken =
+          Prelude.Nothing,
+        labels = Prelude.Nothing,
+        scalingConfig = Prelude.Nothing,
+        taints = Prelude.Nothing,
+        updateConfig = Prelude.Nothing,
+        clusterName = pClusterName_,
+        nodegroupName = pNodegroupName_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+updateNodegroupConfig_clientRequestToken :: Lens.Lens' UpdateNodegroupConfig (Prelude.Maybe Prelude.Text)
+updateNodegroupConfig_clientRequestToken = Lens.lens (\UpdateNodegroupConfig' {clientRequestToken} -> clientRequestToken) (\s@UpdateNodegroupConfig' {} a -> s {clientRequestToken = a} :: UpdateNodegroupConfig)
+
+-- | The Kubernetes labels to be applied to the nodes in the node group after
+-- the update.
+updateNodegroupConfig_labels :: Lens.Lens' UpdateNodegroupConfig (Prelude.Maybe UpdateLabelsPayload)
+updateNodegroupConfig_labels = Lens.lens (\UpdateNodegroupConfig' {labels} -> labels) (\s@UpdateNodegroupConfig' {} a -> s {labels = a} :: UpdateNodegroupConfig)
+
+-- | The scaling configuration details for the Auto Scaling group after the
+-- update.
+updateNodegroupConfig_scalingConfig :: Lens.Lens' UpdateNodegroupConfig (Prelude.Maybe NodegroupScalingConfig)
+updateNodegroupConfig_scalingConfig = Lens.lens (\UpdateNodegroupConfig' {scalingConfig} -> scalingConfig) (\s@UpdateNodegroupConfig' {} a -> s {scalingConfig = a} :: UpdateNodegroupConfig)
+
+-- | The Kubernetes taints to be applied to the nodes in the node group after
+-- the update. For more information, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html Node taints on managed node groups>.
+updateNodegroupConfig_taints :: Lens.Lens' UpdateNodegroupConfig (Prelude.Maybe UpdateTaintsPayload)
+updateNodegroupConfig_taints = Lens.lens (\UpdateNodegroupConfig' {taints} -> taints) (\s@UpdateNodegroupConfig' {} a -> s {taints = a} :: UpdateNodegroupConfig)
+
+-- | The node group update configuration.
+updateNodegroupConfig_updateConfig :: Lens.Lens' UpdateNodegroupConfig (Prelude.Maybe NodegroupUpdateConfig)
+updateNodegroupConfig_updateConfig = Lens.lens (\UpdateNodegroupConfig' {updateConfig} -> updateConfig) (\s@UpdateNodegroupConfig' {} a -> s {updateConfig = a} :: UpdateNodegroupConfig)
+
+-- | The name of the Amazon EKS cluster that the managed node group resides
+-- in.
+updateNodegroupConfig_clusterName :: Lens.Lens' UpdateNodegroupConfig Prelude.Text
+updateNodegroupConfig_clusterName = Lens.lens (\UpdateNodegroupConfig' {clusterName} -> clusterName) (\s@UpdateNodegroupConfig' {} a -> s {clusterName = a} :: UpdateNodegroupConfig)
+
+-- | The name of the managed node group to update.
+updateNodegroupConfig_nodegroupName :: Lens.Lens' UpdateNodegroupConfig Prelude.Text
+updateNodegroupConfig_nodegroupName = Lens.lens (\UpdateNodegroupConfig' {nodegroupName} -> nodegroupName) (\s@UpdateNodegroupConfig' {} a -> s {nodegroupName = a} :: UpdateNodegroupConfig)
+
+instance Core.AWSRequest UpdateNodegroupConfig where
+  type
+    AWSResponse UpdateNodegroupConfig =
+      UpdateNodegroupConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateNodegroupConfigResponse'
+            Prelude.<$> (x Data..?> "update")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateNodegroupConfig where
+  hashWithSalt _salt UpdateNodegroupConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` labels
+      `Prelude.hashWithSalt` scalingConfig
+      `Prelude.hashWithSalt` taints
+      `Prelude.hashWithSalt` updateConfig
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` nodegroupName
+
+instance Prelude.NFData UpdateNodegroupConfig where
+  rnf UpdateNodegroupConfig' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf labels
+      `Prelude.seq` Prelude.rnf scalingConfig
+      `Prelude.seq` Prelude.rnf taints
+      `Prelude.seq` Prelude.rnf updateConfig
+      `Prelude.seq` Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf nodegroupName
+
+instance Data.ToHeaders UpdateNodegroupConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateNodegroupConfig where
+  toJSON UpdateNodegroupConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("labels" Data..=) Prelude.<$> labels,
+            ("scalingConfig" Data..=) Prelude.<$> scalingConfig,
+            ("taints" Data..=) Prelude.<$> taints,
+            ("updateConfig" Data..=) Prelude.<$> updateConfig
+          ]
+      )
+
+instance Data.ToPath UpdateNodegroupConfig where
+  toPath UpdateNodegroupConfig' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/node-groups/",
+        Data.toBS nodegroupName,
+        "/update-config"
+      ]
+
+instance Data.ToQuery UpdateNodegroupConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateNodegroupConfigResponse' smart constructor.
+data UpdateNodegroupConfigResponse = UpdateNodegroupConfigResponse'
+  { update :: Prelude.Maybe Update,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateNodegroupConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'update', 'updateNodegroupConfigResponse_update' - Undocumented member.
+--
+-- 'httpStatus', 'updateNodegroupConfigResponse_httpStatus' - The response's http status code.
+newUpdateNodegroupConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateNodegroupConfigResponse
+newUpdateNodegroupConfigResponse pHttpStatus_ =
+  UpdateNodegroupConfigResponse'
+    { update =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+updateNodegroupConfigResponse_update :: Lens.Lens' UpdateNodegroupConfigResponse (Prelude.Maybe Update)
+updateNodegroupConfigResponse_update = Lens.lens (\UpdateNodegroupConfigResponse' {update} -> update) (\s@UpdateNodegroupConfigResponse' {} a -> s {update = a} :: UpdateNodegroupConfigResponse)
+
+-- | The response's http status code.
+updateNodegroupConfigResponse_httpStatus :: Lens.Lens' UpdateNodegroupConfigResponse Prelude.Int
+updateNodegroupConfigResponse_httpStatus = Lens.lens (\UpdateNodegroupConfigResponse' {httpStatus} -> httpStatus) (\s@UpdateNodegroupConfigResponse' {} a -> s {httpStatus = a} :: UpdateNodegroupConfigResponse)
+
+instance Prelude.NFData UpdateNodegroupConfigResponse where
+  rnf UpdateNodegroupConfigResponse' {..} =
+    Prelude.rnf update
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/UpdateNodegroupVersion.hs b/gen/Amazonka/EKS/UpdateNodegroupVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/UpdateNodegroupVersion.hs
@@ -0,0 +1,381 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EKS.UpdateNodegroupVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the Kubernetes version or AMI version of an Amazon EKS managed
+-- node group.
+--
+-- You can update a node group using a launch template only if the node
+-- group was originally deployed with a launch template. If you need to
+-- update a custom AMI in a node group that was deployed with a launch
+-- template, then update your custom AMI, specify the new ID in a new
+-- version of the launch template, and then update the node group to the
+-- new version of the launch template.
+--
+-- If you update without a launch template, then you can update to the
+-- latest available AMI version of a node group\'s current Kubernetes
+-- version by not specifying a Kubernetes version in the request. You can
+-- update to the latest AMI version of your cluster\'s current Kubernetes
+-- version by specifying your cluster\'s Kubernetes version in the request.
+-- For information about Linux versions, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html Amazon EKS optimized Amazon Linux AMI versions>
+-- in the /Amazon EKS User Guide/. For information about Windows versions,
+-- see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-versions-windows.html Amazon EKS optimized Windows AMI versions>
+-- in the /Amazon EKS User Guide/.
+--
+-- You cannot roll back a node group to an earlier Kubernetes version or
+-- AMI version.
+--
+-- When a node in a managed node group is terminated due to a scaling
+-- action or update, the pods in that node are drained first. Amazon EKS
+-- attempts to drain the nodes gracefully and will fail if it is unable to
+-- do so. You can @force@ the update if Amazon EKS is unable to drain the
+-- nodes as a result of a pod disruption budget issue.
+module Amazonka.EKS.UpdateNodegroupVersion
+  ( -- * Creating a Request
+    UpdateNodegroupVersion (..),
+    newUpdateNodegroupVersion,
+
+    -- * Request Lenses
+    updateNodegroupVersion_clientRequestToken,
+    updateNodegroupVersion_force,
+    updateNodegroupVersion_launchTemplate,
+    updateNodegroupVersion_releaseVersion,
+    updateNodegroupVersion_version,
+    updateNodegroupVersion_clusterName,
+    updateNodegroupVersion_nodegroupName,
+
+    -- * Destructuring the Response
+    UpdateNodegroupVersionResponse (..),
+    newUpdateNodegroupVersionResponse,
+
+    -- * Response Lenses
+    updateNodegroupVersionResponse_update,
+    updateNodegroupVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateNodegroupVersion' smart constructor.
+data UpdateNodegroupVersion = UpdateNodegroupVersion'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | Force the update if the existing node group\'s pods are unable to be
+    -- drained due to a pod disruption budget issue. If an update fails because
+    -- pods could not be drained, you can force the update after it fails to
+    -- terminate the old node whether or not any pods are running on the node.
+    force :: Prelude.Maybe Prelude.Bool,
+    -- | An object representing a node group\'s launch template specification.
+    -- You can only update a node group using a launch template if the node
+    -- group was originally deployed with a launch template.
+    launchTemplate :: Prelude.Maybe LaunchTemplateSpecification,
+    -- | The AMI version of the Amazon EKS optimized AMI to use for the update.
+    -- By default, the latest available AMI version for the node group\'s
+    -- Kubernetes version is used. For information about Linux versions, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html Amazon EKS optimized Amazon Linux AMI versions>
+    -- in the /Amazon EKS User Guide/. Amazon EKS managed node groups support
+    -- the November 2022 and later releases of the Windows AMIs. For
+    -- information about Windows versions, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-versions-windows.html Amazon EKS optimized Windows AMI versions>
+    -- in the /Amazon EKS User Guide/.
+    --
+    -- If you specify @launchTemplate@, and your launch template uses a custom
+    -- AMI, then don\'t specify @releaseVersion@, or the node group update will
+    -- fail. For more information about using launch templates with Amazon EKS,
+    -- see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+    -- in the /Amazon EKS User Guide/.
+    releaseVersion :: Prelude.Maybe Prelude.Text,
+    -- | The Kubernetes version to update to. If no version is specified, then
+    -- the Kubernetes version of the node group does not change. You can
+    -- specify the Kubernetes version of the cluster to update the node group
+    -- to the latest AMI version of the cluster\'s Kubernetes version. If you
+    -- specify @launchTemplate@, and your launch template uses a custom AMI,
+    -- then don\'t specify @version@, or the node group update will fail. For
+    -- more information about using launch templates with Amazon EKS, see
+    -- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+    -- in the /Amazon EKS User Guide/.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Amazon EKS cluster that is associated with the managed
+    -- node group to update.
+    clusterName :: Prelude.Text,
+    -- | The name of the managed node group to update.
+    nodegroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateNodegroupVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'updateNodegroupVersion_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'force', 'updateNodegroupVersion_force' - Force the update if the existing node group\'s pods are unable to be
+-- drained due to a pod disruption budget issue. If an update fails because
+-- pods could not be drained, you can force the update after it fails to
+-- terminate the old node whether or not any pods are running on the node.
+--
+-- 'launchTemplate', 'updateNodegroupVersion_launchTemplate' - An object representing a node group\'s launch template specification.
+-- You can only update a node group using a launch template if the node
+-- group was originally deployed with a launch template.
+--
+-- 'releaseVersion', 'updateNodegroupVersion_releaseVersion' - The AMI version of the Amazon EKS optimized AMI to use for the update.
+-- By default, the latest available AMI version for the node group\'s
+-- Kubernetes version is used. For information about Linux versions, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html Amazon EKS optimized Amazon Linux AMI versions>
+-- in the /Amazon EKS User Guide/. Amazon EKS managed node groups support
+-- the November 2022 and later releases of the Windows AMIs. For
+-- information about Windows versions, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-versions-windows.html Amazon EKS optimized Windows AMI versions>
+-- in the /Amazon EKS User Guide/.
+--
+-- If you specify @launchTemplate@, and your launch template uses a custom
+-- AMI, then don\'t specify @releaseVersion@, or the node group update will
+-- fail. For more information about using launch templates with Amazon EKS,
+-- see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'version', 'updateNodegroupVersion_version' - The Kubernetes version to update to. If no version is specified, then
+-- the Kubernetes version of the node group does not change. You can
+-- specify the Kubernetes version of the cluster to update the node group
+-- to the latest AMI version of the cluster\'s Kubernetes version. If you
+-- specify @launchTemplate@, and your launch template uses a custom AMI,
+-- then don\'t specify @version@, or the node group update will fail. For
+-- more information about using launch templates with Amazon EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+--
+-- 'clusterName', 'updateNodegroupVersion_clusterName' - The name of the Amazon EKS cluster that is associated with the managed
+-- node group to update.
+--
+-- 'nodegroupName', 'updateNodegroupVersion_nodegroupName' - The name of the managed node group to update.
+newUpdateNodegroupVersion ::
+  -- | 'clusterName'
+  Prelude.Text ->
+  -- | 'nodegroupName'
+  Prelude.Text ->
+  UpdateNodegroupVersion
+newUpdateNodegroupVersion
+  pClusterName_
+  pNodegroupName_ =
+    UpdateNodegroupVersion'
+      { clientRequestToken =
+          Prelude.Nothing,
+        force = Prelude.Nothing,
+        launchTemplate = Prelude.Nothing,
+        releaseVersion = Prelude.Nothing,
+        version = Prelude.Nothing,
+        clusterName = pClusterName_,
+        nodegroupName = pNodegroupName_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+updateNodegroupVersion_clientRequestToken :: Lens.Lens' UpdateNodegroupVersion (Prelude.Maybe Prelude.Text)
+updateNodegroupVersion_clientRequestToken = Lens.lens (\UpdateNodegroupVersion' {clientRequestToken} -> clientRequestToken) (\s@UpdateNodegroupVersion' {} a -> s {clientRequestToken = a} :: UpdateNodegroupVersion)
+
+-- | Force the update if the existing node group\'s pods are unable to be
+-- drained due to a pod disruption budget issue. If an update fails because
+-- pods could not be drained, you can force the update after it fails to
+-- terminate the old node whether or not any pods are running on the node.
+updateNodegroupVersion_force :: Lens.Lens' UpdateNodegroupVersion (Prelude.Maybe Prelude.Bool)
+updateNodegroupVersion_force = Lens.lens (\UpdateNodegroupVersion' {force} -> force) (\s@UpdateNodegroupVersion' {} a -> s {force = a} :: UpdateNodegroupVersion)
+
+-- | An object representing a node group\'s launch template specification.
+-- You can only update a node group using a launch template if the node
+-- group was originally deployed with a launch template.
+updateNodegroupVersion_launchTemplate :: Lens.Lens' UpdateNodegroupVersion (Prelude.Maybe LaunchTemplateSpecification)
+updateNodegroupVersion_launchTemplate = Lens.lens (\UpdateNodegroupVersion' {launchTemplate} -> launchTemplate) (\s@UpdateNodegroupVersion' {} a -> s {launchTemplate = a} :: UpdateNodegroupVersion)
+
+-- | The AMI version of the Amazon EKS optimized AMI to use for the update.
+-- By default, the latest available AMI version for the node group\'s
+-- Kubernetes version is used. For information about Linux versions, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html Amazon EKS optimized Amazon Linux AMI versions>
+-- in the /Amazon EKS User Guide/. Amazon EKS managed node groups support
+-- the November 2022 and later releases of the Windows AMIs. For
+-- information about Windows versions, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-versions-windows.html Amazon EKS optimized Windows AMI versions>
+-- in the /Amazon EKS User Guide/.
+--
+-- If you specify @launchTemplate@, and your launch template uses a custom
+-- AMI, then don\'t specify @releaseVersion@, or the node group update will
+-- fail. For more information about using launch templates with Amazon EKS,
+-- see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+updateNodegroupVersion_releaseVersion :: Lens.Lens' UpdateNodegroupVersion (Prelude.Maybe Prelude.Text)
+updateNodegroupVersion_releaseVersion = Lens.lens (\UpdateNodegroupVersion' {releaseVersion} -> releaseVersion) (\s@UpdateNodegroupVersion' {} a -> s {releaseVersion = a} :: UpdateNodegroupVersion)
+
+-- | The Kubernetes version to update to. If no version is specified, then
+-- the Kubernetes version of the node group does not change. You can
+-- specify the Kubernetes version of the cluster to update the node group
+-- to the latest AMI version of the cluster\'s Kubernetes version. If you
+-- specify @launchTemplate@, and your launch template uses a custom AMI,
+-- then don\'t specify @version@, or the node group update will fail. For
+-- more information about using launch templates with Amazon EKS, see
+-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
+-- in the /Amazon EKS User Guide/.
+updateNodegroupVersion_version :: Lens.Lens' UpdateNodegroupVersion (Prelude.Maybe Prelude.Text)
+updateNodegroupVersion_version = Lens.lens (\UpdateNodegroupVersion' {version} -> version) (\s@UpdateNodegroupVersion' {} a -> s {version = a} :: UpdateNodegroupVersion)
+
+-- | The name of the Amazon EKS cluster that is associated with the managed
+-- node group to update.
+updateNodegroupVersion_clusterName :: Lens.Lens' UpdateNodegroupVersion Prelude.Text
+updateNodegroupVersion_clusterName = Lens.lens (\UpdateNodegroupVersion' {clusterName} -> clusterName) (\s@UpdateNodegroupVersion' {} a -> s {clusterName = a} :: UpdateNodegroupVersion)
+
+-- | The name of the managed node group to update.
+updateNodegroupVersion_nodegroupName :: Lens.Lens' UpdateNodegroupVersion Prelude.Text
+updateNodegroupVersion_nodegroupName = Lens.lens (\UpdateNodegroupVersion' {nodegroupName} -> nodegroupName) (\s@UpdateNodegroupVersion' {} a -> s {nodegroupName = a} :: UpdateNodegroupVersion)
+
+instance Core.AWSRequest UpdateNodegroupVersion where
+  type
+    AWSResponse UpdateNodegroupVersion =
+      UpdateNodegroupVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateNodegroupVersionResponse'
+            Prelude.<$> (x Data..?> "update")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateNodegroupVersion where
+  hashWithSalt _salt UpdateNodegroupVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` force
+      `Prelude.hashWithSalt` launchTemplate
+      `Prelude.hashWithSalt` releaseVersion
+      `Prelude.hashWithSalt` version
+      `Prelude.hashWithSalt` clusterName
+      `Prelude.hashWithSalt` nodegroupName
+
+instance Prelude.NFData UpdateNodegroupVersion where
+  rnf UpdateNodegroupVersion' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf force
+      `Prelude.seq` Prelude.rnf launchTemplate
+      `Prelude.seq` Prelude.rnf releaseVersion
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf clusterName
+      `Prelude.seq` Prelude.rnf nodegroupName
+
+instance Data.ToHeaders UpdateNodegroupVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateNodegroupVersion where
+  toJSON UpdateNodegroupVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("force" Data..=) Prelude.<$> force,
+            ("launchTemplate" Data..=)
+              Prelude.<$> launchTemplate,
+            ("releaseVersion" Data..=)
+              Prelude.<$> releaseVersion,
+            ("version" Data..=) Prelude.<$> version
+          ]
+      )
+
+instance Data.ToPath UpdateNodegroupVersion where
+  toPath UpdateNodegroupVersion' {..} =
+    Prelude.mconcat
+      [ "/clusters/",
+        Data.toBS clusterName,
+        "/node-groups/",
+        Data.toBS nodegroupName,
+        "/update-version"
+      ]
+
+instance Data.ToQuery UpdateNodegroupVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateNodegroupVersionResponse' smart constructor.
+data UpdateNodegroupVersionResponse = UpdateNodegroupVersionResponse'
+  { update :: Prelude.Maybe Update,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateNodegroupVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'update', 'updateNodegroupVersionResponse_update' - Undocumented member.
+--
+-- 'httpStatus', 'updateNodegroupVersionResponse_httpStatus' - The response's http status code.
+newUpdateNodegroupVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateNodegroupVersionResponse
+newUpdateNodegroupVersionResponse pHttpStatus_ =
+  UpdateNodegroupVersionResponse'
+    { update =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+updateNodegroupVersionResponse_update :: Lens.Lens' UpdateNodegroupVersionResponse (Prelude.Maybe Update)
+updateNodegroupVersionResponse_update = Lens.lens (\UpdateNodegroupVersionResponse' {update} -> update) (\s@UpdateNodegroupVersionResponse' {} a -> s {update = a} :: UpdateNodegroupVersionResponse)
+
+-- | The response's http status code.
+updateNodegroupVersionResponse_httpStatus :: Lens.Lens' UpdateNodegroupVersionResponse Prelude.Int
+updateNodegroupVersionResponse_httpStatus = Lens.lens (\UpdateNodegroupVersionResponse' {httpStatus} -> httpStatus) (\s@UpdateNodegroupVersionResponse' {} a -> s {httpStatus = a} :: UpdateNodegroupVersionResponse)
+
+instance
+  Prelude.NFData
+    UpdateNodegroupVersionResponse
+  where
+  rnf UpdateNodegroupVersionResponse' {..} =
+    Prelude.rnf update
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EKS/Waiters.hs b/gen/Amazonka/EKS/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EKS/Waiters.hs
@@ -0,0 +1,272 @@
+{-# 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.EKS.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.EKS.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EKS.DescribeAddon
+import Amazonka.EKS.DescribeCluster
+import Amazonka.EKS.DescribeFargateProfile
+import Amazonka.EKS.DescribeNodegroup
+import Amazonka.EKS.Lens
+import Amazonka.EKS.Types
+import qualified Amazonka.Prelude as Prelude
+
+-- | Polls 'Amazonka.EKS.DescribeAddon' every 10 seconds until a successful state is reached. An error is returned after 60 failed checks.
+newAddonActive :: Core.Wait DescribeAddon
+newAddonActive =
+  Core.Wait
+    { Core.name = "AddonActive",
+      Core.attempts = 60,
+      Core.delay = 10,
+      Core.acceptors =
+        [ Core.matchAll
+            "CREATE_FAILED"
+            Core.AcceptFailure
+            ( describeAddonResponse_addon
+                Prelude.. Lens._Just
+                Prelude.. addon_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "DEGRADED"
+            Core.AcceptFailure
+            ( describeAddonResponse_addon
+                Prelude.. Lens._Just
+                Prelude.. addon_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "ACTIVE"
+            Core.AcceptSuccess
+            ( describeAddonResponse_addon
+                Prelude.. Lens._Just
+                Prelude.. addon_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EKS.DescribeAddon' every 10 seconds until a successful state is reached. An error is returned after 60 failed checks.
+newAddonDeleted :: Core.Wait DescribeAddon
+newAddonDeleted =
+  Core.Wait
+    { Core.name = "AddonDeleted",
+      Core.attempts = 60,
+      Core.delay = 10,
+      Core.acceptors =
+        [ Core.matchAll
+            "DELETE_FAILED"
+            Core.AcceptFailure
+            ( describeAddonResponse_addon
+                Prelude.. Lens._Just
+                Prelude.. addon_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchError
+            "ResourceNotFoundException"
+            Core.AcceptSuccess
+        ]
+    }
+
+-- | Polls 'Amazonka.EKS.DescribeCluster' every 30 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newClusterActive :: Core.Wait DescribeCluster
+newClusterActive =
+  Core.Wait
+    { Core.name = "ClusterActive",
+      Core.attempts = 40,
+      Core.delay = 30,
+      Core.acceptors =
+        [ Core.matchAll
+            "DELETING"
+            Core.AcceptFailure
+            ( describeClusterResponse_cluster
+                Prelude.. Lens._Just
+                Prelude.. cluster_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "FAILED"
+            Core.AcceptFailure
+            ( describeClusterResponse_cluster
+                Prelude.. Lens._Just
+                Prelude.. cluster_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "ACTIVE"
+            Core.AcceptSuccess
+            ( describeClusterResponse_cluster
+                Prelude.. Lens._Just
+                Prelude.. cluster_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EKS.DescribeCluster' every 30 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newClusterDeleted :: Core.Wait DescribeCluster
+newClusterDeleted =
+  Core.Wait
+    { Core.name = "ClusterDeleted",
+      Core.attempts = 40,
+      Core.delay = 30,
+      Core.acceptors =
+        [ Core.matchAll
+            "ACTIVE"
+            Core.AcceptFailure
+            ( describeClusterResponse_cluster
+                Prelude.. Lens._Just
+                Prelude.. cluster_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "CREATING"
+            Core.AcceptFailure
+            ( describeClusterResponse_cluster
+                Prelude.. Lens._Just
+                Prelude.. cluster_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "PENDING"
+            Core.AcceptFailure
+            ( describeClusterResponse_cluster
+                Prelude.. Lens._Just
+                Prelude.. cluster_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchError
+            "ResourceNotFoundException"
+            Core.AcceptSuccess
+        ]
+    }
+
+-- | Polls 'Amazonka.EKS.DescribeFargateProfile' every 10 seconds until a successful state is reached. An error is returned after 60 failed checks.
+newFargateProfileActive :: Core.Wait DescribeFargateProfile
+newFargateProfileActive =
+  Core.Wait
+    { Core.name = "FargateProfileActive",
+      Core.attempts = 60,
+      Core.delay = 10,
+      Core.acceptors =
+        [ Core.matchAll
+            "CREATE_FAILED"
+            Core.AcceptFailure
+            ( describeFargateProfileResponse_fargateProfile
+                Prelude.. Lens._Just
+                Prelude.. fargateProfile_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "ACTIVE"
+            Core.AcceptSuccess
+            ( describeFargateProfileResponse_fargateProfile
+                Prelude.. Lens._Just
+                Prelude.. fargateProfile_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EKS.DescribeFargateProfile' every 30 seconds until a successful state is reached. An error is returned after 60 failed checks.
+newFargateProfileDeleted :: Core.Wait DescribeFargateProfile
+newFargateProfileDeleted =
+  Core.Wait
+    { Core.name = "FargateProfileDeleted",
+      Core.attempts = 60,
+      Core.delay = 30,
+      Core.acceptors =
+        [ Core.matchAll
+            "DELETE_FAILED"
+            Core.AcceptFailure
+            ( describeFargateProfileResponse_fargateProfile
+                Prelude.. Lens._Just
+                Prelude.. fargateProfile_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchError
+            "ResourceNotFoundException"
+            Core.AcceptSuccess
+        ]
+    }
+
+-- | Polls 'Amazonka.EKS.DescribeNodegroup' every 30 seconds until a successful state is reached. An error is returned after 80 failed checks.
+newNodegroupActive :: Core.Wait DescribeNodegroup
+newNodegroupActive =
+  Core.Wait
+    { Core.name = "NodegroupActive",
+      Core.attempts = 80,
+      Core.delay = 30,
+      Core.acceptors =
+        [ Core.matchAll
+            "CREATE_FAILED"
+            Core.AcceptFailure
+            ( describeNodegroupResponse_nodegroup
+                Prelude.. Lens._Just
+                Prelude.. nodegroup_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "ACTIVE"
+            Core.AcceptSuccess
+            ( describeNodegroupResponse_nodegroup
+                Prelude.. Lens._Just
+                Prelude.. nodegroup_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EKS.DescribeNodegroup' every 30 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newNodegroupDeleted :: Core.Wait DescribeNodegroup
+newNodegroupDeleted =
+  Core.Wait
+    { Core.name = "NodegroupDeleted",
+      Core.attempts = 40,
+      Core.delay = 30,
+      Core.acceptors =
+        [ Core.matchAll
+            "DELETE_FAILED"
+            Core.AcceptFailure
+            ( describeNodegroupResponse_nodegroup
+                Prelude.. Lens._Just
+                Prelude.. nodegroup_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchError
+            "ResourceNotFoundException"
+            Core.AcceptSuccess
+        ]
+    }
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.EKS
+import Test.Amazonka.EKS.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "EKS"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/EKS.hs b/test/Test/Amazonka/EKS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/EKS.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.EKS
+-- Copyright   : (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.EKS
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/EKS/Internal.hs b/test/Test/Amazonka/EKS/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/EKS/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.EKS.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.EKS.Internal where
diff --git a/test/Test/Amazonka/Gen/EKS.hs b/test/Test/Amazonka/Gen/EKS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/EKS.hs
@@ -0,0 +1,738 @@
+{-# 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.EKS
+-- Copyright   : (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.EKS where
+
+import Amazonka.EKS
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.EKS.Internal
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestAssociateEncryptionConfig $
+--             newAssociateEncryptionConfig
+--
+--         , requestAssociateIdentityProviderConfig $
+--             newAssociateIdentityProviderConfig
+--
+--         , requestCreateAddon $
+--             newCreateAddon
+--
+--         , requestCreateCluster $
+--             newCreateCluster
+--
+--         , requestCreateFargateProfile $
+--             newCreateFargateProfile
+--
+--         , requestCreateNodegroup $
+--             newCreateNodegroup
+--
+--         , requestDeleteAddon $
+--             newDeleteAddon
+--
+--         , requestDeleteCluster $
+--             newDeleteCluster
+--
+--         , requestDeleteFargateProfile $
+--             newDeleteFargateProfile
+--
+--         , requestDeleteNodegroup $
+--             newDeleteNodegroup
+--
+--         , requestDeregisterCluster $
+--             newDeregisterCluster
+--
+--         , requestDescribeAddon $
+--             newDescribeAddon
+--
+--         , requestDescribeAddonConfiguration $
+--             newDescribeAddonConfiguration
+--
+--         , requestDescribeAddonVersions $
+--             newDescribeAddonVersions
+--
+--         , requestDescribeCluster $
+--             newDescribeCluster
+--
+--         , requestDescribeFargateProfile $
+--             newDescribeFargateProfile
+--
+--         , requestDescribeIdentityProviderConfig $
+--             newDescribeIdentityProviderConfig
+--
+--         , requestDescribeNodegroup $
+--             newDescribeNodegroup
+--
+--         , requestDescribeUpdate $
+--             newDescribeUpdate
+--
+--         , requestDisassociateIdentityProviderConfig $
+--             newDisassociateIdentityProviderConfig
+--
+--         , requestListAddons $
+--             newListAddons
+--
+--         , requestListClusters $
+--             newListClusters
+--
+--         , requestListFargateProfiles $
+--             newListFargateProfiles
+--
+--         , requestListIdentityProviderConfigs $
+--             newListIdentityProviderConfigs
+--
+--         , requestListNodegroups $
+--             newListNodegroups
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListUpdates $
+--             newListUpdates
+--
+--         , requestRegisterCluster $
+--             newRegisterCluster
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateAddon $
+--             newUpdateAddon
+--
+--         , requestUpdateClusterConfig $
+--             newUpdateClusterConfig
+--
+--         , requestUpdateClusterVersion $
+--             newUpdateClusterVersion
+--
+--         , requestUpdateNodegroupConfig $
+--             newUpdateNodegroupConfig
+--
+--         , requestUpdateNodegroupVersion $
+--             newUpdateNodegroupVersion
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAssociateEncryptionConfig $
+--             newAssociateEncryptionConfigResponse
+--
+--         , responseAssociateIdentityProviderConfig $
+--             newAssociateIdentityProviderConfigResponse
+--
+--         , responseCreateAddon $
+--             newCreateAddonResponse
+--
+--         , responseCreateCluster $
+--             newCreateClusterResponse
+--
+--         , responseCreateFargateProfile $
+--             newCreateFargateProfileResponse
+--
+--         , responseCreateNodegroup $
+--             newCreateNodegroupResponse
+--
+--         , responseDeleteAddon $
+--             newDeleteAddonResponse
+--
+--         , responseDeleteCluster $
+--             newDeleteClusterResponse
+--
+--         , responseDeleteFargateProfile $
+--             newDeleteFargateProfileResponse
+--
+--         , responseDeleteNodegroup $
+--             newDeleteNodegroupResponse
+--
+--         , responseDeregisterCluster $
+--             newDeregisterClusterResponse
+--
+--         , responseDescribeAddon $
+--             newDescribeAddonResponse
+--
+--         , responseDescribeAddonConfiguration $
+--             newDescribeAddonConfigurationResponse
+--
+--         , responseDescribeAddonVersions $
+--             newDescribeAddonVersionsResponse
+--
+--         , responseDescribeCluster $
+--             newDescribeClusterResponse
+--
+--         , responseDescribeFargateProfile $
+--             newDescribeFargateProfileResponse
+--
+--         , responseDescribeIdentityProviderConfig $
+--             newDescribeIdentityProviderConfigResponse
+--
+--         , responseDescribeNodegroup $
+--             newDescribeNodegroupResponse
+--
+--         , responseDescribeUpdate $
+--             newDescribeUpdateResponse
+--
+--         , responseDisassociateIdentityProviderConfig $
+--             newDisassociateIdentityProviderConfigResponse
+--
+--         , responseListAddons $
+--             newListAddonsResponse
+--
+--         , responseListClusters $
+--             newListClustersResponse
+--
+--         , responseListFargateProfiles $
+--             newListFargateProfilesResponse
+--
+--         , responseListIdentityProviderConfigs $
+--             newListIdentityProviderConfigsResponse
+--
+--         , responseListNodegroups $
+--             newListNodegroupsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListUpdates $
+--             newListUpdatesResponse
+--
+--         , responseRegisterCluster $
+--             newRegisterClusterResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateAddon $
+--             newUpdateAddonResponse
+--
+--         , responseUpdateClusterConfig $
+--             newUpdateClusterConfigResponse
+--
+--         , responseUpdateClusterVersion $
+--             newUpdateClusterVersionResponse
+--
+--         , responseUpdateNodegroupConfig $
+--             newUpdateNodegroupConfigResponse
+--
+--         , responseUpdateNodegroupVersion $
+--             newUpdateNodegroupVersionResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAssociateEncryptionConfig :: AssociateEncryptionConfig -> TestTree
+requestAssociateEncryptionConfig =
+  req
+    "AssociateEncryptionConfig"
+    "fixture/AssociateEncryptionConfig.yaml"
+
+requestAssociateIdentityProviderConfig :: AssociateIdentityProviderConfig -> TestTree
+requestAssociateIdentityProviderConfig =
+  req
+    "AssociateIdentityProviderConfig"
+    "fixture/AssociateIdentityProviderConfig.yaml"
+
+requestCreateAddon :: CreateAddon -> TestTree
+requestCreateAddon =
+  req
+    "CreateAddon"
+    "fixture/CreateAddon.yaml"
+
+requestCreateCluster :: CreateCluster -> TestTree
+requestCreateCluster =
+  req
+    "CreateCluster"
+    "fixture/CreateCluster.yaml"
+
+requestCreateFargateProfile :: CreateFargateProfile -> TestTree
+requestCreateFargateProfile =
+  req
+    "CreateFargateProfile"
+    "fixture/CreateFargateProfile.yaml"
+
+requestCreateNodegroup :: CreateNodegroup -> TestTree
+requestCreateNodegroup =
+  req
+    "CreateNodegroup"
+    "fixture/CreateNodegroup.yaml"
+
+requestDeleteAddon :: DeleteAddon -> TestTree
+requestDeleteAddon =
+  req
+    "DeleteAddon"
+    "fixture/DeleteAddon.yaml"
+
+requestDeleteCluster :: DeleteCluster -> TestTree
+requestDeleteCluster =
+  req
+    "DeleteCluster"
+    "fixture/DeleteCluster.yaml"
+
+requestDeleteFargateProfile :: DeleteFargateProfile -> TestTree
+requestDeleteFargateProfile =
+  req
+    "DeleteFargateProfile"
+    "fixture/DeleteFargateProfile.yaml"
+
+requestDeleteNodegroup :: DeleteNodegroup -> TestTree
+requestDeleteNodegroup =
+  req
+    "DeleteNodegroup"
+    "fixture/DeleteNodegroup.yaml"
+
+requestDeregisterCluster :: DeregisterCluster -> TestTree
+requestDeregisterCluster =
+  req
+    "DeregisterCluster"
+    "fixture/DeregisterCluster.yaml"
+
+requestDescribeAddon :: DescribeAddon -> TestTree
+requestDescribeAddon =
+  req
+    "DescribeAddon"
+    "fixture/DescribeAddon.yaml"
+
+requestDescribeAddonConfiguration :: DescribeAddonConfiguration -> TestTree
+requestDescribeAddonConfiguration =
+  req
+    "DescribeAddonConfiguration"
+    "fixture/DescribeAddonConfiguration.yaml"
+
+requestDescribeAddonVersions :: DescribeAddonVersions -> TestTree
+requestDescribeAddonVersions =
+  req
+    "DescribeAddonVersions"
+    "fixture/DescribeAddonVersions.yaml"
+
+requestDescribeCluster :: DescribeCluster -> TestTree
+requestDescribeCluster =
+  req
+    "DescribeCluster"
+    "fixture/DescribeCluster.yaml"
+
+requestDescribeFargateProfile :: DescribeFargateProfile -> TestTree
+requestDescribeFargateProfile =
+  req
+    "DescribeFargateProfile"
+    "fixture/DescribeFargateProfile.yaml"
+
+requestDescribeIdentityProviderConfig :: DescribeIdentityProviderConfig -> TestTree
+requestDescribeIdentityProviderConfig =
+  req
+    "DescribeIdentityProviderConfig"
+    "fixture/DescribeIdentityProviderConfig.yaml"
+
+requestDescribeNodegroup :: DescribeNodegroup -> TestTree
+requestDescribeNodegroup =
+  req
+    "DescribeNodegroup"
+    "fixture/DescribeNodegroup.yaml"
+
+requestDescribeUpdate :: DescribeUpdate -> TestTree
+requestDescribeUpdate =
+  req
+    "DescribeUpdate"
+    "fixture/DescribeUpdate.yaml"
+
+requestDisassociateIdentityProviderConfig :: DisassociateIdentityProviderConfig -> TestTree
+requestDisassociateIdentityProviderConfig =
+  req
+    "DisassociateIdentityProviderConfig"
+    "fixture/DisassociateIdentityProviderConfig.yaml"
+
+requestListAddons :: ListAddons -> TestTree
+requestListAddons =
+  req
+    "ListAddons"
+    "fixture/ListAddons.yaml"
+
+requestListClusters :: ListClusters -> TestTree
+requestListClusters =
+  req
+    "ListClusters"
+    "fixture/ListClusters.yaml"
+
+requestListFargateProfiles :: ListFargateProfiles -> TestTree
+requestListFargateProfiles =
+  req
+    "ListFargateProfiles"
+    "fixture/ListFargateProfiles.yaml"
+
+requestListIdentityProviderConfigs :: ListIdentityProviderConfigs -> TestTree
+requestListIdentityProviderConfigs =
+  req
+    "ListIdentityProviderConfigs"
+    "fixture/ListIdentityProviderConfigs.yaml"
+
+requestListNodegroups :: ListNodegroups -> TestTree
+requestListNodegroups =
+  req
+    "ListNodegroups"
+    "fixture/ListNodegroups.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListUpdates :: ListUpdates -> TestTree
+requestListUpdates =
+  req
+    "ListUpdates"
+    "fixture/ListUpdates.yaml"
+
+requestRegisterCluster :: RegisterCluster -> TestTree
+requestRegisterCluster =
+  req
+    "RegisterCluster"
+    "fixture/RegisterCluster.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateAddon :: UpdateAddon -> TestTree
+requestUpdateAddon =
+  req
+    "UpdateAddon"
+    "fixture/UpdateAddon.yaml"
+
+requestUpdateClusterConfig :: UpdateClusterConfig -> TestTree
+requestUpdateClusterConfig =
+  req
+    "UpdateClusterConfig"
+    "fixture/UpdateClusterConfig.yaml"
+
+requestUpdateClusterVersion :: UpdateClusterVersion -> TestTree
+requestUpdateClusterVersion =
+  req
+    "UpdateClusterVersion"
+    "fixture/UpdateClusterVersion.yaml"
+
+requestUpdateNodegroupConfig :: UpdateNodegroupConfig -> TestTree
+requestUpdateNodegroupConfig =
+  req
+    "UpdateNodegroupConfig"
+    "fixture/UpdateNodegroupConfig.yaml"
+
+requestUpdateNodegroupVersion :: UpdateNodegroupVersion -> TestTree
+requestUpdateNodegroupVersion =
+  req
+    "UpdateNodegroupVersion"
+    "fixture/UpdateNodegroupVersion.yaml"
+
+-- Responses
+
+responseAssociateEncryptionConfig :: AssociateEncryptionConfigResponse -> TestTree
+responseAssociateEncryptionConfig =
+  res
+    "AssociateEncryptionConfigResponse"
+    "fixture/AssociateEncryptionConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateEncryptionConfig)
+
+responseAssociateIdentityProviderConfig :: AssociateIdentityProviderConfigResponse -> TestTree
+responseAssociateIdentityProviderConfig =
+  res
+    "AssociateIdentityProviderConfigResponse"
+    "fixture/AssociateIdentityProviderConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateIdentityProviderConfig)
+
+responseCreateAddon :: CreateAddonResponse -> TestTree
+responseCreateAddon =
+  res
+    "CreateAddonResponse"
+    "fixture/CreateAddonResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAddon)
+
+responseCreateCluster :: CreateClusterResponse -> TestTree
+responseCreateCluster =
+  res
+    "CreateClusterResponse"
+    "fixture/CreateClusterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCluster)
+
+responseCreateFargateProfile :: CreateFargateProfileResponse -> TestTree
+responseCreateFargateProfile =
+  res
+    "CreateFargateProfileResponse"
+    "fixture/CreateFargateProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateFargateProfile)
+
+responseCreateNodegroup :: CreateNodegroupResponse -> TestTree
+responseCreateNodegroup =
+  res
+    "CreateNodegroupResponse"
+    "fixture/CreateNodegroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateNodegroup)
+
+responseDeleteAddon :: DeleteAddonResponse -> TestTree
+responseDeleteAddon =
+  res
+    "DeleteAddonResponse"
+    "fixture/DeleteAddonResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAddon)
+
+responseDeleteCluster :: DeleteClusterResponse -> TestTree
+responseDeleteCluster =
+  res
+    "DeleteClusterResponse"
+    "fixture/DeleteClusterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCluster)
+
+responseDeleteFargateProfile :: DeleteFargateProfileResponse -> TestTree
+responseDeleteFargateProfile =
+  res
+    "DeleteFargateProfileResponse"
+    "fixture/DeleteFargateProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteFargateProfile)
+
+responseDeleteNodegroup :: DeleteNodegroupResponse -> TestTree
+responseDeleteNodegroup =
+  res
+    "DeleteNodegroupResponse"
+    "fixture/DeleteNodegroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteNodegroup)
+
+responseDeregisterCluster :: DeregisterClusterResponse -> TestTree
+responseDeregisterCluster =
+  res
+    "DeregisterClusterResponse"
+    "fixture/DeregisterClusterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeregisterCluster)
+
+responseDescribeAddon :: DescribeAddonResponse -> TestTree
+responseDescribeAddon =
+  res
+    "DescribeAddonResponse"
+    "fixture/DescribeAddonResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAddon)
+
+responseDescribeAddonConfiguration :: DescribeAddonConfigurationResponse -> TestTree
+responseDescribeAddonConfiguration =
+  res
+    "DescribeAddonConfigurationResponse"
+    "fixture/DescribeAddonConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAddonConfiguration)
+
+responseDescribeAddonVersions :: DescribeAddonVersionsResponse -> TestTree
+responseDescribeAddonVersions =
+  res
+    "DescribeAddonVersionsResponse"
+    "fixture/DescribeAddonVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAddonVersions)
+
+responseDescribeCluster :: DescribeClusterResponse -> TestTree
+responseDescribeCluster =
+  res
+    "DescribeClusterResponse"
+    "fixture/DescribeClusterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeCluster)
+
+responseDescribeFargateProfile :: DescribeFargateProfileResponse -> TestTree
+responseDescribeFargateProfile =
+  res
+    "DescribeFargateProfileResponse"
+    "fixture/DescribeFargateProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeFargateProfile)
+
+responseDescribeIdentityProviderConfig :: DescribeIdentityProviderConfigResponse -> TestTree
+responseDescribeIdentityProviderConfig =
+  res
+    "DescribeIdentityProviderConfigResponse"
+    "fixture/DescribeIdentityProviderConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeIdentityProviderConfig)
+
+responseDescribeNodegroup :: DescribeNodegroupResponse -> TestTree
+responseDescribeNodegroup =
+  res
+    "DescribeNodegroupResponse"
+    "fixture/DescribeNodegroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeNodegroup)
+
+responseDescribeUpdate :: DescribeUpdateResponse -> TestTree
+responseDescribeUpdate =
+  res
+    "DescribeUpdateResponse"
+    "fixture/DescribeUpdateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeUpdate)
+
+responseDisassociateIdentityProviderConfig :: DisassociateIdentityProviderConfigResponse -> TestTree
+responseDisassociateIdentityProviderConfig =
+  res
+    "DisassociateIdentityProviderConfigResponse"
+    "fixture/DisassociateIdentityProviderConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateIdentityProviderConfig)
+
+responseListAddons :: ListAddonsResponse -> TestTree
+responseListAddons =
+  res
+    "ListAddonsResponse"
+    "fixture/ListAddonsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAddons)
+
+responseListClusters :: ListClustersResponse -> TestTree
+responseListClusters =
+  res
+    "ListClustersResponse"
+    "fixture/ListClustersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListClusters)
+
+responseListFargateProfiles :: ListFargateProfilesResponse -> TestTree
+responseListFargateProfiles =
+  res
+    "ListFargateProfilesResponse"
+    "fixture/ListFargateProfilesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListFargateProfiles)
+
+responseListIdentityProviderConfigs :: ListIdentityProviderConfigsResponse -> TestTree
+responseListIdentityProviderConfigs =
+  res
+    "ListIdentityProviderConfigsResponse"
+    "fixture/ListIdentityProviderConfigsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListIdentityProviderConfigs)
+
+responseListNodegroups :: ListNodegroupsResponse -> TestTree
+responseListNodegroups =
+  res
+    "ListNodegroupsResponse"
+    "fixture/ListNodegroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListNodegroups)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListUpdates :: ListUpdatesResponse -> TestTree
+responseListUpdates =
+  res
+    "ListUpdatesResponse"
+    "fixture/ListUpdatesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListUpdates)
+
+responseRegisterCluster :: RegisterClusterResponse -> TestTree
+responseRegisterCluster =
+  res
+    "RegisterClusterResponse"
+    "fixture/RegisterClusterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RegisterCluster)
+
+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)
+
+responseUpdateAddon :: UpdateAddonResponse -> TestTree
+responseUpdateAddon =
+  res
+    "UpdateAddonResponse"
+    "fixture/UpdateAddonResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAddon)
+
+responseUpdateClusterConfig :: UpdateClusterConfigResponse -> TestTree
+responseUpdateClusterConfig =
+  res
+    "UpdateClusterConfigResponse"
+    "fixture/UpdateClusterConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateClusterConfig)
+
+responseUpdateClusterVersion :: UpdateClusterVersionResponse -> TestTree
+responseUpdateClusterVersion =
+  res
+    "UpdateClusterVersionResponse"
+    "fixture/UpdateClusterVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateClusterVersion)
+
+responseUpdateNodegroupConfig :: UpdateNodegroupConfigResponse -> TestTree
+responseUpdateNodegroupConfig =
+  res
+    "UpdateNodegroupConfigResponse"
+    "fixture/UpdateNodegroupConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateNodegroupConfig)
+
+responseUpdateNodegroupVersion :: UpdateNodegroupVersionResponse -> TestTree
+responseUpdateNodegroupVersion =
+  res
+    "UpdateNodegroupVersionResponse"
+    "fixture/UpdateNodegroupVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateNodegroupVersion)
