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 AppConfig SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2019-10-09@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-appconfig)
+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.AppConfig](http://hackage.haskell.org/package/amazonka-appconfig/docs/Amazonka-AppConfig.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-appconfig` 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-appconfig.cabal b/amazonka-appconfig.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-appconfig.cabal
@@ -0,0 +1,153 @@
+cabal-version:      2.2
+name:               amazonka-appconfig
+version:            2.0
+synopsis:           Amazon AppConfig 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 @2019-10-09@ 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.AppConfig.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.AppConfig" 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-appconfig
+
+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.AppConfig
+    Amazonka.AppConfig.CreateApplication
+    Amazonka.AppConfig.CreateConfigurationProfile
+    Amazonka.AppConfig.CreateDeploymentStrategy
+    Amazonka.AppConfig.CreateEnvironment
+    Amazonka.AppConfig.CreateExtension
+    Amazonka.AppConfig.CreateExtensionAssociation
+    Amazonka.AppConfig.CreateHostedConfigurationVersion
+    Amazonka.AppConfig.DeleteApplication
+    Amazonka.AppConfig.DeleteConfigurationProfile
+    Amazonka.AppConfig.DeleteDeploymentStrategy
+    Amazonka.AppConfig.DeleteEnvironment
+    Amazonka.AppConfig.DeleteExtension
+    Amazonka.AppConfig.DeleteExtensionAssociation
+    Amazonka.AppConfig.DeleteHostedConfigurationVersion
+    Amazonka.AppConfig.GetApplication
+    Amazonka.AppConfig.GetConfigurationProfile
+    Amazonka.AppConfig.GetDeployment
+    Amazonka.AppConfig.GetDeploymentStrategy
+    Amazonka.AppConfig.GetEnvironment
+    Amazonka.AppConfig.GetExtension
+    Amazonka.AppConfig.GetExtensionAssociation
+    Amazonka.AppConfig.GetHostedConfigurationVersion
+    Amazonka.AppConfig.Lens
+    Amazonka.AppConfig.ListApplications
+    Amazonka.AppConfig.ListConfigurationProfiles
+    Amazonka.AppConfig.ListDeployments
+    Amazonka.AppConfig.ListDeploymentStrategies
+    Amazonka.AppConfig.ListEnvironments
+    Amazonka.AppConfig.ListExtensionAssociations
+    Amazonka.AppConfig.ListExtensions
+    Amazonka.AppConfig.ListHostedConfigurationVersions
+    Amazonka.AppConfig.ListTagsForResource
+    Amazonka.AppConfig.StartDeployment
+    Amazonka.AppConfig.StopDeployment
+    Amazonka.AppConfig.TagResource
+    Amazonka.AppConfig.Types
+    Amazonka.AppConfig.Types.Action
+    Amazonka.AppConfig.Types.ActionInvocation
+    Amazonka.AppConfig.Types.ActionPoint
+    Amazonka.AppConfig.Types.Application
+    Amazonka.AppConfig.Types.AppliedExtension
+    Amazonka.AppConfig.Types.ConfigurationProfile
+    Amazonka.AppConfig.Types.ConfigurationProfileSummary
+    Amazonka.AppConfig.Types.Deployment
+    Amazonka.AppConfig.Types.DeploymentEvent
+    Amazonka.AppConfig.Types.DeploymentEventType
+    Amazonka.AppConfig.Types.DeploymentState
+    Amazonka.AppConfig.Types.DeploymentStrategy
+    Amazonka.AppConfig.Types.DeploymentSummary
+    Amazonka.AppConfig.Types.Environment
+    Amazonka.AppConfig.Types.EnvironmentState
+    Amazonka.AppConfig.Types.Extension
+    Amazonka.AppConfig.Types.ExtensionAssociation
+    Amazonka.AppConfig.Types.ExtensionAssociationSummary
+    Amazonka.AppConfig.Types.ExtensionSummary
+    Amazonka.AppConfig.Types.GrowthType
+    Amazonka.AppConfig.Types.HostedConfigurationVersion
+    Amazonka.AppConfig.Types.HostedConfigurationVersionSummary
+    Amazonka.AppConfig.Types.Monitor
+    Amazonka.AppConfig.Types.Parameter
+    Amazonka.AppConfig.Types.ReplicateTo
+    Amazonka.AppConfig.Types.TriggeredBy
+    Amazonka.AppConfig.Types.Validator
+    Amazonka.AppConfig.Types.ValidatorType
+    Amazonka.AppConfig.UntagResource
+    Amazonka.AppConfig.UpdateApplication
+    Amazonka.AppConfig.UpdateConfigurationProfile
+    Amazonka.AppConfig.UpdateDeploymentStrategy
+    Amazonka.AppConfig.UpdateEnvironment
+    Amazonka.AppConfig.UpdateExtension
+    Amazonka.AppConfig.UpdateExtensionAssociation
+    Amazonka.AppConfig.ValidateConfiguration
+    Amazonka.AppConfig.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-appconfig-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.AppConfig
+    Test.Amazonka.AppConfig.Internal
+    Test.Amazonka.Gen.AppConfig
+
+  build-depends:
+    , amazonka-appconfig
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateApplication.yaml b/fixture/CreateApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateApplicationResponse.proto b/fixture/CreateApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateApplicationResponse.proto
diff --git a/fixture/CreateConfigurationProfile.yaml b/fixture/CreateConfigurationProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConfigurationProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateConfigurationProfileResponse.proto b/fixture/CreateConfigurationProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConfigurationProfileResponse.proto
diff --git a/fixture/CreateDeploymentStrategy.yaml b/fixture/CreateDeploymentStrategy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDeploymentStrategy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDeploymentStrategyResponse.proto b/fixture/CreateDeploymentStrategyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDeploymentStrategyResponse.proto
diff --git a/fixture/CreateEnvironment.yaml b/fixture/CreateEnvironment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEnvironment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateEnvironmentResponse.proto b/fixture/CreateEnvironmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEnvironmentResponse.proto
diff --git a/fixture/CreateExtension.yaml b/fixture/CreateExtension.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExtension.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateExtensionAssociation.yaml b/fixture/CreateExtensionAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExtensionAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateExtensionAssociationResponse.proto b/fixture/CreateExtensionAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExtensionAssociationResponse.proto
diff --git a/fixture/CreateExtensionResponse.proto b/fixture/CreateExtensionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExtensionResponse.proto
diff --git a/fixture/CreateHostedConfigurationVersion.yaml b/fixture/CreateHostedConfigurationVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateHostedConfigurationVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateHostedConfigurationVersionResponse.proto b/fixture/CreateHostedConfigurationVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateHostedConfigurationVersionResponse.proto
diff --git a/fixture/DeleteApplication.yaml b/fixture/DeleteApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteApplicationResponse.proto b/fixture/DeleteApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApplicationResponse.proto
diff --git a/fixture/DeleteConfigurationProfile.yaml b/fixture/DeleteConfigurationProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConfigurationProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteConfigurationProfileResponse.proto b/fixture/DeleteConfigurationProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConfigurationProfileResponse.proto
diff --git a/fixture/DeleteDeploymentStrategy.yaml b/fixture/DeleteDeploymentStrategy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDeploymentStrategy.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDeploymentStrategyResponse.proto b/fixture/DeleteDeploymentStrategyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDeploymentStrategyResponse.proto
diff --git a/fixture/DeleteEnvironment.yaml b/fixture/DeleteEnvironment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEnvironment.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteEnvironmentResponse.proto b/fixture/DeleteEnvironmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEnvironmentResponse.proto
diff --git a/fixture/DeleteExtension.yaml b/fixture/DeleteExtension.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteExtension.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteExtensionAssociation.yaml b/fixture/DeleteExtensionAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteExtensionAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteExtensionAssociationResponse.proto b/fixture/DeleteExtensionAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteExtensionAssociationResponse.proto
diff --git a/fixture/DeleteExtensionResponse.proto b/fixture/DeleteExtensionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteExtensionResponse.proto
diff --git a/fixture/DeleteHostedConfigurationVersion.yaml b/fixture/DeleteHostedConfigurationVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteHostedConfigurationVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteHostedConfigurationVersionResponse.proto b/fixture/DeleteHostedConfigurationVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteHostedConfigurationVersionResponse.proto
diff --git a/fixture/GetApplication.yaml b/fixture/GetApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetApplicationResponse.proto b/fixture/GetApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetApplicationResponse.proto
diff --git a/fixture/GetConfiguration.yaml b/fixture/GetConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetConfigurationProfile.yaml b/fixture/GetConfigurationProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetConfigurationProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetConfigurationProfileResponse.proto b/fixture/GetConfigurationProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetConfigurationProfileResponse.proto
diff --git a/fixture/GetConfigurationResponse.proto b/fixture/GetConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetConfigurationResponse.proto
diff --git a/fixture/GetDeployment.yaml b/fixture/GetDeployment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeployment.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDeploymentResponse.proto b/fixture/GetDeploymentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeploymentResponse.proto
diff --git a/fixture/GetDeploymentStrategy.yaml b/fixture/GetDeploymentStrategy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeploymentStrategy.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDeploymentStrategyResponse.proto b/fixture/GetDeploymentStrategyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeploymentStrategyResponse.proto
diff --git a/fixture/GetEnvironment.yaml b/fixture/GetEnvironment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEnvironment.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetEnvironmentResponse.proto b/fixture/GetEnvironmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEnvironmentResponse.proto
diff --git a/fixture/GetExtension.yaml b/fixture/GetExtension.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetExtension.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetExtensionAssociation.yaml b/fixture/GetExtensionAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetExtensionAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetExtensionAssociationResponse.proto b/fixture/GetExtensionAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetExtensionAssociationResponse.proto
diff --git a/fixture/GetExtensionResponse.proto b/fixture/GetExtensionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetExtensionResponse.proto
diff --git a/fixture/GetHostedConfigurationVersion.yaml b/fixture/GetHostedConfigurationVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetHostedConfigurationVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetHostedConfigurationVersionResponse.proto b/fixture/GetHostedConfigurationVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetHostedConfigurationVersionResponse.proto
diff --git a/fixture/ListApplications.yaml b/fixture/ListApplications.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListApplications.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListApplicationsResponse.proto b/fixture/ListApplicationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListApplicationsResponse.proto
diff --git a/fixture/ListConfigurationProfiles.yaml b/fixture/ListConfigurationProfiles.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListConfigurationProfiles.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListConfigurationProfilesResponse.proto b/fixture/ListConfigurationProfilesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListConfigurationProfilesResponse.proto
diff --git a/fixture/ListDeploymentStrategies.yaml b/fixture/ListDeploymentStrategies.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDeploymentStrategies.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListDeploymentStrategiesResponse.proto b/fixture/ListDeploymentStrategiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDeploymentStrategiesResponse.proto
diff --git a/fixture/ListDeployments.yaml b/fixture/ListDeployments.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDeployments.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListDeploymentsResponse.proto b/fixture/ListDeploymentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDeploymentsResponse.proto
diff --git a/fixture/ListEnvironments.yaml b/fixture/ListEnvironments.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEnvironments.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListEnvironmentsResponse.proto b/fixture/ListEnvironmentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEnvironmentsResponse.proto
diff --git a/fixture/ListExtensionAssociations.yaml b/fixture/ListExtensionAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListExtensionAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListExtensionAssociationsResponse.proto b/fixture/ListExtensionAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListExtensionAssociationsResponse.proto
diff --git a/fixture/ListExtensions.yaml b/fixture/ListExtensions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListExtensions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListExtensionsResponse.proto b/fixture/ListExtensionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListExtensionsResponse.proto
diff --git a/fixture/ListHostedConfigurationVersions.yaml b/fixture/ListHostedConfigurationVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListHostedConfigurationVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListHostedConfigurationVersionsResponse.proto b/fixture/ListHostedConfigurationVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListHostedConfigurationVersionsResponse.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/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  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/StartDeployment.yaml b/fixture/StartDeployment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartDeployment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartDeploymentResponse.proto b/fixture/StartDeploymentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartDeploymentResponse.proto
diff --git a/fixture/StopDeployment.yaml b/fixture/StopDeployment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopDeployment.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopDeploymentResponse.proto b/fixture/StopDeploymentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopDeploymentResponse.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/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  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/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  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/UpdateApplication.yaml b/fixture/UpdateApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateApplicationResponse.proto b/fixture/UpdateApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateApplicationResponse.proto
diff --git a/fixture/UpdateConfigurationProfile.yaml b/fixture/UpdateConfigurationProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateConfigurationProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateConfigurationProfileResponse.proto b/fixture/UpdateConfigurationProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateConfigurationProfileResponse.proto
diff --git a/fixture/UpdateDeploymentStrategy.yaml b/fixture/UpdateDeploymentStrategy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDeploymentStrategy.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateDeploymentStrategyResponse.proto b/fixture/UpdateDeploymentStrategyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDeploymentStrategyResponse.proto
diff --git a/fixture/UpdateEnvironment.yaml b/fixture/UpdateEnvironment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEnvironment.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateEnvironmentResponse.proto b/fixture/UpdateEnvironmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEnvironmentResponse.proto
diff --git a/fixture/UpdateExtension.yaml b/fixture/UpdateExtension.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateExtension.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateExtensionAssociation.yaml b/fixture/UpdateExtensionAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateExtensionAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateExtensionAssociationResponse.proto b/fixture/UpdateExtensionAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateExtensionAssociationResponse.proto
diff --git a/fixture/UpdateExtensionResponse.proto b/fixture/UpdateExtensionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateExtensionResponse.proto
diff --git a/fixture/ValidateConfiguration.yaml b/fixture/ValidateConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ValidateConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appconfig/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appconfig.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ValidateConfigurationResponse.proto b/fixture/ValidateConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ValidateConfigurationResponse.proto
diff --git a/gen/Amazonka/AppConfig.hs b/gen/Amazonka/AppConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig.hs
@@ -0,0 +1,519 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.AppConfig
+-- 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 @2019-10-09@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Use AppConfig, a capability of Amazon Web Services Systems Manager, to
+-- create, manage, and quickly deploy application configurations. AppConfig
+-- supports controlled deployments to applications of any size and includes
+-- built-in validation checks and monitoring. You can use AppConfig with
+-- applications hosted on Amazon EC2 instances, Lambda, containers, mobile
+-- applications, or IoT devices.
+--
+-- To prevent errors when deploying application configurations, especially
+-- for production systems where a simple typo could cause an unexpected
+-- outage, AppConfig includes validators. A validator provides a syntactic
+-- or semantic check to ensure that the configuration you want to deploy
+-- works as intended. To validate your application configuration data, you
+-- provide a schema or an Amazon Web Services Lambda function that runs
+-- against the configuration. The configuration deployment or update can
+-- only proceed when the configuration data is valid.
+--
+-- During a configuration deployment, AppConfig monitors the application to
+-- ensure that the deployment is successful. If the system encounters an
+-- error, AppConfig rolls back the change to minimize impact for your
+-- application users. You can configure a deployment strategy for each
+-- application or environment that includes deployment criteria, including
+-- velocity, bake time, and alarms to monitor. Similar to error monitoring,
+-- if a deployment triggers an alarm, AppConfig automatically rolls back to
+-- the previous version.
+--
+-- AppConfig supports multiple use cases. Here are some examples:
+--
+-- -   __Feature flags__: Use AppConfig to turn on new features that
+--     require a timely deployment, such as a product launch or
+--     announcement.
+--
+-- -   __Application tuning__: Use AppConfig to carefully introduce changes
+--     to your application that can only be tested with production traffic.
+--
+-- -   __Allow list__: Use AppConfig to allow premium subscribers to access
+--     paid content.
+--
+-- -   __Operational issues__: Use AppConfig to reduce stress on your
+--     application when a dependency or other external factor impacts the
+--     system.
+--
+-- This reference is intended to be used with the
+-- <http://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html AppConfig User Guide>.
+module Amazonka.AppConfig
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** BadRequestException
+    _BadRequestException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** PayloadTooLargeException
+    _PayloadTooLargeException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateApplication
+    CreateApplication (CreateApplication'),
+    newCreateApplication,
+    Application (Application'),
+    newApplication,
+
+    -- ** CreateConfigurationProfile
+    CreateConfigurationProfile (CreateConfigurationProfile'),
+    newCreateConfigurationProfile,
+    ConfigurationProfile (ConfigurationProfile'),
+    newConfigurationProfile,
+
+    -- ** CreateDeploymentStrategy
+    CreateDeploymentStrategy (CreateDeploymentStrategy'),
+    newCreateDeploymentStrategy,
+    DeploymentStrategy (DeploymentStrategy'),
+    newDeploymentStrategy,
+
+    -- ** CreateEnvironment
+    CreateEnvironment (CreateEnvironment'),
+    newCreateEnvironment,
+    Environment (Environment'),
+    newEnvironment,
+
+    -- ** CreateExtension
+    CreateExtension (CreateExtension'),
+    newCreateExtension,
+    Extension (Extension'),
+    newExtension,
+
+    -- ** CreateExtensionAssociation
+    CreateExtensionAssociation (CreateExtensionAssociation'),
+    newCreateExtensionAssociation,
+    ExtensionAssociation (ExtensionAssociation'),
+    newExtensionAssociation,
+
+    -- ** CreateHostedConfigurationVersion
+    CreateHostedConfigurationVersion (CreateHostedConfigurationVersion'),
+    newCreateHostedConfigurationVersion,
+    HostedConfigurationVersion (HostedConfigurationVersion'),
+    newHostedConfigurationVersion,
+
+    -- ** DeleteApplication
+    DeleteApplication (DeleteApplication'),
+    newDeleteApplication,
+    DeleteApplicationResponse (DeleteApplicationResponse'),
+    newDeleteApplicationResponse,
+
+    -- ** DeleteConfigurationProfile
+    DeleteConfigurationProfile (DeleteConfigurationProfile'),
+    newDeleteConfigurationProfile,
+    DeleteConfigurationProfileResponse (DeleteConfigurationProfileResponse'),
+    newDeleteConfigurationProfileResponse,
+
+    -- ** DeleteDeploymentStrategy
+    DeleteDeploymentStrategy (DeleteDeploymentStrategy'),
+    newDeleteDeploymentStrategy,
+    DeleteDeploymentStrategyResponse (DeleteDeploymentStrategyResponse'),
+    newDeleteDeploymentStrategyResponse,
+
+    -- ** DeleteEnvironment
+    DeleteEnvironment (DeleteEnvironment'),
+    newDeleteEnvironment,
+    DeleteEnvironmentResponse (DeleteEnvironmentResponse'),
+    newDeleteEnvironmentResponse,
+
+    -- ** DeleteExtension
+    DeleteExtension (DeleteExtension'),
+    newDeleteExtension,
+    DeleteExtensionResponse (DeleteExtensionResponse'),
+    newDeleteExtensionResponse,
+
+    -- ** DeleteExtensionAssociation
+    DeleteExtensionAssociation (DeleteExtensionAssociation'),
+    newDeleteExtensionAssociation,
+    DeleteExtensionAssociationResponse (DeleteExtensionAssociationResponse'),
+    newDeleteExtensionAssociationResponse,
+
+    -- ** DeleteHostedConfigurationVersion
+    DeleteHostedConfigurationVersion (DeleteHostedConfigurationVersion'),
+    newDeleteHostedConfigurationVersion,
+    DeleteHostedConfigurationVersionResponse (DeleteHostedConfigurationVersionResponse'),
+    newDeleteHostedConfigurationVersionResponse,
+
+    -- ** GetApplication
+    GetApplication (GetApplication'),
+    newGetApplication,
+    Application (Application'),
+    newApplication,
+
+    -- ** GetConfigurationProfile
+    GetConfigurationProfile (GetConfigurationProfile'),
+    newGetConfigurationProfile,
+    ConfigurationProfile (ConfigurationProfile'),
+    newConfigurationProfile,
+
+    -- ** GetDeployment
+    GetDeployment (GetDeployment'),
+    newGetDeployment,
+    Deployment (Deployment'),
+    newDeployment,
+
+    -- ** GetDeploymentStrategy
+    GetDeploymentStrategy (GetDeploymentStrategy'),
+    newGetDeploymentStrategy,
+    DeploymentStrategy (DeploymentStrategy'),
+    newDeploymentStrategy,
+
+    -- ** GetEnvironment
+    GetEnvironment (GetEnvironment'),
+    newGetEnvironment,
+    Environment (Environment'),
+    newEnvironment,
+
+    -- ** GetExtension
+    GetExtension (GetExtension'),
+    newGetExtension,
+    Extension (Extension'),
+    newExtension,
+
+    -- ** GetExtensionAssociation
+    GetExtensionAssociation (GetExtensionAssociation'),
+    newGetExtensionAssociation,
+    ExtensionAssociation (ExtensionAssociation'),
+    newExtensionAssociation,
+
+    -- ** GetHostedConfigurationVersion
+    GetHostedConfigurationVersion (GetHostedConfigurationVersion'),
+    newGetHostedConfigurationVersion,
+    HostedConfigurationVersion (HostedConfigurationVersion'),
+    newHostedConfigurationVersion,
+
+    -- ** ListApplications
+    ListApplications (ListApplications'),
+    newListApplications,
+    ListApplicationsResponse (ListApplicationsResponse'),
+    newListApplicationsResponse,
+
+    -- ** ListConfigurationProfiles
+    ListConfigurationProfiles (ListConfigurationProfiles'),
+    newListConfigurationProfiles,
+    ListConfigurationProfilesResponse (ListConfigurationProfilesResponse'),
+    newListConfigurationProfilesResponse,
+
+    -- ** ListDeploymentStrategies
+    ListDeploymentStrategies (ListDeploymentStrategies'),
+    newListDeploymentStrategies,
+    ListDeploymentStrategiesResponse (ListDeploymentStrategiesResponse'),
+    newListDeploymentStrategiesResponse,
+
+    -- ** ListDeployments
+    ListDeployments (ListDeployments'),
+    newListDeployments,
+    ListDeploymentsResponse (ListDeploymentsResponse'),
+    newListDeploymentsResponse,
+
+    -- ** ListEnvironments
+    ListEnvironments (ListEnvironments'),
+    newListEnvironments,
+    ListEnvironmentsResponse (ListEnvironmentsResponse'),
+    newListEnvironmentsResponse,
+
+    -- ** ListExtensionAssociations
+    ListExtensionAssociations (ListExtensionAssociations'),
+    newListExtensionAssociations,
+    ListExtensionAssociationsResponse (ListExtensionAssociationsResponse'),
+    newListExtensionAssociationsResponse,
+
+    -- ** ListExtensions
+    ListExtensions (ListExtensions'),
+    newListExtensions,
+    ListExtensionsResponse (ListExtensionsResponse'),
+    newListExtensionsResponse,
+
+    -- ** ListHostedConfigurationVersions
+    ListHostedConfigurationVersions (ListHostedConfigurationVersions'),
+    newListHostedConfigurationVersions,
+    ListHostedConfigurationVersionsResponse (ListHostedConfigurationVersionsResponse'),
+    newListHostedConfigurationVersionsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** StartDeployment
+    StartDeployment (StartDeployment'),
+    newStartDeployment,
+    Deployment (Deployment'),
+    newDeployment,
+
+    -- ** StopDeployment
+    StopDeployment (StopDeployment'),
+    newStopDeployment,
+    Deployment (Deployment'),
+    newDeployment,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateApplication
+    UpdateApplication (UpdateApplication'),
+    newUpdateApplication,
+    Application (Application'),
+    newApplication,
+
+    -- ** UpdateConfigurationProfile
+    UpdateConfigurationProfile (UpdateConfigurationProfile'),
+    newUpdateConfigurationProfile,
+    ConfigurationProfile (ConfigurationProfile'),
+    newConfigurationProfile,
+
+    -- ** UpdateDeploymentStrategy
+    UpdateDeploymentStrategy (UpdateDeploymentStrategy'),
+    newUpdateDeploymentStrategy,
+    DeploymentStrategy (DeploymentStrategy'),
+    newDeploymentStrategy,
+
+    -- ** UpdateEnvironment
+    UpdateEnvironment (UpdateEnvironment'),
+    newUpdateEnvironment,
+    Environment (Environment'),
+    newEnvironment,
+
+    -- ** UpdateExtension
+    UpdateExtension (UpdateExtension'),
+    newUpdateExtension,
+    Extension (Extension'),
+    newExtension,
+
+    -- ** UpdateExtensionAssociation
+    UpdateExtensionAssociation (UpdateExtensionAssociation'),
+    newUpdateExtensionAssociation,
+    ExtensionAssociation (ExtensionAssociation'),
+    newExtensionAssociation,
+
+    -- ** ValidateConfiguration
+    ValidateConfiguration (ValidateConfiguration'),
+    newValidateConfiguration,
+    ValidateConfigurationResponse (ValidateConfigurationResponse'),
+    newValidateConfigurationResponse,
+
+    -- * Types
+
+    -- ** ActionPoint
+    ActionPoint (..),
+
+    -- ** DeploymentEventType
+    DeploymentEventType (..),
+
+    -- ** DeploymentState
+    DeploymentState (..),
+
+    -- ** EnvironmentState
+    EnvironmentState (..),
+
+    -- ** GrowthType
+    GrowthType (..),
+
+    -- ** ReplicateTo
+    ReplicateTo (..),
+
+    -- ** TriggeredBy
+    TriggeredBy (..),
+
+    -- ** ValidatorType
+    ValidatorType (..),
+
+    -- ** Action
+    Action (Action'),
+    newAction,
+
+    -- ** ActionInvocation
+    ActionInvocation (ActionInvocation'),
+    newActionInvocation,
+
+    -- ** Application
+    Application (Application'),
+    newApplication,
+
+    -- ** AppliedExtension
+    AppliedExtension (AppliedExtension'),
+    newAppliedExtension,
+
+    -- ** ConfigurationProfile
+    ConfigurationProfile (ConfigurationProfile'),
+    newConfigurationProfile,
+
+    -- ** ConfigurationProfileSummary
+    ConfigurationProfileSummary (ConfigurationProfileSummary'),
+    newConfigurationProfileSummary,
+
+    -- ** Deployment
+    Deployment (Deployment'),
+    newDeployment,
+
+    -- ** DeploymentEvent
+    DeploymentEvent (DeploymentEvent'),
+    newDeploymentEvent,
+
+    -- ** DeploymentStrategy
+    DeploymentStrategy (DeploymentStrategy'),
+    newDeploymentStrategy,
+
+    -- ** DeploymentSummary
+    DeploymentSummary (DeploymentSummary'),
+    newDeploymentSummary,
+
+    -- ** Environment
+    Environment (Environment'),
+    newEnvironment,
+
+    -- ** Extension
+    Extension (Extension'),
+    newExtension,
+
+    -- ** ExtensionAssociation
+    ExtensionAssociation (ExtensionAssociation'),
+    newExtensionAssociation,
+
+    -- ** ExtensionAssociationSummary
+    ExtensionAssociationSummary (ExtensionAssociationSummary'),
+    newExtensionAssociationSummary,
+
+    -- ** ExtensionSummary
+    ExtensionSummary (ExtensionSummary'),
+    newExtensionSummary,
+
+    -- ** HostedConfigurationVersion
+    HostedConfigurationVersion (HostedConfigurationVersion'),
+    newHostedConfigurationVersion,
+
+    -- ** HostedConfigurationVersionSummary
+    HostedConfigurationVersionSummary (HostedConfigurationVersionSummary'),
+    newHostedConfigurationVersionSummary,
+
+    -- ** Monitor
+    Monitor (Monitor'),
+    newMonitor,
+
+    -- ** Parameter
+    Parameter (Parameter'),
+    newParameter,
+
+    -- ** Validator
+    Validator (Validator'),
+    newValidator,
+  )
+where
+
+import Amazonka.AppConfig.CreateApplication
+import Amazonka.AppConfig.CreateConfigurationProfile
+import Amazonka.AppConfig.CreateDeploymentStrategy
+import Amazonka.AppConfig.CreateEnvironment
+import Amazonka.AppConfig.CreateExtension
+import Amazonka.AppConfig.CreateExtensionAssociation
+import Amazonka.AppConfig.CreateHostedConfigurationVersion
+import Amazonka.AppConfig.DeleteApplication
+import Amazonka.AppConfig.DeleteConfigurationProfile
+import Amazonka.AppConfig.DeleteDeploymentStrategy
+import Amazonka.AppConfig.DeleteEnvironment
+import Amazonka.AppConfig.DeleteExtension
+import Amazonka.AppConfig.DeleteExtensionAssociation
+import Amazonka.AppConfig.DeleteHostedConfigurationVersion
+import Amazonka.AppConfig.GetApplication
+import Amazonka.AppConfig.GetConfigurationProfile
+import Amazonka.AppConfig.GetDeployment
+import Amazonka.AppConfig.GetDeploymentStrategy
+import Amazonka.AppConfig.GetEnvironment
+import Amazonka.AppConfig.GetExtension
+import Amazonka.AppConfig.GetExtensionAssociation
+import Amazonka.AppConfig.GetHostedConfigurationVersion
+import Amazonka.AppConfig.Lens
+import Amazonka.AppConfig.ListApplications
+import Amazonka.AppConfig.ListConfigurationProfiles
+import Amazonka.AppConfig.ListDeploymentStrategies
+import Amazonka.AppConfig.ListDeployments
+import Amazonka.AppConfig.ListEnvironments
+import Amazonka.AppConfig.ListExtensionAssociations
+import Amazonka.AppConfig.ListExtensions
+import Amazonka.AppConfig.ListHostedConfigurationVersions
+import Amazonka.AppConfig.ListTagsForResource
+import Amazonka.AppConfig.StartDeployment
+import Amazonka.AppConfig.StopDeployment
+import Amazonka.AppConfig.TagResource
+import Amazonka.AppConfig.Types
+import Amazonka.AppConfig.UntagResource
+import Amazonka.AppConfig.UpdateApplication
+import Amazonka.AppConfig.UpdateConfigurationProfile
+import Amazonka.AppConfig.UpdateDeploymentStrategy
+import Amazonka.AppConfig.UpdateEnvironment
+import Amazonka.AppConfig.UpdateExtension
+import Amazonka.AppConfig.UpdateExtensionAssociation
+import Amazonka.AppConfig.ValidateConfiguration
+import Amazonka.AppConfig.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 'AppConfig'.
+
+-- $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/AppConfig/CreateApplication.hs b/gen/Amazonka/AppConfig/CreateApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/CreateApplication.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.CreateApplication
+-- 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 application. In AppConfig, an application is simply an
+-- organizational construct like a folder. This organizational construct
+-- has a relationship with some unit of executable code. For example, you
+-- could create an application called MyMobileApp to organize and manage
+-- configuration data for a mobile application installed by your users.
+module Amazonka.AppConfig.CreateApplication
+  ( -- * Creating a Request
+    CreateApplication (..),
+    newCreateApplication,
+
+    -- * Request Lenses
+    createApplication_description,
+    createApplication_tags,
+    createApplication_name,
+
+    -- * Destructuring the Response
+    Application (..),
+    newApplication,
+
+    -- * Response Lenses
+    application_description,
+    application_id,
+    application_name,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateApplication' smart constructor.
+data CreateApplication = CreateApplication'
+  { -- | A description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Metadata to assign to the application. Tags help organize and categorize
+    -- your AppConfig resources. Each tag consists of a key and an optional
+    -- value, both of which you define.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A name for the application.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createApplication_description' - A description of the application.
+--
+-- 'tags', 'createApplication_tags' - Metadata to assign to the application. Tags help organize and categorize
+-- your AppConfig resources. Each tag consists of a key and an optional
+-- value, both of which you define.
+--
+-- 'name', 'createApplication_name' - A name for the application.
+newCreateApplication ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateApplication
+newCreateApplication pName_ =
+  CreateApplication'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | A description of the application.
+createApplication_description :: Lens.Lens' CreateApplication (Prelude.Maybe Prelude.Text)
+createApplication_description = Lens.lens (\CreateApplication' {description} -> description) (\s@CreateApplication' {} a -> s {description = a} :: CreateApplication)
+
+-- | Metadata to assign to the application. Tags help organize and categorize
+-- your AppConfig resources. Each tag consists of a key and an optional
+-- value, both of which you define.
+createApplication_tags :: Lens.Lens' CreateApplication (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createApplication_tags = Lens.lens (\CreateApplication' {tags} -> tags) (\s@CreateApplication' {} a -> s {tags = a} :: CreateApplication) Prelude.. Lens.mapping Lens.coerced
+
+-- | A name for the application.
+createApplication_name :: Lens.Lens' CreateApplication Prelude.Text
+createApplication_name = Lens.lens (\CreateApplication' {name} -> name) (\s@CreateApplication' {} a -> s {name = a} :: CreateApplication)
+
+instance Core.AWSRequest CreateApplication where
+  type AWSResponse CreateApplication = Application
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable CreateApplication where
+  hashWithSalt _salt CreateApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateApplication where
+  rnf CreateApplication' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateApplication where
+  toJSON CreateApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateApplication where
+  toPath = Prelude.const "/applications"
+
+instance Data.ToQuery CreateApplication where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/CreateConfigurationProfile.hs b/gen/Amazonka/AppConfig/CreateConfigurationProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/CreateConfigurationProfile.hs
@@ -0,0 +1,325 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.CreateConfigurationProfile
+-- 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 configuration profile, which is information that enables
+-- AppConfig to access the configuration source. Valid configuration
+-- sources include the AppConfig hosted configuration store, Amazon Web
+-- Services Systems Manager (SSM) documents, SSM Parameter Store
+-- parameters, Amazon S3 objects, or any
+-- <http://docs.aws.amazon.com/codepipeline/latest/userguide/integrations-action-type.html#integrations-source integration source action>
+-- supported by CodePipeline. A configuration profile includes the
+-- following information:
+--
+-- -   The URI location of the configuration data.
+--
+-- -   The Identity and Access Management (IAM) role that provides access
+--     to the configuration data.
+--
+-- -   A validator for the configuration data. Available validators include
+--     either a JSON Schema or an Amazon Web Services Lambda function.
+--
+-- For more information, see
+-- <http://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-configuration-and-profile.html Create a Configuration and a Configuration Profile>
+-- in the /AppConfig User Guide/.
+module Amazonka.AppConfig.CreateConfigurationProfile
+  ( -- * Creating a Request
+    CreateConfigurationProfile (..),
+    newCreateConfigurationProfile,
+
+    -- * Request Lenses
+    createConfigurationProfile_description,
+    createConfigurationProfile_retrievalRoleArn,
+    createConfigurationProfile_tags,
+    createConfigurationProfile_type,
+    createConfigurationProfile_validators,
+    createConfigurationProfile_applicationId,
+    createConfigurationProfile_name,
+    createConfigurationProfile_locationUri,
+
+    -- * Destructuring the Response
+    ConfigurationProfile (..),
+    newConfigurationProfile,
+
+    -- * Response Lenses
+    configurationProfile_applicationId,
+    configurationProfile_description,
+    configurationProfile_id,
+    configurationProfile_locationUri,
+    configurationProfile_name,
+    configurationProfile_retrievalRoleArn,
+    configurationProfile_type,
+    configurationProfile_validators,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateConfigurationProfile' smart constructor.
+data CreateConfigurationProfile = CreateConfigurationProfile'
+  { -- | A description of the configuration profile.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of an IAM role with permission to access the configuration at
+    -- the specified @LocationUri@.
+    --
+    -- A retrieval role ARN is not required for configurations stored in the
+    -- AppConfig hosted configuration store. It is required for all other
+    -- sources that store your configuration.
+    retrievalRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | Metadata to assign to the configuration profile. Tags help organize and
+    -- categorize your AppConfig resources. Each tag consists of a key and an
+    -- optional value, both of which you define.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The type of configurations contained in the profile. AppConfig supports
+    -- @feature flags@ and @freeform@ configurations. We recommend you create
+    -- feature flag configurations to enable or disable new features and
+    -- freeform configurations to distribute configurations to an application.
+    -- When calling this API, enter one of the following values for @Type@:
+    --
+    -- @AWS.AppConfig.FeatureFlags@
+    --
+    -- @AWS.Freeform@
+    type' :: Prelude.Maybe Prelude.Text,
+    -- | A list of methods for validating the configuration.
+    validators :: Prelude.Maybe [Validator],
+    -- | The application ID.
+    applicationId :: Prelude.Text,
+    -- | A name for the configuration profile.
+    name :: Prelude.Text,
+    -- | A URI to locate the configuration. You can specify the AppConfig hosted
+    -- configuration store, Systems Manager (SSM) document, an SSM Parameter
+    -- Store parameter, or an Amazon S3 object. For the hosted configuration
+    -- store and for feature flags, specify @hosted@. For an SSM document,
+    -- specify either the document name in the format
+    -- @ssm-document:\/\/\<Document_name>@ or the Amazon Resource Name (ARN).
+    -- For a parameter, specify either the parameter name in the format
+    -- @ssm-parameter:\/\/\<Parameter_name>@ or the ARN. For an Amazon S3
+    -- object, specify the URI in the following format:
+    -- @s3:\/\/\<bucket>\/\<objectKey> @. Here is an example:
+    -- @s3:\/\/my-bucket\/my-app\/us-east-1\/my-config.json@
+    locationUri :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateConfigurationProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createConfigurationProfile_description' - A description of the configuration profile.
+--
+-- 'retrievalRoleArn', 'createConfigurationProfile_retrievalRoleArn' - The ARN of an IAM role with permission to access the configuration at
+-- the specified @LocationUri@.
+--
+-- A retrieval role ARN is not required for configurations stored in the
+-- AppConfig hosted configuration store. It is required for all other
+-- sources that store your configuration.
+--
+-- 'tags', 'createConfigurationProfile_tags' - Metadata to assign to the configuration profile. Tags help organize and
+-- categorize your AppConfig resources. Each tag consists of a key and an
+-- optional value, both of which you define.
+--
+-- 'type'', 'createConfigurationProfile_type' - The type of configurations contained in the profile. AppConfig supports
+-- @feature flags@ and @freeform@ configurations. We recommend you create
+-- feature flag configurations to enable or disable new features and
+-- freeform configurations to distribute configurations to an application.
+-- When calling this API, enter one of the following values for @Type@:
+--
+-- @AWS.AppConfig.FeatureFlags@
+--
+-- @AWS.Freeform@
+--
+-- 'validators', 'createConfigurationProfile_validators' - A list of methods for validating the configuration.
+--
+-- 'applicationId', 'createConfigurationProfile_applicationId' - The application ID.
+--
+-- 'name', 'createConfigurationProfile_name' - A name for the configuration profile.
+--
+-- 'locationUri', 'createConfigurationProfile_locationUri' - A URI to locate the configuration. You can specify the AppConfig hosted
+-- configuration store, Systems Manager (SSM) document, an SSM Parameter
+-- Store parameter, or an Amazon S3 object. For the hosted configuration
+-- store and for feature flags, specify @hosted@. For an SSM document,
+-- specify either the document name in the format
+-- @ssm-document:\/\/\<Document_name>@ or the Amazon Resource Name (ARN).
+-- For a parameter, specify either the parameter name in the format
+-- @ssm-parameter:\/\/\<Parameter_name>@ or the ARN. For an Amazon S3
+-- object, specify the URI in the following format:
+-- @s3:\/\/\<bucket>\/\<objectKey> @. Here is an example:
+-- @s3:\/\/my-bucket\/my-app\/us-east-1\/my-config.json@
+newCreateConfigurationProfile ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'locationUri'
+  Prelude.Text ->
+  CreateConfigurationProfile
+newCreateConfigurationProfile
+  pApplicationId_
+  pName_
+  pLocationUri_ =
+    CreateConfigurationProfile'
+      { description =
+          Prelude.Nothing,
+        retrievalRoleArn = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        type' = Prelude.Nothing,
+        validators = Prelude.Nothing,
+        applicationId = pApplicationId_,
+        name = pName_,
+        locationUri = pLocationUri_
+      }
+
+-- | A description of the configuration profile.
+createConfigurationProfile_description :: Lens.Lens' CreateConfigurationProfile (Prelude.Maybe Prelude.Text)
+createConfigurationProfile_description = Lens.lens (\CreateConfigurationProfile' {description} -> description) (\s@CreateConfigurationProfile' {} a -> s {description = a} :: CreateConfigurationProfile)
+
+-- | The ARN of an IAM role with permission to access the configuration at
+-- the specified @LocationUri@.
+--
+-- A retrieval role ARN is not required for configurations stored in the
+-- AppConfig hosted configuration store. It is required for all other
+-- sources that store your configuration.
+createConfigurationProfile_retrievalRoleArn :: Lens.Lens' CreateConfigurationProfile (Prelude.Maybe Prelude.Text)
+createConfigurationProfile_retrievalRoleArn = Lens.lens (\CreateConfigurationProfile' {retrievalRoleArn} -> retrievalRoleArn) (\s@CreateConfigurationProfile' {} a -> s {retrievalRoleArn = a} :: CreateConfigurationProfile)
+
+-- | Metadata to assign to the configuration profile. Tags help organize and
+-- categorize your AppConfig resources. Each tag consists of a key and an
+-- optional value, both of which you define.
+createConfigurationProfile_tags :: Lens.Lens' CreateConfigurationProfile (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createConfigurationProfile_tags = Lens.lens (\CreateConfigurationProfile' {tags} -> tags) (\s@CreateConfigurationProfile' {} a -> s {tags = a} :: CreateConfigurationProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of configurations contained in the profile. AppConfig supports
+-- @feature flags@ and @freeform@ configurations. We recommend you create
+-- feature flag configurations to enable or disable new features and
+-- freeform configurations to distribute configurations to an application.
+-- When calling this API, enter one of the following values for @Type@:
+--
+-- @AWS.AppConfig.FeatureFlags@
+--
+-- @AWS.Freeform@
+createConfigurationProfile_type :: Lens.Lens' CreateConfigurationProfile (Prelude.Maybe Prelude.Text)
+createConfigurationProfile_type = Lens.lens (\CreateConfigurationProfile' {type'} -> type') (\s@CreateConfigurationProfile' {} a -> s {type' = a} :: CreateConfigurationProfile)
+
+-- | A list of methods for validating the configuration.
+createConfigurationProfile_validators :: Lens.Lens' CreateConfigurationProfile (Prelude.Maybe [Validator])
+createConfigurationProfile_validators = Lens.lens (\CreateConfigurationProfile' {validators} -> validators) (\s@CreateConfigurationProfile' {} a -> s {validators = a} :: CreateConfigurationProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The application ID.
+createConfigurationProfile_applicationId :: Lens.Lens' CreateConfigurationProfile Prelude.Text
+createConfigurationProfile_applicationId = Lens.lens (\CreateConfigurationProfile' {applicationId} -> applicationId) (\s@CreateConfigurationProfile' {} a -> s {applicationId = a} :: CreateConfigurationProfile)
+
+-- | A name for the configuration profile.
+createConfigurationProfile_name :: Lens.Lens' CreateConfigurationProfile Prelude.Text
+createConfigurationProfile_name = Lens.lens (\CreateConfigurationProfile' {name} -> name) (\s@CreateConfigurationProfile' {} a -> s {name = a} :: CreateConfigurationProfile)
+
+-- | A URI to locate the configuration. You can specify the AppConfig hosted
+-- configuration store, Systems Manager (SSM) document, an SSM Parameter
+-- Store parameter, or an Amazon S3 object. For the hosted configuration
+-- store and for feature flags, specify @hosted@. For an SSM document,
+-- specify either the document name in the format
+-- @ssm-document:\/\/\<Document_name>@ or the Amazon Resource Name (ARN).
+-- For a parameter, specify either the parameter name in the format
+-- @ssm-parameter:\/\/\<Parameter_name>@ or the ARN. For an Amazon S3
+-- object, specify the URI in the following format:
+-- @s3:\/\/\<bucket>\/\<objectKey> @. Here is an example:
+-- @s3:\/\/my-bucket\/my-app\/us-east-1\/my-config.json@
+createConfigurationProfile_locationUri :: Lens.Lens' CreateConfigurationProfile Prelude.Text
+createConfigurationProfile_locationUri = Lens.lens (\CreateConfigurationProfile' {locationUri} -> locationUri) (\s@CreateConfigurationProfile' {} a -> s {locationUri = a} :: CreateConfigurationProfile)
+
+instance Core.AWSRequest CreateConfigurationProfile where
+  type
+    AWSResponse CreateConfigurationProfile =
+      ConfigurationProfile
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable CreateConfigurationProfile where
+  hashWithSalt _salt CreateConfigurationProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` retrievalRoleArn
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` validators
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` locationUri
+
+instance Prelude.NFData CreateConfigurationProfile where
+  rnf CreateConfigurationProfile' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf retrievalRoleArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf validators
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf locationUri
+
+instance Data.ToHeaders CreateConfigurationProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateConfigurationProfile where
+  toJSON CreateConfigurationProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("RetrievalRoleArn" Data..=)
+              Prelude.<$> retrievalRoleArn,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("Type" Data..=) Prelude.<$> type',
+            ("Validators" Data..=) Prelude.<$> validators,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("LocationUri" Data..= locationUri)
+          ]
+      )
+
+instance Data.ToPath CreateConfigurationProfile where
+  toPath CreateConfigurationProfile' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/configurationprofiles"
+      ]
+
+instance Data.ToQuery CreateConfigurationProfile where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/CreateDeploymentStrategy.hs b/gen/Amazonka/AppConfig/CreateDeploymentStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/CreateDeploymentStrategy.hs
@@ -0,0 +1,343 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.CreateDeploymentStrategy
+-- 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 deployment strategy that defines important criteria for
+-- rolling out your configuration to the designated targets. A deployment
+-- strategy includes the overall duration required, a percentage of targets
+-- to receive the deployment during each interval, an algorithm that
+-- defines how percentage grows, and bake time.
+module Amazonka.AppConfig.CreateDeploymentStrategy
+  ( -- * Creating a Request
+    CreateDeploymentStrategy (..),
+    newCreateDeploymentStrategy,
+
+    -- * Request Lenses
+    createDeploymentStrategy_description,
+    createDeploymentStrategy_finalBakeTimeInMinutes,
+    createDeploymentStrategy_growthType,
+    createDeploymentStrategy_replicateTo,
+    createDeploymentStrategy_tags,
+    createDeploymentStrategy_name,
+    createDeploymentStrategy_deploymentDurationInMinutes,
+    createDeploymentStrategy_growthFactor,
+
+    -- * Destructuring the Response
+    DeploymentStrategy (..),
+    newDeploymentStrategy,
+
+    -- * Response Lenses
+    deploymentStrategy_deploymentDurationInMinutes,
+    deploymentStrategy_description,
+    deploymentStrategy_finalBakeTimeInMinutes,
+    deploymentStrategy_growthFactor,
+    deploymentStrategy_growthType,
+    deploymentStrategy_id,
+    deploymentStrategy_name,
+    deploymentStrategy_replicateTo,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDeploymentStrategy' smart constructor.
+data CreateDeploymentStrategy = CreateDeploymentStrategy'
+  { -- | A description of the deployment strategy.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the amount of time AppConfig monitors for Amazon CloudWatch
+    -- alarms after the configuration has been deployed to 100% of its targets,
+    -- before considering the deployment to be complete. If an alarm is
+    -- triggered during this time, AppConfig rolls back the deployment. You
+    -- must configure permissions for AppConfig to roll back based on
+    -- CloudWatch alarms. For more information, see
+    -- <https://docs.aws.amazon.com/appconfig/latest/userguide/getting-started-with-appconfig-cloudwatch-alarms-permissions.html Configuring permissions for rollback based on Amazon CloudWatch alarms>
+    -- in the /AppConfig User Guide/.
+    finalBakeTimeInMinutes :: Prelude.Maybe Prelude.Natural,
+    -- | The algorithm used to define how percentage grows over time. AppConfig
+    -- supports the following growth types:
+    --
+    -- __Linear__: For this type, AppConfig processes the deployment by
+    -- dividing the total number of targets by the value specified for
+    -- @Step percentage@. For example, a linear deployment that uses a
+    -- @Step percentage@ of 10 deploys the configuration to 10 percent of the
+    -- hosts. After those deployments are complete, the system deploys the
+    -- configuration to the next 10 percent. This continues until 100% of the
+    -- targets have successfully received the configuration.
+    --
+    -- __Exponential__: For this type, AppConfig processes the deployment
+    -- exponentially using the following formula: @G*(2^N)@. In this formula,
+    -- @G@ is the growth factor specified by the user and @N@ is the number of
+    -- steps until the configuration is deployed to all targets. For example,
+    -- if you specify a growth factor of 2, then the system rolls out the
+    -- configuration as follows:
+    --
+    -- @2*(2^0)@
+    --
+    -- @2*(2^1)@
+    --
+    -- @2*(2^2)@
+    --
+    -- Expressed numerically, the deployment rolls out as follows: 2% of the
+    -- targets, 4% of the targets, 8% of the targets, and continues until the
+    -- configuration has been deployed to all targets.
+    growthType :: Prelude.Maybe GrowthType,
+    -- | Save the deployment strategy to a Systems Manager (SSM) document.
+    replicateTo :: Prelude.Maybe ReplicateTo,
+    -- | Metadata to assign to the deployment strategy. Tags help organize and
+    -- categorize your AppConfig resources. Each tag consists of a key and an
+    -- optional value, both of which you define.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A name for the deployment strategy.
+    name :: Prelude.Text,
+    -- | Total amount of time for a deployment to last.
+    deploymentDurationInMinutes :: Prelude.Natural,
+    -- | The percentage of targets to receive a deployed configuration during
+    -- each interval.
+    growthFactor :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDeploymentStrategy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createDeploymentStrategy_description' - A description of the deployment strategy.
+--
+-- 'finalBakeTimeInMinutes', 'createDeploymentStrategy_finalBakeTimeInMinutes' - Specifies the amount of time AppConfig monitors for Amazon CloudWatch
+-- alarms after the configuration has been deployed to 100% of its targets,
+-- before considering the deployment to be complete. If an alarm is
+-- triggered during this time, AppConfig rolls back the deployment. You
+-- must configure permissions for AppConfig to roll back based on
+-- CloudWatch alarms. For more information, see
+-- <https://docs.aws.amazon.com/appconfig/latest/userguide/getting-started-with-appconfig-cloudwatch-alarms-permissions.html Configuring permissions for rollback based on Amazon CloudWatch alarms>
+-- in the /AppConfig User Guide/.
+--
+-- 'growthType', 'createDeploymentStrategy_growthType' - The algorithm used to define how percentage grows over time. AppConfig
+-- supports the following growth types:
+--
+-- __Linear__: For this type, AppConfig processes the deployment by
+-- dividing the total number of targets by the value specified for
+-- @Step percentage@. For example, a linear deployment that uses a
+-- @Step percentage@ of 10 deploys the configuration to 10 percent of the
+-- hosts. After those deployments are complete, the system deploys the
+-- configuration to the next 10 percent. This continues until 100% of the
+-- targets have successfully received the configuration.
+--
+-- __Exponential__: For this type, AppConfig processes the deployment
+-- exponentially using the following formula: @G*(2^N)@. In this formula,
+-- @G@ is the growth factor specified by the user and @N@ is the number of
+-- steps until the configuration is deployed to all targets. For example,
+-- if you specify a growth factor of 2, then the system rolls out the
+-- configuration as follows:
+--
+-- @2*(2^0)@
+--
+-- @2*(2^1)@
+--
+-- @2*(2^2)@
+--
+-- Expressed numerically, the deployment rolls out as follows: 2% of the
+-- targets, 4% of the targets, 8% of the targets, and continues until the
+-- configuration has been deployed to all targets.
+--
+-- 'replicateTo', 'createDeploymentStrategy_replicateTo' - Save the deployment strategy to a Systems Manager (SSM) document.
+--
+-- 'tags', 'createDeploymentStrategy_tags' - Metadata to assign to the deployment strategy. Tags help organize and
+-- categorize your AppConfig resources. Each tag consists of a key and an
+-- optional value, both of which you define.
+--
+-- 'name', 'createDeploymentStrategy_name' - A name for the deployment strategy.
+--
+-- 'deploymentDurationInMinutes', 'createDeploymentStrategy_deploymentDurationInMinutes' - Total amount of time for a deployment to last.
+--
+-- 'growthFactor', 'createDeploymentStrategy_growthFactor' - The percentage of targets to receive a deployed configuration during
+-- each interval.
+newCreateDeploymentStrategy ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'deploymentDurationInMinutes'
+  Prelude.Natural ->
+  -- | 'growthFactor'
+  Prelude.Double ->
+  CreateDeploymentStrategy
+newCreateDeploymentStrategy
+  pName_
+  pDeploymentDurationInMinutes_
+  pGrowthFactor_ =
+    CreateDeploymentStrategy'
+      { description =
+          Prelude.Nothing,
+        finalBakeTimeInMinutes = Prelude.Nothing,
+        growthType = Prelude.Nothing,
+        replicateTo = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        name = pName_,
+        deploymentDurationInMinutes =
+          pDeploymentDurationInMinutes_,
+        growthFactor = pGrowthFactor_
+      }
+
+-- | A description of the deployment strategy.
+createDeploymentStrategy_description :: Lens.Lens' CreateDeploymentStrategy (Prelude.Maybe Prelude.Text)
+createDeploymentStrategy_description = Lens.lens (\CreateDeploymentStrategy' {description} -> description) (\s@CreateDeploymentStrategy' {} a -> s {description = a} :: CreateDeploymentStrategy)
+
+-- | Specifies the amount of time AppConfig monitors for Amazon CloudWatch
+-- alarms after the configuration has been deployed to 100% of its targets,
+-- before considering the deployment to be complete. If an alarm is
+-- triggered during this time, AppConfig rolls back the deployment. You
+-- must configure permissions for AppConfig to roll back based on
+-- CloudWatch alarms. For more information, see
+-- <https://docs.aws.amazon.com/appconfig/latest/userguide/getting-started-with-appconfig-cloudwatch-alarms-permissions.html Configuring permissions for rollback based on Amazon CloudWatch alarms>
+-- in the /AppConfig User Guide/.
+createDeploymentStrategy_finalBakeTimeInMinutes :: Lens.Lens' CreateDeploymentStrategy (Prelude.Maybe Prelude.Natural)
+createDeploymentStrategy_finalBakeTimeInMinutes = Lens.lens (\CreateDeploymentStrategy' {finalBakeTimeInMinutes} -> finalBakeTimeInMinutes) (\s@CreateDeploymentStrategy' {} a -> s {finalBakeTimeInMinutes = a} :: CreateDeploymentStrategy)
+
+-- | The algorithm used to define how percentage grows over time. AppConfig
+-- supports the following growth types:
+--
+-- __Linear__: For this type, AppConfig processes the deployment by
+-- dividing the total number of targets by the value specified for
+-- @Step percentage@. For example, a linear deployment that uses a
+-- @Step percentage@ of 10 deploys the configuration to 10 percent of the
+-- hosts. After those deployments are complete, the system deploys the
+-- configuration to the next 10 percent. This continues until 100% of the
+-- targets have successfully received the configuration.
+--
+-- __Exponential__: For this type, AppConfig processes the deployment
+-- exponentially using the following formula: @G*(2^N)@. In this formula,
+-- @G@ is the growth factor specified by the user and @N@ is the number of
+-- steps until the configuration is deployed to all targets. For example,
+-- if you specify a growth factor of 2, then the system rolls out the
+-- configuration as follows:
+--
+-- @2*(2^0)@
+--
+-- @2*(2^1)@
+--
+-- @2*(2^2)@
+--
+-- Expressed numerically, the deployment rolls out as follows: 2% of the
+-- targets, 4% of the targets, 8% of the targets, and continues until the
+-- configuration has been deployed to all targets.
+createDeploymentStrategy_growthType :: Lens.Lens' CreateDeploymentStrategy (Prelude.Maybe GrowthType)
+createDeploymentStrategy_growthType = Lens.lens (\CreateDeploymentStrategy' {growthType} -> growthType) (\s@CreateDeploymentStrategy' {} a -> s {growthType = a} :: CreateDeploymentStrategy)
+
+-- | Save the deployment strategy to a Systems Manager (SSM) document.
+createDeploymentStrategy_replicateTo :: Lens.Lens' CreateDeploymentStrategy (Prelude.Maybe ReplicateTo)
+createDeploymentStrategy_replicateTo = Lens.lens (\CreateDeploymentStrategy' {replicateTo} -> replicateTo) (\s@CreateDeploymentStrategy' {} a -> s {replicateTo = a} :: CreateDeploymentStrategy)
+
+-- | Metadata to assign to the deployment strategy. Tags help organize and
+-- categorize your AppConfig resources. Each tag consists of a key and an
+-- optional value, both of which you define.
+createDeploymentStrategy_tags :: Lens.Lens' CreateDeploymentStrategy (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createDeploymentStrategy_tags = Lens.lens (\CreateDeploymentStrategy' {tags} -> tags) (\s@CreateDeploymentStrategy' {} a -> s {tags = a} :: CreateDeploymentStrategy) Prelude.. Lens.mapping Lens.coerced
+
+-- | A name for the deployment strategy.
+createDeploymentStrategy_name :: Lens.Lens' CreateDeploymentStrategy Prelude.Text
+createDeploymentStrategy_name = Lens.lens (\CreateDeploymentStrategy' {name} -> name) (\s@CreateDeploymentStrategy' {} a -> s {name = a} :: CreateDeploymentStrategy)
+
+-- | Total amount of time for a deployment to last.
+createDeploymentStrategy_deploymentDurationInMinutes :: Lens.Lens' CreateDeploymentStrategy Prelude.Natural
+createDeploymentStrategy_deploymentDurationInMinutes = Lens.lens (\CreateDeploymentStrategy' {deploymentDurationInMinutes} -> deploymentDurationInMinutes) (\s@CreateDeploymentStrategy' {} a -> s {deploymentDurationInMinutes = a} :: CreateDeploymentStrategy)
+
+-- | The percentage of targets to receive a deployed configuration during
+-- each interval.
+createDeploymentStrategy_growthFactor :: Lens.Lens' CreateDeploymentStrategy Prelude.Double
+createDeploymentStrategy_growthFactor = Lens.lens (\CreateDeploymentStrategy' {growthFactor} -> growthFactor) (\s@CreateDeploymentStrategy' {} a -> s {growthFactor = a} :: CreateDeploymentStrategy)
+
+instance Core.AWSRequest CreateDeploymentStrategy where
+  type
+    AWSResponse CreateDeploymentStrategy =
+      DeploymentStrategy
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable CreateDeploymentStrategy where
+  hashWithSalt _salt CreateDeploymentStrategy' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` finalBakeTimeInMinutes
+      `Prelude.hashWithSalt` growthType
+      `Prelude.hashWithSalt` replicateTo
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` deploymentDurationInMinutes
+      `Prelude.hashWithSalt` growthFactor
+
+instance Prelude.NFData CreateDeploymentStrategy where
+  rnf CreateDeploymentStrategy' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf finalBakeTimeInMinutes
+      `Prelude.seq` Prelude.rnf growthType
+      `Prelude.seq` Prelude.rnf replicateTo
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf deploymentDurationInMinutes
+      `Prelude.seq` Prelude.rnf growthFactor
+
+instance Data.ToHeaders CreateDeploymentStrategy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDeploymentStrategy where
+  toJSON CreateDeploymentStrategy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("FinalBakeTimeInMinutes" Data..=)
+              Prelude.<$> finalBakeTimeInMinutes,
+            ("GrowthType" Data..=) Prelude.<$> growthType,
+            ("ReplicateTo" Data..=) Prelude.<$> replicateTo,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just
+              ( "DeploymentDurationInMinutes"
+                  Data..= deploymentDurationInMinutes
+              ),
+            Prelude.Just ("GrowthFactor" Data..= growthFactor)
+          ]
+      )
+
+instance Data.ToPath CreateDeploymentStrategy where
+  toPath = Prelude.const "/deploymentstrategies"
+
+instance Data.ToQuery CreateDeploymentStrategy where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/CreateEnvironment.hs b/gen/Amazonka/AppConfig/CreateEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/CreateEnvironment.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.CreateEnvironment
+-- 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 environment. For each application, you define one or more
+-- environments. An environment is a deployment group of AppConfig targets,
+-- such as applications in a @Beta@ or @Production@ environment. You can
+-- also define environments for application subcomponents such as the
+-- @Web@, @Mobile@ and @Back-end@ components for your application. You can
+-- configure Amazon CloudWatch alarms for each environment. The system
+-- monitors alarms during a configuration deployment. If an alarm is
+-- triggered, the system rolls back the configuration.
+module Amazonka.AppConfig.CreateEnvironment
+  ( -- * Creating a Request
+    CreateEnvironment (..),
+    newCreateEnvironment,
+
+    -- * Request Lenses
+    createEnvironment_description,
+    createEnvironment_monitors,
+    createEnvironment_tags,
+    createEnvironment_applicationId,
+    createEnvironment_name,
+
+    -- * Destructuring the Response
+    Environment (..),
+    newEnvironment,
+
+    -- * Response Lenses
+    environment_applicationId,
+    environment_description,
+    environment_id,
+    environment_monitors,
+    environment_name,
+    environment_state,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateEnvironment' smart constructor.
+data CreateEnvironment = CreateEnvironment'
+  { -- | A description of the environment.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Amazon CloudWatch alarms to monitor during the deployment process.
+    monitors :: Prelude.Maybe [Monitor],
+    -- | Metadata to assign to the environment. Tags help organize and categorize
+    -- your AppConfig resources. Each tag consists of a key and an optional
+    -- value, both of which you define.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The application ID.
+    applicationId :: Prelude.Text,
+    -- | A name for the environment.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEnvironment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createEnvironment_description' - A description of the environment.
+--
+-- 'monitors', 'createEnvironment_monitors' - Amazon CloudWatch alarms to monitor during the deployment process.
+--
+-- 'tags', 'createEnvironment_tags' - Metadata to assign to the environment. Tags help organize and categorize
+-- your AppConfig resources. Each tag consists of a key and an optional
+-- value, both of which you define.
+--
+-- 'applicationId', 'createEnvironment_applicationId' - The application ID.
+--
+-- 'name', 'createEnvironment_name' - A name for the environment.
+newCreateEnvironment ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateEnvironment
+newCreateEnvironment pApplicationId_ pName_ =
+  CreateEnvironment'
+    { description = Prelude.Nothing,
+      monitors = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      applicationId = pApplicationId_,
+      name = pName_
+    }
+
+-- | A description of the environment.
+createEnvironment_description :: Lens.Lens' CreateEnvironment (Prelude.Maybe Prelude.Text)
+createEnvironment_description = Lens.lens (\CreateEnvironment' {description} -> description) (\s@CreateEnvironment' {} a -> s {description = a} :: CreateEnvironment)
+
+-- | Amazon CloudWatch alarms to monitor during the deployment process.
+createEnvironment_monitors :: Lens.Lens' CreateEnvironment (Prelude.Maybe [Monitor])
+createEnvironment_monitors = Lens.lens (\CreateEnvironment' {monitors} -> monitors) (\s@CreateEnvironment' {} a -> s {monitors = a} :: CreateEnvironment) Prelude.. Lens.mapping Lens.coerced
+
+-- | Metadata to assign to the environment. Tags help organize and categorize
+-- your AppConfig resources. Each tag consists of a key and an optional
+-- value, both of which you define.
+createEnvironment_tags :: Lens.Lens' CreateEnvironment (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createEnvironment_tags = Lens.lens (\CreateEnvironment' {tags} -> tags) (\s@CreateEnvironment' {} a -> s {tags = a} :: CreateEnvironment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The application ID.
+createEnvironment_applicationId :: Lens.Lens' CreateEnvironment Prelude.Text
+createEnvironment_applicationId = Lens.lens (\CreateEnvironment' {applicationId} -> applicationId) (\s@CreateEnvironment' {} a -> s {applicationId = a} :: CreateEnvironment)
+
+-- | A name for the environment.
+createEnvironment_name :: Lens.Lens' CreateEnvironment Prelude.Text
+createEnvironment_name = Lens.lens (\CreateEnvironment' {name} -> name) (\s@CreateEnvironment' {} a -> s {name = a} :: CreateEnvironment)
+
+instance Core.AWSRequest CreateEnvironment where
+  type AWSResponse CreateEnvironment = Environment
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable CreateEnvironment where
+  hashWithSalt _salt CreateEnvironment' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` monitors
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateEnvironment where
+  rnf CreateEnvironment' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf monitors
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateEnvironment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateEnvironment where
+  toJSON CreateEnvironment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Monitors" Data..=) Prelude.<$> monitors,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateEnvironment where
+  toPath CreateEnvironment' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/environments"
+      ]
+
+instance Data.ToQuery CreateEnvironment where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/CreateExtension.hs b/gen/Amazonka/AppConfig/CreateExtension.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/CreateExtension.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.AppConfig.CreateExtension
+-- 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 AppConfig extension. An extension augments your ability to
+-- inject logic or behavior at different points during the AppConfig
+-- workflow of creating or deploying a configuration.
+--
+-- You can create your own extensions or use the Amazon Web
+-- Services-authored extensions provided by AppConfig. For most use-cases,
+-- to create your own extension, you must create an Lambda function to
+-- perform any computation and processing defined in the extension. For
+-- more information about extensions, see
+-- <https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html Working with AppConfig extensions>
+-- in the /AppConfig User Guide/.
+module Amazonka.AppConfig.CreateExtension
+  ( -- * Creating a Request
+    CreateExtension (..),
+    newCreateExtension,
+
+    -- * Request Lenses
+    createExtension_description,
+    createExtension_latestVersionNumber,
+    createExtension_parameters,
+    createExtension_tags,
+    createExtension_name,
+    createExtension_actions,
+
+    -- * Destructuring the Response
+    Extension (..),
+    newExtension,
+
+    -- * Response Lenses
+    extension_actions,
+    extension_arn,
+    extension_description,
+    extension_id,
+    extension_name,
+    extension_parameters,
+    extension_versionNumber,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateExtension' smart constructor.
+data CreateExtension = CreateExtension'
+  { -- | Information about the extension.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | You can omit this field when you create an extension. When you create a
+    -- new version, specify the most recent current version number. For
+    -- example, you create version 3, enter 2 for this field.
+    latestVersionNumber :: Prelude.Maybe Prelude.Int,
+    -- | The parameters accepted by the extension. You specify parameter values
+    -- when you associate the extension to an AppConfig resource by using the
+    -- @CreateExtensionAssociation@ API action. For Lambda extension actions,
+    -- these parameters are included in the Lambda request object.
+    parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Parameter),
+    -- | Adds one or more tags for the specified extension. Tags are metadata
+    -- that help you categorize resources in different ways, for example, by
+    -- purpose, owner, or environment. Each tag consists of a key and an
+    -- optional value, both of which you define.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A name for the extension. Each extension name in your account must be
+    -- unique. Extension versions use the same name.
+    name :: Prelude.Text,
+    -- | The actions defined in the extension.
+    actions :: Prelude.HashMap ActionPoint (Prelude.NonEmpty Action)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateExtension' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createExtension_description' - Information about the extension.
+--
+-- 'latestVersionNumber', 'createExtension_latestVersionNumber' - You can omit this field when you create an extension. When you create a
+-- new version, specify the most recent current version number. For
+-- example, you create version 3, enter 2 for this field.
+--
+-- 'parameters', 'createExtension_parameters' - The parameters accepted by the extension. You specify parameter values
+-- when you associate the extension to an AppConfig resource by using the
+-- @CreateExtensionAssociation@ API action. For Lambda extension actions,
+-- these parameters are included in the Lambda request object.
+--
+-- 'tags', 'createExtension_tags' - Adds one or more tags for the specified extension. Tags are metadata
+-- that help you categorize resources in different ways, for example, by
+-- purpose, owner, or environment. Each tag consists of a key and an
+-- optional value, both of which you define.
+--
+-- 'name', 'createExtension_name' - A name for the extension. Each extension name in your account must be
+-- unique. Extension versions use the same name.
+--
+-- 'actions', 'createExtension_actions' - The actions defined in the extension.
+newCreateExtension ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateExtension
+newCreateExtension pName_ =
+  CreateExtension'
+    { description = Prelude.Nothing,
+      latestVersionNumber = Prelude.Nothing,
+      parameters = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      actions = Prelude.mempty
+    }
+
+-- | Information about the extension.
+createExtension_description :: Lens.Lens' CreateExtension (Prelude.Maybe Prelude.Text)
+createExtension_description = Lens.lens (\CreateExtension' {description} -> description) (\s@CreateExtension' {} a -> s {description = a} :: CreateExtension)
+
+-- | You can omit this field when you create an extension. When you create a
+-- new version, specify the most recent current version number. For
+-- example, you create version 3, enter 2 for this field.
+createExtension_latestVersionNumber :: Lens.Lens' CreateExtension (Prelude.Maybe Prelude.Int)
+createExtension_latestVersionNumber = Lens.lens (\CreateExtension' {latestVersionNumber} -> latestVersionNumber) (\s@CreateExtension' {} a -> s {latestVersionNumber = a} :: CreateExtension)
+
+-- | The parameters accepted by the extension. You specify parameter values
+-- when you associate the extension to an AppConfig resource by using the
+-- @CreateExtensionAssociation@ API action. For Lambda extension actions,
+-- these parameters are included in the Lambda request object.
+createExtension_parameters :: Lens.Lens' CreateExtension (Prelude.Maybe (Prelude.HashMap Prelude.Text Parameter))
+createExtension_parameters = Lens.lens (\CreateExtension' {parameters} -> parameters) (\s@CreateExtension' {} a -> s {parameters = a} :: CreateExtension) Prelude.. Lens.mapping Lens.coerced
+
+-- | Adds one or more tags for the specified extension. Tags are metadata
+-- that help you categorize resources in different ways, for example, by
+-- purpose, owner, or environment. Each tag consists of a key and an
+-- optional value, both of which you define.
+createExtension_tags :: Lens.Lens' CreateExtension (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createExtension_tags = Lens.lens (\CreateExtension' {tags} -> tags) (\s@CreateExtension' {} a -> s {tags = a} :: CreateExtension) Prelude.. Lens.mapping Lens.coerced
+
+-- | A name for the extension. Each extension name in your account must be
+-- unique. Extension versions use the same name.
+createExtension_name :: Lens.Lens' CreateExtension Prelude.Text
+createExtension_name = Lens.lens (\CreateExtension' {name} -> name) (\s@CreateExtension' {} a -> s {name = a} :: CreateExtension)
+
+-- | The actions defined in the extension.
+createExtension_actions :: Lens.Lens' CreateExtension (Prelude.HashMap ActionPoint (Prelude.NonEmpty Action))
+createExtension_actions = Lens.lens (\CreateExtension' {actions} -> actions) (\s@CreateExtension' {} a -> s {actions = a} :: CreateExtension) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateExtension where
+  type AWSResponse CreateExtension = Extension
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable CreateExtension where
+  hashWithSalt _salt CreateExtension' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` latestVersionNumber
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` actions
+
+instance Prelude.NFData CreateExtension where
+  rnf CreateExtension' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf latestVersionNumber
+      `Prelude.seq` Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf actions
+
+instance Data.ToHeaders CreateExtension where
+  toHeaders CreateExtension' {..} =
+    Prelude.mconcat
+      [ "Latest-Version-Number" Data.=# latestVersionNumber,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON CreateExtension where
+  toJSON CreateExtension' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Parameters" Data..=) Prelude.<$> parameters,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Actions" Data..= actions)
+          ]
+      )
+
+instance Data.ToPath CreateExtension where
+  toPath = Prelude.const "/extensions"
+
+instance Data.ToQuery CreateExtension where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/CreateExtensionAssociation.hs b/gen/Amazonka/AppConfig/CreateExtensionAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/CreateExtensionAssociation.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.CreateExtensionAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- When you create an extension or configure an Amazon Web
+-- Services-authored extension, you associate the extension with an
+-- AppConfig application, environment, or configuration profile. For
+-- example, you can choose to run the
+-- @AppConfig deployment events to Amazon SNS@ Amazon Web Services-authored
+-- extension and receive notifications on an Amazon SNS topic anytime a
+-- configuration deployment is started for a specific application. Defining
+-- which extension to associate with an AppConfig resource is called an
+-- /extension association/. An extension association is a specified
+-- relationship between an extension and an AppConfig resource, such as an
+-- application or a configuration profile. For more information about
+-- extensions and associations, see
+-- <https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html Working with AppConfig extensions>
+-- in the /AppConfig User Guide/.
+module Amazonka.AppConfig.CreateExtensionAssociation
+  ( -- * Creating a Request
+    CreateExtensionAssociation (..),
+    newCreateExtensionAssociation,
+
+    -- * Request Lenses
+    createExtensionAssociation_extensionVersionNumber,
+    createExtensionAssociation_parameters,
+    createExtensionAssociation_tags,
+    createExtensionAssociation_extensionIdentifier,
+    createExtensionAssociation_resourceIdentifier,
+
+    -- * Destructuring the Response
+    ExtensionAssociation (..),
+    newExtensionAssociation,
+
+    -- * Response Lenses
+    extensionAssociation_arn,
+    extensionAssociation_extensionArn,
+    extensionAssociation_extensionVersionNumber,
+    extensionAssociation_id,
+    extensionAssociation_parameters,
+    extensionAssociation_resourceArn,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateExtensionAssociation' smart constructor.
+data CreateExtensionAssociation = CreateExtensionAssociation'
+  { -- | The version number of the extension. If not specified, AppConfig uses
+    -- the maximum version of the extension.
+    extensionVersionNumber :: Prelude.Maybe Prelude.Int,
+    -- | The parameter names and values defined in the extensions. Extension
+    -- parameters marked @Required@ must be entered for this field.
+    parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Adds one or more tags for the specified extension association. Tags are
+    -- metadata that help you categorize resources in different ways, for
+    -- example, by purpose, owner, or environment. Each tag consists of a key
+    -- and an optional value, both of which you define.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name, the ID, or the Amazon Resource Name (ARN) of the extension.
+    extensionIdentifier :: Prelude.Text,
+    -- | The ARN of an application, configuration profile, or environment.
+    resourceIdentifier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateExtensionAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'extensionVersionNumber', 'createExtensionAssociation_extensionVersionNumber' - The version number of the extension. If not specified, AppConfig uses
+-- the maximum version of the extension.
+--
+-- 'parameters', 'createExtensionAssociation_parameters' - The parameter names and values defined in the extensions. Extension
+-- parameters marked @Required@ must be entered for this field.
+--
+-- 'tags', 'createExtensionAssociation_tags' - Adds one or more tags for the specified extension association. Tags are
+-- metadata that help you categorize resources in different ways, for
+-- example, by purpose, owner, or environment. Each tag consists of a key
+-- and an optional value, both of which you define.
+--
+-- 'extensionIdentifier', 'createExtensionAssociation_extensionIdentifier' - The name, the ID, or the Amazon Resource Name (ARN) of the extension.
+--
+-- 'resourceIdentifier', 'createExtensionAssociation_resourceIdentifier' - The ARN of an application, configuration profile, or environment.
+newCreateExtensionAssociation ::
+  -- | 'extensionIdentifier'
+  Prelude.Text ->
+  -- | 'resourceIdentifier'
+  Prelude.Text ->
+  CreateExtensionAssociation
+newCreateExtensionAssociation
+  pExtensionIdentifier_
+  pResourceIdentifier_ =
+    CreateExtensionAssociation'
+      { extensionVersionNumber =
+          Prelude.Nothing,
+        parameters = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        extensionIdentifier = pExtensionIdentifier_,
+        resourceIdentifier = pResourceIdentifier_
+      }
+
+-- | The version number of the extension. If not specified, AppConfig uses
+-- the maximum version of the extension.
+createExtensionAssociation_extensionVersionNumber :: Lens.Lens' CreateExtensionAssociation (Prelude.Maybe Prelude.Int)
+createExtensionAssociation_extensionVersionNumber = Lens.lens (\CreateExtensionAssociation' {extensionVersionNumber} -> extensionVersionNumber) (\s@CreateExtensionAssociation' {} a -> s {extensionVersionNumber = a} :: CreateExtensionAssociation)
+
+-- | The parameter names and values defined in the extensions. Extension
+-- parameters marked @Required@ must be entered for this field.
+createExtensionAssociation_parameters :: Lens.Lens' CreateExtensionAssociation (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createExtensionAssociation_parameters = Lens.lens (\CreateExtensionAssociation' {parameters} -> parameters) (\s@CreateExtensionAssociation' {} a -> s {parameters = a} :: CreateExtensionAssociation) Prelude.. Lens.mapping Lens.coerced
+
+-- | Adds one or more tags for the specified extension association. Tags are
+-- metadata that help you categorize resources in different ways, for
+-- example, by purpose, owner, or environment. Each tag consists of a key
+-- and an optional value, both of which you define.
+createExtensionAssociation_tags :: Lens.Lens' CreateExtensionAssociation (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createExtensionAssociation_tags = Lens.lens (\CreateExtensionAssociation' {tags} -> tags) (\s@CreateExtensionAssociation' {} a -> s {tags = a} :: CreateExtensionAssociation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name, the ID, or the Amazon Resource Name (ARN) of the extension.
+createExtensionAssociation_extensionIdentifier :: Lens.Lens' CreateExtensionAssociation Prelude.Text
+createExtensionAssociation_extensionIdentifier = Lens.lens (\CreateExtensionAssociation' {extensionIdentifier} -> extensionIdentifier) (\s@CreateExtensionAssociation' {} a -> s {extensionIdentifier = a} :: CreateExtensionAssociation)
+
+-- | The ARN of an application, configuration profile, or environment.
+createExtensionAssociation_resourceIdentifier :: Lens.Lens' CreateExtensionAssociation Prelude.Text
+createExtensionAssociation_resourceIdentifier = Lens.lens (\CreateExtensionAssociation' {resourceIdentifier} -> resourceIdentifier) (\s@CreateExtensionAssociation' {} a -> s {resourceIdentifier = a} :: CreateExtensionAssociation)
+
+instance Core.AWSRequest CreateExtensionAssociation where
+  type
+    AWSResponse CreateExtensionAssociation =
+      ExtensionAssociation
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable CreateExtensionAssociation where
+  hashWithSalt _salt CreateExtensionAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` extensionVersionNumber
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` extensionIdentifier
+      `Prelude.hashWithSalt` resourceIdentifier
+
+instance Prelude.NFData CreateExtensionAssociation where
+  rnf CreateExtensionAssociation' {..} =
+    Prelude.rnf extensionVersionNumber
+      `Prelude.seq` Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf extensionIdentifier
+      `Prelude.seq` Prelude.rnf resourceIdentifier
+
+instance Data.ToHeaders CreateExtensionAssociation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateExtensionAssociation where
+  toJSON CreateExtensionAssociation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ExtensionVersionNumber" Data..=)
+              Prelude.<$> extensionVersionNumber,
+            ("Parameters" Data..=) Prelude.<$> parameters,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("ExtensionIdentifier" Data..= extensionIdentifier),
+            Prelude.Just
+              ("ResourceIdentifier" Data..= resourceIdentifier)
+          ]
+      )
+
+instance Data.ToPath CreateExtensionAssociation where
+  toPath = Prelude.const "/extensionassociations"
+
+instance Data.ToQuery CreateExtensionAssociation where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/CreateHostedConfigurationVersion.hs b/gen/Amazonka/AppConfig/CreateHostedConfigurationVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/CreateHostedConfigurationVersion.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.AppConfig.CreateHostedConfigurationVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new configuration in the AppConfig hosted configuration store.
+module Amazonka.AppConfig.CreateHostedConfigurationVersion
+  ( -- * Creating a Request
+    CreateHostedConfigurationVersion (..),
+    newCreateHostedConfigurationVersion,
+
+    -- * Request Lenses
+    createHostedConfigurationVersion_description,
+    createHostedConfigurationVersion_latestVersionNumber,
+    createHostedConfigurationVersion_applicationId,
+    createHostedConfigurationVersion_configurationProfileId,
+    createHostedConfigurationVersion_content,
+    createHostedConfigurationVersion_contentType,
+
+    -- * Destructuring the Response
+    HostedConfigurationVersion (..),
+    newHostedConfigurationVersion,
+
+    -- * Response Lenses
+    hostedConfigurationVersion_applicationId,
+    hostedConfigurationVersion_configurationProfileId,
+    hostedConfigurationVersion_content,
+    hostedConfigurationVersion_contentType,
+    hostedConfigurationVersion_description,
+    hostedConfigurationVersion_versionNumber,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateHostedConfigurationVersion' smart constructor.
+data CreateHostedConfigurationVersion = CreateHostedConfigurationVersion'
+  { -- | A description of the configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | An optional locking token used to prevent race conditions from
+    -- overwriting configuration updates when creating a new version. To ensure
+    -- your data is not overwritten when creating multiple hosted configuration
+    -- versions in rapid succession, specify the version number of the latest
+    -- hosted configuration version.
+    latestVersionNumber :: Prelude.Maybe Prelude.Int,
+    -- | The application ID.
+    applicationId :: Prelude.Text,
+    -- | The configuration profile ID.
+    configurationProfileId :: Prelude.Text,
+    -- | The content of the configuration or the configuration data.
+    content :: Data.Sensitive Prelude.ByteString,
+    -- | A standard MIME type describing the format of the configuration content.
+    -- For more information, see
+    -- <https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17 Content-Type>.
+    contentType :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateHostedConfigurationVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createHostedConfigurationVersion_description' - A description of the configuration.
+--
+-- 'latestVersionNumber', 'createHostedConfigurationVersion_latestVersionNumber' - An optional locking token used to prevent race conditions from
+-- overwriting configuration updates when creating a new version. To ensure
+-- your data is not overwritten when creating multiple hosted configuration
+-- versions in rapid succession, specify the version number of the latest
+-- hosted configuration version.
+--
+-- 'applicationId', 'createHostedConfigurationVersion_applicationId' - The application ID.
+--
+-- 'configurationProfileId', 'createHostedConfigurationVersion_configurationProfileId' - The configuration profile ID.
+--
+-- 'content', 'createHostedConfigurationVersion_content' - The content of the configuration or the configuration data.
+--
+-- 'contentType', 'createHostedConfigurationVersion_contentType' - A standard MIME type describing the format of the configuration content.
+-- For more information, see
+-- <https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17 Content-Type>.
+newCreateHostedConfigurationVersion ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'configurationProfileId'
+  Prelude.Text ->
+  -- | 'content'
+  Prelude.ByteString ->
+  -- | 'contentType'
+  Prelude.Text ->
+  CreateHostedConfigurationVersion
+newCreateHostedConfigurationVersion
+  pApplicationId_
+  pConfigurationProfileId_
+  pContent_
+  pContentType_ =
+    CreateHostedConfigurationVersion'
+      { description =
+          Prelude.Nothing,
+        latestVersionNumber = Prelude.Nothing,
+        applicationId = pApplicationId_,
+        configurationProfileId =
+          pConfigurationProfileId_,
+        content =
+          Data._Sensitive Lens.# pContent_,
+        contentType = pContentType_
+      }
+
+-- | A description of the configuration.
+createHostedConfigurationVersion_description :: Lens.Lens' CreateHostedConfigurationVersion (Prelude.Maybe Prelude.Text)
+createHostedConfigurationVersion_description = Lens.lens (\CreateHostedConfigurationVersion' {description} -> description) (\s@CreateHostedConfigurationVersion' {} a -> s {description = a} :: CreateHostedConfigurationVersion)
+
+-- | An optional locking token used to prevent race conditions from
+-- overwriting configuration updates when creating a new version. To ensure
+-- your data is not overwritten when creating multiple hosted configuration
+-- versions in rapid succession, specify the version number of the latest
+-- hosted configuration version.
+createHostedConfigurationVersion_latestVersionNumber :: Lens.Lens' CreateHostedConfigurationVersion (Prelude.Maybe Prelude.Int)
+createHostedConfigurationVersion_latestVersionNumber = Lens.lens (\CreateHostedConfigurationVersion' {latestVersionNumber} -> latestVersionNumber) (\s@CreateHostedConfigurationVersion' {} a -> s {latestVersionNumber = a} :: CreateHostedConfigurationVersion)
+
+-- | The application ID.
+createHostedConfigurationVersion_applicationId :: Lens.Lens' CreateHostedConfigurationVersion Prelude.Text
+createHostedConfigurationVersion_applicationId = Lens.lens (\CreateHostedConfigurationVersion' {applicationId} -> applicationId) (\s@CreateHostedConfigurationVersion' {} a -> s {applicationId = a} :: CreateHostedConfigurationVersion)
+
+-- | The configuration profile ID.
+createHostedConfigurationVersion_configurationProfileId :: Lens.Lens' CreateHostedConfigurationVersion Prelude.Text
+createHostedConfigurationVersion_configurationProfileId = Lens.lens (\CreateHostedConfigurationVersion' {configurationProfileId} -> configurationProfileId) (\s@CreateHostedConfigurationVersion' {} a -> s {configurationProfileId = a} :: CreateHostedConfigurationVersion)
+
+-- | The content of the configuration or the configuration data.
+createHostedConfigurationVersion_content :: Lens.Lens' CreateHostedConfigurationVersion Prelude.ByteString
+createHostedConfigurationVersion_content = Lens.lens (\CreateHostedConfigurationVersion' {content} -> content) (\s@CreateHostedConfigurationVersion' {} a -> s {content = a} :: CreateHostedConfigurationVersion) Prelude.. Data._Sensitive
+
+-- | A standard MIME type describing the format of the configuration content.
+-- For more information, see
+-- <https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17 Content-Type>.
+createHostedConfigurationVersion_contentType :: Lens.Lens' CreateHostedConfigurationVersion Prelude.Text
+createHostedConfigurationVersion_contentType = Lens.lens (\CreateHostedConfigurationVersion' {contentType} -> contentType) (\s@CreateHostedConfigurationVersion' {} a -> s {contentType = a} :: CreateHostedConfigurationVersion)
+
+instance
+  Core.AWSRequest
+    CreateHostedConfigurationVersion
+  where
+  type
+    AWSResponse CreateHostedConfigurationVersion =
+      HostedConfigurationVersion
+  request overrides =
+    Request.postBody (overrides defaultService)
+  response =
+    Response.receiveBytes
+      ( \s h x ->
+          HostedConfigurationVersion'
+            Prelude.<$> (h Data..#? "Application-Id")
+            Prelude.<*> (h Data..#? "Configuration-Profile-Id")
+            Prelude.<*> (Prelude.pure (Prelude.Just (Prelude.coerce x)))
+            Prelude.<*> (h Data..#? "Content-Type")
+            Prelude.<*> (h Data..#? "Description")
+            Prelude.<*> (h Data..#? "Version-Number")
+      )
+
+instance
+  Prelude.Hashable
+    CreateHostedConfigurationVersion
+  where
+  hashWithSalt
+    _salt
+    CreateHostedConfigurationVersion' {..} =
+      _salt
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` latestVersionNumber
+        `Prelude.hashWithSalt` applicationId
+        `Prelude.hashWithSalt` configurationProfileId
+        `Prelude.hashWithSalt` content
+        `Prelude.hashWithSalt` contentType
+
+instance
+  Prelude.NFData
+    CreateHostedConfigurationVersion
+  where
+  rnf CreateHostedConfigurationVersion' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf latestVersionNumber
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf configurationProfileId
+      `Prelude.seq` Prelude.rnf content
+      `Prelude.seq` Prelude.rnf contentType
+
+instance Data.ToBody CreateHostedConfigurationVersion where
+  toBody CreateHostedConfigurationVersion' {..} =
+    Data.toBody content
+
+instance
+  Data.ToHeaders
+    CreateHostedConfigurationVersion
+  where
+  toHeaders CreateHostedConfigurationVersion' {..} =
+    Prelude.mconcat
+      [ "Description" Data.=# description,
+        "Latest-Version-Number" Data.=# latestVersionNumber,
+        "Content-Type" Data.=# contentType
+      ]
+
+instance Data.ToPath CreateHostedConfigurationVersion where
+  toPath CreateHostedConfigurationVersion' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/configurationprofiles/",
+        Data.toBS configurationProfileId,
+        "/hostedconfigurationversions"
+      ]
+
+instance
+  Data.ToQuery
+    CreateHostedConfigurationVersion
+  where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/DeleteApplication.hs b/gen/Amazonka/AppConfig/DeleteApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/DeleteApplication.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.DeleteApplication
+-- 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 application. Deleting an application does not delete a
+-- configuration from a host.
+module Amazonka.AppConfig.DeleteApplication
+  ( -- * Creating a Request
+    DeleteApplication (..),
+    newDeleteApplication,
+
+    -- * Request Lenses
+    deleteApplication_applicationId,
+
+    -- * Destructuring the Response
+    DeleteApplicationResponse (..),
+    newDeleteApplicationResponse,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteApplication' smart constructor.
+data DeleteApplication = DeleteApplication'
+  { -- | The ID of the application to delete.
+    applicationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'deleteApplication_applicationId' - The ID of the application to delete.
+newDeleteApplication ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  DeleteApplication
+newDeleteApplication pApplicationId_ =
+  DeleteApplication' {applicationId = pApplicationId_}
+
+-- | The ID of the application to delete.
+deleteApplication_applicationId :: Lens.Lens' DeleteApplication Prelude.Text
+deleteApplication_applicationId = Lens.lens (\DeleteApplication' {applicationId} -> applicationId) (\s@DeleteApplication' {} a -> s {applicationId = a} :: DeleteApplication)
+
+instance Core.AWSRequest DeleteApplication where
+  type
+    AWSResponse DeleteApplication =
+      DeleteApplicationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteApplicationResponse'
+
+instance Prelude.Hashable DeleteApplication where
+  hashWithSalt _salt DeleteApplication' {..} =
+    _salt `Prelude.hashWithSalt` applicationId
+
+instance Prelude.NFData DeleteApplication where
+  rnf DeleteApplication' {..} =
+    Prelude.rnf applicationId
+
+instance Data.ToHeaders DeleteApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteApplication where
+  toPath DeleteApplication' {..} =
+    Prelude.mconcat
+      ["/applications/", Data.toBS applicationId]
+
+instance Data.ToQuery DeleteApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteApplicationResponse' smart constructor.
+data DeleteApplicationResponse = DeleteApplicationResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteApplicationResponse ::
+  DeleteApplicationResponse
+newDeleteApplicationResponse =
+  DeleteApplicationResponse'
+
+instance Prelude.NFData DeleteApplicationResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/AppConfig/DeleteConfigurationProfile.hs b/gen/Amazonka/AppConfig/DeleteConfigurationProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/DeleteConfigurationProfile.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.DeleteConfigurationProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a configuration profile. Deleting a configuration profile does
+-- not delete a configuration from a host.
+module Amazonka.AppConfig.DeleteConfigurationProfile
+  ( -- * Creating a Request
+    DeleteConfigurationProfile (..),
+    newDeleteConfigurationProfile,
+
+    -- * Request Lenses
+    deleteConfigurationProfile_applicationId,
+    deleteConfigurationProfile_configurationProfileId,
+
+    -- * Destructuring the Response
+    DeleteConfigurationProfileResponse (..),
+    newDeleteConfigurationProfileResponse,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteConfigurationProfile' smart constructor.
+data DeleteConfigurationProfile = DeleteConfigurationProfile'
+  { -- | The application ID that includes the configuration profile you want to
+    -- delete.
+    applicationId :: Prelude.Text,
+    -- | The ID of the configuration profile you want to delete.
+    configurationProfileId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConfigurationProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'deleteConfigurationProfile_applicationId' - The application ID that includes the configuration profile you want to
+-- delete.
+--
+-- 'configurationProfileId', 'deleteConfigurationProfile_configurationProfileId' - The ID of the configuration profile you want to delete.
+newDeleteConfigurationProfile ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'configurationProfileId'
+  Prelude.Text ->
+  DeleteConfigurationProfile
+newDeleteConfigurationProfile
+  pApplicationId_
+  pConfigurationProfileId_ =
+    DeleteConfigurationProfile'
+      { applicationId =
+          pApplicationId_,
+        configurationProfileId =
+          pConfigurationProfileId_
+      }
+
+-- | The application ID that includes the configuration profile you want to
+-- delete.
+deleteConfigurationProfile_applicationId :: Lens.Lens' DeleteConfigurationProfile Prelude.Text
+deleteConfigurationProfile_applicationId = Lens.lens (\DeleteConfigurationProfile' {applicationId} -> applicationId) (\s@DeleteConfigurationProfile' {} a -> s {applicationId = a} :: DeleteConfigurationProfile)
+
+-- | The ID of the configuration profile you want to delete.
+deleteConfigurationProfile_configurationProfileId :: Lens.Lens' DeleteConfigurationProfile Prelude.Text
+deleteConfigurationProfile_configurationProfileId = Lens.lens (\DeleteConfigurationProfile' {configurationProfileId} -> configurationProfileId) (\s@DeleteConfigurationProfile' {} a -> s {configurationProfileId = a} :: DeleteConfigurationProfile)
+
+instance Core.AWSRequest DeleteConfigurationProfile where
+  type
+    AWSResponse DeleteConfigurationProfile =
+      DeleteConfigurationProfileResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteConfigurationProfileResponse'
+
+instance Prelude.Hashable DeleteConfigurationProfile where
+  hashWithSalt _salt DeleteConfigurationProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` configurationProfileId
+
+instance Prelude.NFData DeleteConfigurationProfile where
+  rnf DeleteConfigurationProfile' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf configurationProfileId
+
+instance Data.ToHeaders DeleteConfigurationProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteConfigurationProfile where
+  toPath DeleteConfigurationProfile' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/configurationprofiles/",
+        Data.toBS configurationProfileId
+      ]
+
+instance Data.ToQuery DeleteConfigurationProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteConfigurationProfileResponse' smart constructor.
+data DeleteConfigurationProfileResponse = DeleteConfigurationProfileResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConfigurationProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteConfigurationProfileResponse ::
+  DeleteConfigurationProfileResponse
+newDeleteConfigurationProfileResponse =
+  DeleteConfigurationProfileResponse'
+
+instance
+  Prelude.NFData
+    DeleteConfigurationProfileResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/AppConfig/DeleteDeploymentStrategy.hs b/gen/Amazonka/AppConfig/DeleteDeploymentStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/DeleteDeploymentStrategy.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.DeleteDeploymentStrategy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a deployment strategy. Deleting a deployment strategy does not
+-- delete a configuration from a host.
+module Amazonka.AppConfig.DeleteDeploymentStrategy
+  ( -- * Creating a Request
+    DeleteDeploymentStrategy (..),
+    newDeleteDeploymentStrategy,
+
+    -- * Request Lenses
+    deleteDeploymentStrategy_deploymentStrategyId,
+
+    -- * Destructuring the Response
+    DeleteDeploymentStrategyResponse (..),
+    newDeleteDeploymentStrategyResponse,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDeploymentStrategy' smart constructor.
+data DeleteDeploymentStrategy = DeleteDeploymentStrategy'
+  { -- | The ID of the deployment strategy you want to delete.
+    deploymentStrategyId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDeploymentStrategy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deploymentStrategyId', 'deleteDeploymentStrategy_deploymentStrategyId' - The ID of the deployment strategy you want to delete.
+newDeleteDeploymentStrategy ::
+  -- | 'deploymentStrategyId'
+  Prelude.Text ->
+  DeleteDeploymentStrategy
+newDeleteDeploymentStrategy pDeploymentStrategyId_ =
+  DeleteDeploymentStrategy'
+    { deploymentStrategyId =
+        pDeploymentStrategyId_
+    }
+
+-- | The ID of the deployment strategy you want to delete.
+deleteDeploymentStrategy_deploymentStrategyId :: Lens.Lens' DeleteDeploymentStrategy Prelude.Text
+deleteDeploymentStrategy_deploymentStrategyId = Lens.lens (\DeleteDeploymentStrategy' {deploymentStrategyId} -> deploymentStrategyId) (\s@DeleteDeploymentStrategy' {} a -> s {deploymentStrategyId = a} :: DeleteDeploymentStrategy)
+
+instance Core.AWSRequest DeleteDeploymentStrategy where
+  type
+    AWSResponse DeleteDeploymentStrategy =
+      DeleteDeploymentStrategyResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteDeploymentStrategyResponse'
+
+instance Prelude.Hashable DeleteDeploymentStrategy where
+  hashWithSalt _salt DeleteDeploymentStrategy' {..} =
+    _salt `Prelude.hashWithSalt` deploymentStrategyId
+
+instance Prelude.NFData DeleteDeploymentStrategy where
+  rnf DeleteDeploymentStrategy' {..} =
+    Prelude.rnf deploymentStrategyId
+
+instance Data.ToHeaders DeleteDeploymentStrategy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteDeploymentStrategy where
+  toPath DeleteDeploymentStrategy' {..} =
+    Prelude.mconcat
+      [ "/deployementstrategies/",
+        Data.toBS deploymentStrategyId
+      ]
+
+instance Data.ToQuery DeleteDeploymentStrategy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDeploymentStrategyResponse' smart constructor.
+data DeleteDeploymentStrategyResponse = DeleteDeploymentStrategyResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDeploymentStrategyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteDeploymentStrategyResponse ::
+  DeleteDeploymentStrategyResponse
+newDeleteDeploymentStrategyResponse =
+  DeleteDeploymentStrategyResponse'
+
+instance
+  Prelude.NFData
+    DeleteDeploymentStrategyResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/AppConfig/DeleteEnvironment.hs b/gen/Amazonka/AppConfig/DeleteEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/DeleteEnvironment.hs
@@ -0,0 +1,150 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.DeleteEnvironment
+-- 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 environment. Deleting an environment does not delete a
+-- configuration from a host.
+module Amazonka.AppConfig.DeleteEnvironment
+  ( -- * Creating a Request
+    DeleteEnvironment (..),
+    newDeleteEnvironment,
+
+    -- * Request Lenses
+    deleteEnvironment_applicationId,
+    deleteEnvironment_environmentId,
+
+    -- * Destructuring the Response
+    DeleteEnvironmentResponse (..),
+    newDeleteEnvironmentResponse,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteEnvironment' smart constructor.
+data DeleteEnvironment = DeleteEnvironment'
+  { -- | The application ID that includes the environment that you want to
+    -- delete.
+    applicationId :: Prelude.Text,
+    -- | The ID of the environment that you want to delete.
+    environmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEnvironment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'deleteEnvironment_applicationId' - The application ID that includes the environment that you want to
+-- delete.
+--
+-- 'environmentId', 'deleteEnvironment_environmentId' - The ID of the environment that you want to delete.
+newDeleteEnvironment ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  DeleteEnvironment
+newDeleteEnvironment pApplicationId_ pEnvironmentId_ =
+  DeleteEnvironment'
+    { applicationId = pApplicationId_,
+      environmentId = pEnvironmentId_
+    }
+
+-- | The application ID that includes the environment that you want to
+-- delete.
+deleteEnvironment_applicationId :: Lens.Lens' DeleteEnvironment Prelude.Text
+deleteEnvironment_applicationId = Lens.lens (\DeleteEnvironment' {applicationId} -> applicationId) (\s@DeleteEnvironment' {} a -> s {applicationId = a} :: DeleteEnvironment)
+
+-- | The ID of the environment that you want to delete.
+deleteEnvironment_environmentId :: Lens.Lens' DeleteEnvironment Prelude.Text
+deleteEnvironment_environmentId = Lens.lens (\DeleteEnvironment' {environmentId} -> environmentId) (\s@DeleteEnvironment' {} a -> s {environmentId = a} :: DeleteEnvironment)
+
+instance Core.AWSRequest DeleteEnvironment where
+  type
+    AWSResponse DeleteEnvironment =
+      DeleteEnvironmentResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteEnvironmentResponse'
+
+instance Prelude.Hashable DeleteEnvironment where
+  hashWithSalt _salt DeleteEnvironment' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` environmentId
+
+instance Prelude.NFData DeleteEnvironment where
+  rnf DeleteEnvironment' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf environmentId
+
+instance Data.ToHeaders DeleteEnvironment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteEnvironment where
+  toPath DeleteEnvironment' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/environments/",
+        Data.toBS environmentId
+      ]
+
+instance Data.ToQuery DeleteEnvironment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteEnvironmentResponse' smart constructor.
+data DeleteEnvironmentResponse = DeleteEnvironmentResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEnvironmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteEnvironmentResponse ::
+  DeleteEnvironmentResponse
+newDeleteEnvironmentResponse =
+  DeleteEnvironmentResponse'
+
+instance Prelude.NFData DeleteEnvironmentResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/AppConfig/DeleteExtension.hs b/gen/Amazonka/AppConfig/DeleteExtension.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/DeleteExtension.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.DeleteExtension
+-- 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 AppConfig extension. You must delete all associations to an
+-- extension before you delete the extension.
+module Amazonka.AppConfig.DeleteExtension
+  ( -- * Creating a Request
+    DeleteExtension (..),
+    newDeleteExtension,
+
+    -- * Request Lenses
+    deleteExtension_versionNumber,
+    deleteExtension_extensionIdentifier,
+
+    -- * Destructuring the Response
+    DeleteExtensionResponse (..),
+    newDeleteExtensionResponse,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteExtension' smart constructor.
+data DeleteExtension = DeleteExtension'
+  { -- | A specific version of an extension to delete. If omitted, the highest
+    -- version is deleted.
+    versionNumber :: Prelude.Maybe Prelude.Int,
+    -- | The name, ID, or Amazon Resource Name (ARN) of the extension you want to
+    -- delete.
+    extensionIdentifier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteExtension' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'versionNumber', 'deleteExtension_versionNumber' - A specific version of an extension to delete. If omitted, the highest
+-- version is deleted.
+--
+-- 'extensionIdentifier', 'deleteExtension_extensionIdentifier' - The name, ID, or Amazon Resource Name (ARN) of the extension you want to
+-- delete.
+newDeleteExtension ::
+  -- | 'extensionIdentifier'
+  Prelude.Text ->
+  DeleteExtension
+newDeleteExtension pExtensionIdentifier_ =
+  DeleteExtension'
+    { versionNumber = Prelude.Nothing,
+      extensionIdentifier = pExtensionIdentifier_
+    }
+
+-- | A specific version of an extension to delete. If omitted, the highest
+-- version is deleted.
+deleteExtension_versionNumber :: Lens.Lens' DeleteExtension (Prelude.Maybe Prelude.Int)
+deleteExtension_versionNumber = Lens.lens (\DeleteExtension' {versionNumber} -> versionNumber) (\s@DeleteExtension' {} a -> s {versionNumber = a} :: DeleteExtension)
+
+-- | The name, ID, or Amazon Resource Name (ARN) of the extension you want to
+-- delete.
+deleteExtension_extensionIdentifier :: Lens.Lens' DeleteExtension Prelude.Text
+deleteExtension_extensionIdentifier = Lens.lens (\DeleteExtension' {extensionIdentifier} -> extensionIdentifier) (\s@DeleteExtension' {} a -> s {extensionIdentifier = a} :: DeleteExtension)
+
+instance Core.AWSRequest DeleteExtension where
+  type
+    AWSResponse DeleteExtension =
+      DeleteExtensionResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteExtensionResponse'
+
+instance Prelude.Hashable DeleteExtension where
+  hashWithSalt _salt DeleteExtension' {..} =
+    _salt
+      `Prelude.hashWithSalt` versionNumber
+      `Prelude.hashWithSalt` extensionIdentifier
+
+instance Prelude.NFData DeleteExtension where
+  rnf DeleteExtension' {..} =
+    Prelude.rnf versionNumber
+      `Prelude.seq` Prelude.rnf extensionIdentifier
+
+instance Data.ToHeaders DeleteExtension where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteExtension where
+  toPath DeleteExtension' {..} =
+    Prelude.mconcat
+      ["/extensions/", Data.toBS extensionIdentifier]
+
+instance Data.ToQuery DeleteExtension where
+  toQuery DeleteExtension' {..} =
+    Prelude.mconcat ["version" Data.=: versionNumber]
+
+-- | /See:/ 'newDeleteExtensionResponse' smart constructor.
+data DeleteExtensionResponse = DeleteExtensionResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteExtensionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteExtensionResponse ::
+  DeleteExtensionResponse
+newDeleteExtensionResponse = DeleteExtensionResponse'
+
+instance Prelude.NFData DeleteExtensionResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/AppConfig/DeleteExtensionAssociation.hs b/gen/Amazonka/AppConfig/DeleteExtensionAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/DeleteExtensionAssociation.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.DeleteExtensionAssociation
+-- 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 extension association. This action doesn\'t delete extensions
+-- defined in the association.
+module Amazonka.AppConfig.DeleteExtensionAssociation
+  ( -- * Creating a Request
+    DeleteExtensionAssociation (..),
+    newDeleteExtensionAssociation,
+
+    -- * Request Lenses
+    deleteExtensionAssociation_extensionAssociationId,
+
+    -- * Destructuring the Response
+    DeleteExtensionAssociationResponse (..),
+    newDeleteExtensionAssociationResponse,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteExtensionAssociation' smart constructor.
+data DeleteExtensionAssociation = DeleteExtensionAssociation'
+  { -- | The ID of the extension association to delete.
+    extensionAssociationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteExtensionAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'extensionAssociationId', 'deleteExtensionAssociation_extensionAssociationId' - The ID of the extension association to delete.
+newDeleteExtensionAssociation ::
+  -- | 'extensionAssociationId'
+  Prelude.Text ->
+  DeleteExtensionAssociation
+newDeleteExtensionAssociation
+  pExtensionAssociationId_ =
+    DeleteExtensionAssociation'
+      { extensionAssociationId =
+          pExtensionAssociationId_
+      }
+
+-- | The ID of the extension association to delete.
+deleteExtensionAssociation_extensionAssociationId :: Lens.Lens' DeleteExtensionAssociation Prelude.Text
+deleteExtensionAssociation_extensionAssociationId = Lens.lens (\DeleteExtensionAssociation' {extensionAssociationId} -> extensionAssociationId) (\s@DeleteExtensionAssociation' {} a -> s {extensionAssociationId = a} :: DeleteExtensionAssociation)
+
+instance Core.AWSRequest DeleteExtensionAssociation where
+  type
+    AWSResponse DeleteExtensionAssociation =
+      DeleteExtensionAssociationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteExtensionAssociationResponse'
+
+instance Prelude.Hashable DeleteExtensionAssociation where
+  hashWithSalt _salt DeleteExtensionAssociation' {..} =
+    _salt `Prelude.hashWithSalt` extensionAssociationId
+
+instance Prelude.NFData DeleteExtensionAssociation where
+  rnf DeleteExtensionAssociation' {..} =
+    Prelude.rnf extensionAssociationId
+
+instance Data.ToHeaders DeleteExtensionAssociation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteExtensionAssociation where
+  toPath DeleteExtensionAssociation' {..} =
+    Prelude.mconcat
+      [ "/extensionassociations/",
+        Data.toBS extensionAssociationId
+      ]
+
+instance Data.ToQuery DeleteExtensionAssociation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteExtensionAssociationResponse' smart constructor.
+data DeleteExtensionAssociationResponse = DeleteExtensionAssociationResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteExtensionAssociationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteExtensionAssociationResponse ::
+  DeleteExtensionAssociationResponse
+newDeleteExtensionAssociationResponse =
+  DeleteExtensionAssociationResponse'
+
+instance
+  Prelude.NFData
+    DeleteExtensionAssociationResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/AppConfig/DeleteHostedConfigurationVersion.hs b/gen/Amazonka/AppConfig/DeleteHostedConfigurationVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/DeleteHostedConfigurationVersion.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.DeleteHostedConfigurationVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a version of a configuration from the AppConfig hosted
+-- configuration store.
+module Amazonka.AppConfig.DeleteHostedConfigurationVersion
+  ( -- * Creating a Request
+    DeleteHostedConfigurationVersion (..),
+    newDeleteHostedConfigurationVersion,
+
+    -- * Request Lenses
+    deleteHostedConfigurationVersion_applicationId,
+    deleteHostedConfigurationVersion_configurationProfileId,
+    deleteHostedConfigurationVersion_versionNumber,
+
+    -- * Destructuring the Response
+    DeleteHostedConfigurationVersionResponse (..),
+    newDeleteHostedConfigurationVersionResponse,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteHostedConfigurationVersion' smart constructor.
+data DeleteHostedConfigurationVersion = DeleteHostedConfigurationVersion'
+  { -- | The application ID.
+    applicationId :: Prelude.Text,
+    -- | The configuration profile ID.
+    configurationProfileId :: Prelude.Text,
+    -- | The versions number to delete.
+    versionNumber :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteHostedConfigurationVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'deleteHostedConfigurationVersion_applicationId' - The application ID.
+--
+-- 'configurationProfileId', 'deleteHostedConfigurationVersion_configurationProfileId' - The configuration profile ID.
+--
+-- 'versionNumber', 'deleteHostedConfigurationVersion_versionNumber' - The versions number to delete.
+newDeleteHostedConfigurationVersion ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'configurationProfileId'
+  Prelude.Text ->
+  -- | 'versionNumber'
+  Prelude.Int ->
+  DeleteHostedConfigurationVersion
+newDeleteHostedConfigurationVersion
+  pApplicationId_
+  pConfigurationProfileId_
+  pVersionNumber_ =
+    DeleteHostedConfigurationVersion'
+      { applicationId =
+          pApplicationId_,
+        configurationProfileId =
+          pConfigurationProfileId_,
+        versionNumber = pVersionNumber_
+      }
+
+-- | The application ID.
+deleteHostedConfigurationVersion_applicationId :: Lens.Lens' DeleteHostedConfigurationVersion Prelude.Text
+deleteHostedConfigurationVersion_applicationId = Lens.lens (\DeleteHostedConfigurationVersion' {applicationId} -> applicationId) (\s@DeleteHostedConfigurationVersion' {} a -> s {applicationId = a} :: DeleteHostedConfigurationVersion)
+
+-- | The configuration profile ID.
+deleteHostedConfigurationVersion_configurationProfileId :: Lens.Lens' DeleteHostedConfigurationVersion Prelude.Text
+deleteHostedConfigurationVersion_configurationProfileId = Lens.lens (\DeleteHostedConfigurationVersion' {configurationProfileId} -> configurationProfileId) (\s@DeleteHostedConfigurationVersion' {} a -> s {configurationProfileId = a} :: DeleteHostedConfigurationVersion)
+
+-- | The versions number to delete.
+deleteHostedConfigurationVersion_versionNumber :: Lens.Lens' DeleteHostedConfigurationVersion Prelude.Int
+deleteHostedConfigurationVersion_versionNumber = Lens.lens (\DeleteHostedConfigurationVersion' {versionNumber} -> versionNumber) (\s@DeleteHostedConfigurationVersion' {} a -> s {versionNumber = a} :: DeleteHostedConfigurationVersion)
+
+instance
+  Core.AWSRequest
+    DeleteHostedConfigurationVersion
+  where
+  type
+    AWSResponse DeleteHostedConfigurationVersion =
+      DeleteHostedConfigurationVersionResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteHostedConfigurationVersionResponse'
+
+instance
+  Prelude.Hashable
+    DeleteHostedConfigurationVersion
+  where
+  hashWithSalt
+    _salt
+    DeleteHostedConfigurationVersion' {..} =
+      _salt
+        `Prelude.hashWithSalt` applicationId
+        `Prelude.hashWithSalt` configurationProfileId
+        `Prelude.hashWithSalt` versionNumber
+
+instance
+  Prelude.NFData
+    DeleteHostedConfigurationVersion
+  where
+  rnf DeleteHostedConfigurationVersion' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf configurationProfileId
+      `Prelude.seq` Prelude.rnf versionNumber
+
+instance
+  Data.ToHeaders
+    DeleteHostedConfigurationVersion
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteHostedConfigurationVersion where
+  toPath DeleteHostedConfigurationVersion' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/configurationprofiles/",
+        Data.toBS configurationProfileId,
+        "/hostedconfigurationversions/",
+        Data.toBS versionNumber
+      ]
+
+instance
+  Data.ToQuery
+    DeleteHostedConfigurationVersion
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteHostedConfigurationVersionResponse' smart constructor.
+data DeleteHostedConfigurationVersionResponse = DeleteHostedConfigurationVersionResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteHostedConfigurationVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteHostedConfigurationVersionResponse ::
+  DeleteHostedConfigurationVersionResponse
+newDeleteHostedConfigurationVersionResponse =
+  DeleteHostedConfigurationVersionResponse'
+
+instance
+  Prelude.NFData
+    DeleteHostedConfigurationVersionResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/AppConfig/GetApplication.hs b/gen/Amazonka/AppConfig/GetApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/GetApplication.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.GetApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about an application.
+module Amazonka.AppConfig.GetApplication
+  ( -- * Creating a Request
+    GetApplication (..),
+    newGetApplication,
+
+    -- * Request Lenses
+    getApplication_applicationId,
+
+    -- * Destructuring the Response
+    Application (..),
+    newApplication,
+
+    -- * Response Lenses
+    application_description,
+    application_id,
+    application_name,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetApplication' smart constructor.
+data GetApplication = GetApplication'
+  { -- | The ID of the application you want to get.
+    applicationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'getApplication_applicationId' - The ID of the application you want to get.
+newGetApplication ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  GetApplication
+newGetApplication pApplicationId_ =
+  GetApplication' {applicationId = pApplicationId_}
+
+-- | The ID of the application you want to get.
+getApplication_applicationId :: Lens.Lens' GetApplication Prelude.Text
+getApplication_applicationId = Lens.lens (\GetApplication' {applicationId} -> applicationId) (\s@GetApplication' {} a -> s {applicationId = a} :: GetApplication)
+
+instance Core.AWSRequest GetApplication where
+  type AWSResponse GetApplication = Application
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable GetApplication where
+  hashWithSalt _salt GetApplication' {..} =
+    _salt `Prelude.hashWithSalt` applicationId
+
+instance Prelude.NFData GetApplication where
+  rnf GetApplication' {..} = Prelude.rnf applicationId
+
+instance Data.ToHeaders GetApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetApplication where
+  toPath GetApplication' {..} =
+    Prelude.mconcat
+      ["/applications/", Data.toBS applicationId]
+
+instance Data.ToQuery GetApplication where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/GetConfigurationProfile.hs b/gen/Amazonka/AppConfig/GetConfigurationProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/GetConfigurationProfile.hs
@@ -0,0 +1,145 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.GetConfigurationProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about a configuration profile.
+module Amazonka.AppConfig.GetConfigurationProfile
+  ( -- * Creating a Request
+    GetConfigurationProfile (..),
+    newGetConfigurationProfile,
+
+    -- * Request Lenses
+    getConfigurationProfile_applicationId,
+    getConfigurationProfile_configurationProfileId,
+
+    -- * Destructuring the Response
+    ConfigurationProfile (..),
+    newConfigurationProfile,
+
+    -- * Response Lenses
+    configurationProfile_applicationId,
+    configurationProfile_description,
+    configurationProfile_id,
+    configurationProfile_locationUri,
+    configurationProfile_name,
+    configurationProfile_retrievalRoleArn,
+    configurationProfile_type,
+    configurationProfile_validators,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetConfigurationProfile' smart constructor.
+data GetConfigurationProfile = GetConfigurationProfile'
+  { -- | The ID of the application that includes the configuration profile you
+    -- want to get.
+    applicationId :: Prelude.Text,
+    -- | The ID of the configuration profile that you want to get.
+    configurationProfileId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConfigurationProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'getConfigurationProfile_applicationId' - The ID of the application that includes the configuration profile you
+-- want to get.
+--
+-- 'configurationProfileId', 'getConfigurationProfile_configurationProfileId' - The ID of the configuration profile that you want to get.
+newGetConfigurationProfile ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'configurationProfileId'
+  Prelude.Text ->
+  GetConfigurationProfile
+newGetConfigurationProfile
+  pApplicationId_
+  pConfigurationProfileId_ =
+    GetConfigurationProfile'
+      { applicationId =
+          pApplicationId_,
+        configurationProfileId = pConfigurationProfileId_
+      }
+
+-- | The ID of the application that includes the configuration profile you
+-- want to get.
+getConfigurationProfile_applicationId :: Lens.Lens' GetConfigurationProfile Prelude.Text
+getConfigurationProfile_applicationId = Lens.lens (\GetConfigurationProfile' {applicationId} -> applicationId) (\s@GetConfigurationProfile' {} a -> s {applicationId = a} :: GetConfigurationProfile)
+
+-- | The ID of the configuration profile that you want to get.
+getConfigurationProfile_configurationProfileId :: Lens.Lens' GetConfigurationProfile Prelude.Text
+getConfigurationProfile_configurationProfileId = Lens.lens (\GetConfigurationProfile' {configurationProfileId} -> configurationProfileId) (\s@GetConfigurationProfile' {} a -> s {configurationProfileId = a} :: GetConfigurationProfile)
+
+instance Core.AWSRequest GetConfigurationProfile where
+  type
+    AWSResponse GetConfigurationProfile =
+      ConfigurationProfile
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable GetConfigurationProfile where
+  hashWithSalt _salt GetConfigurationProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` configurationProfileId
+
+instance Prelude.NFData GetConfigurationProfile where
+  rnf GetConfigurationProfile' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf configurationProfileId
+
+instance Data.ToHeaders GetConfigurationProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetConfigurationProfile where
+  toPath GetConfigurationProfile' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/configurationprofiles/",
+        Data.toBS configurationProfileId
+      ]
+
+instance Data.ToQuery GetConfigurationProfile where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/GetDeployment.hs b/gen/Amazonka/AppConfig/GetDeployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/GetDeployment.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.GetDeployment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about a configuration deployment.
+module Amazonka.AppConfig.GetDeployment
+  ( -- * Creating a Request
+    GetDeployment (..),
+    newGetDeployment,
+
+    -- * Request Lenses
+    getDeployment_applicationId,
+    getDeployment_environmentId,
+    getDeployment_deploymentNumber,
+
+    -- * Destructuring the Response
+    Deployment (..),
+    newDeployment,
+
+    -- * Response Lenses
+    deployment_applicationId,
+    deployment_appliedExtensions,
+    deployment_completedAt,
+    deployment_configurationLocationUri,
+    deployment_configurationName,
+    deployment_configurationProfileId,
+    deployment_configurationVersion,
+    deployment_deploymentDurationInMinutes,
+    deployment_deploymentNumber,
+    deployment_deploymentStrategyId,
+    deployment_description,
+    deployment_environmentId,
+    deployment_eventLog,
+    deployment_finalBakeTimeInMinutes,
+    deployment_growthFactor,
+    deployment_growthType,
+    deployment_percentageComplete,
+    deployment_startedAt,
+    deployment_state,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDeployment' smart constructor.
+data GetDeployment = GetDeployment'
+  { -- | The ID of the application that includes the deployment you want to get.
+    applicationId :: Prelude.Text,
+    -- | The ID of the environment that includes the deployment you want to get.
+    environmentId :: Prelude.Text,
+    -- | The sequence number of the deployment.
+    deploymentNumber :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDeployment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'getDeployment_applicationId' - The ID of the application that includes the deployment you want to get.
+--
+-- 'environmentId', 'getDeployment_environmentId' - The ID of the environment that includes the deployment you want to get.
+--
+-- 'deploymentNumber', 'getDeployment_deploymentNumber' - The sequence number of the deployment.
+newGetDeployment ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  -- | 'deploymentNumber'
+  Prelude.Int ->
+  GetDeployment
+newGetDeployment
+  pApplicationId_
+  pEnvironmentId_
+  pDeploymentNumber_ =
+    GetDeployment'
+      { applicationId = pApplicationId_,
+        environmentId = pEnvironmentId_,
+        deploymentNumber = pDeploymentNumber_
+      }
+
+-- | The ID of the application that includes the deployment you want to get.
+getDeployment_applicationId :: Lens.Lens' GetDeployment Prelude.Text
+getDeployment_applicationId = Lens.lens (\GetDeployment' {applicationId} -> applicationId) (\s@GetDeployment' {} a -> s {applicationId = a} :: GetDeployment)
+
+-- | The ID of the environment that includes the deployment you want to get.
+getDeployment_environmentId :: Lens.Lens' GetDeployment Prelude.Text
+getDeployment_environmentId = Lens.lens (\GetDeployment' {environmentId} -> environmentId) (\s@GetDeployment' {} a -> s {environmentId = a} :: GetDeployment)
+
+-- | The sequence number of the deployment.
+getDeployment_deploymentNumber :: Lens.Lens' GetDeployment Prelude.Int
+getDeployment_deploymentNumber = Lens.lens (\GetDeployment' {deploymentNumber} -> deploymentNumber) (\s@GetDeployment' {} a -> s {deploymentNumber = a} :: GetDeployment)
+
+instance Core.AWSRequest GetDeployment where
+  type AWSResponse GetDeployment = Deployment
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable GetDeployment where
+  hashWithSalt _salt GetDeployment' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` environmentId
+      `Prelude.hashWithSalt` deploymentNumber
+
+instance Prelude.NFData GetDeployment where
+  rnf GetDeployment' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf deploymentNumber
+
+instance Data.ToHeaders GetDeployment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDeployment where
+  toPath GetDeployment' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/environments/",
+        Data.toBS environmentId,
+        "/deployments/",
+        Data.toBS deploymentNumber
+      ]
+
+instance Data.ToQuery GetDeployment where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/GetDeploymentStrategy.hs b/gen/Amazonka/AppConfig/GetDeploymentStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/GetDeploymentStrategy.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.GetDeploymentStrategy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about a deployment strategy. A deployment strategy
+-- defines important criteria for rolling out your configuration to the
+-- designated targets. A deployment strategy includes the overall duration
+-- required, a percentage of targets to receive the deployment during each
+-- interval, an algorithm that defines how percentage grows, and bake time.
+module Amazonka.AppConfig.GetDeploymentStrategy
+  ( -- * Creating a Request
+    GetDeploymentStrategy (..),
+    newGetDeploymentStrategy,
+
+    -- * Request Lenses
+    getDeploymentStrategy_deploymentStrategyId,
+
+    -- * Destructuring the Response
+    DeploymentStrategy (..),
+    newDeploymentStrategy,
+
+    -- * Response Lenses
+    deploymentStrategy_deploymentDurationInMinutes,
+    deploymentStrategy_description,
+    deploymentStrategy_finalBakeTimeInMinutes,
+    deploymentStrategy_growthFactor,
+    deploymentStrategy_growthType,
+    deploymentStrategy_id,
+    deploymentStrategy_name,
+    deploymentStrategy_replicateTo,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDeploymentStrategy' smart constructor.
+data GetDeploymentStrategy = GetDeploymentStrategy'
+  { -- | The ID of the deployment strategy to get.
+    deploymentStrategyId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDeploymentStrategy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deploymentStrategyId', 'getDeploymentStrategy_deploymentStrategyId' - The ID of the deployment strategy to get.
+newGetDeploymentStrategy ::
+  -- | 'deploymentStrategyId'
+  Prelude.Text ->
+  GetDeploymentStrategy
+newGetDeploymentStrategy pDeploymentStrategyId_ =
+  GetDeploymentStrategy'
+    { deploymentStrategyId =
+        pDeploymentStrategyId_
+    }
+
+-- | The ID of the deployment strategy to get.
+getDeploymentStrategy_deploymentStrategyId :: Lens.Lens' GetDeploymentStrategy Prelude.Text
+getDeploymentStrategy_deploymentStrategyId = Lens.lens (\GetDeploymentStrategy' {deploymentStrategyId} -> deploymentStrategyId) (\s@GetDeploymentStrategy' {} a -> s {deploymentStrategyId = a} :: GetDeploymentStrategy)
+
+instance Core.AWSRequest GetDeploymentStrategy where
+  type
+    AWSResponse GetDeploymentStrategy =
+      DeploymentStrategy
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable GetDeploymentStrategy where
+  hashWithSalt _salt GetDeploymentStrategy' {..} =
+    _salt `Prelude.hashWithSalt` deploymentStrategyId
+
+instance Prelude.NFData GetDeploymentStrategy where
+  rnf GetDeploymentStrategy' {..} =
+    Prelude.rnf deploymentStrategyId
+
+instance Data.ToHeaders GetDeploymentStrategy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDeploymentStrategy where
+  toPath GetDeploymentStrategy' {..} =
+    Prelude.mconcat
+      [ "/deploymentstrategies/",
+        Data.toBS deploymentStrategyId
+      ]
+
+instance Data.ToQuery GetDeploymentStrategy where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/GetEnvironment.hs b/gen/Amazonka/AppConfig/GetEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/GetEnvironment.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.GetEnvironment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about an environment. An environment is a
+-- deployment group of AppConfig applications, such as applications in a
+-- @Production@ environment or in an @EU_Region@ environment. Each
+-- configuration deployment targets an environment. You can enable one or
+-- more Amazon CloudWatch alarms for an environment. If an alarm is
+-- triggered during a deployment, AppConfig roles back the configuration.
+module Amazonka.AppConfig.GetEnvironment
+  ( -- * Creating a Request
+    GetEnvironment (..),
+    newGetEnvironment,
+
+    -- * Request Lenses
+    getEnvironment_applicationId,
+    getEnvironment_environmentId,
+
+    -- * Destructuring the Response
+    Environment (..),
+    newEnvironment,
+
+    -- * Response Lenses
+    environment_applicationId,
+    environment_description,
+    environment_id,
+    environment_monitors,
+    environment_name,
+    environment_state,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetEnvironment' smart constructor.
+data GetEnvironment = GetEnvironment'
+  { -- | The ID of the application that includes the environment you want to get.
+    applicationId :: Prelude.Text,
+    -- | The ID of the environment that you want to get.
+    environmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEnvironment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'getEnvironment_applicationId' - The ID of the application that includes the environment you want to get.
+--
+-- 'environmentId', 'getEnvironment_environmentId' - The ID of the environment that you want to get.
+newGetEnvironment ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  GetEnvironment
+newGetEnvironment pApplicationId_ pEnvironmentId_ =
+  GetEnvironment'
+    { applicationId = pApplicationId_,
+      environmentId = pEnvironmentId_
+    }
+
+-- | The ID of the application that includes the environment you want to get.
+getEnvironment_applicationId :: Lens.Lens' GetEnvironment Prelude.Text
+getEnvironment_applicationId = Lens.lens (\GetEnvironment' {applicationId} -> applicationId) (\s@GetEnvironment' {} a -> s {applicationId = a} :: GetEnvironment)
+
+-- | The ID of the environment that you want to get.
+getEnvironment_environmentId :: Lens.Lens' GetEnvironment Prelude.Text
+getEnvironment_environmentId = Lens.lens (\GetEnvironment' {environmentId} -> environmentId) (\s@GetEnvironment' {} a -> s {environmentId = a} :: GetEnvironment)
+
+instance Core.AWSRequest GetEnvironment where
+  type AWSResponse GetEnvironment = Environment
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable GetEnvironment where
+  hashWithSalt _salt GetEnvironment' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` environmentId
+
+instance Prelude.NFData GetEnvironment where
+  rnf GetEnvironment' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf environmentId
+
+instance Data.ToHeaders GetEnvironment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetEnvironment where
+  toPath GetEnvironment' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/environments/",
+        Data.toBS environmentId
+      ]
+
+instance Data.ToQuery GetEnvironment where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/GetExtension.hs b/gen/Amazonka/AppConfig/GetExtension.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/GetExtension.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.GetExtension
+-- 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 information about an AppConfig extension.
+module Amazonka.AppConfig.GetExtension
+  ( -- * Creating a Request
+    GetExtension (..),
+    newGetExtension,
+
+    -- * Request Lenses
+    getExtension_versionNumber,
+    getExtension_extensionIdentifier,
+
+    -- * Destructuring the Response
+    Extension (..),
+    newExtension,
+
+    -- * Response Lenses
+    extension_actions,
+    extension_arn,
+    extension_description,
+    extension_id,
+    extension_name,
+    extension_parameters,
+    extension_versionNumber,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetExtension' smart constructor.
+data GetExtension = GetExtension'
+  { -- | The extension version number. If no version number was defined,
+    -- AppConfig uses the highest version.
+    versionNumber :: Prelude.Maybe Prelude.Int,
+    -- | The name, the ID, or the Amazon Resource Name (ARN) of the extension.
+    extensionIdentifier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetExtension' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'versionNumber', 'getExtension_versionNumber' - The extension version number. If no version number was defined,
+-- AppConfig uses the highest version.
+--
+-- 'extensionIdentifier', 'getExtension_extensionIdentifier' - The name, the ID, or the Amazon Resource Name (ARN) of the extension.
+newGetExtension ::
+  -- | 'extensionIdentifier'
+  Prelude.Text ->
+  GetExtension
+newGetExtension pExtensionIdentifier_ =
+  GetExtension'
+    { versionNumber = Prelude.Nothing,
+      extensionIdentifier = pExtensionIdentifier_
+    }
+
+-- | The extension version number. If no version number was defined,
+-- AppConfig uses the highest version.
+getExtension_versionNumber :: Lens.Lens' GetExtension (Prelude.Maybe Prelude.Int)
+getExtension_versionNumber = Lens.lens (\GetExtension' {versionNumber} -> versionNumber) (\s@GetExtension' {} a -> s {versionNumber = a} :: GetExtension)
+
+-- | The name, the ID, or the Amazon Resource Name (ARN) of the extension.
+getExtension_extensionIdentifier :: Lens.Lens' GetExtension Prelude.Text
+getExtension_extensionIdentifier = Lens.lens (\GetExtension' {extensionIdentifier} -> extensionIdentifier) (\s@GetExtension' {} a -> s {extensionIdentifier = a} :: GetExtension)
+
+instance Core.AWSRequest GetExtension where
+  type AWSResponse GetExtension = Extension
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable GetExtension where
+  hashWithSalt _salt GetExtension' {..} =
+    _salt
+      `Prelude.hashWithSalt` versionNumber
+      `Prelude.hashWithSalt` extensionIdentifier
+
+instance Prelude.NFData GetExtension where
+  rnf GetExtension' {..} =
+    Prelude.rnf versionNumber
+      `Prelude.seq` Prelude.rnf extensionIdentifier
+
+instance Data.ToHeaders GetExtension where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetExtension where
+  toPath GetExtension' {..} =
+    Prelude.mconcat
+      ["/extensions/", Data.toBS extensionIdentifier]
+
+instance Data.ToQuery GetExtension where
+  toQuery GetExtension' {..} =
+    Prelude.mconcat
+      ["version_number" Data.=: versionNumber]
diff --git a/gen/Amazonka/AppConfig/GetExtensionAssociation.hs b/gen/Amazonka/AppConfig/GetExtensionAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/GetExtensionAssociation.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.GetExtensionAssociation
+-- 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 information about an AppConfig extension association. For more
+-- information about extensions and associations, see
+-- <https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html Working with AppConfig extensions>
+-- in the /AppConfig User Guide/.
+module Amazonka.AppConfig.GetExtensionAssociation
+  ( -- * Creating a Request
+    GetExtensionAssociation (..),
+    newGetExtensionAssociation,
+
+    -- * Request Lenses
+    getExtensionAssociation_extensionAssociationId,
+
+    -- * Destructuring the Response
+    ExtensionAssociation (..),
+    newExtensionAssociation,
+
+    -- * Response Lenses
+    extensionAssociation_arn,
+    extensionAssociation_extensionArn,
+    extensionAssociation_extensionVersionNumber,
+    extensionAssociation_id,
+    extensionAssociation_parameters,
+    extensionAssociation_resourceArn,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetExtensionAssociation' smart constructor.
+data GetExtensionAssociation = GetExtensionAssociation'
+  { -- | The extension association ID to get.
+    extensionAssociationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetExtensionAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'extensionAssociationId', 'getExtensionAssociation_extensionAssociationId' - The extension association ID to get.
+newGetExtensionAssociation ::
+  -- | 'extensionAssociationId'
+  Prelude.Text ->
+  GetExtensionAssociation
+newGetExtensionAssociation pExtensionAssociationId_ =
+  GetExtensionAssociation'
+    { extensionAssociationId =
+        pExtensionAssociationId_
+    }
+
+-- | The extension association ID to get.
+getExtensionAssociation_extensionAssociationId :: Lens.Lens' GetExtensionAssociation Prelude.Text
+getExtensionAssociation_extensionAssociationId = Lens.lens (\GetExtensionAssociation' {extensionAssociationId} -> extensionAssociationId) (\s@GetExtensionAssociation' {} a -> s {extensionAssociationId = a} :: GetExtensionAssociation)
+
+instance Core.AWSRequest GetExtensionAssociation where
+  type
+    AWSResponse GetExtensionAssociation =
+      ExtensionAssociation
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable GetExtensionAssociation where
+  hashWithSalt _salt GetExtensionAssociation' {..} =
+    _salt `Prelude.hashWithSalt` extensionAssociationId
+
+instance Prelude.NFData GetExtensionAssociation where
+  rnf GetExtensionAssociation' {..} =
+    Prelude.rnf extensionAssociationId
+
+instance Data.ToHeaders GetExtensionAssociation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetExtensionAssociation where
+  toPath GetExtensionAssociation' {..} =
+    Prelude.mconcat
+      [ "/extensionassociations/",
+        Data.toBS extensionAssociationId
+      ]
+
+instance Data.ToQuery GetExtensionAssociation where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/GetHostedConfigurationVersion.hs b/gen/Amazonka/AppConfig/GetHostedConfigurationVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/GetHostedConfigurationVersion.hs
@@ -0,0 +1,172 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.GetHostedConfigurationVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about a specific configuration version.
+module Amazonka.AppConfig.GetHostedConfigurationVersion
+  ( -- * Creating a Request
+    GetHostedConfigurationVersion (..),
+    newGetHostedConfigurationVersion,
+
+    -- * Request Lenses
+    getHostedConfigurationVersion_applicationId,
+    getHostedConfigurationVersion_configurationProfileId,
+    getHostedConfigurationVersion_versionNumber,
+
+    -- * Destructuring the Response
+    HostedConfigurationVersion (..),
+    newHostedConfigurationVersion,
+
+    -- * Response Lenses
+    hostedConfigurationVersion_applicationId,
+    hostedConfigurationVersion_configurationProfileId,
+    hostedConfigurationVersion_content,
+    hostedConfigurationVersion_contentType,
+    hostedConfigurationVersion_description,
+    hostedConfigurationVersion_versionNumber,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetHostedConfigurationVersion' smart constructor.
+data GetHostedConfigurationVersion = GetHostedConfigurationVersion'
+  { -- | The application ID.
+    applicationId :: Prelude.Text,
+    -- | The configuration profile ID.
+    configurationProfileId :: Prelude.Text,
+    -- | The version.
+    versionNumber :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetHostedConfigurationVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'getHostedConfigurationVersion_applicationId' - The application ID.
+--
+-- 'configurationProfileId', 'getHostedConfigurationVersion_configurationProfileId' - The configuration profile ID.
+--
+-- 'versionNumber', 'getHostedConfigurationVersion_versionNumber' - The version.
+newGetHostedConfigurationVersion ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'configurationProfileId'
+  Prelude.Text ->
+  -- | 'versionNumber'
+  Prelude.Int ->
+  GetHostedConfigurationVersion
+newGetHostedConfigurationVersion
+  pApplicationId_
+  pConfigurationProfileId_
+  pVersionNumber_ =
+    GetHostedConfigurationVersion'
+      { applicationId =
+          pApplicationId_,
+        configurationProfileId =
+          pConfigurationProfileId_,
+        versionNumber = pVersionNumber_
+      }
+
+-- | The application ID.
+getHostedConfigurationVersion_applicationId :: Lens.Lens' GetHostedConfigurationVersion Prelude.Text
+getHostedConfigurationVersion_applicationId = Lens.lens (\GetHostedConfigurationVersion' {applicationId} -> applicationId) (\s@GetHostedConfigurationVersion' {} a -> s {applicationId = a} :: GetHostedConfigurationVersion)
+
+-- | The configuration profile ID.
+getHostedConfigurationVersion_configurationProfileId :: Lens.Lens' GetHostedConfigurationVersion Prelude.Text
+getHostedConfigurationVersion_configurationProfileId = Lens.lens (\GetHostedConfigurationVersion' {configurationProfileId} -> configurationProfileId) (\s@GetHostedConfigurationVersion' {} a -> s {configurationProfileId = a} :: GetHostedConfigurationVersion)
+
+-- | The version.
+getHostedConfigurationVersion_versionNumber :: Lens.Lens' GetHostedConfigurationVersion Prelude.Int
+getHostedConfigurationVersion_versionNumber = Lens.lens (\GetHostedConfigurationVersion' {versionNumber} -> versionNumber) (\s@GetHostedConfigurationVersion' {} a -> s {versionNumber = a} :: GetHostedConfigurationVersion)
+
+instance
+  Core.AWSRequest
+    GetHostedConfigurationVersion
+  where
+  type
+    AWSResponse GetHostedConfigurationVersion =
+      HostedConfigurationVersion
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveBytes
+      ( \s h x ->
+          HostedConfigurationVersion'
+            Prelude.<$> (h Data..#? "Application-Id")
+            Prelude.<*> (h Data..#? "Configuration-Profile-Id")
+            Prelude.<*> (Prelude.pure (Prelude.Just (Prelude.coerce x)))
+            Prelude.<*> (h Data..#? "Content-Type")
+            Prelude.<*> (h Data..#? "Description")
+            Prelude.<*> (h Data..#? "Version-Number")
+      )
+
+instance
+  Prelude.Hashable
+    GetHostedConfigurationVersion
+  where
+  hashWithSalt _salt GetHostedConfigurationVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` configurationProfileId
+      `Prelude.hashWithSalt` versionNumber
+
+instance Prelude.NFData GetHostedConfigurationVersion where
+  rnf GetHostedConfigurationVersion' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf configurationProfileId
+      `Prelude.seq` Prelude.rnf versionNumber
+
+instance Data.ToHeaders GetHostedConfigurationVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetHostedConfigurationVersion where
+  toPath GetHostedConfigurationVersion' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/configurationprofiles/",
+        Data.toBS configurationProfileId,
+        "/hostedconfigurationversions/",
+        Data.toBS versionNumber
+      ]
+
+instance Data.ToQuery GetHostedConfigurationVersion where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/Lens.hs b/gen/Amazonka/AppConfig/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Lens.hs
@@ -0,0 +1,674 @@
+{-# 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.AppConfig.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.AppConfig.Lens
+  ( -- * Operations
+
+    -- ** CreateApplication
+    createApplication_description,
+    createApplication_tags,
+    createApplication_name,
+    application_description,
+    application_id,
+    application_name,
+
+    -- ** CreateConfigurationProfile
+    createConfigurationProfile_description,
+    createConfigurationProfile_retrievalRoleArn,
+    createConfigurationProfile_tags,
+    createConfigurationProfile_type,
+    createConfigurationProfile_validators,
+    createConfigurationProfile_applicationId,
+    createConfigurationProfile_name,
+    createConfigurationProfile_locationUri,
+    configurationProfile_applicationId,
+    configurationProfile_description,
+    configurationProfile_id,
+    configurationProfile_locationUri,
+    configurationProfile_name,
+    configurationProfile_retrievalRoleArn,
+    configurationProfile_type,
+    configurationProfile_validators,
+
+    -- ** CreateDeploymentStrategy
+    createDeploymentStrategy_description,
+    createDeploymentStrategy_finalBakeTimeInMinutes,
+    createDeploymentStrategy_growthType,
+    createDeploymentStrategy_replicateTo,
+    createDeploymentStrategy_tags,
+    createDeploymentStrategy_name,
+    createDeploymentStrategy_deploymentDurationInMinutes,
+    createDeploymentStrategy_growthFactor,
+    deploymentStrategy_deploymentDurationInMinutes,
+    deploymentStrategy_description,
+    deploymentStrategy_finalBakeTimeInMinutes,
+    deploymentStrategy_growthFactor,
+    deploymentStrategy_growthType,
+    deploymentStrategy_id,
+    deploymentStrategy_name,
+    deploymentStrategy_replicateTo,
+
+    -- ** CreateEnvironment
+    createEnvironment_description,
+    createEnvironment_monitors,
+    createEnvironment_tags,
+    createEnvironment_applicationId,
+    createEnvironment_name,
+    environment_applicationId,
+    environment_description,
+    environment_id,
+    environment_monitors,
+    environment_name,
+    environment_state,
+
+    -- ** CreateExtension
+    createExtension_description,
+    createExtension_latestVersionNumber,
+    createExtension_parameters,
+    createExtension_tags,
+    createExtension_name,
+    createExtension_actions,
+    extension_actions,
+    extension_arn,
+    extension_description,
+    extension_id,
+    extension_name,
+    extension_parameters,
+    extension_versionNumber,
+
+    -- ** CreateExtensionAssociation
+    createExtensionAssociation_extensionVersionNumber,
+    createExtensionAssociation_parameters,
+    createExtensionAssociation_tags,
+    createExtensionAssociation_extensionIdentifier,
+    createExtensionAssociation_resourceIdentifier,
+    extensionAssociation_arn,
+    extensionAssociation_extensionArn,
+    extensionAssociation_extensionVersionNumber,
+    extensionAssociation_id,
+    extensionAssociation_parameters,
+    extensionAssociation_resourceArn,
+
+    -- ** CreateHostedConfigurationVersion
+    createHostedConfigurationVersion_description,
+    createHostedConfigurationVersion_latestVersionNumber,
+    createHostedConfigurationVersion_applicationId,
+    createHostedConfigurationVersion_configurationProfileId,
+    createHostedConfigurationVersion_content,
+    createHostedConfigurationVersion_contentType,
+    hostedConfigurationVersion_applicationId,
+    hostedConfigurationVersion_configurationProfileId,
+    hostedConfigurationVersion_content,
+    hostedConfigurationVersion_contentType,
+    hostedConfigurationVersion_description,
+    hostedConfigurationVersion_versionNumber,
+
+    -- ** DeleteApplication
+    deleteApplication_applicationId,
+
+    -- ** DeleteConfigurationProfile
+    deleteConfigurationProfile_applicationId,
+    deleteConfigurationProfile_configurationProfileId,
+
+    -- ** DeleteDeploymentStrategy
+    deleteDeploymentStrategy_deploymentStrategyId,
+
+    -- ** DeleteEnvironment
+    deleteEnvironment_applicationId,
+    deleteEnvironment_environmentId,
+
+    -- ** DeleteExtension
+    deleteExtension_versionNumber,
+    deleteExtension_extensionIdentifier,
+
+    -- ** DeleteExtensionAssociation
+    deleteExtensionAssociation_extensionAssociationId,
+
+    -- ** DeleteHostedConfigurationVersion
+    deleteHostedConfigurationVersion_applicationId,
+    deleteHostedConfigurationVersion_configurationProfileId,
+    deleteHostedConfigurationVersion_versionNumber,
+
+    -- ** GetApplication
+    getApplication_applicationId,
+    application_description,
+    application_id,
+    application_name,
+
+    -- ** GetConfigurationProfile
+    getConfigurationProfile_applicationId,
+    getConfigurationProfile_configurationProfileId,
+    configurationProfile_applicationId,
+    configurationProfile_description,
+    configurationProfile_id,
+    configurationProfile_locationUri,
+    configurationProfile_name,
+    configurationProfile_retrievalRoleArn,
+    configurationProfile_type,
+    configurationProfile_validators,
+
+    -- ** GetDeployment
+    getDeployment_applicationId,
+    getDeployment_environmentId,
+    getDeployment_deploymentNumber,
+    deployment_applicationId,
+    deployment_appliedExtensions,
+    deployment_completedAt,
+    deployment_configurationLocationUri,
+    deployment_configurationName,
+    deployment_configurationProfileId,
+    deployment_configurationVersion,
+    deployment_deploymentDurationInMinutes,
+    deployment_deploymentNumber,
+    deployment_deploymentStrategyId,
+    deployment_description,
+    deployment_environmentId,
+    deployment_eventLog,
+    deployment_finalBakeTimeInMinutes,
+    deployment_growthFactor,
+    deployment_growthType,
+    deployment_percentageComplete,
+    deployment_startedAt,
+    deployment_state,
+
+    -- ** GetDeploymentStrategy
+    getDeploymentStrategy_deploymentStrategyId,
+    deploymentStrategy_deploymentDurationInMinutes,
+    deploymentStrategy_description,
+    deploymentStrategy_finalBakeTimeInMinutes,
+    deploymentStrategy_growthFactor,
+    deploymentStrategy_growthType,
+    deploymentStrategy_id,
+    deploymentStrategy_name,
+    deploymentStrategy_replicateTo,
+
+    -- ** GetEnvironment
+    getEnvironment_applicationId,
+    getEnvironment_environmentId,
+    environment_applicationId,
+    environment_description,
+    environment_id,
+    environment_monitors,
+    environment_name,
+    environment_state,
+
+    -- ** GetExtension
+    getExtension_versionNumber,
+    getExtension_extensionIdentifier,
+    extension_actions,
+    extension_arn,
+    extension_description,
+    extension_id,
+    extension_name,
+    extension_parameters,
+    extension_versionNumber,
+
+    -- ** GetExtensionAssociation
+    getExtensionAssociation_extensionAssociationId,
+    extensionAssociation_arn,
+    extensionAssociation_extensionArn,
+    extensionAssociation_extensionVersionNumber,
+    extensionAssociation_id,
+    extensionAssociation_parameters,
+    extensionAssociation_resourceArn,
+
+    -- ** GetHostedConfigurationVersion
+    getHostedConfigurationVersion_applicationId,
+    getHostedConfigurationVersion_configurationProfileId,
+    getHostedConfigurationVersion_versionNumber,
+    hostedConfigurationVersion_applicationId,
+    hostedConfigurationVersion_configurationProfileId,
+    hostedConfigurationVersion_content,
+    hostedConfigurationVersion_contentType,
+    hostedConfigurationVersion_description,
+    hostedConfigurationVersion_versionNumber,
+
+    -- ** ListApplications
+    listApplications_maxResults,
+    listApplications_nextToken,
+    listApplicationsResponse_items,
+    listApplicationsResponse_nextToken,
+    listApplicationsResponse_httpStatus,
+
+    -- ** ListConfigurationProfiles
+    listConfigurationProfiles_maxResults,
+    listConfigurationProfiles_nextToken,
+    listConfigurationProfiles_type,
+    listConfigurationProfiles_applicationId,
+    listConfigurationProfilesResponse_items,
+    listConfigurationProfilesResponse_nextToken,
+    listConfigurationProfilesResponse_httpStatus,
+
+    -- ** ListDeploymentStrategies
+    listDeploymentStrategies_maxResults,
+    listDeploymentStrategies_nextToken,
+    listDeploymentStrategiesResponse_items,
+    listDeploymentStrategiesResponse_nextToken,
+    listDeploymentStrategiesResponse_httpStatus,
+
+    -- ** ListDeployments
+    listDeployments_maxResults,
+    listDeployments_nextToken,
+    listDeployments_applicationId,
+    listDeployments_environmentId,
+    listDeploymentsResponse_items,
+    listDeploymentsResponse_nextToken,
+    listDeploymentsResponse_httpStatus,
+
+    -- ** ListEnvironments
+    listEnvironments_maxResults,
+    listEnvironments_nextToken,
+    listEnvironments_applicationId,
+    listEnvironmentsResponse_items,
+    listEnvironmentsResponse_nextToken,
+    listEnvironmentsResponse_httpStatus,
+
+    -- ** ListExtensionAssociations
+    listExtensionAssociations_extensionIdentifier,
+    listExtensionAssociations_extensionVersionNumber,
+    listExtensionAssociations_maxResults,
+    listExtensionAssociations_nextToken,
+    listExtensionAssociations_resourceIdentifier,
+    listExtensionAssociationsResponse_items,
+    listExtensionAssociationsResponse_nextToken,
+    listExtensionAssociationsResponse_httpStatus,
+
+    -- ** ListExtensions
+    listExtensions_maxResults,
+    listExtensions_name,
+    listExtensions_nextToken,
+    listExtensionsResponse_items,
+    listExtensionsResponse_nextToken,
+    listExtensionsResponse_httpStatus,
+
+    -- ** ListHostedConfigurationVersions
+    listHostedConfigurationVersions_maxResults,
+    listHostedConfigurationVersions_nextToken,
+    listHostedConfigurationVersions_applicationId,
+    listHostedConfigurationVersions_configurationProfileId,
+    listHostedConfigurationVersionsResponse_items,
+    listHostedConfigurationVersionsResponse_nextToken,
+    listHostedConfigurationVersionsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** StartDeployment
+    startDeployment_description,
+    startDeployment_tags,
+    startDeployment_applicationId,
+    startDeployment_environmentId,
+    startDeployment_deploymentStrategyId,
+    startDeployment_configurationProfileId,
+    startDeployment_configurationVersion,
+    deployment_applicationId,
+    deployment_appliedExtensions,
+    deployment_completedAt,
+    deployment_configurationLocationUri,
+    deployment_configurationName,
+    deployment_configurationProfileId,
+    deployment_configurationVersion,
+    deployment_deploymentDurationInMinutes,
+    deployment_deploymentNumber,
+    deployment_deploymentStrategyId,
+    deployment_description,
+    deployment_environmentId,
+    deployment_eventLog,
+    deployment_finalBakeTimeInMinutes,
+    deployment_growthFactor,
+    deployment_growthType,
+    deployment_percentageComplete,
+    deployment_startedAt,
+    deployment_state,
+
+    -- ** StopDeployment
+    stopDeployment_applicationId,
+    stopDeployment_environmentId,
+    stopDeployment_deploymentNumber,
+    deployment_applicationId,
+    deployment_appliedExtensions,
+    deployment_completedAt,
+    deployment_configurationLocationUri,
+    deployment_configurationName,
+    deployment_configurationProfileId,
+    deployment_configurationVersion,
+    deployment_deploymentDurationInMinutes,
+    deployment_deploymentNumber,
+    deployment_deploymentStrategyId,
+    deployment_description,
+    deployment_environmentId,
+    deployment_eventLog,
+    deployment_finalBakeTimeInMinutes,
+    deployment_growthFactor,
+    deployment_growthType,
+    deployment_percentageComplete,
+    deployment_startedAt,
+    deployment_state,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- ** UpdateApplication
+    updateApplication_description,
+    updateApplication_name,
+    updateApplication_applicationId,
+    application_description,
+    application_id,
+    application_name,
+
+    -- ** UpdateConfigurationProfile
+    updateConfigurationProfile_description,
+    updateConfigurationProfile_name,
+    updateConfigurationProfile_retrievalRoleArn,
+    updateConfigurationProfile_validators,
+    updateConfigurationProfile_applicationId,
+    updateConfigurationProfile_configurationProfileId,
+    configurationProfile_applicationId,
+    configurationProfile_description,
+    configurationProfile_id,
+    configurationProfile_locationUri,
+    configurationProfile_name,
+    configurationProfile_retrievalRoleArn,
+    configurationProfile_type,
+    configurationProfile_validators,
+
+    -- ** UpdateDeploymentStrategy
+    updateDeploymentStrategy_deploymentDurationInMinutes,
+    updateDeploymentStrategy_description,
+    updateDeploymentStrategy_finalBakeTimeInMinutes,
+    updateDeploymentStrategy_growthFactor,
+    updateDeploymentStrategy_growthType,
+    updateDeploymentStrategy_deploymentStrategyId,
+    deploymentStrategy_deploymentDurationInMinutes,
+    deploymentStrategy_description,
+    deploymentStrategy_finalBakeTimeInMinutes,
+    deploymentStrategy_growthFactor,
+    deploymentStrategy_growthType,
+    deploymentStrategy_id,
+    deploymentStrategy_name,
+    deploymentStrategy_replicateTo,
+
+    -- ** UpdateEnvironment
+    updateEnvironment_description,
+    updateEnvironment_monitors,
+    updateEnvironment_name,
+    updateEnvironment_applicationId,
+    updateEnvironment_environmentId,
+    environment_applicationId,
+    environment_description,
+    environment_id,
+    environment_monitors,
+    environment_name,
+    environment_state,
+
+    -- ** UpdateExtension
+    updateExtension_actions,
+    updateExtension_description,
+    updateExtension_parameters,
+    updateExtension_versionNumber,
+    updateExtension_extensionIdentifier,
+    extension_actions,
+    extension_arn,
+    extension_description,
+    extension_id,
+    extension_name,
+    extension_parameters,
+    extension_versionNumber,
+
+    -- ** UpdateExtensionAssociation
+    updateExtensionAssociation_parameters,
+    updateExtensionAssociation_extensionAssociationId,
+    extensionAssociation_arn,
+    extensionAssociation_extensionArn,
+    extensionAssociation_extensionVersionNumber,
+    extensionAssociation_id,
+    extensionAssociation_parameters,
+    extensionAssociation_resourceArn,
+
+    -- ** ValidateConfiguration
+    validateConfiguration_applicationId,
+    validateConfiguration_configurationProfileId,
+    validateConfiguration_configurationVersion,
+
+    -- * Types
+
+    -- ** Action
+    action_description,
+    action_name,
+    action_roleArn,
+    action_uri,
+
+    -- ** ActionInvocation
+    actionInvocation_actionName,
+    actionInvocation_errorCode,
+    actionInvocation_errorMessage,
+    actionInvocation_extensionIdentifier,
+    actionInvocation_invocationId,
+    actionInvocation_roleArn,
+    actionInvocation_uri,
+
+    -- ** Application
+    application_description,
+    application_id,
+    application_name,
+
+    -- ** AppliedExtension
+    appliedExtension_extensionAssociationId,
+    appliedExtension_extensionId,
+    appliedExtension_parameters,
+    appliedExtension_versionNumber,
+
+    -- ** ConfigurationProfile
+    configurationProfile_applicationId,
+    configurationProfile_description,
+    configurationProfile_id,
+    configurationProfile_locationUri,
+    configurationProfile_name,
+    configurationProfile_retrievalRoleArn,
+    configurationProfile_type,
+    configurationProfile_validators,
+
+    -- ** ConfigurationProfileSummary
+    configurationProfileSummary_applicationId,
+    configurationProfileSummary_id,
+    configurationProfileSummary_locationUri,
+    configurationProfileSummary_name,
+    configurationProfileSummary_type,
+    configurationProfileSummary_validatorTypes,
+
+    -- ** Deployment
+    deployment_applicationId,
+    deployment_appliedExtensions,
+    deployment_completedAt,
+    deployment_configurationLocationUri,
+    deployment_configurationName,
+    deployment_configurationProfileId,
+    deployment_configurationVersion,
+    deployment_deploymentDurationInMinutes,
+    deployment_deploymentNumber,
+    deployment_deploymentStrategyId,
+    deployment_description,
+    deployment_environmentId,
+    deployment_eventLog,
+    deployment_finalBakeTimeInMinutes,
+    deployment_growthFactor,
+    deployment_growthType,
+    deployment_percentageComplete,
+    deployment_startedAt,
+    deployment_state,
+
+    -- ** DeploymentEvent
+    deploymentEvent_actionInvocations,
+    deploymentEvent_description,
+    deploymentEvent_eventType,
+    deploymentEvent_occurredAt,
+    deploymentEvent_triggeredBy,
+
+    -- ** DeploymentStrategy
+    deploymentStrategy_deploymentDurationInMinutes,
+    deploymentStrategy_description,
+    deploymentStrategy_finalBakeTimeInMinutes,
+    deploymentStrategy_growthFactor,
+    deploymentStrategy_growthType,
+    deploymentStrategy_id,
+    deploymentStrategy_name,
+    deploymentStrategy_replicateTo,
+
+    -- ** DeploymentSummary
+    deploymentSummary_completedAt,
+    deploymentSummary_configurationName,
+    deploymentSummary_configurationVersion,
+    deploymentSummary_deploymentDurationInMinutes,
+    deploymentSummary_deploymentNumber,
+    deploymentSummary_finalBakeTimeInMinutes,
+    deploymentSummary_growthFactor,
+    deploymentSummary_growthType,
+    deploymentSummary_percentageComplete,
+    deploymentSummary_startedAt,
+    deploymentSummary_state,
+
+    -- ** Environment
+    environment_applicationId,
+    environment_description,
+    environment_id,
+    environment_monitors,
+    environment_name,
+    environment_state,
+
+    -- ** Extension
+    extension_actions,
+    extension_arn,
+    extension_description,
+    extension_id,
+    extension_name,
+    extension_parameters,
+    extension_versionNumber,
+
+    -- ** ExtensionAssociation
+    extensionAssociation_arn,
+    extensionAssociation_extensionArn,
+    extensionAssociation_extensionVersionNumber,
+    extensionAssociation_id,
+    extensionAssociation_parameters,
+    extensionAssociation_resourceArn,
+
+    -- ** ExtensionAssociationSummary
+    extensionAssociationSummary_extensionArn,
+    extensionAssociationSummary_id,
+    extensionAssociationSummary_resourceArn,
+
+    -- ** ExtensionSummary
+    extensionSummary_arn,
+    extensionSummary_description,
+    extensionSummary_id,
+    extensionSummary_name,
+    extensionSummary_versionNumber,
+
+    -- ** HostedConfigurationVersion
+    hostedConfigurationVersion_applicationId,
+    hostedConfigurationVersion_configurationProfileId,
+    hostedConfigurationVersion_content,
+    hostedConfigurationVersion_contentType,
+    hostedConfigurationVersion_description,
+    hostedConfigurationVersion_versionNumber,
+
+    -- ** HostedConfigurationVersionSummary
+    hostedConfigurationVersionSummary_applicationId,
+    hostedConfigurationVersionSummary_configurationProfileId,
+    hostedConfigurationVersionSummary_contentType,
+    hostedConfigurationVersionSummary_description,
+    hostedConfigurationVersionSummary_versionNumber,
+
+    -- ** Monitor
+    monitor_alarmRoleArn,
+    monitor_alarmArn,
+
+    -- ** Parameter
+    parameter_description,
+    parameter_required,
+
+    -- ** Validator
+    validator_type,
+    validator_content,
+  )
+where
+
+import Amazonka.AppConfig.CreateApplication
+import Amazonka.AppConfig.CreateConfigurationProfile
+import Amazonka.AppConfig.CreateDeploymentStrategy
+import Amazonka.AppConfig.CreateEnvironment
+import Amazonka.AppConfig.CreateExtension
+import Amazonka.AppConfig.CreateExtensionAssociation
+import Amazonka.AppConfig.CreateHostedConfigurationVersion
+import Amazonka.AppConfig.DeleteApplication
+import Amazonka.AppConfig.DeleteConfigurationProfile
+import Amazonka.AppConfig.DeleteDeploymentStrategy
+import Amazonka.AppConfig.DeleteEnvironment
+import Amazonka.AppConfig.DeleteExtension
+import Amazonka.AppConfig.DeleteExtensionAssociation
+import Amazonka.AppConfig.DeleteHostedConfigurationVersion
+import Amazonka.AppConfig.GetApplication
+import Amazonka.AppConfig.GetConfigurationProfile
+import Amazonka.AppConfig.GetDeployment
+import Amazonka.AppConfig.GetDeploymentStrategy
+import Amazonka.AppConfig.GetEnvironment
+import Amazonka.AppConfig.GetExtension
+import Amazonka.AppConfig.GetExtensionAssociation
+import Amazonka.AppConfig.GetHostedConfigurationVersion
+import Amazonka.AppConfig.ListApplications
+import Amazonka.AppConfig.ListConfigurationProfiles
+import Amazonka.AppConfig.ListDeploymentStrategies
+import Amazonka.AppConfig.ListDeployments
+import Amazonka.AppConfig.ListEnvironments
+import Amazonka.AppConfig.ListExtensionAssociations
+import Amazonka.AppConfig.ListExtensions
+import Amazonka.AppConfig.ListHostedConfigurationVersions
+import Amazonka.AppConfig.ListTagsForResource
+import Amazonka.AppConfig.StartDeployment
+import Amazonka.AppConfig.StopDeployment
+import Amazonka.AppConfig.TagResource
+import Amazonka.AppConfig.Types.Action
+import Amazonka.AppConfig.Types.ActionInvocation
+import Amazonka.AppConfig.Types.Application
+import Amazonka.AppConfig.Types.AppliedExtension
+import Amazonka.AppConfig.Types.ConfigurationProfile
+import Amazonka.AppConfig.Types.ConfigurationProfileSummary
+import Amazonka.AppConfig.Types.Deployment
+import Amazonka.AppConfig.Types.DeploymentEvent
+import Amazonka.AppConfig.Types.DeploymentStrategy
+import Amazonka.AppConfig.Types.DeploymentSummary
+import Amazonka.AppConfig.Types.Environment
+import Amazonka.AppConfig.Types.Extension
+import Amazonka.AppConfig.Types.ExtensionAssociation
+import Amazonka.AppConfig.Types.ExtensionAssociationSummary
+import Amazonka.AppConfig.Types.ExtensionSummary
+import Amazonka.AppConfig.Types.HostedConfigurationVersion
+import Amazonka.AppConfig.Types.HostedConfigurationVersionSummary
+import Amazonka.AppConfig.Types.Monitor
+import Amazonka.AppConfig.Types.Parameter
+import Amazonka.AppConfig.Types.Validator
+import Amazonka.AppConfig.UntagResource
+import Amazonka.AppConfig.UpdateApplication
+import Amazonka.AppConfig.UpdateConfigurationProfile
+import Amazonka.AppConfig.UpdateDeploymentStrategy
+import Amazonka.AppConfig.UpdateEnvironment
+import Amazonka.AppConfig.UpdateExtension
+import Amazonka.AppConfig.UpdateExtensionAssociation
+import Amazonka.AppConfig.ValidateConfiguration
diff --git a/gen/Amazonka/AppConfig/ListApplications.hs b/gen/Amazonka/AppConfig/ListApplications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/ListApplications.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.ListApplications
+-- 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 all applications in your Amazon Web Services account.
+module Amazonka.AppConfig.ListApplications
+  ( -- * Creating a Request
+    ListApplications (..),
+    newListApplications,
+
+    -- * Request Lenses
+    listApplications_maxResults,
+    listApplications_nextToken,
+
+    -- * Destructuring the Response
+    ListApplicationsResponse (..),
+    newListApplicationsResponse,
+
+    -- * Response Lenses
+    listApplicationsResponse_items,
+    listApplicationsResponse_nextToken,
+    listApplicationsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListApplications' smart constructor.
+data ListApplications = ListApplications'
+  { -- | The maximum number of items to return for this call. The call also
+    -- returns a token that you can specify in a subsequent call to get the
+    -- next set of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to start the list. Next token is a pagination token generated by
+    -- AppConfig to describe what page the previous List call ended on. For the
+    -- first List request, the nextToken should not be set. On subsequent
+    -- calls, the nextToken parameter should be set to the previous responses
+    -- nextToken value. Use this token to get the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListApplications' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listApplications_maxResults' - The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+--
+-- 'nextToken', 'listApplications_nextToken' - A token to start the list. Next token is a pagination token generated by
+-- AppConfig to describe what page the previous List call ended on. For the
+-- first List request, the nextToken should not be set. On subsequent
+-- calls, the nextToken parameter should be set to the previous responses
+-- nextToken value. Use this token to get the next set of results.
+newListApplications ::
+  ListApplications
+newListApplications =
+  ListApplications'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+listApplications_maxResults :: Lens.Lens' ListApplications (Prelude.Maybe Prelude.Natural)
+listApplications_maxResults = Lens.lens (\ListApplications' {maxResults} -> maxResults) (\s@ListApplications' {} a -> s {maxResults = a} :: ListApplications)
+
+-- | A token to start the list. Next token is a pagination token generated by
+-- AppConfig to describe what page the previous List call ended on. For the
+-- first List request, the nextToken should not be set. On subsequent
+-- calls, the nextToken parameter should be set to the previous responses
+-- nextToken value. Use this token to get the next set of results.
+listApplications_nextToken :: Lens.Lens' ListApplications (Prelude.Maybe Prelude.Text)
+listApplications_nextToken = Lens.lens (\ListApplications' {nextToken} -> nextToken) (\s@ListApplications' {} a -> s {nextToken = a} :: ListApplications)
+
+instance Core.AWSRequest ListApplications where
+  type
+    AWSResponse ListApplications =
+      ListApplicationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListApplicationsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListApplications where
+  hashWithSalt _salt ListApplications' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListApplications where
+  rnf ListApplications' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListApplications where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListApplications where
+  toPath = Prelude.const "/applications"
+
+instance Data.ToQuery ListApplications where
+  toQuery ListApplications' {..} =
+    Prelude.mconcat
+      [ "max_results" Data.=: maxResults,
+        "next_token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListApplicationsResponse' smart constructor.
+data ListApplicationsResponse = ListApplicationsResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [Application],
+    -- | The token for the next set of items to return. Use this token to get the
+    -- next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListApplicationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listApplicationsResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'listApplicationsResponse_nextToken' - The token for the next set of items to return. Use this token to get the
+-- next set of results.
+--
+-- 'httpStatus', 'listApplicationsResponse_httpStatus' - The response's http status code.
+newListApplicationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListApplicationsResponse
+newListApplicationsResponse pHttpStatus_ =
+  ListApplicationsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+listApplicationsResponse_items :: Lens.Lens' ListApplicationsResponse (Prelude.Maybe [Application])
+listApplicationsResponse_items = Lens.lens (\ListApplicationsResponse' {items} -> items) (\s@ListApplicationsResponse' {} a -> s {items = a} :: ListApplicationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of items to return. Use this token to get the
+-- next set of results.
+listApplicationsResponse_nextToken :: Lens.Lens' ListApplicationsResponse (Prelude.Maybe Prelude.Text)
+listApplicationsResponse_nextToken = Lens.lens (\ListApplicationsResponse' {nextToken} -> nextToken) (\s@ListApplicationsResponse' {} a -> s {nextToken = a} :: ListApplicationsResponse)
+
+-- | The response's http status code.
+listApplicationsResponse_httpStatus :: Lens.Lens' ListApplicationsResponse Prelude.Int
+listApplicationsResponse_httpStatus = Lens.lens (\ListApplicationsResponse' {httpStatus} -> httpStatus) (\s@ListApplicationsResponse' {} a -> s {httpStatus = a} :: ListApplicationsResponse)
+
+instance Prelude.NFData ListApplicationsResponse where
+  rnf ListApplicationsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppConfig/ListConfigurationProfiles.hs b/gen/Amazonka/AppConfig/ListConfigurationProfiles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/ListConfigurationProfiles.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.AppConfig.ListConfigurationProfiles
+-- 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 configuration profiles for an application.
+module Amazonka.AppConfig.ListConfigurationProfiles
+  ( -- * Creating a Request
+    ListConfigurationProfiles (..),
+    newListConfigurationProfiles,
+
+    -- * Request Lenses
+    listConfigurationProfiles_maxResults,
+    listConfigurationProfiles_nextToken,
+    listConfigurationProfiles_type,
+    listConfigurationProfiles_applicationId,
+
+    -- * Destructuring the Response
+    ListConfigurationProfilesResponse (..),
+    newListConfigurationProfilesResponse,
+
+    -- * Response Lenses
+    listConfigurationProfilesResponse_items,
+    listConfigurationProfilesResponse_nextToken,
+    listConfigurationProfilesResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListConfigurationProfiles' smart constructor.
+data ListConfigurationProfiles = ListConfigurationProfiles'
+  { -- | The maximum number of items to return for this call. The call also
+    -- returns a token that you can specify in a subsequent call to get the
+    -- next set of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to start the list. Use this token to get the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A filter based on the type of configurations that the configuration
+    -- profile contains. A configuration can be a feature flag or a freeform
+    -- configuration.
+    type' :: Prelude.Maybe Prelude.Text,
+    -- | The application ID.
+    applicationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListConfigurationProfiles' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listConfigurationProfiles_maxResults' - The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+--
+-- 'nextToken', 'listConfigurationProfiles_nextToken' - A token to start the list. Use this token to get the next set of
+-- results.
+--
+-- 'type'', 'listConfigurationProfiles_type' - A filter based on the type of configurations that the configuration
+-- profile contains. A configuration can be a feature flag or a freeform
+-- configuration.
+--
+-- 'applicationId', 'listConfigurationProfiles_applicationId' - The application ID.
+newListConfigurationProfiles ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  ListConfigurationProfiles
+newListConfigurationProfiles pApplicationId_ =
+  ListConfigurationProfiles'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      applicationId = pApplicationId_
+    }
+
+-- | The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+listConfigurationProfiles_maxResults :: Lens.Lens' ListConfigurationProfiles (Prelude.Maybe Prelude.Natural)
+listConfigurationProfiles_maxResults = Lens.lens (\ListConfigurationProfiles' {maxResults} -> maxResults) (\s@ListConfigurationProfiles' {} a -> s {maxResults = a} :: ListConfigurationProfiles)
+
+-- | A token to start the list. Use this token to get the next set of
+-- results.
+listConfigurationProfiles_nextToken :: Lens.Lens' ListConfigurationProfiles (Prelude.Maybe Prelude.Text)
+listConfigurationProfiles_nextToken = Lens.lens (\ListConfigurationProfiles' {nextToken} -> nextToken) (\s@ListConfigurationProfiles' {} a -> s {nextToken = a} :: ListConfigurationProfiles)
+
+-- | A filter based on the type of configurations that the configuration
+-- profile contains. A configuration can be a feature flag or a freeform
+-- configuration.
+listConfigurationProfiles_type :: Lens.Lens' ListConfigurationProfiles (Prelude.Maybe Prelude.Text)
+listConfigurationProfiles_type = Lens.lens (\ListConfigurationProfiles' {type'} -> type') (\s@ListConfigurationProfiles' {} a -> s {type' = a} :: ListConfigurationProfiles)
+
+-- | The application ID.
+listConfigurationProfiles_applicationId :: Lens.Lens' ListConfigurationProfiles Prelude.Text
+listConfigurationProfiles_applicationId = Lens.lens (\ListConfigurationProfiles' {applicationId} -> applicationId) (\s@ListConfigurationProfiles' {} a -> s {applicationId = a} :: ListConfigurationProfiles)
+
+instance Core.AWSRequest ListConfigurationProfiles where
+  type
+    AWSResponse ListConfigurationProfiles =
+      ListConfigurationProfilesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListConfigurationProfilesResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListConfigurationProfiles where
+  hashWithSalt _salt ListConfigurationProfiles' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` applicationId
+
+instance Prelude.NFData ListConfigurationProfiles where
+  rnf ListConfigurationProfiles' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf applicationId
+
+instance Data.ToHeaders ListConfigurationProfiles where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListConfigurationProfiles where
+  toPath ListConfigurationProfiles' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/configurationprofiles"
+      ]
+
+instance Data.ToQuery ListConfigurationProfiles where
+  toQuery ListConfigurationProfiles' {..} =
+    Prelude.mconcat
+      [ "max_results" Data.=: maxResults,
+        "next_token" Data.=: nextToken,
+        "type" Data.=: type'
+      ]
+
+-- | /See:/ 'newListConfigurationProfilesResponse' smart constructor.
+data ListConfigurationProfilesResponse = ListConfigurationProfilesResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [ConfigurationProfileSummary],
+    -- | The token for the next set of items to return. Use this token to get the
+    -- next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListConfigurationProfilesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listConfigurationProfilesResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'listConfigurationProfilesResponse_nextToken' - The token for the next set of items to return. Use this token to get the
+-- next set of results.
+--
+-- 'httpStatus', 'listConfigurationProfilesResponse_httpStatus' - The response's http status code.
+newListConfigurationProfilesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListConfigurationProfilesResponse
+newListConfigurationProfilesResponse pHttpStatus_ =
+  ListConfigurationProfilesResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+listConfigurationProfilesResponse_items :: Lens.Lens' ListConfigurationProfilesResponse (Prelude.Maybe [ConfigurationProfileSummary])
+listConfigurationProfilesResponse_items = Lens.lens (\ListConfigurationProfilesResponse' {items} -> items) (\s@ListConfigurationProfilesResponse' {} a -> s {items = a} :: ListConfigurationProfilesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of items to return. Use this token to get the
+-- next set of results.
+listConfigurationProfilesResponse_nextToken :: Lens.Lens' ListConfigurationProfilesResponse (Prelude.Maybe Prelude.Text)
+listConfigurationProfilesResponse_nextToken = Lens.lens (\ListConfigurationProfilesResponse' {nextToken} -> nextToken) (\s@ListConfigurationProfilesResponse' {} a -> s {nextToken = a} :: ListConfigurationProfilesResponse)
+
+-- | The response's http status code.
+listConfigurationProfilesResponse_httpStatus :: Lens.Lens' ListConfigurationProfilesResponse Prelude.Int
+listConfigurationProfilesResponse_httpStatus = Lens.lens (\ListConfigurationProfilesResponse' {httpStatus} -> httpStatus) (\s@ListConfigurationProfilesResponse' {} a -> s {httpStatus = a} :: ListConfigurationProfilesResponse)
+
+instance
+  Prelude.NFData
+    ListConfigurationProfilesResponse
+  where
+  rnf ListConfigurationProfilesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppConfig/ListDeploymentStrategies.hs b/gen/Amazonka/AppConfig/ListDeploymentStrategies.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/ListDeploymentStrategies.hs
@@ -0,0 +1,203 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.ListDeploymentStrategies
+-- 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 deployment strategies.
+module Amazonka.AppConfig.ListDeploymentStrategies
+  ( -- * Creating a Request
+    ListDeploymentStrategies (..),
+    newListDeploymentStrategies,
+
+    -- * Request Lenses
+    listDeploymentStrategies_maxResults,
+    listDeploymentStrategies_nextToken,
+
+    -- * Destructuring the Response
+    ListDeploymentStrategiesResponse (..),
+    newListDeploymentStrategiesResponse,
+
+    -- * Response Lenses
+    listDeploymentStrategiesResponse_items,
+    listDeploymentStrategiesResponse_nextToken,
+    listDeploymentStrategiesResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDeploymentStrategies' smart constructor.
+data ListDeploymentStrategies = ListDeploymentStrategies'
+  { -- | The maximum number of items to return for this call. The call also
+    -- returns a token that you can specify in a subsequent call to get the
+    -- next set of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to start the list. Use this token to get the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDeploymentStrategies' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDeploymentStrategies_maxResults' - The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+--
+-- 'nextToken', 'listDeploymentStrategies_nextToken' - A token to start the list. Use this token to get the next set of
+-- results.
+newListDeploymentStrategies ::
+  ListDeploymentStrategies
+newListDeploymentStrategies =
+  ListDeploymentStrategies'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+listDeploymentStrategies_maxResults :: Lens.Lens' ListDeploymentStrategies (Prelude.Maybe Prelude.Natural)
+listDeploymentStrategies_maxResults = Lens.lens (\ListDeploymentStrategies' {maxResults} -> maxResults) (\s@ListDeploymentStrategies' {} a -> s {maxResults = a} :: ListDeploymentStrategies)
+
+-- | A token to start the list. Use this token to get the next set of
+-- results.
+listDeploymentStrategies_nextToken :: Lens.Lens' ListDeploymentStrategies (Prelude.Maybe Prelude.Text)
+listDeploymentStrategies_nextToken = Lens.lens (\ListDeploymentStrategies' {nextToken} -> nextToken) (\s@ListDeploymentStrategies' {} a -> s {nextToken = a} :: ListDeploymentStrategies)
+
+instance Core.AWSRequest ListDeploymentStrategies where
+  type
+    AWSResponse ListDeploymentStrategies =
+      ListDeploymentStrategiesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDeploymentStrategiesResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDeploymentStrategies where
+  hashWithSalt _salt ListDeploymentStrategies' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListDeploymentStrategies where
+  rnf ListDeploymentStrategies' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListDeploymentStrategies where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListDeploymentStrategies where
+  toPath = Prelude.const "/deploymentstrategies"
+
+instance Data.ToQuery ListDeploymentStrategies where
+  toQuery ListDeploymentStrategies' {..} =
+    Prelude.mconcat
+      [ "max_results" Data.=: maxResults,
+        "next_token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListDeploymentStrategiesResponse' smart constructor.
+data ListDeploymentStrategiesResponse = ListDeploymentStrategiesResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [DeploymentStrategy],
+    -- | The token for the next set of items to return. Use this token to get the
+    -- next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDeploymentStrategiesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listDeploymentStrategiesResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'listDeploymentStrategiesResponse_nextToken' - The token for the next set of items to return. Use this token to get the
+-- next set of results.
+--
+-- 'httpStatus', 'listDeploymentStrategiesResponse_httpStatus' - The response's http status code.
+newListDeploymentStrategiesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDeploymentStrategiesResponse
+newListDeploymentStrategiesResponse pHttpStatus_ =
+  ListDeploymentStrategiesResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+listDeploymentStrategiesResponse_items :: Lens.Lens' ListDeploymentStrategiesResponse (Prelude.Maybe [DeploymentStrategy])
+listDeploymentStrategiesResponse_items = Lens.lens (\ListDeploymentStrategiesResponse' {items} -> items) (\s@ListDeploymentStrategiesResponse' {} a -> s {items = a} :: ListDeploymentStrategiesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of items to return. Use this token to get the
+-- next set of results.
+listDeploymentStrategiesResponse_nextToken :: Lens.Lens' ListDeploymentStrategiesResponse (Prelude.Maybe Prelude.Text)
+listDeploymentStrategiesResponse_nextToken = Lens.lens (\ListDeploymentStrategiesResponse' {nextToken} -> nextToken) (\s@ListDeploymentStrategiesResponse' {} a -> s {nextToken = a} :: ListDeploymentStrategiesResponse)
+
+-- | The response's http status code.
+listDeploymentStrategiesResponse_httpStatus :: Lens.Lens' ListDeploymentStrategiesResponse Prelude.Int
+listDeploymentStrategiesResponse_httpStatus = Lens.lens (\ListDeploymentStrategiesResponse' {httpStatus} -> httpStatus) (\s@ListDeploymentStrategiesResponse' {} a -> s {httpStatus = a} :: ListDeploymentStrategiesResponse)
+
+instance
+  Prelude.NFData
+    ListDeploymentStrategiesResponse
+  where
+  rnf ListDeploymentStrategiesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppConfig/ListDeployments.hs b/gen/Amazonka/AppConfig/ListDeployments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/ListDeployments.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.ListDeployments
+-- 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 deployments for an environment in descending deployment number
+-- order.
+module Amazonka.AppConfig.ListDeployments
+  ( -- * Creating a Request
+    ListDeployments (..),
+    newListDeployments,
+
+    -- * Request Lenses
+    listDeployments_maxResults,
+    listDeployments_nextToken,
+    listDeployments_applicationId,
+    listDeployments_environmentId,
+
+    -- * Destructuring the Response
+    ListDeploymentsResponse (..),
+    newListDeploymentsResponse,
+
+    -- * Response Lenses
+    listDeploymentsResponse_items,
+    listDeploymentsResponse_nextToken,
+    listDeploymentsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDeployments' smart constructor.
+data ListDeployments = ListDeployments'
+  { -- | The maximum number of items that may be returned for this call. If there
+    -- are items that have not yet been returned, the response will include a
+    -- non-null @NextToken@ that you can provide in a subsequent call to get
+    -- the next set of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token returned by a prior call to this operation indicating the next
+    -- set of results to be returned. If not specified, the operation will
+    -- return the first set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The application ID.
+    applicationId :: Prelude.Text,
+    -- | The environment ID.
+    environmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDeployments' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDeployments_maxResults' - The maximum number of items that may be returned for this call. If there
+-- are items that have not yet been returned, the response will include a
+-- non-null @NextToken@ that you can provide in a subsequent call to get
+-- the next set of results.
+--
+-- 'nextToken', 'listDeployments_nextToken' - The token returned by a prior call to this operation indicating the next
+-- set of results to be returned. If not specified, the operation will
+-- return the first set of results.
+--
+-- 'applicationId', 'listDeployments_applicationId' - The application ID.
+--
+-- 'environmentId', 'listDeployments_environmentId' - The environment ID.
+newListDeployments ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  ListDeployments
+newListDeployments pApplicationId_ pEnvironmentId_ =
+  ListDeployments'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      applicationId = pApplicationId_,
+      environmentId = pEnvironmentId_
+    }
+
+-- | The maximum number of items that may be returned for this call. If there
+-- are items that have not yet been returned, the response will include a
+-- non-null @NextToken@ that you can provide in a subsequent call to get
+-- the next set of results.
+listDeployments_maxResults :: Lens.Lens' ListDeployments (Prelude.Maybe Prelude.Natural)
+listDeployments_maxResults = Lens.lens (\ListDeployments' {maxResults} -> maxResults) (\s@ListDeployments' {} a -> s {maxResults = a} :: ListDeployments)
+
+-- | The token returned by a prior call to this operation indicating the next
+-- set of results to be returned. If not specified, the operation will
+-- return the first set of results.
+listDeployments_nextToken :: Lens.Lens' ListDeployments (Prelude.Maybe Prelude.Text)
+listDeployments_nextToken = Lens.lens (\ListDeployments' {nextToken} -> nextToken) (\s@ListDeployments' {} a -> s {nextToken = a} :: ListDeployments)
+
+-- | The application ID.
+listDeployments_applicationId :: Lens.Lens' ListDeployments Prelude.Text
+listDeployments_applicationId = Lens.lens (\ListDeployments' {applicationId} -> applicationId) (\s@ListDeployments' {} a -> s {applicationId = a} :: ListDeployments)
+
+-- | The environment ID.
+listDeployments_environmentId :: Lens.Lens' ListDeployments Prelude.Text
+listDeployments_environmentId = Lens.lens (\ListDeployments' {environmentId} -> environmentId) (\s@ListDeployments' {} a -> s {environmentId = a} :: ListDeployments)
+
+instance Core.AWSRequest ListDeployments where
+  type
+    AWSResponse ListDeployments =
+      ListDeploymentsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDeploymentsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDeployments where
+  hashWithSalt _salt ListDeployments' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` environmentId
+
+instance Prelude.NFData ListDeployments where
+  rnf ListDeployments' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf environmentId
+
+instance Data.ToHeaders ListDeployments where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListDeployments where
+  toPath ListDeployments' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/environments/",
+        Data.toBS environmentId,
+        "/deployments"
+      ]
+
+instance Data.ToQuery ListDeployments where
+  toQuery ListDeployments' {..} =
+    Prelude.mconcat
+      [ "max_results" Data.=: maxResults,
+        "next_token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListDeploymentsResponse' smart constructor.
+data ListDeploymentsResponse = ListDeploymentsResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [DeploymentSummary],
+    -- | The token for the next set of items to return. Use this token to get the
+    -- next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDeploymentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listDeploymentsResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'listDeploymentsResponse_nextToken' - The token for the next set of items to return. Use this token to get the
+-- next set of results.
+--
+-- 'httpStatus', 'listDeploymentsResponse_httpStatus' - The response's http status code.
+newListDeploymentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDeploymentsResponse
+newListDeploymentsResponse pHttpStatus_ =
+  ListDeploymentsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+listDeploymentsResponse_items :: Lens.Lens' ListDeploymentsResponse (Prelude.Maybe [DeploymentSummary])
+listDeploymentsResponse_items = Lens.lens (\ListDeploymentsResponse' {items} -> items) (\s@ListDeploymentsResponse' {} a -> s {items = a} :: ListDeploymentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of items to return. Use this token to get the
+-- next set of results.
+listDeploymentsResponse_nextToken :: Lens.Lens' ListDeploymentsResponse (Prelude.Maybe Prelude.Text)
+listDeploymentsResponse_nextToken = Lens.lens (\ListDeploymentsResponse' {nextToken} -> nextToken) (\s@ListDeploymentsResponse' {} a -> s {nextToken = a} :: ListDeploymentsResponse)
+
+-- | The response's http status code.
+listDeploymentsResponse_httpStatus :: Lens.Lens' ListDeploymentsResponse Prelude.Int
+listDeploymentsResponse_httpStatus = Lens.lens (\ListDeploymentsResponse' {httpStatus} -> httpStatus) (\s@ListDeploymentsResponse' {} a -> s {httpStatus = a} :: ListDeploymentsResponse)
+
+instance Prelude.NFData ListDeploymentsResponse where
+  rnf ListDeploymentsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppConfig/ListEnvironments.hs b/gen/Amazonka/AppConfig/ListEnvironments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/ListEnvironments.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.ListEnvironments
+-- 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 environments for an application.
+module Amazonka.AppConfig.ListEnvironments
+  ( -- * Creating a Request
+    ListEnvironments (..),
+    newListEnvironments,
+
+    -- * Request Lenses
+    listEnvironments_maxResults,
+    listEnvironments_nextToken,
+    listEnvironments_applicationId,
+
+    -- * Destructuring the Response
+    ListEnvironmentsResponse (..),
+    newListEnvironmentsResponse,
+
+    -- * Response Lenses
+    listEnvironmentsResponse_items,
+    listEnvironmentsResponse_nextToken,
+    listEnvironmentsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListEnvironments' smart constructor.
+data ListEnvironments = ListEnvironments'
+  { -- | The maximum number of items to return for this call. The call also
+    -- returns a token that you can specify in a subsequent call to get the
+    -- next set of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to start the list. Use this token to get the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The application ID.
+    applicationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEnvironments' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listEnvironments_maxResults' - The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+--
+-- 'nextToken', 'listEnvironments_nextToken' - A token to start the list. Use this token to get the next set of
+-- results.
+--
+-- 'applicationId', 'listEnvironments_applicationId' - The application ID.
+newListEnvironments ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  ListEnvironments
+newListEnvironments pApplicationId_ =
+  ListEnvironments'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      applicationId = pApplicationId_
+    }
+
+-- | The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+listEnvironments_maxResults :: Lens.Lens' ListEnvironments (Prelude.Maybe Prelude.Natural)
+listEnvironments_maxResults = Lens.lens (\ListEnvironments' {maxResults} -> maxResults) (\s@ListEnvironments' {} a -> s {maxResults = a} :: ListEnvironments)
+
+-- | A token to start the list. Use this token to get the next set of
+-- results.
+listEnvironments_nextToken :: Lens.Lens' ListEnvironments (Prelude.Maybe Prelude.Text)
+listEnvironments_nextToken = Lens.lens (\ListEnvironments' {nextToken} -> nextToken) (\s@ListEnvironments' {} a -> s {nextToken = a} :: ListEnvironments)
+
+-- | The application ID.
+listEnvironments_applicationId :: Lens.Lens' ListEnvironments Prelude.Text
+listEnvironments_applicationId = Lens.lens (\ListEnvironments' {applicationId} -> applicationId) (\s@ListEnvironments' {} a -> s {applicationId = a} :: ListEnvironments)
+
+instance Core.AWSRequest ListEnvironments where
+  type
+    AWSResponse ListEnvironments =
+      ListEnvironmentsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEnvironmentsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEnvironments where
+  hashWithSalt _salt ListEnvironments' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` applicationId
+
+instance Prelude.NFData ListEnvironments where
+  rnf ListEnvironments' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf applicationId
+
+instance Data.ToHeaders ListEnvironments where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListEnvironments where
+  toPath ListEnvironments' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/environments"
+      ]
+
+instance Data.ToQuery ListEnvironments where
+  toQuery ListEnvironments' {..} =
+    Prelude.mconcat
+      [ "max_results" Data.=: maxResults,
+        "next_token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListEnvironmentsResponse' smart constructor.
+data ListEnvironmentsResponse = ListEnvironmentsResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [Environment],
+    -- | The token for the next set of items to return. Use this token to get the
+    -- next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEnvironmentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listEnvironmentsResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'listEnvironmentsResponse_nextToken' - The token for the next set of items to return. Use this token to get the
+-- next set of results.
+--
+-- 'httpStatus', 'listEnvironmentsResponse_httpStatus' - The response's http status code.
+newListEnvironmentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEnvironmentsResponse
+newListEnvironmentsResponse pHttpStatus_ =
+  ListEnvironmentsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+listEnvironmentsResponse_items :: Lens.Lens' ListEnvironmentsResponse (Prelude.Maybe [Environment])
+listEnvironmentsResponse_items = Lens.lens (\ListEnvironmentsResponse' {items} -> items) (\s@ListEnvironmentsResponse' {} a -> s {items = a} :: ListEnvironmentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of items to return. Use this token to get the
+-- next set of results.
+listEnvironmentsResponse_nextToken :: Lens.Lens' ListEnvironmentsResponse (Prelude.Maybe Prelude.Text)
+listEnvironmentsResponse_nextToken = Lens.lens (\ListEnvironmentsResponse' {nextToken} -> nextToken) (\s@ListEnvironmentsResponse' {} a -> s {nextToken = a} :: ListEnvironmentsResponse)
+
+-- | The response's http status code.
+listEnvironmentsResponse_httpStatus :: Lens.Lens' ListEnvironmentsResponse Prelude.Int
+listEnvironmentsResponse_httpStatus = Lens.lens (\ListEnvironmentsResponse' {httpStatus} -> httpStatus) (\s@ListEnvironmentsResponse' {} a -> s {httpStatus = a} :: ListEnvironmentsResponse)
+
+instance Prelude.NFData ListEnvironmentsResponse where
+  rnf ListEnvironmentsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppConfig/ListExtensionAssociations.hs b/gen/Amazonka/AppConfig/ListExtensionAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/ListExtensionAssociations.hs
@@ -0,0 +1,249 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.ListExtensionAssociations
+-- 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 all AppConfig extension associations in the account. For more
+-- information about extensions and associations, see
+-- <https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html Working with AppConfig extensions>
+-- in the /AppConfig User Guide/.
+module Amazonka.AppConfig.ListExtensionAssociations
+  ( -- * Creating a Request
+    ListExtensionAssociations (..),
+    newListExtensionAssociations,
+
+    -- * Request Lenses
+    listExtensionAssociations_extensionIdentifier,
+    listExtensionAssociations_extensionVersionNumber,
+    listExtensionAssociations_maxResults,
+    listExtensionAssociations_nextToken,
+    listExtensionAssociations_resourceIdentifier,
+
+    -- * Destructuring the Response
+    ListExtensionAssociationsResponse (..),
+    newListExtensionAssociationsResponse,
+
+    -- * Response Lenses
+    listExtensionAssociationsResponse_items,
+    listExtensionAssociationsResponse_nextToken,
+    listExtensionAssociationsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListExtensionAssociations' smart constructor.
+data ListExtensionAssociations = ListExtensionAssociations'
+  { -- | The name, the ID, or the Amazon Resource Name (ARN) of the extension.
+    extensionIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | The version number for the extension defined in the association.
+    extensionVersionNumber :: Prelude.Maybe Prelude.Int,
+    -- | The maximum number of items to return for this call. The call also
+    -- returns a token that you can specify in a subsequent call to get the
+    -- next set of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to start the list. Use this token to get the next set of results
+    -- or pass null to get the first set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of an application, configuration profile, or environment.
+    resourceIdentifier :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExtensionAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'extensionIdentifier', 'listExtensionAssociations_extensionIdentifier' - The name, the ID, or the Amazon Resource Name (ARN) of the extension.
+--
+-- 'extensionVersionNumber', 'listExtensionAssociations_extensionVersionNumber' - The version number for the extension defined in the association.
+--
+-- 'maxResults', 'listExtensionAssociations_maxResults' - The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+--
+-- 'nextToken', 'listExtensionAssociations_nextToken' - A token to start the list. Use this token to get the next set of results
+-- or pass null to get the first set of results.
+--
+-- 'resourceIdentifier', 'listExtensionAssociations_resourceIdentifier' - The ARN of an application, configuration profile, or environment.
+newListExtensionAssociations ::
+  ListExtensionAssociations
+newListExtensionAssociations =
+  ListExtensionAssociations'
+    { extensionIdentifier =
+        Prelude.Nothing,
+      extensionVersionNumber = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      resourceIdentifier = Prelude.Nothing
+    }
+
+-- | The name, the ID, or the Amazon Resource Name (ARN) of the extension.
+listExtensionAssociations_extensionIdentifier :: Lens.Lens' ListExtensionAssociations (Prelude.Maybe Prelude.Text)
+listExtensionAssociations_extensionIdentifier = Lens.lens (\ListExtensionAssociations' {extensionIdentifier} -> extensionIdentifier) (\s@ListExtensionAssociations' {} a -> s {extensionIdentifier = a} :: ListExtensionAssociations)
+
+-- | The version number for the extension defined in the association.
+listExtensionAssociations_extensionVersionNumber :: Lens.Lens' ListExtensionAssociations (Prelude.Maybe Prelude.Int)
+listExtensionAssociations_extensionVersionNumber = Lens.lens (\ListExtensionAssociations' {extensionVersionNumber} -> extensionVersionNumber) (\s@ListExtensionAssociations' {} a -> s {extensionVersionNumber = a} :: ListExtensionAssociations)
+
+-- | The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+listExtensionAssociations_maxResults :: Lens.Lens' ListExtensionAssociations (Prelude.Maybe Prelude.Natural)
+listExtensionAssociations_maxResults = Lens.lens (\ListExtensionAssociations' {maxResults} -> maxResults) (\s@ListExtensionAssociations' {} a -> s {maxResults = a} :: ListExtensionAssociations)
+
+-- | A token to start the list. Use this token to get the next set of results
+-- or pass null to get the first set of results.
+listExtensionAssociations_nextToken :: Lens.Lens' ListExtensionAssociations (Prelude.Maybe Prelude.Text)
+listExtensionAssociations_nextToken = Lens.lens (\ListExtensionAssociations' {nextToken} -> nextToken) (\s@ListExtensionAssociations' {} a -> s {nextToken = a} :: ListExtensionAssociations)
+
+-- | The ARN of an application, configuration profile, or environment.
+listExtensionAssociations_resourceIdentifier :: Lens.Lens' ListExtensionAssociations (Prelude.Maybe Prelude.Text)
+listExtensionAssociations_resourceIdentifier = Lens.lens (\ListExtensionAssociations' {resourceIdentifier} -> resourceIdentifier) (\s@ListExtensionAssociations' {} a -> s {resourceIdentifier = a} :: ListExtensionAssociations)
+
+instance Core.AWSRequest ListExtensionAssociations where
+  type
+    AWSResponse ListExtensionAssociations =
+      ListExtensionAssociationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListExtensionAssociationsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListExtensionAssociations where
+  hashWithSalt _salt ListExtensionAssociations' {..} =
+    _salt
+      `Prelude.hashWithSalt` extensionIdentifier
+      `Prelude.hashWithSalt` extensionVersionNumber
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resourceIdentifier
+
+instance Prelude.NFData ListExtensionAssociations where
+  rnf ListExtensionAssociations' {..} =
+    Prelude.rnf extensionIdentifier
+      `Prelude.seq` Prelude.rnf extensionVersionNumber
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceIdentifier
+
+instance Data.ToHeaders ListExtensionAssociations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListExtensionAssociations where
+  toPath = Prelude.const "/extensionassociations"
+
+instance Data.ToQuery ListExtensionAssociations where
+  toQuery ListExtensionAssociations' {..} =
+    Prelude.mconcat
+      [ "extension_identifier" Data.=: extensionIdentifier,
+        "extension_version_number"
+          Data.=: extensionVersionNumber,
+        "max_results" Data.=: maxResults,
+        "next_token" Data.=: nextToken,
+        "resource_identifier" Data.=: resourceIdentifier
+      ]
+
+-- | /See:/ 'newListExtensionAssociationsResponse' smart constructor.
+data ListExtensionAssociationsResponse = ListExtensionAssociationsResponse'
+  { -- | The list of extension associations. Each item represents an extension
+    -- association to an application, environment, or configuration profile.
+    items :: Prelude.Maybe [ExtensionAssociationSummary],
+    -- | The token for the next set of items to return. Use this token to get the
+    -- next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExtensionAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listExtensionAssociationsResponse_items' - The list of extension associations. Each item represents an extension
+-- association to an application, environment, or configuration profile.
+--
+-- 'nextToken', 'listExtensionAssociationsResponse_nextToken' - The token for the next set of items to return. Use this token to get the
+-- next set of results.
+--
+-- 'httpStatus', 'listExtensionAssociationsResponse_httpStatus' - The response's http status code.
+newListExtensionAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListExtensionAssociationsResponse
+newListExtensionAssociationsResponse pHttpStatus_ =
+  ListExtensionAssociationsResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of extension associations. Each item represents an extension
+-- association to an application, environment, or configuration profile.
+listExtensionAssociationsResponse_items :: Lens.Lens' ListExtensionAssociationsResponse (Prelude.Maybe [ExtensionAssociationSummary])
+listExtensionAssociationsResponse_items = Lens.lens (\ListExtensionAssociationsResponse' {items} -> items) (\s@ListExtensionAssociationsResponse' {} a -> s {items = a} :: ListExtensionAssociationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of items to return. Use this token to get the
+-- next set of results.
+listExtensionAssociationsResponse_nextToken :: Lens.Lens' ListExtensionAssociationsResponse (Prelude.Maybe Prelude.Text)
+listExtensionAssociationsResponse_nextToken = Lens.lens (\ListExtensionAssociationsResponse' {nextToken} -> nextToken) (\s@ListExtensionAssociationsResponse' {} a -> s {nextToken = a} :: ListExtensionAssociationsResponse)
+
+-- | The response's http status code.
+listExtensionAssociationsResponse_httpStatus :: Lens.Lens' ListExtensionAssociationsResponse Prelude.Int
+listExtensionAssociationsResponse_httpStatus = Lens.lens (\ListExtensionAssociationsResponse' {httpStatus} -> httpStatus) (\s@ListExtensionAssociationsResponse' {} a -> s {httpStatus = a} :: ListExtensionAssociationsResponse)
+
+instance
+  Prelude.NFData
+    ListExtensionAssociationsResponse
+  where
+  rnf ListExtensionAssociationsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppConfig/ListExtensions.hs b/gen/Amazonka/AppConfig/ListExtensions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/ListExtensions.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.ListExtensions
+-- 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 all custom and Amazon Web Services-authored AppConfig extensions
+-- in the account. For more information about extensions, see
+-- <https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html Working with AppConfig extensions>
+-- in the /AppConfig User Guide/.
+module Amazonka.AppConfig.ListExtensions
+  ( -- * Creating a Request
+    ListExtensions (..),
+    newListExtensions,
+
+    -- * Request Lenses
+    listExtensions_maxResults,
+    listExtensions_name,
+    listExtensions_nextToken,
+
+    -- * Destructuring the Response
+    ListExtensionsResponse (..),
+    newListExtensionsResponse,
+
+    -- * Response Lenses
+    listExtensionsResponse_items,
+    listExtensionsResponse_nextToken,
+    listExtensionsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListExtensions' smart constructor.
+data ListExtensions = ListExtensions'
+  { -- | The maximum number of items to return for this call. The call also
+    -- returns a token that you can specify in a subsequent call to get the
+    -- next set of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The extension name.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A token to start the list. Use this token to get the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExtensions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listExtensions_maxResults' - The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+--
+-- 'name', 'listExtensions_name' - The extension name.
+--
+-- 'nextToken', 'listExtensions_nextToken' - A token to start the list. Use this token to get the next set of
+-- results.
+newListExtensions ::
+  ListExtensions
+newListExtensions =
+  ListExtensions'
+    { maxResults = Prelude.Nothing,
+      name = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+listExtensions_maxResults :: Lens.Lens' ListExtensions (Prelude.Maybe Prelude.Natural)
+listExtensions_maxResults = Lens.lens (\ListExtensions' {maxResults} -> maxResults) (\s@ListExtensions' {} a -> s {maxResults = a} :: ListExtensions)
+
+-- | The extension name.
+listExtensions_name :: Lens.Lens' ListExtensions (Prelude.Maybe Prelude.Text)
+listExtensions_name = Lens.lens (\ListExtensions' {name} -> name) (\s@ListExtensions' {} a -> s {name = a} :: ListExtensions)
+
+-- | A token to start the list. Use this token to get the next set of
+-- results.
+listExtensions_nextToken :: Lens.Lens' ListExtensions (Prelude.Maybe Prelude.Text)
+listExtensions_nextToken = Lens.lens (\ListExtensions' {nextToken} -> nextToken) (\s@ListExtensions' {} a -> s {nextToken = a} :: ListExtensions)
+
+instance Core.AWSRequest ListExtensions where
+  type
+    AWSResponse ListExtensions =
+      ListExtensionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListExtensionsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListExtensions where
+  hashWithSalt _salt ListExtensions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListExtensions where
+  rnf ListExtensions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListExtensions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListExtensions where
+  toPath = Prelude.const "/extensions"
+
+instance Data.ToQuery ListExtensions where
+  toQuery ListExtensions' {..} =
+    Prelude.mconcat
+      [ "max_results" Data.=: maxResults,
+        "name" Data.=: name,
+        "next_token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListExtensionsResponse' smart constructor.
+data ListExtensionsResponse = ListExtensionsResponse'
+  { -- | The list of available extensions. The list includes Amazon Web
+    -- Services-authored and user-created extensions.
+    items :: Prelude.Maybe [ExtensionSummary],
+    -- | The token for the next set of items to return. Use this token to get the
+    -- next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExtensionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listExtensionsResponse_items' - The list of available extensions. The list includes Amazon Web
+-- Services-authored and user-created extensions.
+--
+-- 'nextToken', 'listExtensionsResponse_nextToken' - The token for the next set of items to return. Use this token to get the
+-- next set of results.
+--
+-- 'httpStatus', 'listExtensionsResponse_httpStatus' - The response's http status code.
+newListExtensionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListExtensionsResponse
+newListExtensionsResponse pHttpStatus_ =
+  ListExtensionsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of available extensions. The list includes Amazon Web
+-- Services-authored and user-created extensions.
+listExtensionsResponse_items :: Lens.Lens' ListExtensionsResponse (Prelude.Maybe [ExtensionSummary])
+listExtensionsResponse_items = Lens.lens (\ListExtensionsResponse' {items} -> items) (\s@ListExtensionsResponse' {} a -> s {items = a} :: ListExtensionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of items to return. Use this token to get the
+-- next set of results.
+listExtensionsResponse_nextToken :: Lens.Lens' ListExtensionsResponse (Prelude.Maybe Prelude.Text)
+listExtensionsResponse_nextToken = Lens.lens (\ListExtensionsResponse' {nextToken} -> nextToken) (\s@ListExtensionsResponse' {} a -> s {nextToken = a} :: ListExtensionsResponse)
+
+-- | The response's http status code.
+listExtensionsResponse_httpStatus :: Lens.Lens' ListExtensionsResponse Prelude.Int
+listExtensionsResponse_httpStatus = Lens.lens (\ListExtensionsResponse' {httpStatus} -> httpStatus) (\s@ListExtensionsResponse' {} a -> s {httpStatus = a} :: ListExtensionsResponse)
+
+instance Prelude.NFData ListExtensionsResponse where
+  rnf ListExtensionsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppConfig/ListHostedConfigurationVersions.hs b/gen/Amazonka/AppConfig/ListHostedConfigurationVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/ListHostedConfigurationVersions.hs
@@ -0,0 +1,257 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.ListHostedConfigurationVersions
+-- 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 configurations stored in the AppConfig hosted configuration store
+-- by version.
+module Amazonka.AppConfig.ListHostedConfigurationVersions
+  ( -- * Creating a Request
+    ListHostedConfigurationVersions (..),
+    newListHostedConfigurationVersions,
+
+    -- * Request Lenses
+    listHostedConfigurationVersions_maxResults,
+    listHostedConfigurationVersions_nextToken,
+    listHostedConfigurationVersions_applicationId,
+    listHostedConfigurationVersions_configurationProfileId,
+
+    -- * Destructuring the Response
+    ListHostedConfigurationVersionsResponse (..),
+    newListHostedConfigurationVersionsResponse,
+
+    -- * Response Lenses
+    listHostedConfigurationVersionsResponse_items,
+    listHostedConfigurationVersionsResponse_nextToken,
+    listHostedConfigurationVersionsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListHostedConfigurationVersions' smart constructor.
+data ListHostedConfigurationVersions = ListHostedConfigurationVersions'
+  { -- | The maximum number of items to return for this call. The call also
+    -- returns a token that you can specify in a subsequent call to get the
+    -- next set of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to start the list. Use this token to get the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The application ID.
+    applicationId :: Prelude.Text,
+    -- | The configuration profile ID.
+    configurationProfileId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListHostedConfigurationVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listHostedConfigurationVersions_maxResults' - The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+--
+-- 'nextToken', 'listHostedConfigurationVersions_nextToken' - A token to start the list. Use this token to get the next set of
+-- results.
+--
+-- 'applicationId', 'listHostedConfigurationVersions_applicationId' - The application ID.
+--
+-- 'configurationProfileId', 'listHostedConfigurationVersions_configurationProfileId' - The configuration profile ID.
+newListHostedConfigurationVersions ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'configurationProfileId'
+  Prelude.Text ->
+  ListHostedConfigurationVersions
+newListHostedConfigurationVersions
+  pApplicationId_
+  pConfigurationProfileId_ =
+    ListHostedConfigurationVersions'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        applicationId = pApplicationId_,
+        configurationProfileId =
+          pConfigurationProfileId_
+      }
+
+-- | The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+listHostedConfigurationVersions_maxResults :: Lens.Lens' ListHostedConfigurationVersions (Prelude.Maybe Prelude.Natural)
+listHostedConfigurationVersions_maxResults = Lens.lens (\ListHostedConfigurationVersions' {maxResults} -> maxResults) (\s@ListHostedConfigurationVersions' {} a -> s {maxResults = a} :: ListHostedConfigurationVersions)
+
+-- | A token to start the list. Use this token to get the next set of
+-- results.
+listHostedConfigurationVersions_nextToken :: Lens.Lens' ListHostedConfigurationVersions (Prelude.Maybe Prelude.Text)
+listHostedConfigurationVersions_nextToken = Lens.lens (\ListHostedConfigurationVersions' {nextToken} -> nextToken) (\s@ListHostedConfigurationVersions' {} a -> s {nextToken = a} :: ListHostedConfigurationVersions)
+
+-- | The application ID.
+listHostedConfigurationVersions_applicationId :: Lens.Lens' ListHostedConfigurationVersions Prelude.Text
+listHostedConfigurationVersions_applicationId = Lens.lens (\ListHostedConfigurationVersions' {applicationId} -> applicationId) (\s@ListHostedConfigurationVersions' {} a -> s {applicationId = a} :: ListHostedConfigurationVersions)
+
+-- | The configuration profile ID.
+listHostedConfigurationVersions_configurationProfileId :: Lens.Lens' ListHostedConfigurationVersions Prelude.Text
+listHostedConfigurationVersions_configurationProfileId = Lens.lens (\ListHostedConfigurationVersions' {configurationProfileId} -> configurationProfileId) (\s@ListHostedConfigurationVersions' {} a -> s {configurationProfileId = a} :: ListHostedConfigurationVersions)
+
+instance
+  Core.AWSRequest
+    ListHostedConfigurationVersions
+  where
+  type
+    AWSResponse ListHostedConfigurationVersions =
+      ListHostedConfigurationVersionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListHostedConfigurationVersionsResponse'
+            Prelude.<$> (x Data..?> "Items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListHostedConfigurationVersions
+  where
+  hashWithSalt
+    _salt
+    ListHostedConfigurationVersions' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` applicationId
+        `Prelude.hashWithSalt` configurationProfileId
+
+instance
+  Prelude.NFData
+    ListHostedConfigurationVersions
+  where
+  rnf ListHostedConfigurationVersions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf configurationProfileId
+
+instance
+  Data.ToHeaders
+    ListHostedConfigurationVersions
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListHostedConfigurationVersions where
+  toPath ListHostedConfigurationVersions' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/configurationprofiles/",
+        Data.toBS configurationProfileId,
+        "/hostedconfigurationversions"
+      ]
+
+instance Data.ToQuery ListHostedConfigurationVersions where
+  toQuery ListHostedConfigurationVersions' {..} =
+    Prelude.mconcat
+      [ "max_results" Data.=: maxResults,
+        "next_token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListHostedConfigurationVersionsResponse' smart constructor.
+data ListHostedConfigurationVersionsResponse = ListHostedConfigurationVersionsResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [HostedConfigurationVersionSummary],
+    -- | The token for the next set of items to return. Use this token to get the
+    -- next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListHostedConfigurationVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listHostedConfigurationVersionsResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'listHostedConfigurationVersionsResponse_nextToken' - The token for the next set of items to return. Use this token to get the
+-- next set of results.
+--
+-- 'httpStatus', 'listHostedConfigurationVersionsResponse_httpStatus' - The response's http status code.
+newListHostedConfigurationVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListHostedConfigurationVersionsResponse
+newListHostedConfigurationVersionsResponse
+  pHttpStatus_ =
+    ListHostedConfigurationVersionsResponse'
+      { items =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The elements from this collection.
+listHostedConfigurationVersionsResponse_items :: Lens.Lens' ListHostedConfigurationVersionsResponse (Prelude.Maybe [HostedConfigurationVersionSummary])
+listHostedConfigurationVersionsResponse_items = Lens.lens (\ListHostedConfigurationVersionsResponse' {items} -> items) (\s@ListHostedConfigurationVersionsResponse' {} a -> s {items = a} :: ListHostedConfigurationVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of items to return. Use this token to get the
+-- next set of results.
+listHostedConfigurationVersionsResponse_nextToken :: Lens.Lens' ListHostedConfigurationVersionsResponse (Prelude.Maybe Prelude.Text)
+listHostedConfigurationVersionsResponse_nextToken = Lens.lens (\ListHostedConfigurationVersionsResponse' {nextToken} -> nextToken) (\s@ListHostedConfigurationVersionsResponse' {} a -> s {nextToken = a} :: ListHostedConfigurationVersionsResponse)
+
+-- | The response's http status code.
+listHostedConfigurationVersionsResponse_httpStatus :: Lens.Lens' ListHostedConfigurationVersionsResponse Prelude.Int
+listHostedConfigurationVersionsResponse_httpStatus = Lens.lens (\ListHostedConfigurationVersionsResponse' {httpStatus} -> httpStatus) (\s@ListHostedConfigurationVersionsResponse' {} a -> s {httpStatus = a} :: ListHostedConfigurationVersionsResponse)
+
+instance
+  Prelude.NFData
+    ListHostedConfigurationVersionsResponse
+  where
+  rnf ListHostedConfigurationVersionsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppConfig/ListTagsForResource.hs b/gen/Amazonka/AppConfig/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/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.AppConfig.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)
+--
+-- Retrieves the list of key-value tags assigned to the resource.
+module Amazonka.AppConfig.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The resource ARN.
+    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 resource ARN.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The resource ARN.
+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'
+  { -- | Metadata to assign to AppConfig resources. Tags help organize and
+    -- categorize your AppConfig resources. Each tag consists of a key and an
+    -- optional value, both of which you define.
+    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' - Metadata to assign to AppConfig resources. Tags help organize and
+-- categorize your AppConfig resources. Each tag consists of a key and an
+-- optional value, both of which you define.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Metadata to assign to AppConfig resources. Tags help organize and
+-- categorize your AppConfig resources. Each tag consists of a key and an
+-- optional value, both of which you define.
+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/AppConfig/StartDeployment.hs b/gen/Amazonka/AppConfig/StartDeployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/StartDeployment.hs
@@ -0,0 +1,247 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.StartDeployment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts a deployment.
+module Amazonka.AppConfig.StartDeployment
+  ( -- * Creating a Request
+    StartDeployment (..),
+    newStartDeployment,
+
+    -- * Request Lenses
+    startDeployment_description,
+    startDeployment_tags,
+    startDeployment_applicationId,
+    startDeployment_environmentId,
+    startDeployment_deploymentStrategyId,
+    startDeployment_configurationProfileId,
+    startDeployment_configurationVersion,
+
+    -- * Destructuring the Response
+    Deployment (..),
+    newDeployment,
+
+    -- * Response Lenses
+    deployment_applicationId,
+    deployment_appliedExtensions,
+    deployment_completedAt,
+    deployment_configurationLocationUri,
+    deployment_configurationName,
+    deployment_configurationProfileId,
+    deployment_configurationVersion,
+    deployment_deploymentDurationInMinutes,
+    deployment_deploymentNumber,
+    deployment_deploymentStrategyId,
+    deployment_description,
+    deployment_environmentId,
+    deployment_eventLog,
+    deployment_finalBakeTimeInMinutes,
+    deployment_growthFactor,
+    deployment_growthType,
+    deployment_percentageComplete,
+    deployment_startedAt,
+    deployment_state,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartDeployment' smart constructor.
+data StartDeployment = StartDeployment'
+  { -- | A description of the deployment.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Metadata to assign to the deployment. Tags help organize and categorize
+    -- your AppConfig resources. Each tag consists of a key and an optional
+    -- value, both of which you define.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The application ID.
+    applicationId :: Prelude.Text,
+    -- | The environment ID.
+    environmentId :: Prelude.Text,
+    -- | The deployment strategy ID.
+    deploymentStrategyId :: Prelude.Text,
+    -- | The configuration profile ID.
+    configurationProfileId :: Prelude.Text,
+    -- | The configuration version to deploy.
+    configurationVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartDeployment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'startDeployment_description' - A description of the deployment.
+--
+-- 'tags', 'startDeployment_tags' - Metadata to assign to the deployment. Tags help organize and categorize
+-- your AppConfig resources. Each tag consists of a key and an optional
+-- value, both of which you define.
+--
+-- 'applicationId', 'startDeployment_applicationId' - The application ID.
+--
+-- 'environmentId', 'startDeployment_environmentId' - The environment ID.
+--
+-- 'deploymentStrategyId', 'startDeployment_deploymentStrategyId' - The deployment strategy ID.
+--
+-- 'configurationProfileId', 'startDeployment_configurationProfileId' - The configuration profile ID.
+--
+-- 'configurationVersion', 'startDeployment_configurationVersion' - The configuration version to deploy.
+newStartDeployment ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  -- | 'deploymentStrategyId'
+  Prelude.Text ->
+  -- | 'configurationProfileId'
+  Prelude.Text ->
+  -- | 'configurationVersion'
+  Prelude.Text ->
+  StartDeployment
+newStartDeployment
+  pApplicationId_
+  pEnvironmentId_
+  pDeploymentStrategyId_
+  pConfigurationProfileId_
+  pConfigurationVersion_ =
+    StartDeployment'
+      { description = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        applicationId = pApplicationId_,
+        environmentId = pEnvironmentId_,
+        deploymentStrategyId = pDeploymentStrategyId_,
+        configurationProfileId = pConfigurationProfileId_,
+        configurationVersion = pConfigurationVersion_
+      }
+
+-- | A description of the deployment.
+startDeployment_description :: Lens.Lens' StartDeployment (Prelude.Maybe Prelude.Text)
+startDeployment_description = Lens.lens (\StartDeployment' {description} -> description) (\s@StartDeployment' {} a -> s {description = a} :: StartDeployment)
+
+-- | Metadata to assign to the deployment. Tags help organize and categorize
+-- your AppConfig resources. Each tag consists of a key and an optional
+-- value, both of which you define.
+startDeployment_tags :: Lens.Lens' StartDeployment (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+startDeployment_tags = Lens.lens (\StartDeployment' {tags} -> tags) (\s@StartDeployment' {} a -> s {tags = a} :: StartDeployment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The application ID.
+startDeployment_applicationId :: Lens.Lens' StartDeployment Prelude.Text
+startDeployment_applicationId = Lens.lens (\StartDeployment' {applicationId} -> applicationId) (\s@StartDeployment' {} a -> s {applicationId = a} :: StartDeployment)
+
+-- | The environment ID.
+startDeployment_environmentId :: Lens.Lens' StartDeployment Prelude.Text
+startDeployment_environmentId = Lens.lens (\StartDeployment' {environmentId} -> environmentId) (\s@StartDeployment' {} a -> s {environmentId = a} :: StartDeployment)
+
+-- | The deployment strategy ID.
+startDeployment_deploymentStrategyId :: Lens.Lens' StartDeployment Prelude.Text
+startDeployment_deploymentStrategyId = Lens.lens (\StartDeployment' {deploymentStrategyId} -> deploymentStrategyId) (\s@StartDeployment' {} a -> s {deploymentStrategyId = a} :: StartDeployment)
+
+-- | The configuration profile ID.
+startDeployment_configurationProfileId :: Lens.Lens' StartDeployment Prelude.Text
+startDeployment_configurationProfileId = Lens.lens (\StartDeployment' {configurationProfileId} -> configurationProfileId) (\s@StartDeployment' {} a -> s {configurationProfileId = a} :: StartDeployment)
+
+-- | The configuration version to deploy.
+startDeployment_configurationVersion :: Lens.Lens' StartDeployment Prelude.Text
+startDeployment_configurationVersion = Lens.lens (\StartDeployment' {configurationVersion} -> configurationVersion) (\s@StartDeployment' {} a -> s {configurationVersion = a} :: StartDeployment)
+
+instance Core.AWSRequest StartDeployment where
+  type AWSResponse StartDeployment = Deployment
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable StartDeployment where
+  hashWithSalt _salt StartDeployment' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` environmentId
+      `Prelude.hashWithSalt` deploymentStrategyId
+      `Prelude.hashWithSalt` configurationProfileId
+      `Prelude.hashWithSalt` configurationVersion
+
+instance Prelude.NFData StartDeployment where
+  rnf StartDeployment' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf deploymentStrategyId
+      `Prelude.seq` Prelude.rnf configurationProfileId
+      `Prelude.seq` Prelude.rnf configurationVersion
+
+instance Data.ToHeaders StartDeployment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartDeployment where
+  toJSON StartDeployment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ( "DeploymentStrategyId"
+                  Data..= deploymentStrategyId
+              ),
+            Prelude.Just
+              ( "ConfigurationProfileId"
+                  Data..= configurationProfileId
+              ),
+            Prelude.Just
+              ( "ConfigurationVersion"
+                  Data..= configurationVersion
+              )
+          ]
+      )
+
+instance Data.ToPath StartDeployment where
+  toPath StartDeployment' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/environments/",
+        Data.toBS environmentId,
+        "/deployments"
+      ]
+
+instance Data.ToQuery StartDeployment where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/StopDeployment.hs b/gen/Amazonka/AppConfig/StopDeployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/StopDeployment.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.AppConfig.StopDeployment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops a deployment. This API action works only on deployments that have
+-- a status of @DEPLOYING@. This action moves the deployment to a status of
+-- @ROLLED_BACK@.
+module Amazonka.AppConfig.StopDeployment
+  ( -- * Creating a Request
+    StopDeployment (..),
+    newStopDeployment,
+
+    -- * Request Lenses
+    stopDeployment_applicationId,
+    stopDeployment_environmentId,
+    stopDeployment_deploymentNumber,
+
+    -- * Destructuring the Response
+    Deployment (..),
+    newDeployment,
+
+    -- * Response Lenses
+    deployment_applicationId,
+    deployment_appliedExtensions,
+    deployment_completedAt,
+    deployment_configurationLocationUri,
+    deployment_configurationName,
+    deployment_configurationProfileId,
+    deployment_configurationVersion,
+    deployment_deploymentDurationInMinutes,
+    deployment_deploymentNumber,
+    deployment_deploymentStrategyId,
+    deployment_description,
+    deployment_environmentId,
+    deployment_eventLog,
+    deployment_finalBakeTimeInMinutes,
+    deployment_growthFactor,
+    deployment_growthType,
+    deployment_percentageComplete,
+    deployment_startedAt,
+    deployment_state,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopDeployment' smart constructor.
+data StopDeployment = StopDeployment'
+  { -- | The application ID.
+    applicationId :: Prelude.Text,
+    -- | The environment ID.
+    environmentId :: Prelude.Text,
+    -- | The sequence number of the deployment.
+    deploymentNumber :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopDeployment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'stopDeployment_applicationId' - The application ID.
+--
+-- 'environmentId', 'stopDeployment_environmentId' - The environment ID.
+--
+-- 'deploymentNumber', 'stopDeployment_deploymentNumber' - The sequence number of the deployment.
+newStopDeployment ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  -- | 'deploymentNumber'
+  Prelude.Int ->
+  StopDeployment
+newStopDeployment
+  pApplicationId_
+  pEnvironmentId_
+  pDeploymentNumber_ =
+    StopDeployment'
+      { applicationId = pApplicationId_,
+        environmentId = pEnvironmentId_,
+        deploymentNumber = pDeploymentNumber_
+      }
+
+-- | The application ID.
+stopDeployment_applicationId :: Lens.Lens' StopDeployment Prelude.Text
+stopDeployment_applicationId = Lens.lens (\StopDeployment' {applicationId} -> applicationId) (\s@StopDeployment' {} a -> s {applicationId = a} :: StopDeployment)
+
+-- | The environment ID.
+stopDeployment_environmentId :: Lens.Lens' StopDeployment Prelude.Text
+stopDeployment_environmentId = Lens.lens (\StopDeployment' {environmentId} -> environmentId) (\s@StopDeployment' {} a -> s {environmentId = a} :: StopDeployment)
+
+-- | The sequence number of the deployment.
+stopDeployment_deploymentNumber :: Lens.Lens' StopDeployment Prelude.Int
+stopDeployment_deploymentNumber = Lens.lens (\StopDeployment' {deploymentNumber} -> deploymentNumber) (\s@StopDeployment' {} a -> s {deploymentNumber = a} :: StopDeployment)
+
+instance Core.AWSRequest StopDeployment where
+  type AWSResponse StopDeployment = Deployment
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable StopDeployment where
+  hashWithSalt _salt StopDeployment' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` environmentId
+      `Prelude.hashWithSalt` deploymentNumber
+
+instance Prelude.NFData StopDeployment where
+  rnf StopDeployment' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf deploymentNumber
+
+instance Data.ToHeaders StopDeployment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath StopDeployment where
+  toPath StopDeployment' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/environments/",
+        Data.toBS environmentId,
+        "/deployments/",
+        Data.toBS deploymentNumber
+      ]
+
+instance Data.ToQuery StopDeployment where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/TagResource.hs b/gen/Amazonka/AppConfig/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/TagResource.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.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)
+--
+-- Assigns metadata to an AppConfig resource. Tags help organize and
+-- categorize your AppConfig resources. Each tag consists of a key and an
+-- optional value, both of which you define. You can specify a maximum of
+-- 50 tags for a resource.
+module Amazonka.AppConfig.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The ARN of the resource for which to retrieve tags.
+    resourceArn :: Prelude.Text,
+    -- | The key-value string map. The valid character set is [a-zA-Z+-=._:\/].
+    -- The tag key can be up to 128 characters and must not start with @aws:@.
+    -- The tag value can be up to 256 characters.
+    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 ARN of the resource for which to retrieve tags.
+--
+-- 'tags', 'tagResource_tags' - The key-value string map. The valid character set is [a-zA-Z+-=._:\/].
+-- The tag key can be up to 128 characters and must not start with @aws:@.
+-- The tag value can be up to 256 characters.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The ARN of the resource for which to retrieve tags.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The key-value string map. The valid character set is [a-zA-Z+-=._:\/].
+-- The tag key can be up to 128 characters and must not start with @aws:@.
+-- The tag value can be up to 256 characters.
+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.receiveNull TagResourceResponse'
+
+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'
+  {
+  }
+  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.
+newTagResourceResponse ::
+  TagResourceResponse
+newTagResourceResponse = TagResourceResponse'
+
+instance Prelude.NFData TagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/AppConfig/Types.hs b/gen/Amazonka/AppConfig/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types.hs
@@ -0,0 +1,406 @@
+{-# 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.AppConfig.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.AppConfig.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _BadRequestException,
+    _ConflictException,
+    _InternalServerException,
+    _PayloadTooLargeException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+
+    -- * ActionPoint
+    ActionPoint (..),
+
+    -- * DeploymentEventType
+    DeploymentEventType (..),
+
+    -- * DeploymentState
+    DeploymentState (..),
+
+    -- * EnvironmentState
+    EnvironmentState (..),
+
+    -- * GrowthType
+    GrowthType (..),
+
+    -- * ReplicateTo
+    ReplicateTo (..),
+
+    -- * TriggeredBy
+    TriggeredBy (..),
+
+    -- * ValidatorType
+    ValidatorType (..),
+
+    -- * Action
+    Action (..),
+    newAction,
+    action_description,
+    action_name,
+    action_roleArn,
+    action_uri,
+
+    -- * ActionInvocation
+    ActionInvocation (..),
+    newActionInvocation,
+    actionInvocation_actionName,
+    actionInvocation_errorCode,
+    actionInvocation_errorMessage,
+    actionInvocation_extensionIdentifier,
+    actionInvocation_invocationId,
+    actionInvocation_roleArn,
+    actionInvocation_uri,
+
+    -- * Application
+    Application (..),
+    newApplication,
+    application_description,
+    application_id,
+    application_name,
+
+    -- * AppliedExtension
+    AppliedExtension (..),
+    newAppliedExtension,
+    appliedExtension_extensionAssociationId,
+    appliedExtension_extensionId,
+    appliedExtension_parameters,
+    appliedExtension_versionNumber,
+
+    -- * ConfigurationProfile
+    ConfigurationProfile (..),
+    newConfigurationProfile,
+    configurationProfile_applicationId,
+    configurationProfile_description,
+    configurationProfile_id,
+    configurationProfile_locationUri,
+    configurationProfile_name,
+    configurationProfile_retrievalRoleArn,
+    configurationProfile_type,
+    configurationProfile_validators,
+
+    -- * ConfigurationProfileSummary
+    ConfigurationProfileSummary (..),
+    newConfigurationProfileSummary,
+    configurationProfileSummary_applicationId,
+    configurationProfileSummary_id,
+    configurationProfileSummary_locationUri,
+    configurationProfileSummary_name,
+    configurationProfileSummary_type,
+    configurationProfileSummary_validatorTypes,
+
+    -- * Deployment
+    Deployment (..),
+    newDeployment,
+    deployment_applicationId,
+    deployment_appliedExtensions,
+    deployment_completedAt,
+    deployment_configurationLocationUri,
+    deployment_configurationName,
+    deployment_configurationProfileId,
+    deployment_configurationVersion,
+    deployment_deploymentDurationInMinutes,
+    deployment_deploymentNumber,
+    deployment_deploymentStrategyId,
+    deployment_description,
+    deployment_environmentId,
+    deployment_eventLog,
+    deployment_finalBakeTimeInMinutes,
+    deployment_growthFactor,
+    deployment_growthType,
+    deployment_percentageComplete,
+    deployment_startedAt,
+    deployment_state,
+
+    -- * DeploymentEvent
+    DeploymentEvent (..),
+    newDeploymentEvent,
+    deploymentEvent_actionInvocations,
+    deploymentEvent_description,
+    deploymentEvent_eventType,
+    deploymentEvent_occurredAt,
+    deploymentEvent_triggeredBy,
+
+    -- * DeploymentStrategy
+    DeploymentStrategy (..),
+    newDeploymentStrategy,
+    deploymentStrategy_deploymentDurationInMinutes,
+    deploymentStrategy_description,
+    deploymentStrategy_finalBakeTimeInMinutes,
+    deploymentStrategy_growthFactor,
+    deploymentStrategy_growthType,
+    deploymentStrategy_id,
+    deploymentStrategy_name,
+    deploymentStrategy_replicateTo,
+
+    -- * DeploymentSummary
+    DeploymentSummary (..),
+    newDeploymentSummary,
+    deploymentSummary_completedAt,
+    deploymentSummary_configurationName,
+    deploymentSummary_configurationVersion,
+    deploymentSummary_deploymentDurationInMinutes,
+    deploymentSummary_deploymentNumber,
+    deploymentSummary_finalBakeTimeInMinutes,
+    deploymentSummary_growthFactor,
+    deploymentSummary_growthType,
+    deploymentSummary_percentageComplete,
+    deploymentSummary_startedAt,
+    deploymentSummary_state,
+
+    -- * Environment
+    Environment (..),
+    newEnvironment,
+    environment_applicationId,
+    environment_description,
+    environment_id,
+    environment_monitors,
+    environment_name,
+    environment_state,
+
+    -- * Extension
+    Extension (..),
+    newExtension,
+    extension_actions,
+    extension_arn,
+    extension_description,
+    extension_id,
+    extension_name,
+    extension_parameters,
+    extension_versionNumber,
+
+    -- * ExtensionAssociation
+    ExtensionAssociation (..),
+    newExtensionAssociation,
+    extensionAssociation_arn,
+    extensionAssociation_extensionArn,
+    extensionAssociation_extensionVersionNumber,
+    extensionAssociation_id,
+    extensionAssociation_parameters,
+    extensionAssociation_resourceArn,
+
+    -- * ExtensionAssociationSummary
+    ExtensionAssociationSummary (..),
+    newExtensionAssociationSummary,
+    extensionAssociationSummary_extensionArn,
+    extensionAssociationSummary_id,
+    extensionAssociationSummary_resourceArn,
+
+    -- * ExtensionSummary
+    ExtensionSummary (..),
+    newExtensionSummary,
+    extensionSummary_arn,
+    extensionSummary_description,
+    extensionSummary_id,
+    extensionSummary_name,
+    extensionSummary_versionNumber,
+
+    -- * HostedConfigurationVersion
+    HostedConfigurationVersion (..),
+    newHostedConfigurationVersion,
+    hostedConfigurationVersion_applicationId,
+    hostedConfigurationVersion_configurationProfileId,
+    hostedConfigurationVersion_content,
+    hostedConfigurationVersion_contentType,
+    hostedConfigurationVersion_description,
+    hostedConfigurationVersion_versionNumber,
+
+    -- * HostedConfigurationVersionSummary
+    HostedConfigurationVersionSummary (..),
+    newHostedConfigurationVersionSummary,
+    hostedConfigurationVersionSummary_applicationId,
+    hostedConfigurationVersionSummary_configurationProfileId,
+    hostedConfigurationVersionSummary_contentType,
+    hostedConfigurationVersionSummary_description,
+    hostedConfigurationVersionSummary_versionNumber,
+
+    -- * Monitor
+    Monitor (..),
+    newMonitor,
+    monitor_alarmRoleArn,
+    monitor_alarmArn,
+
+    -- * Parameter
+    Parameter (..),
+    newParameter,
+    parameter_description,
+    parameter_required,
+
+    -- * Validator
+    Validator (..),
+    newValidator,
+    validator_type,
+    validator_content,
+  )
+where
+
+import Amazonka.AppConfig.Types.Action
+import Amazonka.AppConfig.Types.ActionInvocation
+import Amazonka.AppConfig.Types.ActionPoint
+import Amazonka.AppConfig.Types.Application
+import Amazonka.AppConfig.Types.AppliedExtension
+import Amazonka.AppConfig.Types.ConfigurationProfile
+import Amazonka.AppConfig.Types.ConfigurationProfileSummary
+import Amazonka.AppConfig.Types.Deployment
+import Amazonka.AppConfig.Types.DeploymentEvent
+import Amazonka.AppConfig.Types.DeploymentEventType
+import Amazonka.AppConfig.Types.DeploymentState
+import Amazonka.AppConfig.Types.DeploymentStrategy
+import Amazonka.AppConfig.Types.DeploymentSummary
+import Amazonka.AppConfig.Types.Environment
+import Amazonka.AppConfig.Types.EnvironmentState
+import Amazonka.AppConfig.Types.Extension
+import Amazonka.AppConfig.Types.ExtensionAssociation
+import Amazonka.AppConfig.Types.ExtensionAssociationSummary
+import Amazonka.AppConfig.Types.ExtensionSummary
+import Amazonka.AppConfig.Types.GrowthType
+import Amazonka.AppConfig.Types.HostedConfigurationVersion
+import Amazonka.AppConfig.Types.HostedConfigurationVersionSummary
+import Amazonka.AppConfig.Types.Monitor
+import Amazonka.AppConfig.Types.Parameter
+import Amazonka.AppConfig.Types.ReplicateTo
+import Amazonka.AppConfig.Types.TriggeredBy
+import Amazonka.AppConfig.Types.Validator
+import Amazonka.AppConfig.Types.ValidatorType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2019-10-09@ of the Amazon AppConfig SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "AppConfig",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "appconfig",
+      Core.signingName = "appconfig",
+      Core.version = "2019-10-09",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "AppConfig",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | The input fails to satisfy the constraints specified by an Amazon Web
+-- Services service.
+_BadRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_BadRequestException =
+  Core._MatchServiceError
+    defaultService
+    "BadRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | The request could not be processed because of conflict in the current
+-- state of the resource.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | There was an internal failure in the AppConfig service.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | The configuration size is too large.
+_PayloadTooLargeException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_PayloadTooLargeException =
+  Core._MatchServiceError
+    defaultService
+    "PayloadTooLargeException"
+    Prelude.. Core.hasStatus 413
+
+-- | The requested resource could not be found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The number of hosted configuration versions exceeds the limit for the
+-- AppConfig hosted configuration store. Delete one or more versions and
+-- try again.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
diff --git a/gen/Amazonka/AppConfig/Types/Action.hs b/gen/Amazonka/AppConfig/Types/Action.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/Action.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.Action
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.Action 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 action defines the tasks the extension performs during the AppConfig
+-- workflow. Each action includes an action point such as
+-- @ON_CREATE_HOSTED_CONFIGURATION@, @PRE_DEPLOYMENT@, or @ON_DEPLOYMENT@.
+-- Each action also includes a name, a URI to an Lambda function, and an
+-- Amazon Resource Name (ARN) for an Identity and Access Management assume
+-- role. You specify the name, URI, and ARN for each /action point/ defined
+-- in the extension. You can specify the following actions for an
+-- extension:
+--
+-- -   @PRE_CREATE_HOSTED_CONFIGURATION_VERSION@
+--
+-- -   @PRE_START_DEPLOYMENT@
+--
+-- -   @ON_DEPLOYMENT_START@
+--
+-- -   @ON_DEPLOYMENT_STEP@
+--
+-- -   @ON_DEPLOYMENT_BAKING@
+--
+-- -   @ON_DEPLOYMENT_COMPLETE@
+--
+-- -   @ON_DEPLOYMENT_ROLLED_BACK@
+--
+-- /See:/ 'newAction' smart constructor.
+data Action = Action'
+  { -- | Information about the action.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The action name.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | An Amazon Resource Name (ARN) for an Identity and Access Management
+    -- assume role.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The extension URI associated to the action point in the extension
+    -- definition. The URI can be an Amazon Resource Name (ARN) for one of the
+    -- following: an Lambda function, an Amazon Simple Queue Service queue, an
+    -- Amazon Simple Notification Service topic, or the Amazon EventBridge
+    -- default event bus.
+    uri :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Action' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'action_description' - Information about the action.
+--
+-- 'name', 'action_name' - The action name.
+--
+-- 'roleArn', 'action_roleArn' - An Amazon Resource Name (ARN) for an Identity and Access Management
+-- assume role.
+--
+-- 'uri', 'action_uri' - The extension URI associated to the action point in the extension
+-- definition. The URI can be an Amazon Resource Name (ARN) for one of the
+-- following: an Lambda function, an Amazon Simple Queue Service queue, an
+-- Amazon Simple Notification Service topic, or the Amazon EventBridge
+-- default event bus.
+newAction ::
+  Action
+newAction =
+  Action'
+    { description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      uri = Prelude.Nothing
+    }
+
+-- | Information about the action.
+action_description :: Lens.Lens' Action (Prelude.Maybe Prelude.Text)
+action_description = Lens.lens (\Action' {description} -> description) (\s@Action' {} a -> s {description = a} :: Action)
+
+-- | The action name.
+action_name :: Lens.Lens' Action (Prelude.Maybe Prelude.Text)
+action_name = Lens.lens (\Action' {name} -> name) (\s@Action' {} a -> s {name = a} :: Action)
+
+-- | An Amazon Resource Name (ARN) for an Identity and Access Management
+-- assume role.
+action_roleArn :: Lens.Lens' Action (Prelude.Maybe Prelude.Text)
+action_roleArn = Lens.lens (\Action' {roleArn} -> roleArn) (\s@Action' {} a -> s {roleArn = a} :: Action)
+
+-- | The extension URI associated to the action point in the extension
+-- definition. The URI can be an Amazon Resource Name (ARN) for one of the
+-- following: an Lambda function, an Amazon Simple Queue Service queue, an
+-- Amazon Simple Notification Service topic, or the Amazon EventBridge
+-- default event bus.
+action_uri :: Lens.Lens' Action (Prelude.Maybe Prelude.Text)
+action_uri = Lens.lens (\Action' {uri} -> uri) (\s@Action' {} a -> s {uri = a} :: Action)
+
+instance Data.FromJSON Action where
+  parseJSON =
+    Data.withObject
+      "Action"
+      ( \x ->
+          Action'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "RoleArn")
+            Prelude.<*> (x Data..:? "Uri")
+      )
+
+instance Prelude.Hashable Action where
+  hashWithSalt _salt Action' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` uri
+
+instance Prelude.NFData Action where
+  rnf Action' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf uri
+
+instance Data.ToJSON Action where
+  toJSON Action' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Name" Data..=) Prelude.<$> name,
+            ("RoleArn" Data..=) Prelude.<$> roleArn,
+            ("Uri" Data..=) Prelude.<$> uri
+          ]
+      )
diff --git a/gen/Amazonka/AppConfig/Types/ActionInvocation.hs b/gen/Amazonka/AppConfig/Types/ActionInvocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/ActionInvocation.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.ActionInvocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.ActionInvocation 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 extension that was invoked as part of a deployment event.
+--
+-- /See:/ 'newActionInvocation' smart constructor.
+data ActionInvocation = ActionInvocation'
+  { -- | The name of the action.
+    actionName :: Prelude.Maybe Prelude.Text,
+    -- | The error code when an extension invocation fails.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | The error message when an extension invocation fails.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The name, the ID, or the Amazon Resource Name (ARN) of the extension.
+    extensionIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | A system-generated ID for this invocation.
+    invocationId :: Prelude.Maybe Prelude.Text,
+    -- | An Amazon Resource Name (ARN) for an Identity and Access Management
+    -- assume role.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The extension URI associated to the action point in the extension
+    -- definition. The URI can be an Amazon Resource Name (ARN) for one of the
+    -- following: an Lambda function, an Amazon Simple Queue Service queue, an
+    -- Amazon Simple Notification Service topic, or the Amazon EventBridge
+    -- default event bus.
+    uri :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ActionInvocation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actionName', 'actionInvocation_actionName' - The name of the action.
+--
+-- 'errorCode', 'actionInvocation_errorCode' - The error code when an extension invocation fails.
+--
+-- 'errorMessage', 'actionInvocation_errorMessage' - The error message when an extension invocation fails.
+--
+-- 'extensionIdentifier', 'actionInvocation_extensionIdentifier' - The name, the ID, or the Amazon Resource Name (ARN) of the extension.
+--
+-- 'invocationId', 'actionInvocation_invocationId' - A system-generated ID for this invocation.
+--
+-- 'roleArn', 'actionInvocation_roleArn' - An Amazon Resource Name (ARN) for an Identity and Access Management
+-- assume role.
+--
+-- 'uri', 'actionInvocation_uri' - The extension URI associated to the action point in the extension
+-- definition. The URI can be an Amazon Resource Name (ARN) for one of the
+-- following: an Lambda function, an Amazon Simple Queue Service queue, an
+-- Amazon Simple Notification Service topic, or the Amazon EventBridge
+-- default event bus.
+newActionInvocation ::
+  ActionInvocation
+newActionInvocation =
+  ActionInvocation'
+    { actionName = Prelude.Nothing,
+      errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      extensionIdentifier = Prelude.Nothing,
+      invocationId = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      uri = Prelude.Nothing
+    }
+
+-- | The name of the action.
+actionInvocation_actionName :: Lens.Lens' ActionInvocation (Prelude.Maybe Prelude.Text)
+actionInvocation_actionName = Lens.lens (\ActionInvocation' {actionName} -> actionName) (\s@ActionInvocation' {} a -> s {actionName = a} :: ActionInvocation)
+
+-- | The error code when an extension invocation fails.
+actionInvocation_errorCode :: Lens.Lens' ActionInvocation (Prelude.Maybe Prelude.Text)
+actionInvocation_errorCode = Lens.lens (\ActionInvocation' {errorCode} -> errorCode) (\s@ActionInvocation' {} a -> s {errorCode = a} :: ActionInvocation)
+
+-- | The error message when an extension invocation fails.
+actionInvocation_errorMessage :: Lens.Lens' ActionInvocation (Prelude.Maybe Prelude.Text)
+actionInvocation_errorMessage = Lens.lens (\ActionInvocation' {errorMessage} -> errorMessage) (\s@ActionInvocation' {} a -> s {errorMessage = a} :: ActionInvocation)
+
+-- | The name, the ID, or the Amazon Resource Name (ARN) of the extension.
+actionInvocation_extensionIdentifier :: Lens.Lens' ActionInvocation (Prelude.Maybe Prelude.Text)
+actionInvocation_extensionIdentifier = Lens.lens (\ActionInvocation' {extensionIdentifier} -> extensionIdentifier) (\s@ActionInvocation' {} a -> s {extensionIdentifier = a} :: ActionInvocation)
+
+-- | A system-generated ID for this invocation.
+actionInvocation_invocationId :: Lens.Lens' ActionInvocation (Prelude.Maybe Prelude.Text)
+actionInvocation_invocationId = Lens.lens (\ActionInvocation' {invocationId} -> invocationId) (\s@ActionInvocation' {} a -> s {invocationId = a} :: ActionInvocation)
+
+-- | An Amazon Resource Name (ARN) for an Identity and Access Management
+-- assume role.
+actionInvocation_roleArn :: Lens.Lens' ActionInvocation (Prelude.Maybe Prelude.Text)
+actionInvocation_roleArn = Lens.lens (\ActionInvocation' {roleArn} -> roleArn) (\s@ActionInvocation' {} a -> s {roleArn = a} :: ActionInvocation)
+
+-- | The extension URI associated to the action point in the extension
+-- definition. The URI can be an Amazon Resource Name (ARN) for one of the
+-- following: an Lambda function, an Amazon Simple Queue Service queue, an
+-- Amazon Simple Notification Service topic, or the Amazon EventBridge
+-- default event bus.
+actionInvocation_uri :: Lens.Lens' ActionInvocation (Prelude.Maybe Prelude.Text)
+actionInvocation_uri = Lens.lens (\ActionInvocation' {uri} -> uri) (\s@ActionInvocation' {} a -> s {uri = a} :: ActionInvocation)
+
+instance Data.FromJSON ActionInvocation where
+  parseJSON =
+    Data.withObject
+      "ActionInvocation"
+      ( \x ->
+          ActionInvocation'
+            Prelude.<$> (x Data..:? "ActionName")
+            Prelude.<*> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "ExtensionIdentifier")
+            Prelude.<*> (x Data..:? "InvocationId")
+            Prelude.<*> (x Data..:? "RoleArn")
+            Prelude.<*> (x Data..:? "Uri")
+      )
+
+instance Prelude.Hashable ActionInvocation where
+  hashWithSalt _salt ActionInvocation' {..} =
+    _salt
+      `Prelude.hashWithSalt` actionName
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` extensionIdentifier
+      `Prelude.hashWithSalt` invocationId
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` uri
+
+instance Prelude.NFData ActionInvocation where
+  rnf ActionInvocation' {..} =
+    Prelude.rnf actionName
+      `Prelude.seq` Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf extensionIdentifier
+      `Prelude.seq` Prelude.rnf invocationId
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf uri
diff --git a/gen/Amazonka/AppConfig/Types/ActionPoint.hs b/gen/Amazonka/AppConfig/Types/ActionPoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/ActionPoint.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.AppConfig.Types.ActionPoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.ActionPoint
+  ( ActionPoint
+      ( ..,
+        ActionPoint_ON_DEPLOYMENT_BAKING,
+        ActionPoint_ON_DEPLOYMENT_COMPLETE,
+        ActionPoint_ON_DEPLOYMENT_ROLLED_BACK,
+        ActionPoint_ON_DEPLOYMENT_START,
+        ActionPoint_ON_DEPLOYMENT_STEP,
+        ActionPoint_PRE_CREATE_HOSTED_CONFIGURATION_VERSION,
+        ActionPoint_PRE_START_DEPLOYMENT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ActionPoint = ActionPoint'
+  { fromActionPoint ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ActionPoint_ON_DEPLOYMENT_BAKING :: ActionPoint
+pattern ActionPoint_ON_DEPLOYMENT_BAKING = ActionPoint' "ON_DEPLOYMENT_BAKING"
+
+pattern ActionPoint_ON_DEPLOYMENT_COMPLETE :: ActionPoint
+pattern ActionPoint_ON_DEPLOYMENT_COMPLETE = ActionPoint' "ON_DEPLOYMENT_COMPLETE"
+
+pattern ActionPoint_ON_DEPLOYMENT_ROLLED_BACK :: ActionPoint
+pattern ActionPoint_ON_DEPLOYMENT_ROLLED_BACK = ActionPoint' "ON_DEPLOYMENT_ROLLED_BACK"
+
+pattern ActionPoint_ON_DEPLOYMENT_START :: ActionPoint
+pattern ActionPoint_ON_DEPLOYMENT_START = ActionPoint' "ON_DEPLOYMENT_START"
+
+pattern ActionPoint_ON_DEPLOYMENT_STEP :: ActionPoint
+pattern ActionPoint_ON_DEPLOYMENT_STEP = ActionPoint' "ON_DEPLOYMENT_STEP"
+
+pattern ActionPoint_PRE_CREATE_HOSTED_CONFIGURATION_VERSION :: ActionPoint
+pattern ActionPoint_PRE_CREATE_HOSTED_CONFIGURATION_VERSION = ActionPoint' "PRE_CREATE_HOSTED_CONFIGURATION_VERSION"
+
+pattern ActionPoint_PRE_START_DEPLOYMENT :: ActionPoint
+pattern ActionPoint_PRE_START_DEPLOYMENT = ActionPoint' "PRE_START_DEPLOYMENT"
+
+{-# COMPLETE
+  ActionPoint_ON_DEPLOYMENT_BAKING,
+  ActionPoint_ON_DEPLOYMENT_COMPLETE,
+  ActionPoint_ON_DEPLOYMENT_ROLLED_BACK,
+  ActionPoint_ON_DEPLOYMENT_START,
+  ActionPoint_ON_DEPLOYMENT_STEP,
+  ActionPoint_PRE_CREATE_HOSTED_CONFIGURATION_VERSION,
+  ActionPoint_PRE_START_DEPLOYMENT,
+  ActionPoint'
+  #-}
diff --git a/gen/Amazonka/AppConfig/Types/Application.hs b/gen/Amazonka/AppConfig/Types/Application.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/Application.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.Application
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.Application 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
+
+-- | /See:/ 'newApplication' smart constructor.
+data Application = Application'
+  { -- | The description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The application ID.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The application name.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Application' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'application_description' - The description of the application.
+--
+-- 'id', 'application_id' - The application ID.
+--
+-- 'name', 'application_name' - The application name.
+newApplication ::
+  Application
+newApplication =
+  Application'
+    { description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The description of the application.
+application_description :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_description = Lens.lens (\Application' {description} -> description) (\s@Application' {} a -> s {description = a} :: Application)
+
+-- | The application ID.
+application_id :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_id = Lens.lens (\Application' {id} -> id) (\s@Application' {} a -> s {id = a} :: Application)
+
+-- | The application name.
+application_name :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_name = Lens.lens (\Application' {name} -> name) (\s@Application' {} a -> s {name = a} :: Application)
+
+instance Data.FromJSON Application where
+  parseJSON =
+    Data.withObject
+      "Application"
+      ( \x ->
+          Application'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable Application where
+  hashWithSalt _salt Application' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Application where
+  rnf Application' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/AppConfig/Types/AppliedExtension.hs b/gen/Amazonka/AppConfig/Types/AppliedExtension.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/AppliedExtension.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.AppConfig.Types.AppliedExtension
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.AppliedExtension 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 extension that was invoked during a deployment.
+--
+-- /See:/ 'newAppliedExtension' smart constructor.
+data AppliedExtension = AppliedExtension'
+  { -- | The system-generated ID for the association.
+    extensionAssociationId :: Prelude.Maybe Prelude.Text,
+    -- | The system-generated ID of the extension.
+    extensionId :: Prelude.Maybe Prelude.Text,
+    -- | One or more parameters for the actions called by the extension.
+    parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The extension version number.
+    versionNumber :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppliedExtension' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'extensionAssociationId', 'appliedExtension_extensionAssociationId' - The system-generated ID for the association.
+--
+-- 'extensionId', 'appliedExtension_extensionId' - The system-generated ID of the extension.
+--
+-- 'parameters', 'appliedExtension_parameters' - One or more parameters for the actions called by the extension.
+--
+-- 'versionNumber', 'appliedExtension_versionNumber' - The extension version number.
+newAppliedExtension ::
+  AppliedExtension
+newAppliedExtension =
+  AppliedExtension'
+    { extensionAssociationId =
+        Prelude.Nothing,
+      extensionId = Prelude.Nothing,
+      parameters = Prelude.Nothing,
+      versionNumber = Prelude.Nothing
+    }
+
+-- | The system-generated ID for the association.
+appliedExtension_extensionAssociationId :: Lens.Lens' AppliedExtension (Prelude.Maybe Prelude.Text)
+appliedExtension_extensionAssociationId = Lens.lens (\AppliedExtension' {extensionAssociationId} -> extensionAssociationId) (\s@AppliedExtension' {} a -> s {extensionAssociationId = a} :: AppliedExtension)
+
+-- | The system-generated ID of the extension.
+appliedExtension_extensionId :: Lens.Lens' AppliedExtension (Prelude.Maybe Prelude.Text)
+appliedExtension_extensionId = Lens.lens (\AppliedExtension' {extensionId} -> extensionId) (\s@AppliedExtension' {} a -> s {extensionId = a} :: AppliedExtension)
+
+-- | One or more parameters for the actions called by the extension.
+appliedExtension_parameters :: Lens.Lens' AppliedExtension (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+appliedExtension_parameters = Lens.lens (\AppliedExtension' {parameters} -> parameters) (\s@AppliedExtension' {} a -> s {parameters = a} :: AppliedExtension) Prelude.. Lens.mapping Lens.coerced
+
+-- | The extension version number.
+appliedExtension_versionNumber :: Lens.Lens' AppliedExtension (Prelude.Maybe Prelude.Int)
+appliedExtension_versionNumber = Lens.lens (\AppliedExtension' {versionNumber} -> versionNumber) (\s@AppliedExtension' {} a -> s {versionNumber = a} :: AppliedExtension)
+
+instance Data.FromJSON AppliedExtension where
+  parseJSON =
+    Data.withObject
+      "AppliedExtension"
+      ( \x ->
+          AppliedExtension'
+            Prelude.<$> (x Data..:? "ExtensionAssociationId")
+            Prelude.<*> (x Data..:? "ExtensionId")
+            Prelude.<*> (x Data..:? "Parameters" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "VersionNumber")
+      )
+
+instance Prelude.Hashable AppliedExtension where
+  hashWithSalt _salt AppliedExtension' {..} =
+    _salt
+      `Prelude.hashWithSalt` extensionAssociationId
+      `Prelude.hashWithSalt` extensionId
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` versionNumber
+
+instance Prelude.NFData AppliedExtension where
+  rnf AppliedExtension' {..} =
+    Prelude.rnf extensionAssociationId
+      `Prelude.seq` Prelude.rnf extensionId
+      `Prelude.seq` Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf versionNumber
diff --git a/gen/Amazonka/AppConfig/Types/ConfigurationProfile.hs b/gen/Amazonka/AppConfig/Types/ConfigurationProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/ConfigurationProfile.hs
@@ -0,0 +1,183 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.ConfigurationProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.ConfigurationProfile where
+
+import Amazonka.AppConfig.Types.Validator
+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
+
+-- | /See:/ 'newConfigurationProfile' smart constructor.
+data ConfigurationProfile = ConfigurationProfile'
+  { -- | The application ID.
+    applicationId :: Prelude.Maybe Prelude.Text,
+    -- | The configuration profile description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The configuration profile ID.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The URI location of the configuration.
+    locationUri :: Prelude.Maybe Prelude.Text,
+    -- | The name of the configuration profile.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of an IAM role with permission to access the configuration at
+    -- the specified @LocationUri@.
+    retrievalRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The type of configurations contained in the profile. AppConfig supports
+    -- @feature flags@ and @freeform@ configurations. We recommend you create
+    -- feature flag configurations to enable or disable new features and
+    -- freeform configurations to distribute configurations to an application.
+    -- When calling this API, enter one of the following values for @Type@:
+    --
+    -- @AWS.AppConfig.FeatureFlags@
+    --
+    -- @AWS.Freeform@
+    type' :: Prelude.Maybe Prelude.Text,
+    -- | A list of methods for validating the configuration.
+    validators :: Prelude.Maybe [Validator]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfigurationProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'configurationProfile_applicationId' - The application ID.
+--
+-- 'description', 'configurationProfile_description' - The configuration profile description.
+--
+-- 'id', 'configurationProfile_id' - The configuration profile ID.
+--
+-- 'locationUri', 'configurationProfile_locationUri' - The URI location of the configuration.
+--
+-- 'name', 'configurationProfile_name' - The name of the configuration profile.
+--
+-- 'retrievalRoleArn', 'configurationProfile_retrievalRoleArn' - The ARN of an IAM role with permission to access the configuration at
+-- the specified @LocationUri@.
+--
+-- 'type'', 'configurationProfile_type' - The type of configurations contained in the profile. AppConfig supports
+-- @feature flags@ and @freeform@ configurations. We recommend you create
+-- feature flag configurations to enable or disable new features and
+-- freeform configurations to distribute configurations to an application.
+-- When calling this API, enter one of the following values for @Type@:
+--
+-- @AWS.AppConfig.FeatureFlags@
+--
+-- @AWS.Freeform@
+--
+-- 'validators', 'configurationProfile_validators' - A list of methods for validating the configuration.
+newConfigurationProfile ::
+  ConfigurationProfile
+newConfigurationProfile =
+  ConfigurationProfile'
+    { applicationId =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      locationUri = Prelude.Nothing,
+      name = Prelude.Nothing,
+      retrievalRoleArn = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      validators = Prelude.Nothing
+    }
+
+-- | The application ID.
+configurationProfile_applicationId :: Lens.Lens' ConfigurationProfile (Prelude.Maybe Prelude.Text)
+configurationProfile_applicationId = Lens.lens (\ConfigurationProfile' {applicationId} -> applicationId) (\s@ConfigurationProfile' {} a -> s {applicationId = a} :: ConfigurationProfile)
+
+-- | The configuration profile description.
+configurationProfile_description :: Lens.Lens' ConfigurationProfile (Prelude.Maybe Prelude.Text)
+configurationProfile_description = Lens.lens (\ConfigurationProfile' {description} -> description) (\s@ConfigurationProfile' {} a -> s {description = a} :: ConfigurationProfile)
+
+-- | The configuration profile ID.
+configurationProfile_id :: Lens.Lens' ConfigurationProfile (Prelude.Maybe Prelude.Text)
+configurationProfile_id = Lens.lens (\ConfigurationProfile' {id} -> id) (\s@ConfigurationProfile' {} a -> s {id = a} :: ConfigurationProfile)
+
+-- | The URI location of the configuration.
+configurationProfile_locationUri :: Lens.Lens' ConfigurationProfile (Prelude.Maybe Prelude.Text)
+configurationProfile_locationUri = Lens.lens (\ConfigurationProfile' {locationUri} -> locationUri) (\s@ConfigurationProfile' {} a -> s {locationUri = a} :: ConfigurationProfile)
+
+-- | The name of the configuration profile.
+configurationProfile_name :: Lens.Lens' ConfigurationProfile (Prelude.Maybe Prelude.Text)
+configurationProfile_name = Lens.lens (\ConfigurationProfile' {name} -> name) (\s@ConfigurationProfile' {} a -> s {name = a} :: ConfigurationProfile)
+
+-- | The ARN of an IAM role with permission to access the configuration at
+-- the specified @LocationUri@.
+configurationProfile_retrievalRoleArn :: Lens.Lens' ConfigurationProfile (Prelude.Maybe Prelude.Text)
+configurationProfile_retrievalRoleArn = Lens.lens (\ConfigurationProfile' {retrievalRoleArn} -> retrievalRoleArn) (\s@ConfigurationProfile' {} a -> s {retrievalRoleArn = a} :: ConfigurationProfile)
+
+-- | The type of configurations contained in the profile. AppConfig supports
+-- @feature flags@ and @freeform@ configurations. We recommend you create
+-- feature flag configurations to enable or disable new features and
+-- freeform configurations to distribute configurations to an application.
+-- When calling this API, enter one of the following values for @Type@:
+--
+-- @AWS.AppConfig.FeatureFlags@
+--
+-- @AWS.Freeform@
+configurationProfile_type :: Lens.Lens' ConfigurationProfile (Prelude.Maybe Prelude.Text)
+configurationProfile_type = Lens.lens (\ConfigurationProfile' {type'} -> type') (\s@ConfigurationProfile' {} a -> s {type' = a} :: ConfigurationProfile)
+
+-- | A list of methods for validating the configuration.
+configurationProfile_validators :: Lens.Lens' ConfigurationProfile (Prelude.Maybe [Validator])
+configurationProfile_validators = Lens.lens (\ConfigurationProfile' {validators} -> validators) (\s@ConfigurationProfile' {} a -> s {validators = a} :: ConfigurationProfile) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ConfigurationProfile where
+  parseJSON =
+    Data.withObject
+      "ConfigurationProfile"
+      ( \x ->
+          ConfigurationProfile'
+            Prelude.<$> (x Data..:? "ApplicationId")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "LocationUri")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "RetrievalRoleArn")
+            Prelude.<*> (x Data..:? "Type")
+            Prelude.<*> (x Data..:? "Validators" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ConfigurationProfile where
+  hashWithSalt _salt ConfigurationProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` locationUri
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` retrievalRoleArn
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` validators
+
+instance Prelude.NFData ConfigurationProfile where
+  rnf ConfigurationProfile' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf locationUri
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf retrievalRoleArn
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf validators
diff --git a/gen/Amazonka/AppConfig/Types/ConfigurationProfileSummary.hs b/gen/Amazonka/AppConfig/Types/ConfigurationProfileSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/ConfigurationProfileSummary.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.ConfigurationProfileSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.ConfigurationProfileSummary where
+
+import Amazonka.AppConfig.Types.ValidatorType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A summary of a configuration profile.
+--
+-- /See:/ 'newConfigurationProfileSummary' smart constructor.
+data ConfigurationProfileSummary = ConfigurationProfileSummary'
+  { -- | The application ID.
+    applicationId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the configuration profile.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The URI location of the configuration.
+    locationUri :: Prelude.Maybe Prelude.Text,
+    -- | The name of the configuration profile.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The type of configurations contained in the profile. AppConfig supports
+    -- @feature flags@ and @freeform@ configurations. We recommend you create
+    -- feature flag configurations to enable or disable new features and
+    -- freeform configurations to distribute configurations to an application.
+    -- When calling this API, enter one of the following values for @Type@:
+    --
+    -- @AWS.AppConfig.FeatureFlags@
+    --
+    -- @AWS.Freeform@
+    type' :: Prelude.Maybe Prelude.Text,
+    -- | The types of validators in the configuration profile.
+    validatorTypes :: Prelude.Maybe [ValidatorType]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfigurationProfileSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'configurationProfileSummary_applicationId' - The application ID.
+--
+-- 'id', 'configurationProfileSummary_id' - The ID of the configuration profile.
+--
+-- 'locationUri', 'configurationProfileSummary_locationUri' - The URI location of the configuration.
+--
+-- 'name', 'configurationProfileSummary_name' - The name of the configuration profile.
+--
+-- 'type'', 'configurationProfileSummary_type' - The type of configurations contained in the profile. AppConfig supports
+-- @feature flags@ and @freeform@ configurations. We recommend you create
+-- feature flag configurations to enable or disable new features and
+-- freeform configurations to distribute configurations to an application.
+-- When calling this API, enter one of the following values for @Type@:
+--
+-- @AWS.AppConfig.FeatureFlags@
+--
+-- @AWS.Freeform@
+--
+-- 'validatorTypes', 'configurationProfileSummary_validatorTypes' - The types of validators in the configuration profile.
+newConfigurationProfileSummary ::
+  ConfigurationProfileSummary
+newConfigurationProfileSummary =
+  ConfigurationProfileSummary'
+    { applicationId =
+        Prelude.Nothing,
+      id = Prelude.Nothing,
+      locationUri = Prelude.Nothing,
+      name = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      validatorTypes = Prelude.Nothing
+    }
+
+-- | The application ID.
+configurationProfileSummary_applicationId :: Lens.Lens' ConfigurationProfileSummary (Prelude.Maybe Prelude.Text)
+configurationProfileSummary_applicationId = Lens.lens (\ConfigurationProfileSummary' {applicationId} -> applicationId) (\s@ConfigurationProfileSummary' {} a -> s {applicationId = a} :: ConfigurationProfileSummary)
+
+-- | The ID of the configuration profile.
+configurationProfileSummary_id :: Lens.Lens' ConfigurationProfileSummary (Prelude.Maybe Prelude.Text)
+configurationProfileSummary_id = Lens.lens (\ConfigurationProfileSummary' {id} -> id) (\s@ConfigurationProfileSummary' {} a -> s {id = a} :: ConfigurationProfileSummary)
+
+-- | The URI location of the configuration.
+configurationProfileSummary_locationUri :: Lens.Lens' ConfigurationProfileSummary (Prelude.Maybe Prelude.Text)
+configurationProfileSummary_locationUri = Lens.lens (\ConfigurationProfileSummary' {locationUri} -> locationUri) (\s@ConfigurationProfileSummary' {} a -> s {locationUri = a} :: ConfigurationProfileSummary)
+
+-- | The name of the configuration profile.
+configurationProfileSummary_name :: Lens.Lens' ConfigurationProfileSummary (Prelude.Maybe Prelude.Text)
+configurationProfileSummary_name = Lens.lens (\ConfigurationProfileSummary' {name} -> name) (\s@ConfigurationProfileSummary' {} a -> s {name = a} :: ConfigurationProfileSummary)
+
+-- | The type of configurations contained in the profile. AppConfig supports
+-- @feature flags@ and @freeform@ configurations. We recommend you create
+-- feature flag configurations to enable or disable new features and
+-- freeform configurations to distribute configurations to an application.
+-- When calling this API, enter one of the following values for @Type@:
+--
+-- @AWS.AppConfig.FeatureFlags@
+--
+-- @AWS.Freeform@
+configurationProfileSummary_type :: Lens.Lens' ConfigurationProfileSummary (Prelude.Maybe Prelude.Text)
+configurationProfileSummary_type = Lens.lens (\ConfigurationProfileSummary' {type'} -> type') (\s@ConfigurationProfileSummary' {} a -> s {type' = a} :: ConfigurationProfileSummary)
+
+-- | The types of validators in the configuration profile.
+configurationProfileSummary_validatorTypes :: Lens.Lens' ConfigurationProfileSummary (Prelude.Maybe [ValidatorType])
+configurationProfileSummary_validatorTypes = Lens.lens (\ConfigurationProfileSummary' {validatorTypes} -> validatorTypes) (\s@ConfigurationProfileSummary' {} a -> s {validatorTypes = a} :: ConfigurationProfileSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ConfigurationProfileSummary where
+  parseJSON =
+    Data.withObject
+      "ConfigurationProfileSummary"
+      ( \x ->
+          ConfigurationProfileSummary'
+            Prelude.<$> (x Data..:? "ApplicationId")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "LocationUri")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Type")
+            Prelude.<*> ( x
+                            Data..:? "ValidatorTypes"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ConfigurationProfileSummary where
+  hashWithSalt _salt ConfigurationProfileSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` locationUri
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` validatorTypes
+
+instance Prelude.NFData ConfigurationProfileSummary where
+  rnf ConfigurationProfileSummary' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf locationUri
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf validatorTypes
diff --git a/gen/Amazonka/AppConfig/Types/Deployment.hs b/gen/Amazonka/AppConfig/Types/Deployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/Deployment.hs
@@ -0,0 +1,311 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.Deployment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.Deployment where
+
+import Amazonka.AppConfig.Types.AppliedExtension
+import Amazonka.AppConfig.Types.DeploymentEvent
+import Amazonka.AppConfig.Types.DeploymentState
+import Amazonka.AppConfig.Types.GrowthType
+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
+
+-- | /See:/ 'newDeployment' smart constructor.
+data Deployment = Deployment'
+  { -- | The ID of the application that was deployed.
+    applicationId :: Prelude.Maybe Prelude.Text,
+    -- | A list of extensions that were processed as part of the deployment. The
+    -- extensions that were previously associated to the configuration profile,
+    -- environment, or the application when @StartDeployment@ was called.
+    appliedExtensions :: Prelude.Maybe [AppliedExtension],
+    -- | The time the deployment completed.
+    completedAt :: Prelude.Maybe Data.ISO8601,
+    -- | Information about the source location of the configuration.
+    configurationLocationUri :: Prelude.Maybe Prelude.Text,
+    -- | The name of the configuration.
+    configurationName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the configuration profile that was deployed.
+    configurationProfileId :: Prelude.Maybe Prelude.Text,
+    -- | The configuration version that was deployed.
+    configurationVersion :: Prelude.Maybe Prelude.Text,
+    -- | Total amount of time the deployment lasted.
+    deploymentDurationInMinutes :: Prelude.Maybe Prelude.Natural,
+    -- | The sequence number of the deployment.
+    deploymentNumber :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the deployment strategy that was deployed.
+    deploymentStrategyId :: Prelude.Maybe Prelude.Text,
+    -- | The description of the deployment.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the environment that was deployed.
+    environmentId :: Prelude.Maybe Prelude.Text,
+    -- | A list containing all events related to a deployment. The most recent
+    -- events are displayed first.
+    eventLog :: Prelude.Maybe [DeploymentEvent],
+    -- | The amount of time that AppConfig monitored for alarms before
+    -- considering the deployment to be complete and no longer eligible for
+    -- automatic rollback.
+    finalBakeTimeInMinutes :: Prelude.Maybe Prelude.Natural,
+    -- | The percentage of targets to receive a deployed configuration during
+    -- each interval.
+    growthFactor :: Prelude.Maybe Prelude.Double,
+    -- | The algorithm used to define how percentage grew over time.
+    growthType :: Prelude.Maybe GrowthType,
+    -- | The percentage of targets for which the deployment is available.
+    percentageComplete :: Prelude.Maybe Prelude.Double,
+    -- | The time the deployment started.
+    startedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The state of the deployment.
+    state :: Prelude.Maybe DeploymentState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Deployment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'deployment_applicationId' - The ID of the application that was deployed.
+--
+-- 'appliedExtensions', 'deployment_appliedExtensions' - A list of extensions that were processed as part of the deployment. The
+-- extensions that were previously associated to the configuration profile,
+-- environment, or the application when @StartDeployment@ was called.
+--
+-- 'completedAt', 'deployment_completedAt' - The time the deployment completed.
+--
+-- 'configurationLocationUri', 'deployment_configurationLocationUri' - Information about the source location of the configuration.
+--
+-- 'configurationName', 'deployment_configurationName' - The name of the configuration.
+--
+-- 'configurationProfileId', 'deployment_configurationProfileId' - The ID of the configuration profile that was deployed.
+--
+-- 'configurationVersion', 'deployment_configurationVersion' - The configuration version that was deployed.
+--
+-- 'deploymentDurationInMinutes', 'deployment_deploymentDurationInMinutes' - Total amount of time the deployment lasted.
+--
+-- 'deploymentNumber', 'deployment_deploymentNumber' - The sequence number of the deployment.
+--
+-- 'deploymentStrategyId', 'deployment_deploymentStrategyId' - The ID of the deployment strategy that was deployed.
+--
+-- 'description', 'deployment_description' - The description of the deployment.
+--
+-- 'environmentId', 'deployment_environmentId' - The ID of the environment that was deployed.
+--
+-- 'eventLog', 'deployment_eventLog' - A list containing all events related to a deployment. The most recent
+-- events are displayed first.
+--
+-- 'finalBakeTimeInMinutes', 'deployment_finalBakeTimeInMinutes' - The amount of time that AppConfig monitored for alarms before
+-- considering the deployment to be complete and no longer eligible for
+-- automatic rollback.
+--
+-- 'growthFactor', 'deployment_growthFactor' - The percentage of targets to receive a deployed configuration during
+-- each interval.
+--
+-- 'growthType', 'deployment_growthType' - The algorithm used to define how percentage grew over time.
+--
+-- 'percentageComplete', 'deployment_percentageComplete' - The percentage of targets for which the deployment is available.
+--
+-- 'startedAt', 'deployment_startedAt' - The time the deployment started.
+--
+-- 'state', 'deployment_state' - The state of the deployment.
+newDeployment ::
+  Deployment
+newDeployment =
+  Deployment'
+    { applicationId = Prelude.Nothing,
+      appliedExtensions = Prelude.Nothing,
+      completedAt = Prelude.Nothing,
+      configurationLocationUri = Prelude.Nothing,
+      configurationName = Prelude.Nothing,
+      configurationProfileId = Prelude.Nothing,
+      configurationVersion = Prelude.Nothing,
+      deploymentDurationInMinutes = Prelude.Nothing,
+      deploymentNumber = Prelude.Nothing,
+      deploymentStrategyId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      environmentId = Prelude.Nothing,
+      eventLog = Prelude.Nothing,
+      finalBakeTimeInMinutes = Prelude.Nothing,
+      growthFactor = Prelude.Nothing,
+      growthType = Prelude.Nothing,
+      percentageComplete = Prelude.Nothing,
+      startedAt = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The ID of the application that was deployed.
+deployment_applicationId :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Text)
+deployment_applicationId = Lens.lens (\Deployment' {applicationId} -> applicationId) (\s@Deployment' {} a -> s {applicationId = a} :: Deployment)
+
+-- | A list of extensions that were processed as part of the deployment. The
+-- extensions that were previously associated to the configuration profile,
+-- environment, or the application when @StartDeployment@ was called.
+deployment_appliedExtensions :: Lens.Lens' Deployment (Prelude.Maybe [AppliedExtension])
+deployment_appliedExtensions = Lens.lens (\Deployment' {appliedExtensions} -> appliedExtensions) (\s@Deployment' {} a -> s {appliedExtensions = a} :: Deployment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time the deployment completed.
+deployment_completedAt :: Lens.Lens' Deployment (Prelude.Maybe Prelude.UTCTime)
+deployment_completedAt = Lens.lens (\Deployment' {completedAt} -> completedAt) (\s@Deployment' {} a -> s {completedAt = a} :: Deployment) Prelude.. Lens.mapping Data._Time
+
+-- | Information about the source location of the configuration.
+deployment_configurationLocationUri :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Text)
+deployment_configurationLocationUri = Lens.lens (\Deployment' {configurationLocationUri} -> configurationLocationUri) (\s@Deployment' {} a -> s {configurationLocationUri = a} :: Deployment)
+
+-- | The name of the configuration.
+deployment_configurationName :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Text)
+deployment_configurationName = Lens.lens (\Deployment' {configurationName} -> configurationName) (\s@Deployment' {} a -> s {configurationName = a} :: Deployment)
+
+-- | The ID of the configuration profile that was deployed.
+deployment_configurationProfileId :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Text)
+deployment_configurationProfileId = Lens.lens (\Deployment' {configurationProfileId} -> configurationProfileId) (\s@Deployment' {} a -> s {configurationProfileId = a} :: Deployment)
+
+-- | The configuration version that was deployed.
+deployment_configurationVersion :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Text)
+deployment_configurationVersion = Lens.lens (\Deployment' {configurationVersion} -> configurationVersion) (\s@Deployment' {} a -> s {configurationVersion = a} :: Deployment)
+
+-- | Total amount of time the deployment lasted.
+deployment_deploymentDurationInMinutes :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Natural)
+deployment_deploymentDurationInMinutes = Lens.lens (\Deployment' {deploymentDurationInMinutes} -> deploymentDurationInMinutes) (\s@Deployment' {} a -> s {deploymentDurationInMinutes = a} :: Deployment)
+
+-- | The sequence number of the deployment.
+deployment_deploymentNumber :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Int)
+deployment_deploymentNumber = Lens.lens (\Deployment' {deploymentNumber} -> deploymentNumber) (\s@Deployment' {} a -> s {deploymentNumber = a} :: Deployment)
+
+-- | The ID of the deployment strategy that was deployed.
+deployment_deploymentStrategyId :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Text)
+deployment_deploymentStrategyId = Lens.lens (\Deployment' {deploymentStrategyId} -> deploymentStrategyId) (\s@Deployment' {} a -> s {deploymentStrategyId = a} :: Deployment)
+
+-- | The description of the deployment.
+deployment_description :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Text)
+deployment_description = Lens.lens (\Deployment' {description} -> description) (\s@Deployment' {} a -> s {description = a} :: Deployment)
+
+-- | The ID of the environment that was deployed.
+deployment_environmentId :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Text)
+deployment_environmentId = Lens.lens (\Deployment' {environmentId} -> environmentId) (\s@Deployment' {} a -> s {environmentId = a} :: Deployment)
+
+-- | A list containing all events related to a deployment. The most recent
+-- events are displayed first.
+deployment_eventLog :: Lens.Lens' Deployment (Prelude.Maybe [DeploymentEvent])
+deployment_eventLog = Lens.lens (\Deployment' {eventLog} -> eventLog) (\s@Deployment' {} a -> s {eventLog = a} :: Deployment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The amount of time that AppConfig monitored for alarms before
+-- considering the deployment to be complete and no longer eligible for
+-- automatic rollback.
+deployment_finalBakeTimeInMinutes :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Natural)
+deployment_finalBakeTimeInMinutes = Lens.lens (\Deployment' {finalBakeTimeInMinutes} -> finalBakeTimeInMinutes) (\s@Deployment' {} a -> s {finalBakeTimeInMinutes = a} :: Deployment)
+
+-- | The percentage of targets to receive a deployed configuration during
+-- each interval.
+deployment_growthFactor :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Double)
+deployment_growthFactor = Lens.lens (\Deployment' {growthFactor} -> growthFactor) (\s@Deployment' {} a -> s {growthFactor = a} :: Deployment)
+
+-- | The algorithm used to define how percentage grew over time.
+deployment_growthType :: Lens.Lens' Deployment (Prelude.Maybe GrowthType)
+deployment_growthType = Lens.lens (\Deployment' {growthType} -> growthType) (\s@Deployment' {} a -> s {growthType = a} :: Deployment)
+
+-- | The percentage of targets for which the deployment is available.
+deployment_percentageComplete :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Double)
+deployment_percentageComplete = Lens.lens (\Deployment' {percentageComplete} -> percentageComplete) (\s@Deployment' {} a -> s {percentageComplete = a} :: Deployment)
+
+-- | The time the deployment started.
+deployment_startedAt :: Lens.Lens' Deployment (Prelude.Maybe Prelude.UTCTime)
+deployment_startedAt = Lens.lens (\Deployment' {startedAt} -> startedAt) (\s@Deployment' {} a -> s {startedAt = a} :: Deployment) Prelude.. Lens.mapping Data._Time
+
+-- | The state of the deployment.
+deployment_state :: Lens.Lens' Deployment (Prelude.Maybe DeploymentState)
+deployment_state = Lens.lens (\Deployment' {state} -> state) (\s@Deployment' {} a -> s {state = a} :: Deployment)
+
+instance Data.FromJSON Deployment where
+  parseJSON =
+    Data.withObject
+      "Deployment"
+      ( \x ->
+          Deployment'
+            Prelude.<$> (x Data..:? "ApplicationId")
+            Prelude.<*> ( x
+                            Data..:? "AppliedExtensions"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "CompletedAt")
+            Prelude.<*> (x Data..:? "ConfigurationLocationUri")
+            Prelude.<*> (x Data..:? "ConfigurationName")
+            Prelude.<*> (x Data..:? "ConfigurationProfileId")
+            Prelude.<*> (x Data..:? "ConfigurationVersion")
+            Prelude.<*> (x Data..:? "DeploymentDurationInMinutes")
+            Prelude.<*> (x Data..:? "DeploymentNumber")
+            Prelude.<*> (x Data..:? "DeploymentStrategyId")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "EnvironmentId")
+            Prelude.<*> (x Data..:? "EventLog" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "FinalBakeTimeInMinutes")
+            Prelude.<*> (x Data..:? "GrowthFactor")
+            Prelude.<*> (x Data..:? "GrowthType")
+            Prelude.<*> (x Data..:? "PercentageComplete")
+            Prelude.<*> (x Data..:? "StartedAt")
+            Prelude.<*> (x Data..:? "State")
+      )
+
+instance Prelude.Hashable Deployment where
+  hashWithSalt _salt Deployment' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` appliedExtensions
+      `Prelude.hashWithSalt` completedAt
+      `Prelude.hashWithSalt` configurationLocationUri
+      `Prelude.hashWithSalt` configurationName
+      `Prelude.hashWithSalt` configurationProfileId
+      `Prelude.hashWithSalt` configurationVersion
+      `Prelude.hashWithSalt` deploymentDurationInMinutes
+      `Prelude.hashWithSalt` deploymentNumber
+      `Prelude.hashWithSalt` deploymentStrategyId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` environmentId
+      `Prelude.hashWithSalt` eventLog
+      `Prelude.hashWithSalt` finalBakeTimeInMinutes
+      `Prelude.hashWithSalt` growthFactor
+      `Prelude.hashWithSalt` growthType
+      `Prelude.hashWithSalt` percentageComplete
+      `Prelude.hashWithSalt` startedAt
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData Deployment where
+  rnf Deployment' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf appliedExtensions
+      `Prelude.seq` Prelude.rnf completedAt
+      `Prelude.seq` Prelude.rnf configurationLocationUri
+      `Prelude.seq` Prelude.rnf configurationName
+      `Prelude.seq` Prelude.rnf configurationProfileId
+      `Prelude.seq` Prelude.rnf configurationVersion
+      `Prelude.seq` Prelude.rnf deploymentDurationInMinutes
+      `Prelude.seq` Prelude.rnf deploymentNumber
+      `Prelude.seq` Prelude.rnf deploymentStrategyId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf eventLog
+      `Prelude.seq` Prelude.rnf finalBakeTimeInMinutes
+      `Prelude.seq` Prelude.rnf growthFactor
+      `Prelude.seq` Prelude.rnf growthType
+      `Prelude.seq` Prelude.rnf percentageComplete
+      `Prelude.seq` Prelude.rnf startedAt
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/AppConfig/Types/DeploymentEvent.hs b/gen/Amazonka/AppConfig/Types/DeploymentEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/DeploymentEvent.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.DeploymentEvent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.DeploymentEvent where
+
+import Amazonka.AppConfig.Types.ActionInvocation
+import Amazonka.AppConfig.Types.DeploymentEventType
+import Amazonka.AppConfig.Types.TriggeredBy
+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 that describes a deployment event.
+--
+-- /See:/ 'newDeploymentEvent' smart constructor.
+data DeploymentEvent = DeploymentEvent'
+  { -- | The list of extensions that were invoked as part of the deployment.
+    actionInvocations :: Prelude.Maybe [ActionInvocation],
+    -- | A description of the deployment event. Descriptions include, but are not
+    -- limited to, the user account or the Amazon CloudWatch alarm ARN that
+    -- initiated a rollback, the percentage of hosts that received the
+    -- deployment, or in the case of an internal error, a recommendation to
+    -- attempt a new deployment.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The type of deployment event. Deployment event types include the start,
+    -- stop, or completion of a deployment; a percentage update; the start or
+    -- stop of a bake period; and the start or completion of a rollback.
+    eventType :: Prelude.Maybe DeploymentEventType,
+    -- | The date and time the event occurred.
+    occurredAt :: Prelude.Maybe Data.ISO8601,
+    -- | The entity that triggered the deployment event. Events can be triggered
+    -- by a user, AppConfig, an Amazon CloudWatch alarm, or an internal error.
+    triggeredBy :: Prelude.Maybe TriggeredBy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeploymentEvent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actionInvocations', 'deploymentEvent_actionInvocations' - The list of extensions that were invoked as part of the deployment.
+--
+-- 'description', 'deploymentEvent_description' - A description of the deployment event. Descriptions include, but are not
+-- limited to, the user account or the Amazon CloudWatch alarm ARN that
+-- initiated a rollback, the percentage of hosts that received the
+-- deployment, or in the case of an internal error, a recommendation to
+-- attempt a new deployment.
+--
+-- 'eventType', 'deploymentEvent_eventType' - The type of deployment event. Deployment event types include the start,
+-- stop, or completion of a deployment; a percentage update; the start or
+-- stop of a bake period; and the start or completion of a rollback.
+--
+-- 'occurredAt', 'deploymentEvent_occurredAt' - The date and time the event occurred.
+--
+-- 'triggeredBy', 'deploymentEvent_triggeredBy' - The entity that triggered the deployment event. Events can be triggered
+-- by a user, AppConfig, an Amazon CloudWatch alarm, or an internal error.
+newDeploymentEvent ::
+  DeploymentEvent
+newDeploymentEvent =
+  DeploymentEvent'
+    { actionInvocations =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      eventType = Prelude.Nothing,
+      occurredAt = Prelude.Nothing,
+      triggeredBy = Prelude.Nothing
+    }
+
+-- | The list of extensions that were invoked as part of the deployment.
+deploymentEvent_actionInvocations :: Lens.Lens' DeploymentEvent (Prelude.Maybe [ActionInvocation])
+deploymentEvent_actionInvocations = Lens.lens (\DeploymentEvent' {actionInvocations} -> actionInvocations) (\s@DeploymentEvent' {} a -> s {actionInvocations = a} :: DeploymentEvent) Prelude.. Lens.mapping Lens.coerced
+
+-- | A description of the deployment event. Descriptions include, but are not
+-- limited to, the user account or the Amazon CloudWatch alarm ARN that
+-- initiated a rollback, the percentage of hosts that received the
+-- deployment, or in the case of an internal error, a recommendation to
+-- attempt a new deployment.
+deploymentEvent_description :: Lens.Lens' DeploymentEvent (Prelude.Maybe Prelude.Text)
+deploymentEvent_description = Lens.lens (\DeploymentEvent' {description} -> description) (\s@DeploymentEvent' {} a -> s {description = a} :: DeploymentEvent)
+
+-- | The type of deployment event. Deployment event types include the start,
+-- stop, or completion of a deployment; a percentage update; the start or
+-- stop of a bake period; and the start or completion of a rollback.
+deploymentEvent_eventType :: Lens.Lens' DeploymentEvent (Prelude.Maybe DeploymentEventType)
+deploymentEvent_eventType = Lens.lens (\DeploymentEvent' {eventType} -> eventType) (\s@DeploymentEvent' {} a -> s {eventType = a} :: DeploymentEvent)
+
+-- | The date and time the event occurred.
+deploymentEvent_occurredAt :: Lens.Lens' DeploymentEvent (Prelude.Maybe Prelude.UTCTime)
+deploymentEvent_occurredAt = Lens.lens (\DeploymentEvent' {occurredAt} -> occurredAt) (\s@DeploymentEvent' {} a -> s {occurredAt = a} :: DeploymentEvent) Prelude.. Lens.mapping Data._Time
+
+-- | The entity that triggered the deployment event. Events can be triggered
+-- by a user, AppConfig, an Amazon CloudWatch alarm, or an internal error.
+deploymentEvent_triggeredBy :: Lens.Lens' DeploymentEvent (Prelude.Maybe TriggeredBy)
+deploymentEvent_triggeredBy = Lens.lens (\DeploymentEvent' {triggeredBy} -> triggeredBy) (\s@DeploymentEvent' {} a -> s {triggeredBy = a} :: DeploymentEvent)
+
+instance Data.FromJSON DeploymentEvent where
+  parseJSON =
+    Data.withObject
+      "DeploymentEvent"
+      ( \x ->
+          DeploymentEvent'
+            Prelude.<$> ( x
+                            Data..:? "ActionInvocations"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "EventType")
+            Prelude.<*> (x Data..:? "OccurredAt")
+            Prelude.<*> (x Data..:? "TriggeredBy")
+      )
+
+instance Prelude.Hashable DeploymentEvent where
+  hashWithSalt _salt DeploymentEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` actionInvocations
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` eventType
+      `Prelude.hashWithSalt` occurredAt
+      `Prelude.hashWithSalt` triggeredBy
+
+instance Prelude.NFData DeploymentEvent where
+  rnf DeploymentEvent' {..} =
+    Prelude.rnf actionInvocations
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf eventType
+      `Prelude.seq` Prelude.rnf occurredAt
+      `Prelude.seq` Prelude.rnf triggeredBy
diff --git a/gen/Amazonka/AppConfig/Types/DeploymentEventType.hs b/gen/Amazonka/AppConfig/Types/DeploymentEventType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/DeploymentEventType.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.AppConfig.Types.DeploymentEventType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.DeploymentEventType
+  ( DeploymentEventType
+      ( ..,
+        DeploymentEventType_BAKE_TIME_STARTED,
+        DeploymentEventType_DEPLOYMENT_COMPLETED,
+        DeploymentEventType_DEPLOYMENT_STARTED,
+        DeploymentEventType_PERCENTAGE_UPDATED,
+        DeploymentEventType_ROLLBACK_COMPLETED,
+        DeploymentEventType_ROLLBACK_STARTED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeploymentEventType = DeploymentEventType'
+  { fromDeploymentEventType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DeploymentEventType_BAKE_TIME_STARTED :: DeploymentEventType
+pattern DeploymentEventType_BAKE_TIME_STARTED = DeploymentEventType' "BAKE_TIME_STARTED"
+
+pattern DeploymentEventType_DEPLOYMENT_COMPLETED :: DeploymentEventType
+pattern DeploymentEventType_DEPLOYMENT_COMPLETED = DeploymentEventType' "DEPLOYMENT_COMPLETED"
+
+pattern DeploymentEventType_DEPLOYMENT_STARTED :: DeploymentEventType
+pattern DeploymentEventType_DEPLOYMENT_STARTED = DeploymentEventType' "DEPLOYMENT_STARTED"
+
+pattern DeploymentEventType_PERCENTAGE_UPDATED :: DeploymentEventType
+pattern DeploymentEventType_PERCENTAGE_UPDATED = DeploymentEventType' "PERCENTAGE_UPDATED"
+
+pattern DeploymentEventType_ROLLBACK_COMPLETED :: DeploymentEventType
+pattern DeploymentEventType_ROLLBACK_COMPLETED = DeploymentEventType' "ROLLBACK_COMPLETED"
+
+pattern DeploymentEventType_ROLLBACK_STARTED :: DeploymentEventType
+pattern DeploymentEventType_ROLLBACK_STARTED = DeploymentEventType' "ROLLBACK_STARTED"
+
+{-# COMPLETE
+  DeploymentEventType_BAKE_TIME_STARTED,
+  DeploymentEventType_DEPLOYMENT_COMPLETED,
+  DeploymentEventType_DEPLOYMENT_STARTED,
+  DeploymentEventType_PERCENTAGE_UPDATED,
+  DeploymentEventType_ROLLBACK_COMPLETED,
+  DeploymentEventType_ROLLBACK_STARTED,
+  DeploymentEventType'
+  #-}
diff --git a/gen/Amazonka/AppConfig/Types/DeploymentState.hs b/gen/Amazonka/AppConfig/Types/DeploymentState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/DeploymentState.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.AppConfig.Types.DeploymentState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.DeploymentState
+  ( DeploymentState
+      ( ..,
+        DeploymentState_BAKING,
+        DeploymentState_COMPLETE,
+        DeploymentState_DEPLOYING,
+        DeploymentState_ROLLED_BACK,
+        DeploymentState_ROLLING_BACK,
+        DeploymentState_VALIDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeploymentState = DeploymentState'
+  { fromDeploymentState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DeploymentState_BAKING :: DeploymentState
+pattern DeploymentState_BAKING = DeploymentState' "BAKING"
+
+pattern DeploymentState_COMPLETE :: DeploymentState
+pattern DeploymentState_COMPLETE = DeploymentState' "COMPLETE"
+
+pattern DeploymentState_DEPLOYING :: DeploymentState
+pattern DeploymentState_DEPLOYING = DeploymentState' "DEPLOYING"
+
+pattern DeploymentState_ROLLED_BACK :: DeploymentState
+pattern DeploymentState_ROLLED_BACK = DeploymentState' "ROLLED_BACK"
+
+pattern DeploymentState_ROLLING_BACK :: DeploymentState
+pattern DeploymentState_ROLLING_BACK = DeploymentState' "ROLLING_BACK"
+
+pattern DeploymentState_VALIDATING :: DeploymentState
+pattern DeploymentState_VALIDATING = DeploymentState' "VALIDATING"
+
+{-# COMPLETE
+  DeploymentState_BAKING,
+  DeploymentState_COMPLETE,
+  DeploymentState_DEPLOYING,
+  DeploymentState_ROLLED_BACK,
+  DeploymentState_ROLLING_BACK,
+  DeploymentState_VALIDATING,
+  DeploymentState'
+  #-}
diff --git a/gen/Amazonka/AppConfig/Types/DeploymentStrategy.hs b/gen/Amazonka/AppConfig/Types/DeploymentStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/DeploymentStrategy.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.AppConfig.Types.DeploymentStrategy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.DeploymentStrategy where
+
+import Amazonka.AppConfig.Types.GrowthType
+import Amazonka.AppConfig.Types.ReplicateTo
+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
+
+-- | /See:/ 'newDeploymentStrategy' smart constructor.
+data DeploymentStrategy = DeploymentStrategy'
+  { -- | Total amount of time the deployment lasted.
+    deploymentDurationInMinutes :: Prelude.Maybe Prelude.Natural,
+    -- | The description of the deployment strategy.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The amount of time that AppConfig monitored for alarms before
+    -- considering the deployment to be complete and no longer eligible for
+    -- automatic rollback.
+    finalBakeTimeInMinutes :: Prelude.Maybe Prelude.Natural,
+    -- | The percentage of targets that received a deployed configuration during
+    -- each interval.
+    growthFactor :: Prelude.Maybe Prelude.Double,
+    -- | The algorithm used to define how percentage grew over time.
+    growthType :: Prelude.Maybe GrowthType,
+    -- | The deployment strategy ID.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the deployment strategy.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Save the deployment strategy to a Systems Manager (SSM) document.
+    replicateTo :: Prelude.Maybe ReplicateTo
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeploymentStrategy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deploymentDurationInMinutes', 'deploymentStrategy_deploymentDurationInMinutes' - Total amount of time the deployment lasted.
+--
+-- 'description', 'deploymentStrategy_description' - The description of the deployment strategy.
+--
+-- 'finalBakeTimeInMinutes', 'deploymentStrategy_finalBakeTimeInMinutes' - The amount of time that AppConfig monitored for alarms before
+-- considering the deployment to be complete and no longer eligible for
+-- automatic rollback.
+--
+-- 'growthFactor', 'deploymentStrategy_growthFactor' - The percentage of targets that received a deployed configuration during
+-- each interval.
+--
+-- 'growthType', 'deploymentStrategy_growthType' - The algorithm used to define how percentage grew over time.
+--
+-- 'id', 'deploymentStrategy_id' - The deployment strategy ID.
+--
+-- 'name', 'deploymentStrategy_name' - The name of the deployment strategy.
+--
+-- 'replicateTo', 'deploymentStrategy_replicateTo' - Save the deployment strategy to a Systems Manager (SSM) document.
+newDeploymentStrategy ::
+  DeploymentStrategy
+newDeploymentStrategy =
+  DeploymentStrategy'
+    { deploymentDurationInMinutes =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      finalBakeTimeInMinutes = Prelude.Nothing,
+      growthFactor = Prelude.Nothing,
+      growthType = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      replicateTo = Prelude.Nothing
+    }
+
+-- | Total amount of time the deployment lasted.
+deploymentStrategy_deploymentDurationInMinutes :: Lens.Lens' DeploymentStrategy (Prelude.Maybe Prelude.Natural)
+deploymentStrategy_deploymentDurationInMinutes = Lens.lens (\DeploymentStrategy' {deploymentDurationInMinutes} -> deploymentDurationInMinutes) (\s@DeploymentStrategy' {} a -> s {deploymentDurationInMinutes = a} :: DeploymentStrategy)
+
+-- | The description of the deployment strategy.
+deploymentStrategy_description :: Lens.Lens' DeploymentStrategy (Prelude.Maybe Prelude.Text)
+deploymentStrategy_description = Lens.lens (\DeploymentStrategy' {description} -> description) (\s@DeploymentStrategy' {} a -> s {description = a} :: DeploymentStrategy)
+
+-- | The amount of time that AppConfig monitored for alarms before
+-- considering the deployment to be complete and no longer eligible for
+-- automatic rollback.
+deploymentStrategy_finalBakeTimeInMinutes :: Lens.Lens' DeploymentStrategy (Prelude.Maybe Prelude.Natural)
+deploymentStrategy_finalBakeTimeInMinutes = Lens.lens (\DeploymentStrategy' {finalBakeTimeInMinutes} -> finalBakeTimeInMinutes) (\s@DeploymentStrategy' {} a -> s {finalBakeTimeInMinutes = a} :: DeploymentStrategy)
+
+-- | The percentage of targets that received a deployed configuration during
+-- each interval.
+deploymentStrategy_growthFactor :: Lens.Lens' DeploymentStrategy (Prelude.Maybe Prelude.Double)
+deploymentStrategy_growthFactor = Lens.lens (\DeploymentStrategy' {growthFactor} -> growthFactor) (\s@DeploymentStrategy' {} a -> s {growthFactor = a} :: DeploymentStrategy)
+
+-- | The algorithm used to define how percentage grew over time.
+deploymentStrategy_growthType :: Lens.Lens' DeploymentStrategy (Prelude.Maybe GrowthType)
+deploymentStrategy_growthType = Lens.lens (\DeploymentStrategy' {growthType} -> growthType) (\s@DeploymentStrategy' {} a -> s {growthType = a} :: DeploymentStrategy)
+
+-- | The deployment strategy ID.
+deploymentStrategy_id :: Lens.Lens' DeploymentStrategy (Prelude.Maybe Prelude.Text)
+deploymentStrategy_id = Lens.lens (\DeploymentStrategy' {id} -> id) (\s@DeploymentStrategy' {} a -> s {id = a} :: DeploymentStrategy)
+
+-- | The name of the deployment strategy.
+deploymentStrategy_name :: Lens.Lens' DeploymentStrategy (Prelude.Maybe Prelude.Text)
+deploymentStrategy_name = Lens.lens (\DeploymentStrategy' {name} -> name) (\s@DeploymentStrategy' {} a -> s {name = a} :: DeploymentStrategy)
+
+-- | Save the deployment strategy to a Systems Manager (SSM) document.
+deploymentStrategy_replicateTo :: Lens.Lens' DeploymentStrategy (Prelude.Maybe ReplicateTo)
+deploymentStrategy_replicateTo = Lens.lens (\DeploymentStrategy' {replicateTo} -> replicateTo) (\s@DeploymentStrategy' {} a -> s {replicateTo = a} :: DeploymentStrategy)
+
+instance Data.FromJSON DeploymentStrategy where
+  parseJSON =
+    Data.withObject
+      "DeploymentStrategy"
+      ( \x ->
+          DeploymentStrategy'
+            Prelude.<$> (x Data..:? "DeploymentDurationInMinutes")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "FinalBakeTimeInMinutes")
+            Prelude.<*> (x Data..:? "GrowthFactor")
+            Prelude.<*> (x Data..:? "GrowthType")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "ReplicateTo")
+      )
+
+instance Prelude.Hashable DeploymentStrategy where
+  hashWithSalt _salt DeploymentStrategy' {..} =
+    _salt
+      `Prelude.hashWithSalt` deploymentDurationInMinutes
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` finalBakeTimeInMinutes
+      `Prelude.hashWithSalt` growthFactor
+      `Prelude.hashWithSalt` growthType
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` replicateTo
+
+instance Prelude.NFData DeploymentStrategy where
+  rnf DeploymentStrategy' {..} =
+    Prelude.rnf deploymentDurationInMinutes
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf finalBakeTimeInMinutes
+      `Prelude.seq` Prelude.rnf growthFactor
+      `Prelude.seq` Prelude.rnf growthType
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf replicateTo
diff --git a/gen/Amazonka/AppConfig/Types/DeploymentSummary.hs b/gen/Amazonka/AppConfig/Types/DeploymentSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/DeploymentSummary.hs
@@ -0,0 +1,203 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.DeploymentSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.DeploymentSummary where
+
+import Amazonka.AppConfig.Types.DeploymentState
+import Amazonka.AppConfig.Types.GrowthType
+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 the deployment.
+--
+-- /See:/ 'newDeploymentSummary' smart constructor.
+data DeploymentSummary = DeploymentSummary'
+  { -- | Time the deployment completed.
+    completedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The name of the configuration.
+    configurationName :: Prelude.Maybe Prelude.Text,
+    -- | The version of the configuration.
+    configurationVersion :: Prelude.Maybe Prelude.Text,
+    -- | Total amount of time the deployment lasted.
+    deploymentDurationInMinutes :: Prelude.Maybe Prelude.Natural,
+    -- | The sequence number of the deployment.
+    deploymentNumber :: Prelude.Maybe Prelude.Int,
+    -- | The amount of time that AppConfig monitors for alarms before considering
+    -- the deployment to be complete and no longer eligible for automatic
+    -- rollback.
+    finalBakeTimeInMinutes :: Prelude.Maybe Prelude.Natural,
+    -- | The percentage of targets to receive a deployed configuration during
+    -- each interval.
+    growthFactor :: Prelude.Maybe Prelude.Double,
+    -- | The algorithm used to define how percentage grows over time.
+    growthType :: Prelude.Maybe GrowthType,
+    -- | The percentage of targets for which the deployment is available.
+    percentageComplete :: Prelude.Maybe Prelude.Double,
+    -- | Time the deployment started.
+    startedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The state of the deployment.
+    state :: Prelude.Maybe DeploymentState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeploymentSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'completedAt', 'deploymentSummary_completedAt' - Time the deployment completed.
+--
+-- 'configurationName', 'deploymentSummary_configurationName' - The name of the configuration.
+--
+-- 'configurationVersion', 'deploymentSummary_configurationVersion' - The version of the configuration.
+--
+-- 'deploymentDurationInMinutes', 'deploymentSummary_deploymentDurationInMinutes' - Total amount of time the deployment lasted.
+--
+-- 'deploymentNumber', 'deploymentSummary_deploymentNumber' - The sequence number of the deployment.
+--
+-- 'finalBakeTimeInMinutes', 'deploymentSummary_finalBakeTimeInMinutes' - The amount of time that AppConfig monitors for alarms before considering
+-- the deployment to be complete and no longer eligible for automatic
+-- rollback.
+--
+-- 'growthFactor', 'deploymentSummary_growthFactor' - The percentage of targets to receive a deployed configuration during
+-- each interval.
+--
+-- 'growthType', 'deploymentSummary_growthType' - The algorithm used to define how percentage grows over time.
+--
+-- 'percentageComplete', 'deploymentSummary_percentageComplete' - The percentage of targets for which the deployment is available.
+--
+-- 'startedAt', 'deploymentSummary_startedAt' - Time the deployment started.
+--
+-- 'state', 'deploymentSummary_state' - The state of the deployment.
+newDeploymentSummary ::
+  DeploymentSummary
+newDeploymentSummary =
+  DeploymentSummary'
+    { completedAt = Prelude.Nothing,
+      configurationName = Prelude.Nothing,
+      configurationVersion = Prelude.Nothing,
+      deploymentDurationInMinutes = Prelude.Nothing,
+      deploymentNumber = Prelude.Nothing,
+      finalBakeTimeInMinutes = Prelude.Nothing,
+      growthFactor = Prelude.Nothing,
+      growthType = Prelude.Nothing,
+      percentageComplete = Prelude.Nothing,
+      startedAt = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | Time the deployment completed.
+deploymentSummary_completedAt :: Lens.Lens' DeploymentSummary (Prelude.Maybe Prelude.UTCTime)
+deploymentSummary_completedAt = Lens.lens (\DeploymentSummary' {completedAt} -> completedAt) (\s@DeploymentSummary' {} a -> s {completedAt = a} :: DeploymentSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the configuration.
+deploymentSummary_configurationName :: Lens.Lens' DeploymentSummary (Prelude.Maybe Prelude.Text)
+deploymentSummary_configurationName = Lens.lens (\DeploymentSummary' {configurationName} -> configurationName) (\s@DeploymentSummary' {} a -> s {configurationName = a} :: DeploymentSummary)
+
+-- | The version of the configuration.
+deploymentSummary_configurationVersion :: Lens.Lens' DeploymentSummary (Prelude.Maybe Prelude.Text)
+deploymentSummary_configurationVersion = Lens.lens (\DeploymentSummary' {configurationVersion} -> configurationVersion) (\s@DeploymentSummary' {} a -> s {configurationVersion = a} :: DeploymentSummary)
+
+-- | Total amount of time the deployment lasted.
+deploymentSummary_deploymentDurationInMinutes :: Lens.Lens' DeploymentSummary (Prelude.Maybe Prelude.Natural)
+deploymentSummary_deploymentDurationInMinutes = Lens.lens (\DeploymentSummary' {deploymentDurationInMinutes} -> deploymentDurationInMinutes) (\s@DeploymentSummary' {} a -> s {deploymentDurationInMinutes = a} :: DeploymentSummary)
+
+-- | The sequence number of the deployment.
+deploymentSummary_deploymentNumber :: Lens.Lens' DeploymentSummary (Prelude.Maybe Prelude.Int)
+deploymentSummary_deploymentNumber = Lens.lens (\DeploymentSummary' {deploymentNumber} -> deploymentNumber) (\s@DeploymentSummary' {} a -> s {deploymentNumber = a} :: DeploymentSummary)
+
+-- | The amount of time that AppConfig monitors for alarms before considering
+-- the deployment to be complete and no longer eligible for automatic
+-- rollback.
+deploymentSummary_finalBakeTimeInMinutes :: Lens.Lens' DeploymentSummary (Prelude.Maybe Prelude.Natural)
+deploymentSummary_finalBakeTimeInMinutes = Lens.lens (\DeploymentSummary' {finalBakeTimeInMinutes} -> finalBakeTimeInMinutes) (\s@DeploymentSummary' {} a -> s {finalBakeTimeInMinutes = a} :: DeploymentSummary)
+
+-- | The percentage of targets to receive a deployed configuration during
+-- each interval.
+deploymentSummary_growthFactor :: Lens.Lens' DeploymentSummary (Prelude.Maybe Prelude.Double)
+deploymentSummary_growthFactor = Lens.lens (\DeploymentSummary' {growthFactor} -> growthFactor) (\s@DeploymentSummary' {} a -> s {growthFactor = a} :: DeploymentSummary)
+
+-- | The algorithm used to define how percentage grows over time.
+deploymentSummary_growthType :: Lens.Lens' DeploymentSummary (Prelude.Maybe GrowthType)
+deploymentSummary_growthType = Lens.lens (\DeploymentSummary' {growthType} -> growthType) (\s@DeploymentSummary' {} a -> s {growthType = a} :: DeploymentSummary)
+
+-- | The percentage of targets for which the deployment is available.
+deploymentSummary_percentageComplete :: Lens.Lens' DeploymentSummary (Prelude.Maybe Prelude.Double)
+deploymentSummary_percentageComplete = Lens.lens (\DeploymentSummary' {percentageComplete} -> percentageComplete) (\s@DeploymentSummary' {} a -> s {percentageComplete = a} :: DeploymentSummary)
+
+-- | Time the deployment started.
+deploymentSummary_startedAt :: Lens.Lens' DeploymentSummary (Prelude.Maybe Prelude.UTCTime)
+deploymentSummary_startedAt = Lens.lens (\DeploymentSummary' {startedAt} -> startedAt) (\s@DeploymentSummary' {} a -> s {startedAt = a} :: DeploymentSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The state of the deployment.
+deploymentSummary_state :: Lens.Lens' DeploymentSummary (Prelude.Maybe DeploymentState)
+deploymentSummary_state = Lens.lens (\DeploymentSummary' {state} -> state) (\s@DeploymentSummary' {} a -> s {state = a} :: DeploymentSummary)
+
+instance Data.FromJSON DeploymentSummary where
+  parseJSON =
+    Data.withObject
+      "DeploymentSummary"
+      ( \x ->
+          DeploymentSummary'
+            Prelude.<$> (x Data..:? "CompletedAt")
+            Prelude.<*> (x Data..:? "ConfigurationName")
+            Prelude.<*> (x Data..:? "ConfigurationVersion")
+            Prelude.<*> (x Data..:? "DeploymentDurationInMinutes")
+            Prelude.<*> (x Data..:? "DeploymentNumber")
+            Prelude.<*> (x Data..:? "FinalBakeTimeInMinutes")
+            Prelude.<*> (x Data..:? "GrowthFactor")
+            Prelude.<*> (x Data..:? "GrowthType")
+            Prelude.<*> (x Data..:? "PercentageComplete")
+            Prelude.<*> (x Data..:? "StartedAt")
+            Prelude.<*> (x Data..:? "State")
+      )
+
+instance Prelude.Hashable DeploymentSummary where
+  hashWithSalt _salt DeploymentSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` completedAt
+      `Prelude.hashWithSalt` configurationName
+      `Prelude.hashWithSalt` configurationVersion
+      `Prelude.hashWithSalt` deploymentDurationInMinutes
+      `Prelude.hashWithSalt` deploymentNumber
+      `Prelude.hashWithSalt` finalBakeTimeInMinutes
+      `Prelude.hashWithSalt` growthFactor
+      `Prelude.hashWithSalt` growthType
+      `Prelude.hashWithSalt` percentageComplete
+      `Prelude.hashWithSalt` startedAt
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData DeploymentSummary where
+  rnf DeploymentSummary' {..} =
+    Prelude.rnf completedAt
+      `Prelude.seq` Prelude.rnf configurationName
+      `Prelude.seq` Prelude.rnf configurationVersion
+      `Prelude.seq` Prelude.rnf deploymentDurationInMinutes
+      `Prelude.seq` Prelude.rnf deploymentNumber
+      `Prelude.seq` Prelude.rnf finalBakeTimeInMinutes
+      `Prelude.seq` Prelude.rnf growthFactor
+      `Prelude.seq` Prelude.rnf growthType
+      `Prelude.seq` Prelude.rnf percentageComplete
+      `Prelude.seq` Prelude.rnf startedAt
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/AppConfig/Types/Environment.hs b/gen/Amazonka/AppConfig/Types/Environment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/Environment.hs
@@ -0,0 +1,138 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.Environment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.Environment where
+
+import Amazonka.AppConfig.Types.EnvironmentState
+import Amazonka.AppConfig.Types.Monitor
+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
+
+-- | /See:/ 'newEnvironment' smart constructor.
+data Environment = Environment'
+  { -- | The application ID.
+    applicationId :: Prelude.Maybe Prelude.Text,
+    -- | The description of the environment.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The environment ID.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | Amazon CloudWatch alarms monitored during the deployment.
+    monitors :: Prelude.Maybe [Monitor],
+    -- | The name of the environment.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The state of the environment. An environment can be in one of the
+    -- following states: @READY_FOR_DEPLOYMENT@, @DEPLOYING@, @ROLLING_BACK@,
+    -- or @ROLLED_BACK@
+    state :: Prelude.Maybe EnvironmentState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Environment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'environment_applicationId' - The application ID.
+--
+-- 'description', 'environment_description' - The description of the environment.
+--
+-- 'id', 'environment_id' - The environment ID.
+--
+-- 'monitors', 'environment_monitors' - Amazon CloudWatch alarms monitored during the deployment.
+--
+-- 'name', 'environment_name' - The name of the environment.
+--
+-- 'state', 'environment_state' - The state of the environment. An environment can be in one of the
+-- following states: @READY_FOR_DEPLOYMENT@, @DEPLOYING@, @ROLLING_BACK@,
+-- or @ROLLED_BACK@
+newEnvironment ::
+  Environment
+newEnvironment =
+  Environment'
+    { applicationId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      monitors = Prelude.Nothing,
+      name = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The application ID.
+environment_applicationId :: Lens.Lens' Environment (Prelude.Maybe Prelude.Text)
+environment_applicationId = Lens.lens (\Environment' {applicationId} -> applicationId) (\s@Environment' {} a -> s {applicationId = a} :: Environment)
+
+-- | The description of the environment.
+environment_description :: Lens.Lens' Environment (Prelude.Maybe Prelude.Text)
+environment_description = Lens.lens (\Environment' {description} -> description) (\s@Environment' {} a -> s {description = a} :: Environment)
+
+-- | The environment ID.
+environment_id :: Lens.Lens' Environment (Prelude.Maybe Prelude.Text)
+environment_id = Lens.lens (\Environment' {id} -> id) (\s@Environment' {} a -> s {id = a} :: Environment)
+
+-- | Amazon CloudWatch alarms monitored during the deployment.
+environment_monitors :: Lens.Lens' Environment (Prelude.Maybe [Monitor])
+environment_monitors = Lens.lens (\Environment' {monitors} -> monitors) (\s@Environment' {} a -> s {monitors = a} :: Environment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the environment.
+environment_name :: Lens.Lens' Environment (Prelude.Maybe Prelude.Text)
+environment_name = Lens.lens (\Environment' {name} -> name) (\s@Environment' {} a -> s {name = a} :: Environment)
+
+-- | The state of the environment. An environment can be in one of the
+-- following states: @READY_FOR_DEPLOYMENT@, @DEPLOYING@, @ROLLING_BACK@,
+-- or @ROLLED_BACK@
+environment_state :: Lens.Lens' Environment (Prelude.Maybe EnvironmentState)
+environment_state = Lens.lens (\Environment' {state} -> state) (\s@Environment' {} a -> s {state = a} :: Environment)
+
+instance Data.FromJSON Environment where
+  parseJSON =
+    Data.withObject
+      "Environment"
+      ( \x ->
+          Environment'
+            Prelude.<$> (x Data..:? "ApplicationId")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Monitors" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "State")
+      )
+
+instance Prelude.Hashable Environment where
+  hashWithSalt _salt Environment' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` monitors
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData Environment where
+  rnf Environment' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf monitors
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/AppConfig/Types/EnvironmentState.hs b/gen/Amazonka/AppConfig/Types/EnvironmentState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/EnvironmentState.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.AppConfig.Types.EnvironmentState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.EnvironmentState
+  ( EnvironmentState
+      ( ..,
+        EnvironmentState_DEPLOYING,
+        EnvironmentState_READY_FOR_DEPLOYMENT,
+        EnvironmentState_ROLLED_BACK,
+        EnvironmentState_ROLLING_BACK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EnvironmentState = EnvironmentState'
+  { fromEnvironmentState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EnvironmentState_DEPLOYING :: EnvironmentState
+pattern EnvironmentState_DEPLOYING = EnvironmentState' "DEPLOYING"
+
+pattern EnvironmentState_READY_FOR_DEPLOYMENT :: EnvironmentState
+pattern EnvironmentState_READY_FOR_DEPLOYMENT = EnvironmentState' "READY_FOR_DEPLOYMENT"
+
+pattern EnvironmentState_ROLLED_BACK :: EnvironmentState
+pattern EnvironmentState_ROLLED_BACK = EnvironmentState' "ROLLED_BACK"
+
+pattern EnvironmentState_ROLLING_BACK :: EnvironmentState
+pattern EnvironmentState_ROLLING_BACK = EnvironmentState' "ROLLING_BACK"
+
+{-# COMPLETE
+  EnvironmentState_DEPLOYING,
+  EnvironmentState_READY_FOR_DEPLOYMENT,
+  EnvironmentState_ROLLED_BACK,
+  EnvironmentState_ROLLING_BACK,
+  EnvironmentState'
+  #-}
diff --git a/gen/Amazonka/AppConfig/Types/Extension.hs b/gen/Amazonka/AppConfig/Types/Extension.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/Extension.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.Extension
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.Extension where
+
+import Amazonka.AppConfig.Types.Action
+import Amazonka.AppConfig.Types.ActionPoint
+import Amazonka.AppConfig.Types.Parameter
+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
+
+-- | /See:/ 'newExtension' smart constructor.
+data Extension = Extension'
+  { -- | The actions defined in the extension.
+    actions :: Prelude.Maybe (Prelude.HashMap ActionPoint (Prelude.NonEmpty Action)),
+    -- | The system-generated Amazon Resource Name (ARN) for the extension.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Information about the extension.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The system-generated ID of the extension.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The extension name.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The parameters accepted by the extension. You specify parameter values
+    -- when you associate the extension to an AppConfig resource by using the
+    -- @CreateExtensionAssociation@ API action. For Lambda extension actions,
+    -- these parameters are included in the Lambda request object.
+    parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Parameter),
+    -- | The extension version number.
+    versionNumber :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Extension' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actions', 'extension_actions' - The actions defined in the extension.
+--
+-- 'arn', 'extension_arn' - The system-generated Amazon Resource Name (ARN) for the extension.
+--
+-- 'description', 'extension_description' - Information about the extension.
+--
+-- 'id', 'extension_id' - The system-generated ID of the extension.
+--
+-- 'name', 'extension_name' - The extension name.
+--
+-- 'parameters', 'extension_parameters' - The parameters accepted by the extension. You specify parameter values
+-- when you associate the extension to an AppConfig resource by using the
+-- @CreateExtensionAssociation@ API action. For Lambda extension actions,
+-- these parameters are included in the Lambda request object.
+--
+-- 'versionNumber', 'extension_versionNumber' - The extension version number.
+newExtension ::
+  Extension
+newExtension =
+  Extension'
+    { actions = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      parameters = Prelude.Nothing,
+      versionNumber = Prelude.Nothing
+    }
+
+-- | The actions defined in the extension.
+extension_actions :: Lens.Lens' Extension (Prelude.Maybe (Prelude.HashMap ActionPoint (Prelude.NonEmpty Action)))
+extension_actions = Lens.lens (\Extension' {actions} -> actions) (\s@Extension' {} a -> s {actions = a} :: Extension) Prelude.. Lens.mapping Lens.coerced
+
+-- | The system-generated Amazon Resource Name (ARN) for the extension.
+extension_arn :: Lens.Lens' Extension (Prelude.Maybe Prelude.Text)
+extension_arn = Lens.lens (\Extension' {arn} -> arn) (\s@Extension' {} a -> s {arn = a} :: Extension)
+
+-- | Information about the extension.
+extension_description :: Lens.Lens' Extension (Prelude.Maybe Prelude.Text)
+extension_description = Lens.lens (\Extension' {description} -> description) (\s@Extension' {} a -> s {description = a} :: Extension)
+
+-- | The system-generated ID of the extension.
+extension_id :: Lens.Lens' Extension (Prelude.Maybe Prelude.Text)
+extension_id = Lens.lens (\Extension' {id} -> id) (\s@Extension' {} a -> s {id = a} :: Extension)
+
+-- | The extension name.
+extension_name :: Lens.Lens' Extension (Prelude.Maybe Prelude.Text)
+extension_name = Lens.lens (\Extension' {name} -> name) (\s@Extension' {} a -> s {name = a} :: Extension)
+
+-- | The parameters accepted by the extension. You specify parameter values
+-- when you associate the extension to an AppConfig resource by using the
+-- @CreateExtensionAssociation@ API action. For Lambda extension actions,
+-- these parameters are included in the Lambda request object.
+extension_parameters :: Lens.Lens' Extension (Prelude.Maybe (Prelude.HashMap Prelude.Text Parameter))
+extension_parameters = Lens.lens (\Extension' {parameters} -> parameters) (\s@Extension' {} a -> s {parameters = a} :: Extension) Prelude.. Lens.mapping Lens.coerced
+
+-- | The extension version number.
+extension_versionNumber :: Lens.Lens' Extension (Prelude.Maybe Prelude.Int)
+extension_versionNumber = Lens.lens (\Extension' {versionNumber} -> versionNumber) (\s@Extension' {} a -> s {versionNumber = a} :: Extension)
+
+instance Data.FromJSON Extension where
+  parseJSON =
+    Data.withObject
+      "Extension"
+      ( \x ->
+          Extension'
+            Prelude.<$> (x Data..:? "Actions" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Parameters" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "VersionNumber")
+      )
+
+instance Prelude.Hashable Extension where
+  hashWithSalt _salt Extension' {..} =
+    _salt
+      `Prelude.hashWithSalt` actions
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` versionNumber
+
+instance Prelude.NFData Extension where
+  rnf Extension' {..} =
+    Prelude.rnf actions
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf versionNumber
diff --git a/gen/Amazonka/AppConfig/Types/ExtensionAssociation.hs b/gen/Amazonka/AppConfig/Types/ExtensionAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/ExtensionAssociation.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.ExtensionAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.ExtensionAssociation 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
+
+-- | /See:/ 'newExtensionAssociation' smart constructor.
+data ExtensionAssociation = ExtensionAssociation'
+  { -- | The system-generated Amazon Resource Name (ARN) for the extension.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the extension defined in the association.
+    extensionArn :: Prelude.Maybe Prelude.Text,
+    -- | The version number for the extension defined in the association.
+    extensionVersionNumber :: Prelude.Maybe Prelude.Int,
+    -- | The system-generated ID for the association.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The parameter names and values defined in the association.
+    parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ARNs of applications, configuration profiles, or environments
+    -- defined in the association.
+    resourceArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExtensionAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'extensionAssociation_arn' - The system-generated Amazon Resource Name (ARN) for the extension.
+--
+-- 'extensionArn', 'extensionAssociation_extensionArn' - The ARN of the extension defined in the association.
+--
+-- 'extensionVersionNumber', 'extensionAssociation_extensionVersionNumber' - The version number for the extension defined in the association.
+--
+-- 'id', 'extensionAssociation_id' - The system-generated ID for the association.
+--
+-- 'parameters', 'extensionAssociation_parameters' - The parameter names and values defined in the association.
+--
+-- 'resourceArn', 'extensionAssociation_resourceArn' - The ARNs of applications, configuration profiles, or environments
+-- defined in the association.
+newExtensionAssociation ::
+  ExtensionAssociation
+newExtensionAssociation =
+  ExtensionAssociation'
+    { arn = Prelude.Nothing,
+      extensionArn = Prelude.Nothing,
+      extensionVersionNumber = Prelude.Nothing,
+      id = Prelude.Nothing,
+      parameters = Prelude.Nothing,
+      resourceArn = Prelude.Nothing
+    }
+
+-- | The system-generated Amazon Resource Name (ARN) for the extension.
+extensionAssociation_arn :: Lens.Lens' ExtensionAssociation (Prelude.Maybe Prelude.Text)
+extensionAssociation_arn = Lens.lens (\ExtensionAssociation' {arn} -> arn) (\s@ExtensionAssociation' {} a -> s {arn = a} :: ExtensionAssociation)
+
+-- | The ARN of the extension defined in the association.
+extensionAssociation_extensionArn :: Lens.Lens' ExtensionAssociation (Prelude.Maybe Prelude.Text)
+extensionAssociation_extensionArn = Lens.lens (\ExtensionAssociation' {extensionArn} -> extensionArn) (\s@ExtensionAssociation' {} a -> s {extensionArn = a} :: ExtensionAssociation)
+
+-- | The version number for the extension defined in the association.
+extensionAssociation_extensionVersionNumber :: Lens.Lens' ExtensionAssociation (Prelude.Maybe Prelude.Int)
+extensionAssociation_extensionVersionNumber = Lens.lens (\ExtensionAssociation' {extensionVersionNumber} -> extensionVersionNumber) (\s@ExtensionAssociation' {} a -> s {extensionVersionNumber = a} :: ExtensionAssociation)
+
+-- | The system-generated ID for the association.
+extensionAssociation_id :: Lens.Lens' ExtensionAssociation (Prelude.Maybe Prelude.Text)
+extensionAssociation_id = Lens.lens (\ExtensionAssociation' {id} -> id) (\s@ExtensionAssociation' {} a -> s {id = a} :: ExtensionAssociation)
+
+-- | The parameter names and values defined in the association.
+extensionAssociation_parameters :: Lens.Lens' ExtensionAssociation (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+extensionAssociation_parameters = Lens.lens (\ExtensionAssociation' {parameters} -> parameters) (\s@ExtensionAssociation' {} a -> s {parameters = a} :: ExtensionAssociation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARNs of applications, configuration profiles, or environments
+-- defined in the association.
+extensionAssociation_resourceArn :: Lens.Lens' ExtensionAssociation (Prelude.Maybe Prelude.Text)
+extensionAssociation_resourceArn = Lens.lens (\ExtensionAssociation' {resourceArn} -> resourceArn) (\s@ExtensionAssociation' {} a -> s {resourceArn = a} :: ExtensionAssociation)
+
+instance Data.FromJSON ExtensionAssociation where
+  parseJSON =
+    Data.withObject
+      "ExtensionAssociation"
+      ( \x ->
+          ExtensionAssociation'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "ExtensionArn")
+            Prelude.<*> (x Data..:? "ExtensionVersionNumber")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Parameters" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "ResourceArn")
+      )
+
+instance Prelude.Hashable ExtensionAssociation where
+  hashWithSalt _salt ExtensionAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` extensionArn
+      `Prelude.hashWithSalt` extensionVersionNumber
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ExtensionAssociation where
+  rnf ExtensionAssociation' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf extensionArn
+      `Prelude.seq` Prelude.rnf extensionVersionNumber
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf resourceArn
diff --git a/gen/Amazonka/AppConfig/Types/ExtensionAssociationSummary.hs b/gen/Amazonka/AppConfig/Types/ExtensionAssociationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/ExtensionAssociationSummary.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.AppConfig.Types.ExtensionAssociationSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.ExtensionAssociationSummary 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 association between an extension and an AppConfig
+-- resource such as an application, environment, or configuration profile.
+-- Call @GetExtensionAssociation@ to get more information about an
+-- association.
+--
+-- /See:/ 'newExtensionAssociationSummary' smart constructor.
+data ExtensionAssociationSummary = ExtensionAssociationSummary'
+  { -- | The system-generated Amazon Resource Name (ARN) for the extension.
+    extensionArn :: Prelude.Maybe Prelude.Text,
+    -- | The extension association ID. This ID is used to call other
+    -- @ExtensionAssociation@ API actions such as @GetExtensionAssociation@ or
+    -- @DeleteExtensionAssociation@.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The ARNs of applications, configuration profiles, or environments
+    -- defined in the association.
+    resourceArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExtensionAssociationSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'extensionArn', 'extensionAssociationSummary_extensionArn' - The system-generated Amazon Resource Name (ARN) for the extension.
+--
+-- 'id', 'extensionAssociationSummary_id' - The extension association ID. This ID is used to call other
+-- @ExtensionAssociation@ API actions such as @GetExtensionAssociation@ or
+-- @DeleteExtensionAssociation@.
+--
+-- 'resourceArn', 'extensionAssociationSummary_resourceArn' - The ARNs of applications, configuration profiles, or environments
+-- defined in the association.
+newExtensionAssociationSummary ::
+  ExtensionAssociationSummary
+newExtensionAssociationSummary =
+  ExtensionAssociationSummary'
+    { extensionArn =
+        Prelude.Nothing,
+      id = Prelude.Nothing,
+      resourceArn = Prelude.Nothing
+    }
+
+-- | The system-generated Amazon Resource Name (ARN) for the extension.
+extensionAssociationSummary_extensionArn :: Lens.Lens' ExtensionAssociationSummary (Prelude.Maybe Prelude.Text)
+extensionAssociationSummary_extensionArn = Lens.lens (\ExtensionAssociationSummary' {extensionArn} -> extensionArn) (\s@ExtensionAssociationSummary' {} a -> s {extensionArn = a} :: ExtensionAssociationSummary)
+
+-- | The extension association ID. This ID is used to call other
+-- @ExtensionAssociation@ API actions such as @GetExtensionAssociation@ or
+-- @DeleteExtensionAssociation@.
+extensionAssociationSummary_id :: Lens.Lens' ExtensionAssociationSummary (Prelude.Maybe Prelude.Text)
+extensionAssociationSummary_id = Lens.lens (\ExtensionAssociationSummary' {id} -> id) (\s@ExtensionAssociationSummary' {} a -> s {id = a} :: ExtensionAssociationSummary)
+
+-- | The ARNs of applications, configuration profiles, or environments
+-- defined in the association.
+extensionAssociationSummary_resourceArn :: Lens.Lens' ExtensionAssociationSummary (Prelude.Maybe Prelude.Text)
+extensionAssociationSummary_resourceArn = Lens.lens (\ExtensionAssociationSummary' {resourceArn} -> resourceArn) (\s@ExtensionAssociationSummary' {} a -> s {resourceArn = a} :: ExtensionAssociationSummary)
+
+instance Data.FromJSON ExtensionAssociationSummary where
+  parseJSON =
+    Data.withObject
+      "ExtensionAssociationSummary"
+      ( \x ->
+          ExtensionAssociationSummary'
+            Prelude.<$> (x Data..:? "ExtensionArn")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "ResourceArn")
+      )
+
+instance Prelude.Hashable ExtensionAssociationSummary where
+  hashWithSalt _salt ExtensionAssociationSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` extensionArn
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ExtensionAssociationSummary where
+  rnf ExtensionAssociationSummary' {..} =
+    Prelude.rnf extensionArn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf resourceArn
diff --git a/gen/Amazonka/AppConfig/Types/ExtensionSummary.hs b/gen/Amazonka/AppConfig/Types/ExtensionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/ExtensionSummary.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.AppConfig.Types.ExtensionSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.ExtensionSummary 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 extension. Call @GetExtension@ to get more
+-- information about an extension.
+--
+-- /See:/ 'newExtensionSummary' smart constructor.
+data ExtensionSummary = ExtensionSummary'
+  { -- | The system-generated Amazon Resource Name (ARN) for the extension.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Information about the extension.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The system-generated ID of the extension.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The extension name.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The extension version number.
+    versionNumber :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExtensionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'extensionSummary_arn' - The system-generated Amazon Resource Name (ARN) for the extension.
+--
+-- 'description', 'extensionSummary_description' - Information about the extension.
+--
+-- 'id', 'extensionSummary_id' - The system-generated ID of the extension.
+--
+-- 'name', 'extensionSummary_name' - The extension name.
+--
+-- 'versionNumber', 'extensionSummary_versionNumber' - The extension version number.
+newExtensionSummary ::
+  ExtensionSummary
+newExtensionSummary =
+  ExtensionSummary'
+    { arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      versionNumber = Prelude.Nothing
+    }
+
+-- | The system-generated Amazon Resource Name (ARN) for the extension.
+extensionSummary_arn :: Lens.Lens' ExtensionSummary (Prelude.Maybe Prelude.Text)
+extensionSummary_arn = Lens.lens (\ExtensionSummary' {arn} -> arn) (\s@ExtensionSummary' {} a -> s {arn = a} :: ExtensionSummary)
+
+-- | Information about the extension.
+extensionSummary_description :: Lens.Lens' ExtensionSummary (Prelude.Maybe Prelude.Text)
+extensionSummary_description = Lens.lens (\ExtensionSummary' {description} -> description) (\s@ExtensionSummary' {} a -> s {description = a} :: ExtensionSummary)
+
+-- | The system-generated ID of the extension.
+extensionSummary_id :: Lens.Lens' ExtensionSummary (Prelude.Maybe Prelude.Text)
+extensionSummary_id = Lens.lens (\ExtensionSummary' {id} -> id) (\s@ExtensionSummary' {} a -> s {id = a} :: ExtensionSummary)
+
+-- | The extension name.
+extensionSummary_name :: Lens.Lens' ExtensionSummary (Prelude.Maybe Prelude.Text)
+extensionSummary_name = Lens.lens (\ExtensionSummary' {name} -> name) (\s@ExtensionSummary' {} a -> s {name = a} :: ExtensionSummary)
+
+-- | The extension version number.
+extensionSummary_versionNumber :: Lens.Lens' ExtensionSummary (Prelude.Maybe Prelude.Int)
+extensionSummary_versionNumber = Lens.lens (\ExtensionSummary' {versionNumber} -> versionNumber) (\s@ExtensionSummary' {} a -> s {versionNumber = a} :: ExtensionSummary)
+
+instance Data.FromJSON ExtensionSummary where
+  parseJSON =
+    Data.withObject
+      "ExtensionSummary"
+      ( \x ->
+          ExtensionSummary'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "VersionNumber")
+      )
+
+instance Prelude.Hashable ExtensionSummary where
+  hashWithSalt _salt ExtensionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` versionNumber
+
+instance Prelude.NFData ExtensionSummary where
+  rnf ExtensionSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf versionNumber
diff --git a/gen/Amazonka/AppConfig/Types/GrowthType.hs b/gen/Amazonka/AppConfig/Types/GrowthType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/GrowthType.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.AppConfig.Types.GrowthType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.GrowthType
+  ( GrowthType
+      ( ..,
+        GrowthType_EXPONENTIAL,
+        GrowthType_LINEAR
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype GrowthType = GrowthType'
+  { fromGrowthType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern GrowthType_EXPONENTIAL :: GrowthType
+pattern GrowthType_EXPONENTIAL = GrowthType' "EXPONENTIAL"
+
+pattern GrowthType_LINEAR :: GrowthType
+pattern GrowthType_LINEAR = GrowthType' "LINEAR"
+
+{-# COMPLETE
+  GrowthType_EXPONENTIAL,
+  GrowthType_LINEAR,
+  GrowthType'
+  #-}
diff --git a/gen/Amazonka/AppConfig/Types/HostedConfigurationVersion.hs b/gen/Amazonka/AppConfig/Types/HostedConfigurationVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/HostedConfigurationVersion.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.HostedConfigurationVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.HostedConfigurationVersion 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
+
+-- | /See:/ 'newHostedConfigurationVersion' smart constructor.
+data HostedConfigurationVersion = HostedConfigurationVersion'
+  { -- | The application ID.
+    applicationId :: Prelude.Maybe Prelude.Text,
+    -- | The configuration profile ID.
+    configurationProfileId :: Prelude.Maybe Prelude.Text,
+    -- | The content of the configuration or the configuration data.
+    content :: Prelude.Maybe (Data.Sensitive Prelude.ByteString),
+    -- | A standard MIME type describing the format of the configuration content.
+    -- For more information, see
+    -- <https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17 Content-Type>.
+    contentType :: Prelude.Maybe Prelude.Text,
+    -- | A description of the configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The configuration version.
+    versionNumber :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HostedConfigurationVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'hostedConfigurationVersion_applicationId' - The application ID.
+--
+-- 'configurationProfileId', 'hostedConfigurationVersion_configurationProfileId' - The configuration profile ID.
+--
+-- 'content', 'hostedConfigurationVersion_content' - The content of the configuration or the configuration data.
+--
+-- 'contentType', 'hostedConfigurationVersion_contentType' - A standard MIME type describing the format of the configuration content.
+-- For more information, see
+-- <https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17 Content-Type>.
+--
+-- 'description', 'hostedConfigurationVersion_description' - A description of the configuration.
+--
+-- 'versionNumber', 'hostedConfigurationVersion_versionNumber' - The configuration version.
+newHostedConfigurationVersion ::
+  HostedConfigurationVersion
+newHostedConfigurationVersion =
+  HostedConfigurationVersion'
+    { applicationId =
+        Prelude.Nothing,
+      configurationProfileId = Prelude.Nothing,
+      content = Prelude.Nothing,
+      contentType = Prelude.Nothing,
+      description = Prelude.Nothing,
+      versionNumber = Prelude.Nothing
+    }
+
+-- | The application ID.
+hostedConfigurationVersion_applicationId :: Lens.Lens' HostedConfigurationVersion (Prelude.Maybe Prelude.Text)
+hostedConfigurationVersion_applicationId = Lens.lens (\HostedConfigurationVersion' {applicationId} -> applicationId) (\s@HostedConfigurationVersion' {} a -> s {applicationId = a} :: HostedConfigurationVersion)
+
+-- | The configuration profile ID.
+hostedConfigurationVersion_configurationProfileId :: Lens.Lens' HostedConfigurationVersion (Prelude.Maybe Prelude.Text)
+hostedConfigurationVersion_configurationProfileId = Lens.lens (\HostedConfigurationVersion' {configurationProfileId} -> configurationProfileId) (\s@HostedConfigurationVersion' {} a -> s {configurationProfileId = a} :: HostedConfigurationVersion)
+
+-- | The content of the configuration or the configuration data.
+hostedConfigurationVersion_content :: Lens.Lens' HostedConfigurationVersion (Prelude.Maybe Prelude.ByteString)
+hostedConfigurationVersion_content = Lens.lens (\HostedConfigurationVersion' {content} -> content) (\s@HostedConfigurationVersion' {} a -> s {content = a} :: HostedConfigurationVersion) Prelude.. Lens.mapping Data._Sensitive
+
+-- | A standard MIME type describing the format of the configuration content.
+-- For more information, see
+-- <https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17 Content-Type>.
+hostedConfigurationVersion_contentType :: Lens.Lens' HostedConfigurationVersion (Prelude.Maybe Prelude.Text)
+hostedConfigurationVersion_contentType = Lens.lens (\HostedConfigurationVersion' {contentType} -> contentType) (\s@HostedConfigurationVersion' {} a -> s {contentType = a} :: HostedConfigurationVersion)
+
+-- | A description of the configuration.
+hostedConfigurationVersion_description :: Lens.Lens' HostedConfigurationVersion (Prelude.Maybe Prelude.Text)
+hostedConfigurationVersion_description = Lens.lens (\HostedConfigurationVersion' {description} -> description) (\s@HostedConfigurationVersion' {} a -> s {description = a} :: HostedConfigurationVersion)
+
+-- | The configuration version.
+hostedConfigurationVersion_versionNumber :: Lens.Lens' HostedConfigurationVersion (Prelude.Maybe Prelude.Int)
+hostedConfigurationVersion_versionNumber = Lens.lens (\HostedConfigurationVersion' {versionNumber} -> versionNumber) (\s@HostedConfigurationVersion' {} a -> s {versionNumber = a} :: HostedConfigurationVersion)
+
+instance Prelude.Hashable HostedConfigurationVersion where
+  hashWithSalt _salt HostedConfigurationVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` configurationProfileId
+      `Prelude.hashWithSalt` content
+      `Prelude.hashWithSalt` contentType
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` versionNumber
+
+instance Prelude.NFData HostedConfigurationVersion where
+  rnf HostedConfigurationVersion' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf configurationProfileId
+      `Prelude.seq` Prelude.rnf content
+      `Prelude.seq` Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf versionNumber
diff --git a/gen/Amazonka/AppConfig/Types/HostedConfigurationVersionSummary.hs b/gen/Amazonka/AppConfig/Types/HostedConfigurationVersionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/HostedConfigurationVersionSummary.hs
@@ -0,0 +1,138 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.HostedConfigurationVersionSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.HostedConfigurationVersionSummary 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 the configuration.
+--
+-- /See:/ 'newHostedConfigurationVersionSummary' smart constructor.
+data HostedConfigurationVersionSummary = HostedConfigurationVersionSummary'
+  { -- | The application ID.
+    applicationId :: Prelude.Maybe Prelude.Text,
+    -- | The configuration profile ID.
+    configurationProfileId :: Prelude.Maybe Prelude.Text,
+    -- | A standard MIME type describing the format of the configuration content.
+    -- For more information, see
+    -- <https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17 Content-Type>.
+    contentType :: Prelude.Maybe Prelude.Text,
+    -- | A description of the configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The configuration version.
+    versionNumber :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HostedConfigurationVersionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'hostedConfigurationVersionSummary_applicationId' - The application ID.
+--
+-- 'configurationProfileId', 'hostedConfigurationVersionSummary_configurationProfileId' - The configuration profile ID.
+--
+-- 'contentType', 'hostedConfigurationVersionSummary_contentType' - A standard MIME type describing the format of the configuration content.
+-- For more information, see
+-- <https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17 Content-Type>.
+--
+-- 'description', 'hostedConfigurationVersionSummary_description' - A description of the configuration.
+--
+-- 'versionNumber', 'hostedConfigurationVersionSummary_versionNumber' - The configuration version.
+newHostedConfigurationVersionSummary ::
+  HostedConfigurationVersionSummary
+newHostedConfigurationVersionSummary =
+  HostedConfigurationVersionSummary'
+    { applicationId =
+        Prelude.Nothing,
+      configurationProfileId = Prelude.Nothing,
+      contentType = Prelude.Nothing,
+      description = Prelude.Nothing,
+      versionNumber = Prelude.Nothing
+    }
+
+-- | The application ID.
+hostedConfigurationVersionSummary_applicationId :: Lens.Lens' HostedConfigurationVersionSummary (Prelude.Maybe Prelude.Text)
+hostedConfigurationVersionSummary_applicationId = Lens.lens (\HostedConfigurationVersionSummary' {applicationId} -> applicationId) (\s@HostedConfigurationVersionSummary' {} a -> s {applicationId = a} :: HostedConfigurationVersionSummary)
+
+-- | The configuration profile ID.
+hostedConfigurationVersionSummary_configurationProfileId :: Lens.Lens' HostedConfigurationVersionSummary (Prelude.Maybe Prelude.Text)
+hostedConfigurationVersionSummary_configurationProfileId = Lens.lens (\HostedConfigurationVersionSummary' {configurationProfileId} -> configurationProfileId) (\s@HostedConfigurationVersionSummary' {} a -> s {configurationProfileId = a} :: HostedConfigurationVersionSummary)
+
+-- | A standard MIME type describing the format of the configuration content.
+-- For more information, see
+-- <https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17 Content-Type>.
+hostedConfigurationVersionSummary_contentType :: Lens.Lens' HostedConfigurationVersionSummary (Prelude.Maybe Prelude.Text)
+hostedConfigurationVersionSummary_contentType = Lens.lens (\HostedConfigurationVersionSummary' {contentType} -> contentType) (\s@HostedConfigurationVersionSummary' {} a -> s {contentType = a} :: HostedConfigurationVersionSummary)
+
+-- | A description of the configuration.
+hostedConfigurationVersionSummary_description :: Lens.Lens' HostedConfigurationVersionSummary (Prelude.Maybe Prelude.Text)
+hostedConfigurationVersionSummary_description = Lens.lens (\HostedConfigurationVersionSummary' {description} -> description) (\s@HostedConfigurationVersionSummary' {} a -> s {description = a} :: HostedConfigurationVersionSummary)
+
+-- | The configuration version.
+hostedConfigurationVersionSummary_versionNumber :: Lens.Lens' HostedConfigurationVersionSummary (Prelude.Maybe Prelude.Int)
+hostedConfigurationVersionSummary_versionNumber = Lens.lens (\HostedConfigurationVersionSummary' {versionNumber} -> versionNumber) (\s@HostedConfigurationVersionSummary' {} a -> s {versionNumber = a} :: HostedConfigurationVersionSummary)
+
+instance
+  Data.FromJSON
+    HostedConfigurationVersionSummary
+  where
+  parseJSON =
+    Data.withObject
+      "HostedConfigurationVersionSummary"
+      ( \x ->
+          HostedConfigurationVersionSummary'
+            Prelude.<$> (x Data..:? "ApplicationId")
+            Prelude.<*> (x Data..:? "ConfigurationProfileId")
+            Prelude.<*> (x Data..:? "ContentType")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "VersionNumber")
+      )
+
+instance
+  Prelude.Hashable
+    HostedConfigurationVersionSummary
+  where
+  hashWithSalt
+    _salt
+    HostedConfigurationVersionSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` applicationId
+        `Prelude.hashWithSalt` configurationProfileId
+        `Prelude.hashWithSalt` contentType
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` versionNumber
+
+instance
+  Prelude.NFData
+    HostedConfigurationVersionSummary
+  where
+  rnf HostedConfigurationVersionSummary' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf configurationProfileId
+      `Prelude.seq` Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf versionNumber
diff --git a/gen/Amazonka/AppConfig/Types/Monitor.hs b/gen/Amazonka/AppConfig/Types/Monitor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/Monitor.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.Monitor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.Monitor 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
+
+-- | Amazon CloudWatch alarms to monitor during the deployment process.
+--
+-- /See:/ 'newMonitor' smart constructor.
+data Monitor = Monitor'
+  { -- | ARN of an Identity and Access Management (IAM) role for AppConfig to
+    -- monitor @AlarmArn@.
+    alarmRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | Amazon Resource Name (ARN) of the Amazon CloudWatch alarm.
+    alarmArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Monitor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alarmRoleArn', 'monitor_alarmRoleArn' - ARN of an Identity and Access Management (IAM) role for AppConfig to
+-- monitor @AlarmArn@.
+--
+-- 'alarmArn', 'monitor_alarmArn' - Amazon Resource Name (ARN) of the Amazon CloudWatch alarm.
+newMonitor ::
+  -- | 'alarmArn'
+  Prelude.Text ->
+  Monitor
+newMonitor pAlarmArn_ =
+  Monitor'
+    { alarmRoleArn = Prelude.Nothing,
+      alarmArn = pAlarmArn_
+    }
+
+-- | ARN of an Identity and Access Management (IAM) role for AppConfig to
+-- monitor @AlarmArn@.
+monitor_alarmRoleArn :: Lens.Lens' Monitor (Prelude.Maybe Prelude.Text)
+monitor_alarmRoleArn = Lens.lens (\Monitor' {alarmRoleArn} -> alarmRoleArn) (\s@Monitor' {} a -> s {alarmRoleArn = a} :: Monitor)
+
+-- | Amazon Resource Name (ARN) of the Amazon CloudWatch alarm.
+monitor_alarmArn :: Lens.Lens' Monitor Prelude.Text
+monitor_alarmArn = Lens.lens (\Monitor' {alarmArn} -> alarmArn) (\s@Monitor' {} a -> s {alarmArn = a} :: Monitor)
+
+instance Data.FromJSON Monitor where
+  parseJSON =
+    Data.withObject
+      "Monitor"
+      ( \x ->
+          Monitor'
+            Prelude.<$> (x Data..:? "AlarmRoleArn")
+            Prelude.<*> (x Data..: "AlarmArn")
+      )
+
+instance Prelude.Hashable Monitor where
+  hashWithSalt _salt Monitor' {..} =
+    _salt
+      `Prelude.hashWithSalt` alarmRoleArn
+      `Prelude.hashWithSalt` alarmArn
+
+instance Prelude.NFData Monitor where
+  rnf Monitor' {..} =
+    Prelude.rnf alarmRoleArn
+      `Prelude.seq` Prelude.rnf alarmArn
+
+instance Data.ToJSON Monitor where
+  toJSON Monitor' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AlarmRoleArn" Data..=) Prelude.<$> alarmRoleArn,
+            Prelude.Just ("AlarmArn" Data..= alarmArn)
+          ]
+      )
diff --git a/gen/Amazonka/AppConfig/Types/Parameter.hs b/gen/Amazonka/AppConfig/Types/Parameter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/Parameter.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.Parameter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.Parameter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A value such as an Amazon Resource Name (ARN) or an Amazon Simple
+-- Notification Service topic entered in an extension when invoked.
+-- Parameter values are specified in an extension association. For more
+-- information about extensions, see
+-- <https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html Working with AppConfig extensions>
+-- in the /AppConfig User Guide/.
+--
+-- /See:/ 'newParameter' smart constructor.
+data Parameter = Parameter'
+  { -- | Information about the parameter.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A parameter value must be specified in the extension association.
+    required :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Parameter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'parameter_description' - Information about the parameter.
+--
+-- 'required', 'parameter_required' - A parameter value must be specified in the extension association.
+newParameter ::
+  Parameter
+newParameter =
+  Parameter'
+    { description = Prelude.Nothing,
+      required = Prelude.Nothing
+    }
+
+-- | Information about the parameter.
+parameter_description :: Lens.Lens' Parameter (Prelude.Maybe Prelude.Text)
+parameter_description = Lens.lens (\Parameter' {description} -> description) (\s@Parameter' {} a -> s {description = a} :: Parameter)
+
+-- | A parameter value must be specified in the extension association.
+parameter_required :: Lens.Lens' Parameter (Prelude.Maybe Prelude.Bool)
+parameter_required = Lens.lens (\Parameter' {required} -> required) (\s@Parameter' {} a -> s {required = a} :: Parameter)
+
+instance Data.FromJSON Parameter where
+  parseJSON =
+    Data.withObject
+      "Parameter"
+      ( \x ->
+          Parameter'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Required")
+      )
+
+instance Prelude.Hashable Parameter where
+  hashWithSalt _salt Parameter' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` required
+
+instance Prelude.NFData Parameter where
+  rnf Parameter' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf required
+
+instance Data.ToJSON Parameter where
+  toJSON Parameter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Required" Data..=) Prelude.<$> required
+          ]
+      )
diff --git a/gen/Amazonka/AppConfig/Types/ReplicateTo.hs b/gen/Amazonka/AppConfig/Types/ReplicateTo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/ReplicateTo.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.AppConfig.Types.ReplicateTo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.ReplicateTo
+  ( ReplicateTo
+      ( ..,
+        ReplicateTo_NONE,
+        ReplicateTo_SSM_DOCUMENT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReplicateTo = ReplicateTo'
+  { fromReplicateTo ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ReplicateTo_NONE :: ReplicateTo
+pattern ReplicateTo_NONE = ReplicateTo' "NONE"
+
+pattern ReplicateTo_SSM_DOCUMENT :: ReplicateTo
+pattern ReplicateTo_SSM_DOCUMENT = ReplicateTo' "SSM_DOCUMENT"
+
+{-# COMPLETE
+  ReplicateTo_NONE,
+  ReplicateTo_SSM_DOCUMENT,
+  ReplicateTo'
+  #-}
diff --git a/gen/Amazonka/AppConfig/Types/TriggeredBy.hs b/gen/Amazonka/AppConfig/Types/TriggeredBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/TriggeredBy.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.AppConfig.Types.TriggeredBy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.TriggeredBy
+  ( TriggeredBy
+      ( ..,
+        TriggeredBy_APPCONFIG,
+        TriggeredBy_CLOUDWATCH_ALARM,
+        TriggeredBy_INTERNAL_ERROR,
+        TriggeredBy_USER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TriggeredBy = TriggeredBy'
+  { fromTriggeredBy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TriggeredBy_APPCONFIG :: TriggeredBy
+pattern TriggeredBy_APPCONFIG = TriggeredBy' "APPCONFIG"
+
+pattern TriggeredBy_CLOUDWATCH_ALARM :: TriggeredBy
+pattern TriggeredBy_CLOUDWATCH_ALARM = TriggeredBy' "CLOUDWATCH_ALARM"
+
+pattern TriggeredBy_INTERNAL_ERROR :: TriggeredBy
+pattern TriggeredBy_INTERNAL_ERROR = TriggeredBy' "INTERNAL_ERROR"
+
+pattern TriggeredBy_USER :: TriggeredBy
+pattern TriggeredBy_USER = TriggeredBy' "USER"
+
+{-# COMPLETE
+  TriggeredBy_APPCONFIG,
+  TriggeredBy_CLOUDWATCH_ALARM,
+  TriggeredBy_INTERNAL_ERROR,
+  TriggeredBy_USER,
+  TriggeredBy'
+  #-}
diff --git a/gen/Amazonka/AppConfig/Types/Validator.hs b/gen/Amazonka/AppConfig/Types/Validator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/Validator.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.Types.Validator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.Validator where
+
+import Amazonka.AppConfig.Types.ValidatorType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A validator provides a syntactic or semantic check to ensure the
+-- configuration that you want to deploy functions as intended. To validate
+-- your application configuration data, you provide a schema or an Amazon
+-- Web Services Lambda function that runs against the configuration. The
+-- configuration deployment or update can only proceed when the
+-- configuration data is valid.
+--
+-- /See:/ 'newValidator' smart constructor.
+data Validator = Validator'
+  { -- | AppConfig supports validators of type @JSON_SCHEMA@ and @LAMBDA@
+    type' :: ValidatorType,
+    -- | Either the JSON Schema content or the Amazon Resource Name (ARN) of an
+    -- Lambda function.
+    content :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Validator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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'', 'validator_type' - AppConfig supports validators of type @JSON_SCHEMA@ and @LAMBDA@
+--
+-- 'content', 'validator_content' - Either the JSON Schema content or the Amazon Resource Name (ARN) of an
+-- Lambda function.
+newValidator ::
+  -- | 'type''
+  ValidatorType ->
+  -- | 'content'
+  Prelude.Text ->
+  Validator
+newValidator pType_ pContent_ =
+  Validator'
+    { type' = pType_,
+      content = Data._Sensitive Lens.# pContent_
+    }
+
+-- | AppConfig supports validators of type @JSON_SCHEMA@ and @LAMBDA@
+validator_type :: Lens.Lens' Validator ValidatorType
+validator_type = Lens.lens (\Validator' {type'} -> type') (\s@Validator' {} a -> s {type' = a} :: Validator)
+
+-- | Either the JSON Schema content or the Amazon Resource Name (ARN) of an
+-- Lambda function.
+validator_content :: Lens.Lens' Validator Prelude.Text
+validator_content = Lens.lens (\Validator' {content} -> content) (\s@Validator' {} a -> s {content = a} :: Validator) Prelude.. Data._Sensitive
+
+instance Data.FromJSON Validator where
+  parseJSON =
+    Data.withObject
+      "Validator"
+      ( \x ->
+          Validator'
+            Prelude.<$> (x Data..: "Type")
+            Prelude.<*> (x Data..: "Content")
+      )
+
+instance Prelude.Hashable Validator where
+  hashWithSalt _salt Validator' {..} =
+    _salt
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` content
+
+instance Prelude.NFData Validator where
+  rnf Validator' {..} =
+    Prelude.rnf type' `Prelude.seq` Prelude.rnf content
+
+instance Data.ToJSON Validator where
+  toJSON Validator' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Type" Data..= type'),
+            Prelude.Just ("Content" Data..= content)
+          ]
+      )
diff --git a/gen/Amazonka/AppConfig/Types/ValidatorType.hs b/gen/Amazonka/AppConfig/Types/ValidatorType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Types/ValidatorType.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.AppConfig.Types.ValidatorType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppConfig.Types.ValidatorType
+  ( ValidatorType
+      ( ..,
+        ValidatorType_JSON_SCHEMA,
+        ValidatorType_LAMBDA
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ValidatorType = ValidatorType'
+  { fromValidatorType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ValidatorType_JSON_SCHEMA :: ValidatorType
+pattern ValidatorType_JSON_SCHEMA = ValidatorType' "JSON_SCHEMA"
+
+pattern ValidatorType_LAMBDA :: ValidatorType
+pattern ValidatorType_LAMBDA = ValidatorType' "LAMBDA"
+
+{-# COMPLETE
+  ValidatorType_JSON_SCHEMA,
+  ValidatorType_LAMBDA,
+  ValidatorType'
+  #-}
diff --git a/gen/Amazonka/AppConfig/UntagResource.hs b/gen/Amazonka/AppConfig/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/UntagResource.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.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 a tag key and value from an AppConfig resource.
+module Amazonka.AppConfig.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The ARN of the resource for which to remove tags.
+    resourceArn :: Prelude.Text,
+    -- | The tag keys to delete.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The ARN of the resource for which to remove tags.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tag keys to delete.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The ARN of the resource for which to remove tags.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The tag keys to delete.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull UntagResourceResponse'
+
+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'
+  {
+  }
+  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.
+newUntagResourceResponse ::
+  UntagResourceResponse
+newUntagResourceResponse = UntagResourceResponse'
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/AppConfig/UpdateApplication.hs b/gen/Amazonka/AppConfig/UpdateApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/UpdateApplication.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.UpdateApplication
+-- 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 application.
+module Amazonka.AppConfig.UpdateApplication
+  ( -- * Creating a Request
+    UpdateApplication (..),
+    newUpdateApplication,
+
+    -- * Request Lenses
+    updateApplication_description,
+    updateApplication_name,
+    updateApplication_applicationId,
+
+    -- * Destructuring the Response
+    Application (..),
+    newApplication,
+
+    -- * Response Lenses
+    application_description,
+    application_id,
+    application_name,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateApplication' smart constructor.
+data UpdateApplication = UpdateApplication'
+  { -- | A description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The application ID.
+    applicationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateApplication_description' - A description of the application.
+--
+-- 'name', 'updateApplication_name' - The name of the application.
+--
+-- 'applicationId', 'updateApplication_applicationId' - The application ID.
+newUpdateApplication ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  UpdateApplication
+newUpdateApplication pApplicationId_ =
+  UpdateApplication'
+    { description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      applicationId = pApplicationId_
+    }
+
+-- | A description of the application.
+updateApplication_description :: Lens.Lens' UpdateApplication (Prelude.Maybe Prelude.Text)
+updateApplication_description = Lens.lens (\UpdateApplication' {description} -> description) (\s@UpdateApplication' {} a -> s {description = a} :: UpdateApplication)
+
+-- | The name of the application.
+updateApplication_name :: Lens.Lens' UpdateApplication (Prelude.Maybe Prelude.Text)
+updateApplication_name = Lens.lens (\UpdateApplication' {name} -> name) (\s@UpdateApplication' {} a -> s {name = a} :: UpdateApplication)
+
+-- | The application ID.
+updateApplication_applicationId :: Lens.Lens' UpdateApplication Prelude.Text
+updateApplication_applicationId = Lens.lens (\UpdateApplication' {applicationId} -> applicationId) (\s@UpdateApplication' {} a -> s {applicationId = a} :: UpdateApplication)
+
+instance Core.AWSRequest UpdateApplication where
+  type AWSResponse UpdateApplication = Application
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable UpdateApplication where
+  hashWithSalt _salt UpdateApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` applicationId
+
+instance Prelude.NFData UpdateApplication where
+  rnf UpdateApplication' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf applicationId
+
+instance Data.ToHeaders UpdateApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateApplication where
+  toJSON UpdateApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Name" Data..=) Prelude.<$> name
+          ]
+      )
+
+instance Data.ToPath UpdateApplication where
+  toPath UpdateApplication' {..} =
+    Prelude.mconcat
+      ["/applications/", Data.toBS applicationId]
+
+instance Data.ToQuery UpdateApplication where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/UpdateConfigurationProfile.hs b/gen/Amazonka/AppConfig/UpdateConfigurationProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/UpdateConfigurationProfile.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.AppConfig.UpdateConfigurationProfile
+-- 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 a configuration profile.
+module Amazonka.AppConfig.UpdateConfigurationProfile
+  ( -- * Creating a Request
+    UpdateConfigurationProfile (..),
+    newUpdateConfigurationProfile,
+
+    -- * Request Lenses
+    updateConfigurationProfile_description,
+    updateConfigurationProfile_name,
+    updateConfigurationProfile_retrievalRoleArn,
+    updateConfigurationProfile_validators,
+    updateConfigurationProfile_applicationId,
+    updateConfigurationProfile_configurationProfileId,
+
+    -- * Destructuring the Response
+    ConfigurationProfile (..),
+    newConfigurationProfile,
+
+    -- * Response Lenses
+    configurationProfile_applicationId,
+    configurationProfile_description,
+    configurationProfile_id,
+    configurationProfile_locationUri,
+    configurationProfile_name,
+    configurationProfile_retrievalRoleArn,
+    configurationProfile_type,
+    configurationProfile_validators,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateConfigurationProfile' smart constructor.
+data UpdateConfigurationProfile = UpdateConfigurationProfile'
+  { -- | A description of the configuration profile.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the configuration profile.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of an IAM role with permission to access the configuration at
+    -- the specified @LocationUri@.
+    retrievalRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | A list of methods for validating the configuration.
+    validators :: Prelude.Maybe [Validator],
+    -- | The application ID.
+    applicationId :: Prelude.Text,
+    -- | The ID of the configuration profile.
+    configurationProfileId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateConfigurationProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateConfigurationProfile_description' - A description of the configuration profile.
+--
+-- 'name', 'updateConfigurationProfile_name' - The name of the configuration profile.
+--
+-- 'retrievalRoleArn', 'updateConfigurationProfile_retrievalRoleArn' - The ARN of an IAM role with permission to access the configuration at
+-- the specified @LocationUri@.
+--
+-- 'validators', 'updateConfigurationProfile_validators' - A list of methods for validating the configuration.
+--
+-- 'applicationId', 'updateConfigurationProfile_applicationId' - The application ID.
+--
+-- 'configurationProfileId', 'updateConfigurationProfile_configurationProfileId' - The ID of the configuration profile.
+newUpdateConfigurationProfile ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'configurationProfileId'
+  Prelude.Text ->
+  UpdateConfigurationProfile
+newUpdateConfigurationProfile
+  pApplicationId_
+  pConfigurationProfileId_ =
+    UpdateConfigurationProfile'
+      { description =
+          Prelude.Nothing,
+        name = Prelude.Nothing,
+        retrievalRoleArn = Prelude.Nothing,
+        validators = Prelude.Nothing,
+        applicationId = pApplicationId_,
+        configurationProfileId =
+          pConfigurationProfileId_
+      }
+
+-- | A description of the configuration profile.
+updateConfigurationProfile_description :: Lens.Lens' UpdateConfigurationProfile (Prelude.Maybe Prelude.Text)
+updateConfigurationProfile_description = Lens.lens (\UpdateConfigurationProfile' {description} -> description) (\s@UpdateConfigurationProfile' {} a -> s {description = a} :: UpdateConfigurationProfile)
+
+-- | The name of the configuration profile.
+updateConfigurationProfile_name :: Lens.Lens' UpdateConfigurationProfile (Prelude.Maybe Prelude.Text)
+updateConfigurationProfile_name = Lens.lens (\UpdateConfigurationProfile' {name} -> name) (\s@UpdateConfigurationProfile' {} a -> s {name = a} :: UpdateConfigurationProfile)
+
+-- | The ARN of an IAM role with permission to access the configuration at
+-- the specified @LocationUri@.
+updateConfigurationProfile_retrievalRoleArn :: Lens.Lens' UpdateConfigurationProfile (Prelude.Maybe Prelude.Text)
+updateConfigurationProfile_retrievalRoleArn = Lens.lens (\UpdateConfigurationProfile' {retrievalRoleArn} -> retrievalRoleArn) (\s@UpdateConfigurationProfile' {} a -> s {retrievalRoleArn = a} :: UpdateConfigurationProfile)
+
+-- | A list of methods for validating the configuration.
+updateConfigurationProfile_validators :: Lens.Lens' UpdateConfigurationProfile (Prelude.Maybe [Validator])
+updateConfigurationProfile_validators = Lens.lens (\UpdateConfigurationProfile' {validators} -> validators) (\s@UpdateConfigurationProfile' {} a -> s {validators = a} :: UpdateConfigurationProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The application ID.
+updateConfigurationProfile_applicationId :: Lens.Lens' UpdateConfigurationProfile Prelude.Text
+updateConfigurationProfile_applicationId = Lens.lens (\UpdateConfigurationProfile' {applicationId} -> applicationId) (\s@UpdateConfigurationProfile' {} a -> s {applicationId = a} :: UpdateConfigurationProfile)
+
+-- | The ID of the configuration profile.
+updateConfigurationProfile_configurationProfileId :: Lens.Lens' UpdateConfigurationProfile Prelude.Text
+updateConfigurationProfile_configurationProfileId = Lens.lens (\UpdateConfigurationProfile' {configurationProfileId} -> configurationProfileId) (\s@UpdateConfigurationProfile' {} a -> s {configurationProfileId = a} :: UpdateConfigurationProfile)
+
+instance Core.AWSRequest UpdateConfigurationProfile where
+  type
+    AWSResponse UpdateConfigurationProfile =
+      ConfigurationProfile
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable UpdateConfigurationProfile where
+  hashWithSalt _salt UpdateConfigurationProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` retrievalRoleArn
+      `Prelude.hashWithSalt` validators
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` configurationProfileId
+
+instance Prelude.NFData UpdateConfigurationProfile where
+  rnf UpdateConfigurationProfile' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf retrievalRoleArn
+      `Prelude.seq` Prelude.rnf validators
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf configurationProfileId
+
+instance Data.ToHeaders UpdateConfigurationProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateConfigurationProfile where
+  toJSON UpdateConfigurationProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Name" Data..=) Prelude.<$> name,
+            ("RetrievalRoleArn" Data..=)
+              Prelude.<$> retrievalRoleArn,
+            ("Validators" Data..=) Prelude.<$> validators
+          ]
+      )
+
+instance Data.ToPath UpdateConfigurationProfile where
+  toPath UpdateConfigurationProfile' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/configurationprofiles/",
+        Data.toBS configurationProfileId
+      ]
+
+instance Data.ToQuery UpdateConfigurationProfile where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/UpdateDeploymentStrategy.hs b/gen/Amazonka/AppConfig/UpdateDeploymentStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/UpdateDeploymentStrategy.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.AppConfig.UpdateDeploymentStrategy
+-- 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 a deployment strategy.
+module Amazonka.AppConfig.UpdateDeploymentStrategy
+  ( -- * Creating a Request
+    UpdateDeploymentStrategy (..),
+    newUpdateDeploymentStrategy,
+
+    -- * Request Lenses
+    updateDeploymentStrategy_deploymentDurationInMinutes,
+    updateDeploymentStrategy_description,
+    updateDeploymentStrategy_finalBakeTimeInMinutes,
+    updateDeploymentStrategy_growthFactor,
+    updateDeploymentStrategy_growthType,
+    updateDeploymentStrategy_deploymentStrategyId,
+
+    -- * Destructuring the Response
+    DeploymentStrategy (..),
+    newDeploymentStrategy,
+
+    -- * Response Lenses
+    deploymentStrategy_deploymentDurationInMinutes,
+    deploymentStrategy_description,
+    deploymentStrategy_finalBakeTimeInMinutes,
+    deploymentStrategy_growthFactor,
+    deploymentStrategy_growthType,
+    deploymentStrategy_id,
+    deploymentStrategy_name,
+    deploymentStrategy_replicateTo,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDeploymentStrategy' smart constructor.
+data UpdateDeploymentStrategy = UpdateDeploymentStrategy'
+  { -- | Total amount of time for a deployment to last.
+    deploymentDurationInMinutes :: Prelude.Maybe Prelude.Natural,
+    -- | A description of the deployment strategy.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The amount of time that AppConfig monitors for alarms before considering
+    -- the deployment to be complete and no longer eligible for automatic
+    -- rollback.
+    finalBakeTimeInMinutes :: Prelude.Maybe Prelude.Natural,
+    -- | The percentage of targets to receive a deployed configuration during
+    -- each interval.
+    growthFactor :: Prelude.Maybe Prelude.Double,
+    -- | The algorithm used to define how percentage grows over time. AppConfig
+    -- supports the following growth types:
+    --
+    -- __Linear__: For this type, AppConfig processes the deployment by
+    -- increments of the growth factor evenly distributed over the deployment
+    -- time. For example, a linear deployment that uses a growth factor of 20
+    -- initially makes the configuration available to 20 percent of the
+    -- targets. After 1\/5th of the deployment time has passed, the system
+    -- updates the percentage to 40 percent. This continues until 100% of the
+    -- targets are set to receive the deployed configuration.
+    --
+    -- __Exponential__: For this type, AppConfig processes the deployment
+    -- exponentially using the following formula: @G*(2^N)@. In this formula,
+    -- @G@ is the growth factor specified by the user and @N@ is the number of
+    -- steps until the configuration is deployed to all targets. For example,
+    -- if you specify a growth factor of 2, then the system rolls out the
+    -- configuration as follows:
+    --
+    -- @2*(2^0)@
+    --
+    -- @2*(2^1)@
+    --
+    -- @2*(2^2)@
+    --
+    -- Expressed numerically, the deployment rolls out as follows: 2% of the
+    -- targets, 4% of the targets, 8% of the targets, and continues until the
+    -- configuration has been deployed to all targets.
+    growthType :: Prelude.Maybe GrowthType,
+    -- | The deployment strategy ID.
+    deploymentStrategyId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDeploymentStrategy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deploymentDurationInMinutes', 'updateDeploymentStrategy_deploymentDurationInMinutes' - Total amount of time for a deployment to last.
+--
+-- 'description', 'updateDeploymentStrategy_description' - A description of the deployment strategy.
+--
+-- 'finalBakeTimeInMinutes', 'updateDeploymentStrategy_finalBakeTimeInMinutes' - The amount of time that AppConfig monitors for alarms before considering
+-- the deployment to be complete and no longer eligible for automatic
+-- rollback.
+--
+-- 'growthFactor', 'updateDeploymentStrategy_growthFactor' - The percentage of targets to receive a deployed configuration during
+-- each interval.
+--
+-- 'growthType', 'updateDeploymentStrategy_growthType' - The algorithm used to define how percentage grows over time. AppConfig
+-- supports the following growth types:
+--
+-- __Linear__: For this type, AppConfig processes the deployment by
+-- increments of the growth factor evenly distributed over the deployment
+-- time. For example, a linear deployment that uses a growth factor of 20
+-- initially makes the configuration available to 20 percent of the
+-- targets. After 1\/5th of the deployment time has passed, the system
+-- updates the percentage to 40 percent. This continues until 100% of the
+-- targets are set to receive the deployed configuration.
+--
+-- __Exponential__: For this type, AppConfig processes the deployment
+-- exponentially using the following formula: @G*(2^N)@. In this formula,
+-- @G@ is the growth factor specified by the user and @N@ is the number of
+-- steps until the configuration is deployed to all targets. For example,
+-- if you specify a growth factor of 2, then the system rolls out the
+-- configuration as follows:
+--
+-- @2*(2^0)@
+--
+-- @2*(2^1)@
+--
+-- @2*(2^2)@
+--
+-- Expressed numerically, the deployment rolls out as follows: 2% of the
+-- targets, 4% of the targets, 8% of the targets, and continues until the
+-- configuration has been deployed to all targets.
+--
+-- 'deploymentStrategyId', 'updateDeploymentStrategy_deploymentStrategyId' - The deployment strategy ID.
+newUpdateDeploymentStrategy ::
+  -- | 'deploymentStrategyId'
+  Prelude.Text ->
+  UpdateDeploymentStrategy
+newUpdateDeploymentStrategy pDeploymentStrategyId_ =
+  UpdateDeploymentStrategy'
+    { deploymentDurationInMinutes =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      finalBakeTimeInMinutes = Prelude.Nothing,
+      growthFactor = Prelude.Nothing,
+      growthType = Prelude.Nothing,
+      deploymentStrategyId = pDeploymentStrategyId_
+    }
+
+-- | Total amount of time for a deployment to last.
+updateDeploymentStrategy_deploymentDurationInMinutes :: Lens.Lens' UpdateDeploymentStrategy (Prelude.Maybe Prelude.Natural)
+updateDeploymentStrategy_deploymentDurationInMinutes = Lens.lens (\UpdateDeploymentStrategy' {deploymentDurationInMinutes} -> deploymentDurationInMinutes) (\s@UpdateDeploymentStrategy' {} a -> s {deploymentDurationInMinutes = a} :: UpdateDeploymentStrategy)
+
+-- | A description of the deployment strategy.
+updateDeploymentStrategy_description :: Lens.Lens' UpdateDeploymentStrategy (Prelude.Maybe Prelude.Text)
+updateDeploymentStrategy_description = Lens.lens (\UpdateDeploymentStrategy' {description} -> description) (\s@UpdateDeploymentStrategy' {} a -> s {description = a} :: UpdateDeploymentStrategy)
+
+-- | The amount of time that AppConfig monitors for alarms before considering
+-- the deployment to be complete and no longer eligible for automatic
+-- rollback.
+updateDeploymentStrategy_finalBakeTimeInMinutes :: Lens.Lens' UpdateDeploymentStrategy (Prelude.Maybe Prelude.Natural)
+updateDeploymentStrategy_finalBakeTimeInMinutes = Lens.lens (\UpdateDeploymentStrategy' {finalBakeTimeInMinutes} -> finalBakeTimeInMinutes) (\s@UpdateDeploymentStrategy' {} a -> s {finalBakeTimeInMinutes = a} :: UpdateDeploymentStrategy)
+
+-- | The percentage of targets to receive a deployed configuration during
+-- each interval.
+updateDeploymentStrategy_growthFactor :: Lens.Lens' UpdateDeploymentStrategy (Prelude.Maybe Prelude.Double)
+updateDeploymentStrategy_growthFactor = Lens.lens (\UpdateDeploymentStrategy' {growthFactor} -> growthFactor) (\s@UpdateDeploymentStrategy' {} a -> s {growthFactor = a} :: UpdateDeploymentStrategy)
+
+-- | The algorithm used to define how percentage grows over time. AppConfig
+-- supports the following growth types:
+--
+-- __Linear__: For this type, AppConfig processes the deployment by
+-- increments of the growth factor evenly distributed over the deployment
+-- time. For example, a linear deployment that uses a growth factor of 20
+-- initially makes the configuration available to 20 percent of the
+-- targets. After 1\/5th of the deployment time has passed, the system
+-- updates the percentage to 40 percent. This continues until 100% of the
+-- targets are set to receive the deployed configuration.
+--
+-- __Exponential__: For this type, AppConfig processes the deployment
+-- exponentially using the following formula: @G*(2^N)@. In this formula,
+-- @G@ is the growth factor specified by the user and @N@ is the number of
+-- steps until the configuration is deployed to all targets. For example,
+-- if you specify a growth factor of 2, then the system rolls out the
+-- configuration as follows:
+--
+-- @2*(2^0)@
+--
+-- @2*(2^1)@
+--
+-- @2*(2^2)@
+--
+-- Expressed numerically, the deployment rolls out as follows: 2% of the
+-- targets, 4% of the targets, 8% of the targets, and continues until the
+-- configuration has been deployed to all targets.
+updateDeploymentStrategy_growthType :: Lens.Lens' UpdateDeploymentStrategy (Prelude.Maybe GrowthType)
+updateDeploymentStrategy_growthType = Lens.lens (\UpdateDeploymentStrategy' {growthType} -> growthType) (\s@UpdateDeploymentStrategy' {} a -> s {growthType = a} :: UpdateDeploymentStrategy)
+
+-- | The deployment strategy ID.
+updateDeploymentStrategy_deploymentStrategyId :: Lens.Lens' UpdateDeploymentStrategy Prelude.Text
+updateDeploymentStrategy_deploymentStrategyId = Lens.lens (\UpdateDeploymentStrategy' {deploymentStrategyId} -> deploymentStrategyId) (\s@UpdateDeploymentStrategy' {} a -> s {deploymentStrategyId = a} :: UpdateDeploymentStrategy)
+
+instance Core.AWSRequest UpdateDeploymentStrategy where
+  type
+    AWSResponse UpdateDeploymentStrategy =
+      DeploymentStrategy
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable UpdateDeploymentStrategy where
+  hashWithSalt _salt UpdateDeploymentStrategy' {..} =
+    _salt
+      `Prelude.hashWithSalt` deploymentDurationInMinutes
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` finalBakeTimeInMinutes
+      `Prelude.hashWithSalt` growthFactor
+      `Prelude.hashWithSalt` growthType
+      `Prelude.hashWithSalt` deploymentStrategyId
+
+instance Prelude.NFData UpdateDeploymentStrategy where
+  rnf UpdateDeploymentStrategy' {..} =
+    Prelude.rnf deploymentDurationInMinutes
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf finalBakeTimeInMinutes
+      `Prelude.seq` Prelude.rnf growthFactor
+      `Prelude.seq` Prelude.rnf growthType
+      `Prelude.seq` Prelude.rnf deploymentStrategyId
+
+instance Data.ToHeaders UpdateDeploymentStrategy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDeploymentStrategy where
+  toJSON UpdateDeploymentStrategy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DeploymentDurationInMinutes" Data..=)
+              Prelude.<$> deploymentDurationInMinutes,
+            ("Description" Data..=) Prelude.<$> description,
+            ("FinalBakeTimeInMinutes" Data..=)
+              Prelude.<$> finalBakeTimeInMinutes,
+            ("GrowthFactor" Data..=) Prelude.<$> growthFactor,
+            ("GrowthType" Data..=) Prelude.<$> growthType
+          ]
+      )
+
+instance Data.ToPath UpdateDeploymentStrategy where
+  toPath UpdateDeploymentStrategy' {..} =
+    Prelude.mconcat
+      [ "/deploymentstrategies/",
+        Data.toBS deploymentStrategyId
+      ]
+
+instance Data.ToQuery UpdateDeploymentStrategy where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/UpdateEnvironment.hs b/gen/Amazonka/AppConfig/UpdateEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/UpdateEnvironment.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.AppConfig.UpdateEnvironment
+-- 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 environment.
+module Amazonka.AppConfig.UpdateEnvironment
+  ( -- * Creating a Request
+    UpdateEnvironment (..),
+    newUpdateEnvironment,
+
+    -- * Request Lenses
+    updateEnvironment_description,
+    updateEnvironment_monitors,
+    updateEnvironment_name,
+    updateEnvironment_applicationId,
+    updateEnvironment_environmentId,
+
+    -- * Destructuring the Response
+    Environment (..),
+    newEnvironment,
+
+    -- * Response Lenses
+    environment_applicationId,
+    environment_description,
+    environment_id,
+    environment_monitors,
+    environment_name,
+    environment_state,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateEnvironment' smart constructor.
+data UpdateEnvironment = UpdateEnvironment'
+  { -- | A description of the environment.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Amazon CloudWatch alarms to monitor during the deployment process.
+    monitors :: Prelude.Maybe [Monitor],
+    -- | The name of the environment.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The application ID.
+    applicationId :: Prelude.Text,
+    -- | The environment ID.
+    environmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEnvironment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateEnvironment_description' - A description of the environment.
+--
+-- 'monitors', 'updateEnvironment_monitors' - Amazon CloudWatch alarms to monitor during the deployment process.
+--
+-- 'name', 'updateEnvironment_name' - The name of the environment.
+--
+-- 'applicationId', 'updateEnvironment_applicationId' - The application ID.
+--
+-- 'environmentId', 'updateEnvironment_environmentId' - The environment ID.
+newUpdateEnvironment ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  UpdateEnvironment
+newUpdateEnvironment pApplicationId_ pEnvironmentId_ =
+  UpdateEnvironment'
+    { description = Prelude.Nothing,
+      monitors = Prelude.Nothing,
+      name = Prelude.Nothing,
+      applicationId = pApplicationId_,
+      environmentId = pEnvironmentId_
+    }
+
+-- | A description of the environment.
+updateEnvironment_description :: Lens.Lens' UpdateEnvironment (Prelude.Maybe Prelude.Text)
+updateEnvironment_description = Lens.lens (\UpdateEnvironment' {description} -> description) (\s@UpdateEnvironment' {} a -> s {description = a} :: UpdateEnvironment)
+
+-- | Amazon CloudWatch alarms to monitor during the deployment process.
+updateEnvironment_monitors :: Lens.Lens' UpdateEnvironment (Prelude.Maybe [Monitor])
+updateEnvironment_monitors = Lens.lens (\UpdateEnvironment' {monitors} -> monitors) (\s@UpdateEnvironment' {} a -> s {monitors = a} :: UpdateEnvironment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the environment.
+updateEnvironment_name :: Lens.Lens' UpdateEnvironment (Prelude.Maybe Prelude.Text)
+updateEnvironment_name = Lens.lens (\UpdateEnvironment' {name} -> name) (\s@UpdateEnvironment' {} a -> s {name = a} :: UpdateEnvironment)
+
+-- | The application ID.
+updateEnvironment_applicationId :: Lens.Lens' UpdateEnvironment Prelude.Text
+updateEnvironment_applicationId = Lens.lens (\UpdateEnvironment' {applicationId} -> applicationId) (\s@UpdateEnvironment' {} a -> s {applicationId = a} :: UpdateEnvironment)
+
+-- | The environment ID.
+updateEnvironment_environmentId :: Lens.Lens' UpdateEnvironment Prelude.Text
+updateEnvironment_environmentId = Lens.lens (\UpdateEnvironment' {environmentId} -> environmentId) (\s@UpdateEnvironment' {} a -> s {environmentId = a} :: UpdateEnvironment)
+
+instance Core.AWSRequest UpdateEnvironment where
+  type AWSResponse UpdateEnvironment = Environment
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable UpdateEnvironment where
+  hashWithSalt _salt UpdateEnvironment' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` monitors
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` environmentId
+
+instance Prelude.NFData UpdateEnvironment where
+  rnf UpdateEnvironment' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf monitors
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf environmentId
+
+instance Data.ToHeaders UpdateEnvironment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateEnvironment where
+  toJSON UpdateEnvironment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Monitors" Data..=) Prelude.<$> monitors,
+            ("Name" Data..=) Prelude.<$> name
+          ]
+      )
+
+instance Data.ToPath UpdateEnvironment where
+  toPath UpdateEnvironment' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/environments/",
+        Data.toBS environmentId
+      ]
+
+instance Data.ToQuery UpdateEnvironment where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/UpdateExtension.hs b/gen/Amazonka/AppConfig/UpdateExtension.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/UpdateExtension.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.UpdateExtension
+-- 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 AppConfig extension. For more information about extensions,
+-- see
+-- <https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html Working with AppConfig extensions>
+-- in the /AppConfig User Guide/.
+module Amazonka.AppConfig.UpdateExtension
+  ( -- * Creating a Request
+    UpdateExtension (..),
+    newUpdateExtension,
+
+    -- * Request Lenses
+    updateExtension_actions,
+    updateExtension_description,
+    updateExtension_parameters,
+    updateExtension_versionNumber,
+    updateExtension_extensionIdentifier,
+
+    -- * Destructuring the Response
+    Extension (..),
+    newExtension,
+
+    -- * Response Lenses
+    extension_actions,
+    extension_arn,
+    extension_description,
+    extension_id,
+    extension_name,
+    extension_parameters,
+    extension_versionNumber,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateExtension' smart constructor.
+data UpdateExtension = UpdateExtension'
+  { -- | The actions defined in the extension.
+    actions :: Prelude.Maybe (Prelude.HashMap ActionPoint (Prelude.NonEmpty Action)),
+    -- | Information about the extension.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | One or more parameters for the actions called by the extension.
+    parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Parameter),
+    -- | The extension version number.
+    versionNumber :: Prelude.Maybe Prelude.Int,
+    -- | The name, the ID, or the Amazon Resource Name (ARN) of the extension.
+    extensionIdentifier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateExtension' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actions', 'updateExtension_actions' - The actions defined in the extension.
+--
+-- 'description', 'updateExtension_description' - Information about the extension.
+--
+-- 'parameters', 'updateExtension_parameters' - One or more parameters for the actions called by the extension.
+--
+-- 'versionNumber', 'updateExtension_versionNumber' - The extension version number.
+--
+-- 'extensionIdentifier', 'updateExtension_extensionIdentifier' - The name, the ID, or the Amazon Resource Name (ARN) of the extension.
+newUpdateExtension ::
+  -- | 'extensionIdentifier'
+  Prelude.Text ->
+  UpdateExtension
+newUpdateExtension pExtensionIdentifier_ =
+  UpdateExtension'
+    { actions = Prelude.Nothing,
+      description = Prelude.Nothing,
+      parameters = Prelude.Nothing,
+      versionNumber = Prelude.Nothing,
+      extensionIdentifier = pExtensionIdentifier_
+    }
+
+-- | The actions defined in the extension.
+updateExtension_actions :: Lens.Lens' UpdateExtension (Prelude.Maybe (Prelude.HashMap ActionPoint (Prelude.NonEmpty Action)))
+updateExtension_actions = Lens.lens (\UpdateExtension' {actions} -> actions) (\s@UpdateExtension' {} a -> s {actions = a} :: UpdateExtension) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the extension.
+updateExtension_description :: Lens.Lens' UpdateExtension (Prelude.Maybe Prelude.Text)
+updateExtension_description = Lens.lens (\UpdateExtension' {description} -> description) (\s@UpdateExtension' {} a -> s {description = a} :: UpdateExtension)
+
+-- | One or more parameters for the actions called by the extension.
+updateExtension_parameters :: Lens.Lens' UpdateExtension (Prelude.Maybe (Prelude.HashMap Prelude.Text Parameter))
+updateExtension_parameters = Lens.lens (\UpdateExtension' {parameters} -> parameters) (\s@UpdateExtension' {} a -> s {parameters = a} :: UpdateExtension) Prelude.. Lens.mapping Lens.coerced
+
+-- | The extension version number.
+updateExtension_versionNumber :: Lens.Lens' UpdateExtension (Prelude.Maybe Prelude.Int)
+updateExtension_versionNumber = Lens.lens (\UpdateExtension' {versionNumber} -> versionNumber) (\s@UpdateExtension' {} a -> s {versionNumber = a} :: UpdateExtension)
+
+-- | The name, the ID, or the Amazon Resource Name (ARN) of the extension.
+updateExtension_extensionIdentifier :: Lens.Lens' UpdateExtension Prelude.Text
+updateExtension_extensionIdentifier = Lens.lens (\UpdateExtension' {extensionIdentifier} -> extensionIdentifier) (\s@UpdateExtension' {} a -> s {extensionIdentifier = a} :: UpdateExtension)
+
+instance Core.AWSRequest UpdateExtension where
+  type AWSResponse UpdateExtension = Extension
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable UpdateExtension where
+  hashWithSalt _salt UpdateExtension' {..} =
+    _salt
+      `Prelude.hashWithSalt` actions
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` versionNumber
+      `Prelude.hashWithSalt` extensionIdentifier
+
+instance Prelude.NFData UpdateExtension where
+  rnf UpdateExtension' {..} =
+    Prelude.rnf actions
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf versionNumber
+      `Prelude.seq` Prelude.rnf extensionIdentifier
+
+instance Data.ToHeaders UpdateExtension where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateExtension where
+  toJSON UpdateExtension' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Actions" Data..=) Prelude.<$> actions,
+            ("Description" Data..=) Prelude.<$> description,
+            ("Parameters" Data..=) Prelude.<$> parameters,
+            ("VersionNumber" Data..=) Prelude.<$> versionNumber
+          ]
+      )
+
+instance Data.ToPath UpdateExtension where
+  toPath UpdateExtension' {..} =
+    Prelude.mconcat
+      ["/extensions/", Data.toBS extensionIdentifier]
+
+instance Data.ToQuery UpdateExtension where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/UpdateExtensionAssociation.hs b/gen/Amazonka/AppConfig/UpdateExtensionAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/UpdateExtensionAssociation.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.UpdateExtensionAssociation
+-- 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 association. For more information about extensions and
+-- associations, see
+-- <https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html Working with AppConfig extensions>
+-- in the /AppConfig User Guide/.
+module Amazonka.AppConfig.UpdateExtensionAssociation
+  ( -- * Creating a Request
+    UpdateExtensionAssociation (..),
+    newUpdateExtensionAssociation,
+
+    -- * Request Lenses
+    updateExtensionAssociation_parameters,
+    updateExtensionAssociation_extensionAssociationId,
+
+    -- * Destructuring the Response
+    ExtensionAssociation (..),
+    newExtensionAssociation,
+
+    -- * Response Lenses
+    extensionAssociation_arn,
+    extensionAssociation_extensionArn,
+    extensionAssociation_extensionVersionNumber,
+    extensionAssociation_id,
+    extensionAssociation_parameters,
+    extensionAssociation_resourceArn,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateExtensionAssociation' smart constructor.
+data UpdateExtensionAssociation = UpdateExtensionAssociation'
+  { -- | The parameter names and values defined in the extension.
+    parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The system-generated ID for the association.
+    extensionAssociationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateExtensionAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'parameters', 'updateExtensionAssociation_parameters' - The parameter names and values defined in the extension.
+--
+-- 'extensionAssociationId', 'updateExtensionAssociation_extensionAssociationId' - The system-generated ID for the association.
+newUpdateExtensionAssociation ::
+  -- | 'extensionAssociationId'
+  Prelude.Text ->
+  UpdateExtensionAssociation
+newUpdateExtensionAssociation
+  pExtensionAssociationId_ =
+    UpdateExtensionAssociation'
+      { parameters =
+          Prelude.Nothing,
+        extensionAssociationId =
+          pExtensionAssociationId_
+      }
+
+-- | The parameter names and values defined in the extension.
+updateExtensionAssociation_parameters :: Lens.Lens' UpdateExtensionAssociation (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateExtensionAssociation_parameters = Lens.lens (\UpdateExtensionAssociation' {parameters} -> parameters) (\s@UpdateExtensionAssociation' {} a -> s {parameters = a} :: UpdateExtensionAssociation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The system-generated ID for the association.
+updateExtensionAssociation_extensionAssociationId :: Lens.Lens' UpdateExtensionAssociation Prelude.Text
+updateExtensionAssociation_extensionAssociationId = Lens.lens (\UpdateExtensionAssociation' {extensionAssociationId} -> extensionAssociationId) (\s@UpdateExtensionAssociation' {} a -> s {extensionAssociationId = a} :: UpdateExtensionAssociation)
+
+instance Core.AWSRequest UpdateExtensionAssociation where
+  type
+    AWSResponse UpdateExtensionAssociation =
+      ExtensionAssociation
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable UpdateExtensionAssociation where
+  hashWithSalt _salt UpdateExtensionAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` extensionAssociationId
+
+instance Prelude.NFData UpdateExtensionAssociation where
+  rnf UpdateExtensionAssociation' {..} =
+    Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf extensionAssociationId
+
+instance Data.ToHeaders UpdateExtensionAssociation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateExtensionAssociation where
+  toJSON UpdateExtensionAssociation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Parameters" Data..=) Prelude.<$> parameters]
+      )
+
+instance Data.ToPath UpdateExtensionAssociation where
+  toPath UpdateExtensionAssociation' {..} =
+    Prelude.mconcat
+      [ "/extensionassociations/",
+        Data.toBS extensionAssociationId
+      ]
+
+instance Data.ToQuery UpdateExtensionAssociation where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/AppConfig/ValidateConfiguration.hs b/gen/Amazonka/AppConfig/ValidateConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/ValidateConfiguration.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.ValidateConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Uses the validators in a configuration profile to validate a
+-- configuration.
+module Amazonka.AppConfig.ValidateConfiguration
+  ( -- * Creating a Request
+    ValidateConfiguration (..),
+    newValidateConfiguration,
+
+    -- * Request Lenses
+    validateConfiguration_applicationId,
+    validateConfiguration_configurationProfileId,
+    validateConfiguration_configurationVersion,
+
+    -- * Destructuring the Response
+    ValidateConfigurationResponse (..),
+    newValidateConfigurationResponse,
+  )
+where
+
+import Amazonka.AppConfig.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newValidateConfiguration' smart constructor.
+data ValidateConfiguration = ValidateConfiguration'
+  { -- | The application ID.
+    applicationId :: Prelude.Text,
+    -- | The configuration profile ID.
+    configurationProfileId :: Prelude.Text,
+    -- | The version of the configuration to validate.
+    configurationVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ValidateConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'validateConfiguration_applicationId' - The application ID.
+--
+-- 'configurationProfileId', 'validateConfiguration_configurationProfileId' - The configuration profile ID.
+--
+-- 'configurationVersion', 'validateConfiguration_configurationVersion' - The version of the configuration to validate.
+newValidateConfiguration ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'configurationProfileId'
+  Prelude.Text ->
+  -- | 'configurationVersion'
+  Prelude.Text ->
+  ValidateConfiguration
+newValidateConfiguration
+  pApplicationId_
+  pConfigurationProfileId_
+  pConfigurationVersion_ =
+    ValidateConfiguration'
+      { applicationId =
+          pApplicationId_,
+        configurationProfileId = pConfigurationProfileId_,
+        configurationVersion = pConfigurationVersion_
+      }
+
+-- | The application ID.
+validateConfiguration_applicationId :: Lens.Lens' ValidateConfiguration Prelude.Text
+validateConfiguration_applicationId = Lens.lens (\ValidateConfiguration' {applicationId} -> applicationId) (\s@ValidateConfiguration' {} a -> s {applicationId = a} :: ValidateConfiguration)
+
+-- | The configuration profile ID.
+validateConfiguration_configurationProfileId :: Lens.Lens' ValidateConfiguration Prelude.Text
+validateConfiguration_configurationProfileId = Lens.lens (\ValidateConfiguration' {configurationProfileId} -> configurationProfileId) (\s@ValidateConfiguration' {} a -> s {configurationProfileId = a} :: ValidateConfiguration)
+
+-- | The version of the configuration to validate.
+validateConfiguration_configurationVersion :: Lens.Lens' ValidateConfiguration Prelude.Text
+validateConfiguration_configurationVersion = Lens.lens (\ValidateConfiguration' {configurationVersion} -> configurationVersion) (\s@ValidateConfiguration' {} a -> s {configurationVersion = a} :: ValidateConfiguration)
+
+instance Core.AWSRequest ValidateConfiguration where
+  type
+    AWSResponse ValidateConfiguration =
+      ValidateConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull ValidateConfigurationResponse'
+
+instance Prelude.Hashable ValidateConfiguration where
+  hashWithSalt _salt ValidateConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` configurationProfileId
+      `Prelude.hashWithSalt` configurationVersion
+
+instance Prelude.NFData ValidateConfiguration where
+  rnf ValidateConfiguration' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf configurationProfileId
+      `Prelude.seq` Prelude.rnf configurationVersion
+
+instance Data.ToHeaders ValidateConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ValidateConfiguration where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ValidateConfiguration where
+  toPath ValidateConfiguration' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/configurationprofiles/",
+        Data.toBS configurationProfileId,
+        "/validators"
+      ]
+
+instance Data.ToQuery ValidateConfiguration where
+  toQuery ValidateConfiguration' {..} =
+    Prelude.mconcat
+      [ "configuration_version"
+          Data.=: configurationVersion
+      ]
+
+-- | /See:/ 'newValidateConfigurationResponse' smart constructor.
+data ValidateConfigurationResponse = ValidateConfigurationResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ValidateConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newValidateConfigurationResponse ::
+  ValidateConfigurationResponse
+newValidateConfigurationResponse =
+  ValidateConfigurationResponse'
+
+instance Prelude.NFData ValidateConfigurationResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/AppConfig/Waiters.hs b/gen/Amazonka/AppConfig/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppConfig/Waiters.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppConfig.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.AppConfig.Waiters where
+
+import Amazonka.AppConfig.Lens
+import Amazonka.AppConfig.Types
+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
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.AppConfig
+import Test.Amazonka.AppConfig.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "AppConfig"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/AppConfig.hs b/test/Test/Amazonka/AppConfig.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/AppConfig.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.AppConfig
+-- Copyright   : (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.AppConfig
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/AppConfig/Internal.hs b/test/Test/Amazonka/AppConfig/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/AppConfig/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.AppConfig.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.AppConfig.Internal where
diff --git a/test/Test/Amazonka/Gen/AppConfig.hs b/test/Test/Amazonka/Gen/AppConfig.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/AppConfig.hs
@@ -0,0 +1,878 @@
+{-# 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.AppConfig
+-- Copyright   : (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.AppConfig where
+
+import Amazonka.AppConfig
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.AppConfig.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"
+--         [ requestCreateApplication $
+--             newCreateApplication
+--
+--         , requestCreateConfigurationProfile $
+--             newCreateConfigurationProfile
+--
+--         , requestCreateDeploymentStrategy $
+--             newCreateDeploymentStrategy
+--
+--         , requestCreateEnvironment $
+--             newCreateEnvironment
+--
+--         , requestCreateExtension $
+--             newCreateExtension
+--
+--         , requestCreateExtensionAssociation $
+--             newCreateExtensionAssociation
+--
+--         , requestCreateHostedConfigurationVersion $
+--             newCreateHostedConfigurationVersion
+--
+--         , requestDeleteApplication $
+--             newDeleteApplication
+--
+--         , requestDeleteConfigurationProfile $
+--             newDeleteConfigurationProfile
+--
+--         , requestDeleteDeploymentStrategy $
+--             newDeleteDeploymentStrategy
+--
+--         , requestDeleteEnvironment $
+--             newDeleteEnvironment
+--
+--         , requestDeleteExtension $
+--             newDeleteExtension
+--
+--         , requestDeleteExtensionAssociation $
+--             newDeleteExtensionAssociation
+--
+--         , requestDeleteHostedConfigurationVersion $
+--             newDeleteHostedConfigurationVersion
+--
+--         , requestGetApplication $
+--             newGetApplication
+--
+--         , requestGetConfigurationProfile $
+--             newGetConfigurationProfile
+--
+--         , requestGetDeployment $
+--             newGetDeployment
+--
+--         , requestGetDeploymentStrategy $
+--             newGetDeploymentStrategy
+--
+--         , requestGetEnvironment $
+--             newGetEnvironment
+--
+--         , requestGetExtension $
+--             newGetExtension
+--
+--         , requestGetExtensionAssociation $
+--             newGetExtensionAssociation
+--
+--         , requestGetHostedConfigurationVersion $
+--             newGetHostedConfigurationVersion
+--
+--         , requestListApplications $
+--             newListApplications
+--
+--         , requestListConfigurationProfiles $
+--             newListConfigurationProfiles
+--
+--         , requestListDeploymentStrategies $
+--             newListDeploymentStrategies
+--
+--         , requestListDeployments $
+--             newListDeployments
+--
+--         , requestListEnvironments $
+--             newListEnvironments
+--
+--         , requestListExtensionAssociations $
+--             newListExtensionAssociations
+--
+--         , requestListExtensions $
+--             newListExtensions
+--
+--         , requestListHostedConfigurationVersions $
+--             newListHostedConfigurationVersions
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestStartDeployment $
+--             newStartDeployment
+--
+--         , requestStopDeployment $
+--             newStopDeployment
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateApplication $
+--             newUpdateApplication
+--
+--         , requestUpdateConfigurationProfile $
+--             newUpdateConfigurationProfile
+--
+--         , requestUpdateDeploymentStrategy $
+--             newUpdateDeploymentStrategy
+--
+--         , requestUpdateEnvironment $
+--             newUpdateEnvironment
+--
+--         , requestUpdateExtension $
+--             newUpdateExtension
+--
+--         , requestUpdateExtensionAssociation $
+--             newUpdateExtensionAssociation
+--
+--         , requestValidateConfiguration $
+--             newValidateConfiguration
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateApplication $
+--             newApplication
+--
+--         , responseCreateConfigurationProfile $
+--             newConfigurationProfile
+--
+--         , responseCreateDeploymentStrategy $
+--             newDeploymentStrategy
+--
+--         , responseCreateEnvironment $
+--             newEnvironment
+--
+--         , responseCreateExtension $
+--             newExtension
+--
+--         , responseCreateExtensionAssociation $
+--             newExtensionAssociation
+--
+--         , responseCreateHostedConfigurationVersion $
+--             newHostedConfigurationVersion
+--
+--         , responseDeleteApplication $
+--             newDeleteApplicationResponse
+--
+--         , responseDeleteConfigurationProfile $
+--             newDeleteConfigurationProfileResponse
+--
+--         , responseDeleteDeploymentStrategy $
+--             newDeleteDeploymentStrategyResponse
+--
+--         , responseDeleteEnvironment $
+--             newDeleteEnvironmentResponse
+--
+--         , responseDeleteExtension $
+--             newDeleteExtensionResponse
+--
+--         , responseDeleteExtensionAssociation $
+--             newDeleteExtensionAssociationResponse
+--
+--         , responseDeleteHostedConfigurationVersion $
+--             newDeleteHostedConfigurationVersionResponse
+--
+--         , responseGetApplication $
+--             newApplication
+--
+--         , responseGetConfigurationProfile $
+--             newConfigurationProfile
+--
+--         , responseGetDeployment $
+--             newDeployment
+--
+--         , responseGetDeploymentStrategy $
+--             newDeploymentStrategy
+--
+--         , responseGetEnvironment $
+--             newEnvironment
+--
+--         , responseGetExtension $
+--             newExtension
+--
+--         , responseGetExtensionAssociation $
+--             newExtensionAssociation
+--
+--         , responseGetHostedConfigurationVersion $
+--             newHostedConfigurationVersion
+--
+--         , responseListApplications $
+--             newListApplicationsResponse
+--
+--         , responseListConfigurationProfiles $
+--             newListConfigurationProfilesResponse
+--
+--         , responseListDeploymentStrategies $
+--             newListDeploymentStrategiesResponse
+--
+--         , responseListDeployments $
+--             newListDeploymentsResponse
+--
+--         , responseListEnvironments $
+--             newListEnvironmentsResponse
+--
+--         , responseListExtensionAssociations $
+--             newListExtensionAssociationsResponse
+--
+--         , responseListExtensions $
+--             newListExtensionsResponse
+--
+--         , responseListHostedConfigurationVersions $
+--             newListHostedConfigurationVersionsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseStartDeployment $
+--             newDeployment
+--
+--         , responseStopDeployment $
+--             newDeployment
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateApplication $
+--             newApplication
+--
+--         , responseUpdateConfigurationProfile $
+--             newConfigurationProfile
+--
+--         , responseUpdateDeploymentStrategy $
+--             newDeploymentStrategy
+--
+--         , responseUpdateEnvironment $
+--             newEnvironment
+--
+--         , responseUpdateExtension $
+--             newExtension
+--
+--         , responseUpdateExtensionAssociation $
+--             newExtensionAssociation
+--
+--         , responseValidateConfiguration $
+--             newValidateConfigurationResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateApplication :: CreateApplication -> TestTree
+requestCreateApplication =
+  req
+    "CreateApplication"
+    "fixture/CreateApplication.yaml"
+
+requestCreateConfigurationProfile :: CreateConfigurationProfile -> TestTree
+requestCreateConfigurationProfile =
+  req
+    "CreateConfigurationProfile"
+    "fixture/CreateConfigurationProfile.yaml"
+
+requestCreateDeploymentStrategy :: CreateDeploymentStrategy -> TestTree
+requestCreateDeploymentStrategy =
+  req
+    "CreateDeploymentStrategy"
+    "fixture/CreateDeploymentStrategy.yaml"
+
+requestCreateEnvironment :: CreateEnvironment -> TestTree
+requestCreateEnvironment =
+  req
+    "CreateEnvironment"
+    "fixture/CreateEnvironment.yaml"
+
+requestCreateExtension :: CreateExtension -> TestTree
+requestCreateExtension =
+  req
+    "CreateExtension"
+    "fixture/CreateExtension.yaml"
+
+requestCreateExtensionAssociation :: CreateExtensionAssociation -> TestTree
+requestCreateExtensionAssociation =
+  req
+    "CreateExtensionAssociation"
+    "fixture/CreateExtensionAssociation.yaml"
+
+requestCreateHostedConfigurationVersion :: CreateHostedConfigurationVersion -> TestTree
+requestCreateHostedConfigurationVersion =
+  req
+    "CreateHostedConfigurationVersion"
+    "fixture/CreateHostedConfigurationVersion.yaml"
+
+requestDeleteApplication :: DeleteApplication -> TestTree
+requestDeleteApplication =
+  req
+    "DeleteApplication"
+    "fixture/DeleteApplication.yaml"
+
+requestDeleteConfigurationProfile :: DeleteConfigurationProfile -> TestTree
+requestDeleteConfigurationProfile =
+  req
+    "DeleteConfigurationProfile"
+    "fixture/DeleteConfigurationProfile.yaml"
+
+requestDeleteDeploymentStrategy :: DeleteDeploymentStrategy -> TestTree
+requestDeleteDeploymentStrategy =
+  req
+    "DeleteDeploymentStrategy"
+    "fixture/DeleteDeploymentStrategy.yaml"
+
+requestDeleteEnvironment :: DeleteEnvironment -> TestTree
+requestDeleteEnvironment =
+  req
+    "DeleteEnvironment"
+    "fixture/DeleteEnvironment.yaml"
+
+requestDeleteExtension :: DeleteExtension -> TestTree
+requestDeleteExtension =
+  req
+    "DeleteExtension"
+    "fixture/DeleteExtension.yaml"
+
+requestDeleteExtensionAssociation :: DeleteExtensionAssociation -> TestTree
+requestDeleteExtensionAssociation =
+  req
+    "DeleteExtensionAssociation"
+    "fixture/DeleteExtensionAssociation.yaml"
+
+requestDeleteHostedConfigurationVersion :: DeleteHostedConfigurationVersion -> TestTree
+requestDeleteHostedConfigurationVersion =
+  req
+    "DeleteHostedConfigurationVersion"
+    "fixture/DeleteHostedConfigurationVersion.yaml"
+
+requestGetApplication :: GetApplication -> TestTree
+requestGetApplication =
+  req
+    "GetApplication"
+    "fixture/GetApplication.yaml"
+
+requestGetConfigurationProfile :: GetConfigurationProfile -> TestTree
+requestGetConfigurationProfile =
+  req
+    "GetConfigurationProfile"
+    "fixture/GetConfigurationProfile.yaml"
+
+requestGetDeployment :: GetDeployment -> TestTree
+requestGetDeployment =
+  req
+    "GetDeployment"
+    "fixture/GetDeployment.yaml"
+
+requestGetDeploymentStrategy :: GetDeploymentStrategy -> TestTree
+requestGetDeploymentStrategy =
+  req
+    "GetDeploymentStrategy"
+    "fixture/GetDeploymentStrategy.yaml"
+
+requestGetEnvironment :: GetEnvironment -> TestTree
+requestGetEnvironment =
+  req
+    "GetEnvironment"
+    "fixture/GetEnvironment.yaml"
+
+requestGetExtension :: GetExtension -> TestTree
+requestGetExtension =
+  req
+    "GetExtension"
+    "fixture/GetExtension.yaml"
+
+requestGetExtensionAssociation :: GetExtensionAssociation -> TestTree
+requestGetExtensionAssociation =
+  req
+    "GetExtensionAssociation"
+    "fixture/GetExtensionAssociation.yaml"
+
+requestGetHostedConfigurationVersion :: GetHostedConfigurationVersion -> TestTree
+requestGetHostedConfigurationVersion =
+  req
+    "GetHostedConfigurationVersion"
+    "fixture/GetHostedConfigurationVersion.yaml"
+
+requestListApplications :: ListApplications -> TestTree
+requestListApplications =
+  req
+    "ListApplications"
+    "fixture/ListApplications.yaml"
+
+requestListConfigurationProfiles :: ListConfigurationProfiles -> TestTree
+requestListConfigurationProfiles =
+  req
+    "ListConfigurationProfiles"
+    "fixture/ListConfigurationProfiles.yaml"
+
+requestListDeploymentStrategies :: ListDeploymentStrategies -> TestTree
+requestListDeploymentStrategies =
+  req
+    "ListDeploymentStrategies"
+    "fixture/ListDeploymentStrategies.yaml"
+
+requestListDeployments :: ListDeployments -> TestTree
+requestListDeployments =
+  req
+    "ListDeployments"
+    "fixture/ListDeployments.yaml"
+
+requestListEnvironments :: ListEnvironments -> TestTree
+requestListEnvironments =
+  req
+    "ListEnvironments"
+    "fixture/ListEnvironments.yaml"
+
+requestListExtensionAssociations :: ListExtensionAssociations -> TestTree
+requestListExtensionAssociations =
+  req
+    "ListExtensionAssociations"
+    "fixture/ListExtensionAssociations.yaml"
+
+requestListExtensions :: ListExtensions -> TestTree
+requestListExtensions =
+  req
+    "ListExtensions"
+    "fixture/ListExtensions.yaml"
+
+requestListHostedConfigurationVersions :: ListHostedConfigurationVersions -> TestTree
+requestListHostedConfigurationVersions =
+  req
+    "ListHostedConfigurationVersions"
+    "fixture/ListHostedConfigurationVersions.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestStartDeployment :: StartDeployment -> TestTree
+requestStartDeployment =
+  req
+    "StartDeployment"
+    "fixture/StartDeployment.yaml"
+
+requestStopDeployment :: StopDeployment -> TestTree
+requestStopDeployment =
+  req
+    "StopDeployment"
+    "fixture/StopDeployment.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateApplication :: UpdateApplication -> TestTree
+requestUpdateApplication =
+  req
+    "UpdateApplication"
+    "fixture/UpdateApplication.yaml"
+
+requestUpdateConfigurationProfile :: UpdateConfigurationProfile -> TestTree
+requestUpdateConfigurationProfile =
+  req
+    "UpdateConfigurationProfile"
+    "fixture/UpdateConfigurationProfile.yaml"
+
+requestUpdateDeploymentStrategy :: UpdateDeploymentStrategy -> TestTree
+requestUpdateDeploymentStrategy =
+  req
+    "UpdateDeploymentStrategy"
+    "fixture/UpdateDeploymentStrategy.yaml"
+
+requestUpdateEnvironment :: UpdateEnvironment -> TestTree
+requestUpdateEnvironment =
+  req
+    "UpdateEnvironment"
+    "fixture/UpdateEnvironment.yaml"
+
+requestUpdateExtension :: UpdateExtension -> TestTree
+requestUpdateExtension =
+  req
+    "UpdateExtension"
+    "fixture/UpdateExtension.yaml"
+
+requestUpdateExtensionAssociation :: UpdateExtensionAssociation -> TestTree
+requestUpdateExtensionAssociation =
+  req
+    "UpdateExtensionAssociation"
+    "fixture/UpdateExtensionAssociation.yaml"
+
+requestValidateConfiguration :: ValidateConfiguration -> TestTree
+requestValidateConfiguration =
+  req
+    "ValidateConfiguration"
+    "fixture/ValidateConfiguration.yaml"
+
+-- Responses
+
+responseCreateApplication :: Application -> TestTree
+responseCreateApplication =
+  res
+    "CreateApplicationResponse"
+    "fixture/CreateApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateApplication)
+
+responseCreateConfigurationProfile :: ConfigurationProfile -> TestTree
+responseCreateConfigurationProfile =
+  res
+    "CreateConfigurationProfileResponse"
+    "fixture/CreateConfigurationProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateConfigurationProfile)
+
+responseCreateDeploymentStrategy :: DeploymentStrategy -> TestTree
+responseCreateDeploymentStrategy =
+  res
+    "CreateDeploymentStrategyResponse"
+    "fixture/CreateDeploymentStrategyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDeploymentStrategy)
+
+responseCreateEnvironment :: Environment -> TestTree
+responseCreateEnvironment =
+  res
+    "CreateEnvironmentResponse"
+    "fixture/CreateEnvironmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateEnvironment)
+
+responseCreateExtension :: Extension -> TestTree
+responseCreateExtension =
+  res
+    "CreateExtensionResponse"
+    "fixture/CreateExtensionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateExtension)
+
+responseCreateExtensionAssociation :: ExtensionAssociation -> TestTree
+responseCreateExtensionAssociation =
+  res
+    "CreateExtensionAssociationResponse"
+    "fixture/CreateExtensionAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateExtensionAssociation)
+
+responseCreateHostedConfigurationVersion :: HostedConfigurationVersion -> TestTree
+responseCreateHostedConfigurationVersion =
+  res
+    "CreateHostedConfigurationVersionResponse"
+    "fixture/CreateHostedConfigurationVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateHostedConfigurationVersion)
+
+responseDeleteApplication :: DeleteApplicationResponse -> TestTree
+responseDeleteApplication =
+  res
+    "DeleteApplicationResponse"
+    "fixture/DeleteApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteApplication)
+
+responseDeleteConfigurationProfile :: DeleteConfigurationProfileResponse -> TestTree
+responseDeleteConfigurationProfile =
+  res
+    "DeleteConfigurationProfileResponse"
+    "fixture/DeleteConfigurationProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteConfigurationProfile)
+
+responseDeleteDeploymentStrategy :: DeleteDeploymentStrategyResponse -> TestTree
+responseDeleteDeploymentStrategy =
+  res
+    "DeleteDeploymentStrategyResponse"
+    "fixture/DeleteDeploymentStrategyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDeploymentStrategy)
+
+responseDeleteEnvironment :: DeleteEnvironmentResponse -> TestTree
+responseDeleteEnvironment =
+  res
+    "DeleteEnvironmentResponse"
+    "fixture/DeleteEnvironmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEnvironment)
+
+responseDeleteExtension :: DeleteExtensionResponse -> TestTree
+responseDeleteExtension =
+  res
+    "DeleteExtensionResponse"
+    "fixture/DeleteExtensionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteExtension)
+
+responseDeleteExtensionAssociation :: DeleteExtensionAssociationResponse -> TestTree
+responseDeleteExtensionAssociation =
+  res
+    "DeleteExtensionAssociationResponse"
+    "fixture/DeleteExtensionAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteExtensionAssociation)
+
+responseDeleteHostedConfigurationVersion :: DeleteHostedConfigurationVersionResponse -> TestTree
+responseDeleteHostedConfigurationVersion =
+  res
+    "DeleteHostedConfigurationVersionResponse"
+    "fixture/DeleteHostedConfigurationVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteHostedConfigurationVersion)
+
+responseGetApplication :: Application -> TestTree
+responseGetApplication =
+  res
+    "GetApplicationResponse"
+    "fixture/GetApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetApplication)
+
+responseGetConfigurationProfile :: ConfigurationProfile -> TestTree
+responseGetConfigurationProfile =
+  res
+    "GetConfigurationProfileResponse"
+    "fixture/GetConfigurationProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetConfigurationProfile)
+
+responseGetDeployment :: Deployment -> TestTree
+responseGetDeployment =
+  res
+    "GetDeploymentResponse"
+    "fixture/GetDeploymentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDeployment)
+
+responseGetDeploymentStrategy :: DeploymentStrategy -> TestTree
+responseGetDeploymentStrategy =
+  res
+    "GetDeploymentStrategyResponse"
+    "fixture/GetDeploymentStrategyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDeploymentStrategy)
+
+responseGetEnvironment :: Environment -> TestTree
+responseGetEnvironment =
+  res
+    "GetEnvironmentResponse"
+    "fixture/GetEnvironmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEnvironment)
+
+responseGetExtension :: Extension -> TestTree
+responseGetExtension =
+  res
+    "GetExtensionResponse"
+    "fixture/GetExtensionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetExtension)
+
+responseGetExtensionAssociation :: ExtensionAssociation -> TestTree
+responseGetExtensionAssociation =
+  res
+    "GetExtensionAssociationResponse"
+    "fixture/GetExtensionAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetExtensionAssociation)
+
+responseGetHostedConfigurationVersion :: HostedConfigurationVersion -> TestTree
+responseGetHostedConfigurationVersion =
+  res
+    "GetHostedConfigurationVersionResponse"
+    "fixture/GetHostedConfigurationVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetHostedConfigurationVersion)
+
+responseListApplications :: ListApplicationsResponse -> TestTree
+responseListApplications =
+  res
+    "ListApplicationsResponse"
+    "fixture/ListApplicationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListApplications)
+
+responseListConfigurationProfiles :: ListConfigurationProfilesResponse -> TestTree
+responseListConfigurationProfiles =
+  res
+    "ListConfigurationProfilesResponse"
+    "fixture/ListConfigurationProfilesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListConfigurationProfiles)
+
+responseListDeploymentStrategies :: ListDeploymentStrategiesResponse -> TestTree
+responseListDeploymentStrategies =
+  res
+    "ListDeploymentStrategiesResponse"
+    "fixture/ListDeploymentStrategiesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDeploymentStrategies)
+
+responseListDeployments :: ListDeploymentsResponse -> TestTree
+responseListDeployments =
+  res
+    "ListDeploymentsResponse"
+    "fixture/ListDeploymentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDeployments)
+
+responseListEnvironments :: ListEnvironmentsResponse -> TestTree
+responseListEnvironments =
+  res
+    "ListEnvironmentsResponse"
+    "fixture/ListEnvironmentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEnvironments)
+
+responseListExtensionAssociations :: ListExtensionAssociationsResponse -> TestTree
+responseListExtensionAssociations =
+  res
+    "ListExtensionAssociationsResponse"
+    "fixture/ListExtensionAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListExtensionAssociations)
+
+responseListExtensions :: ListExtensionsResponse -> TestTree
+responseListExtensions =
+  res
+    "ListExtensionsResponse"
+    "fixture/ListExtensionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListExtensions)
+
+responseListHostedConfigurationVersions :: ListHostedConfigurationVersionsResponse -> TestTree
+responseListHostedConfigurationVersions =
+  res
+    "ListHostedConfigurationVersionsResponse"
+    "fixture/ListHostedConfigurationVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListHostedConfigurationVersions)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseStartDeployment :: Deployment -> TestTree
+responseStartDeployment =
+  res
+    "StartDeploymentResponse"
+    "fixture/StartDeploymentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartDeployment)
+
+responseStopDeployment :: Deployment -> TestTree
+responseStopDeployment =
+  res
+    "StopDeploymentResponse"
+    "fixture/StopDeploymentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopDeployment)
+
+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)
+
+responseUpdateApplication :: Application -> TestTree
+responseUpdateApplication =
+  res
+    "UpdateApplicationResponse"
+    "fixture/UpdateApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateApplication)
+
+responseUpdateConfigurationProfile :: ConfigurationProfile -> TestTree
+responseUpdateConfigurationProfile =
+  res
+    "UpdateConfigurationProfileResponse"
+    "fixture/UpdateConfigurationProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateConfigurationProfile)
+
+responseUpdateDeploymentStrategy :: DeploymentStrategy -> TestTree
+responseUpdateDeploymentStrategy =
+  res
+    "UpdateDeploymentStrategyResponse"
+    "fixture/UpdateDeploymentStrategyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDeploymentStrategy)
+
+responseUpdateEnvironment :: Environment -> TestTree
+responseUpdateEnvironment =
+  res
+    "UpdateEnvironmentResponse"
+    "fixture/UpdateEnvironmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateEnvironment)
+
+responseUpdateExtension :: Extension -> TestTree
+responseUpdateExtension =
+  res
+    "UpdateExtensionResponse"
+    "fixture/UpdateExtensionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateExtension)
+
+responseUpdateExtensionAssociation :: ExtensionAssociation -> TestTree
+responseUpdateExtensionAssociation =
+  res
+    "UpdateExtensionAssociationResponse"
+    "fixture/UpdateExtensionAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateExtensionAssociation)
+
+responseValidateConfiguration :: ValidateConfigurationResponse -> TestTree
+responseValidateConfiguration =
+  res
+    "ValidateConfigurationResponse"
+    "fixture/ValidateConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ValidateConfiguration)
