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 App Runner SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2020-05-15@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-apprunner)
+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.AppRunner](http://hackage.haskell.org/package/amazonka-apprunner/docs/Amazonka-AppRunner.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-apprunner` 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-apprunner.cabal b/amazonka-apprunner.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-apprunner.cabal
@@ -0,0 +1,170 @@
+cabal-version:      2.2
+name:               amazonka-apprunner
+version:            2.0
+synopsis:           Amazon App Runner 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 @2020-05-15@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.AppRunner.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.AppRunner" 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-apprunner
+
+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.AppRunner
+    Amazonka.AppRunner.AssociateCustomDomain
+    Amazonka.AppRunner.CreateAutoScalingConfiguration
+    Amazonka.AppRunner.CreateConnection
+    Amazonka.AppRunner.CreateObservabilityConfiguration
+    Amazonka.AppRunner.CreateService
+    Amazonka.AppRunner.CreateVpcConnector
+    Amazonka.AppRunner.CreateVpcIngressConnection
+    Amazonka.AppRunner.DeleteAutoScalingConfiguration
+    Amazonka.AppRunner.DeleteConnection
+    Amazonka.AppRunner.DeleteObservabilityConfiguration
+    Amazonka.AppRunner.DeleteService
+    Amazonka.AppRunner.DeleteVpcConnector
+    Amazonka.AppRunner.DeleteVpcIngressConnection
+    Amazonka.AppRunner.DescribeAutoScalingConfiguration
+    Amazonka.AppRunner.DescribeCustomDomains
+    Amazonka.AppRunner.DescribeObservabilityConfiguration
+    Amazonka.AppRunner.DescribeService
+    Amazonka.AppRunner.DescribeVpcConnector
+    Amazonka.AppRunner.DescribeVpcIngressConnection
+    Amazonka.AppRunner.DisassociateCustomDomain
+    Amazonka.AppRunner.Lens
+    Amazonka.AppRunner.ListAutoScalingConfigurations
+    Amazonka.AppRunner.ListConnections
+    Amazonka.AppRunner.ListObservabilityConfigurations
+    Amazonka.AppRunner.ListOperations
+    Amazonka.AppRunner.ListServices
+    Amazonka.AppRunner.ListTagsForResource
+    Amazonka.AppRunner.ListVpcConnectors
+    Amazonka.AppRunner.ListVpcIngressConnections
+    Amazonka.AppRunner.PauseService
+    Amazonka.AppRunner.ResumeService
+    Amazonka.AppRunner.StartDeployment
+    Amazonka.AppRunner.TagResource
+    Amazonka.AppRunner.Types
+    Amazonka.AppRunner.Types.AuthenticationConfiguration
+    Amazonka.AppRunner.Types.AutoScalingConfiguration
+    Amazonka.AppRunner.Types.AutoScalingConfigurationStatus
+    Amazonka.AppRunner.Types.AutoScalingConfigurationSummary
+    Amazonka.AppRunner.Types.CertificateValidationRecord
+    Amazonka.AppRunner.Types.CertificateValidationRecordStatus
+    Amazonka.AppRunner.Types.CodeConfiguration
+    Amazonka.AppRunner.Types.CodeConfigurationValues
+    Amazonka.AppRunner.Types.CodeRepository
+    Amazonka.AppRunner.Types.ConfigurationSource
+    Amazonka.AppRunner.Types.Connection
+    Amazonka.AppRunner.Types.ConnectionStatus
+    Amazonka.AppRunner.Types.ConnectionSummary
+    Amazonka.AppRunner.Types.CustomDomain
+    Amazonka.AppRunner.Types.CustomDomainAssociationStatus
+    Amazonka.AppRunner.Types.EgressConfiguration
+    Amazonka.AppRunner.Types.EgressType
+    Amazonka.AppRunner.Types.EncryptionConfiguration
+    Amazonka.AppRunner.Types.HealthCheckConfiguration
+    Amazonka.AppRunner.Types.HealthCheckProtocol
+    Amazonka.AppRunner.Types.ImageConfiguration
+    Amazonka.AppRunner.Types.ImageRepository
+    Amazonka.AppRunner.Types.ImageRepositoryType
+    Amazonka.AppRunner.Types.IngressConfiguration
+    Amazonka.AppRunner.Types.IngressVpcConfiguration
+    Amazonka.AppRunner.Types.InstanceConfiguration
+    Amazonka.AppRunner.Types.ListVpcIngressConnectionsFilter
+    Amazonka.AppRunner.Types.NetworkConfiguration
+    Amazonka.AppRunner.Types.ObservabilityConfiguration
+    Amazonka.AppRunner.Types.ObservabilityConfigurationStatus
+    Amazonka.AppRunner.Types.ObservabilityConfigurationSummary
+    Amazonka.AppRunner.Types.OperationStatus
+    Amazonka.AppRunner.Types.OperationSummary
+    Amazonka.AppRunner.Types.OperationType
+    Amazonka.AppRunner.Types.ProviderType
+    Amazonka.AppRunner.Types.Runtime
+    Amazonka.AppRunner.Types.Service
+    Amazonka.AppRunner.Types.ServiceObservabilityConfiguration
+    Amazonka.AppRunner.Types.ServiceStatus
+    Amazonka.AppRunner.Types.ServiceSummary
+    Amazonka.AppRunner.Types.SourceCodeVersion
+    Amazonka.AppRunner.Types.SourceCodeVersionType
+    Amazonka.AppRunner.Types.SourceConfiguration
+    Amazonka.AppRunner.Types.Tag
+    Amazonka.AppRunner.Types.TraceConfiguration
+    Amazonka.AppRunner.Types.TracingVendor
+    Amazonka.AppRunner.Types.VpcConnector
+    Amazonka.AppRunner.Types.VpcConnectorStatus
+    Amazonka.AppRunner.Types.VpcDNSTarget
+    Amazonka.AppRunner.Types.VpcIngressConnection
+    Amazonka.AppRunner.Types.VpcIngressConnectionStatus
+    Amazonka.AppRunner.Types.VpcIngressConnectionSummary
+    Amazonka.AppRunner.UntagResource
+    Amazonka.AppRunner.UpdateService
+    Amazonka.AppRunner.UpdateVpcIngressConnection
+    Amazonka.AppRunner.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-apprunner-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.AppRunner
+    Test.Amazonka.AppRunner.Internal
+    Test.Amazonka.Gen.AppRunner
+
+  build-depends:
+    , amazonka-apprunner
+    , 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/AssociateCustomDomain.yaml b/fixture/AssociateCustomDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateCustomDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateCustomDomainResponse.proto b/fixture/AssociateCustomDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateCustomDomainResponse.proto
diff --git a/fixture/CreateAutoScalingConfiguration.yaml b/fixture/CreateAutoScalingConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAutoScalingConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateAutoScalingConfigurationResponse.proto b/fixture/CreateAutoScalingConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAutoScalingConfigurationResponse.proto
diff --git a/fixture/CreateConnection.yaml b/fixture/CreateConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateConnectionResponse.proto b/fixture/CreateConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConnectionResponse.proto
diff --git a/fixture/CreateObservabilityConfiguration.yaml b/fixture/CreateObservabilityConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateObservabilityConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateObservabilityConfigurationResponse.proto b/fixture/CreateObservabilityConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateObservabilityConfigurationResponse.proto
diff --git a/fixture/CreateService.yaml b/fixture/CreateService.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateService.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateServiceResponse.proto b/fixture/CreateServiceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateServiceResponse.proto
diff --git a/fixture/CreateVpcConnector.yaml b/fixture/CreateVpcConnector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcConnector.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateVpcConnectorResponse.proto b/fixture/CreateVpcConnectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcConnectorResponse.proto
diff --git a/fixture/CreateVpcIngressConnection.yaml b/fixture/CreateVpcIngressConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcIngressConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateVpcIngressConnectionResponse.proto b/fixture/CreateVpcIngressConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcIngressConnectionResponse.proto
diff --git a/fixture/DeleteAutoScalingConfiguration.yaml b/fixture/DeleteAutoScalingConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAutoScalingConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteAutoScalingConfigurationResponse.proto b/fixture/DeleteAutoScalingConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAutoScalingConfigurationResponse.proto
diff --git a/fixture/DeleteConnection.yaml b/fixture/DeleteConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteConnectionResponse.proto b/fixture/DeleteConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConnectionResponse.proto
diff --git a/fixture/DeleteObservabilityConfiguration.yaml b/fixture/DeleteObservabilityConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteObservabilityConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteObservabilityConfigurationResponse.proto b/fixture/DeleteObservabilityConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteObservabilityConfigurationResponse.proto
diff --git a/fixture/DeleteService.yaml b/fixture/DeleteService.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteService.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteServiceResponse.proto b/fixture/DeleteServiceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteServiceResponse.proto
diff --git a/fixture/DeleteVpcConnector.yaml b/fixture/DeleteVpcConnector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcConnector.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteVpcConnectorResponse.proto b/fixture/DeleteVpcConnectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcConnectorResponse.proto
diff --git a/fixture/DeleteVpcIngressConnection.yaml b/fixture/DeleteVpcIngressConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcIngressConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteVpcIngressConnectionResponse.proto b/fixture/DeleteVpcIngressConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcIngressConnectionResponse.proto
diff --git a/fixture/DescribeAutoScalingConfiguration.yaml b/fixture/DescribeAutoScalingConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAutoScalingConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAutoScalingConfigurationResponse.proto b/fixture/DescribeAutoScalingConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAutoScalingConfigurationResponse.proto
diff --git a/fixture/DescribeCustomDomains.yaml b/fixture/DescribeCustomDomains.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCustomDomains.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeCustomDomainsResponse.proto b/fixture/DescribeCustomDomainsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCustomDomainsResponse.proto
diff --git a/fixture/DescribeObservabilityConfiguration.yaml b/fixture/DescribeObservabilityConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeObservabilityConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeObservabilityConfigurationResponse.proto b/fixture/DescribeObservabilityConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeObservabilityConfigurationResponse.proto
diff --git a/fixture/DescribeService.yaml b/fixture/DescribeService.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeService.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeServiceResponse.proto b/fixture/DescribeServiceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeServiceResponse.proto
diff --git a/fixture/DescribeVpcConnector.yaml b/fixture/DescribeVpcConnector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcConnector.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVpcConnectorResponse.proto b/fixture/DescribeVpcConnectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcConnectorResponse.proto
diff --git a/fixture/DescribeVpcIngressConnection.yaml b/fixture/DescribeVpcIngressConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcIngressConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVpcIngressConnectionResponse.proto b/fixture/DescribeVpcIngressConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcIngressConnectionResponse.proto
diff --git a/fixture/DisassociateCustomDomain.yaml b/fixture/DisassociateCustomDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateCustomDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateCustomDomainResponse.proto b/fixture/DisassociateCustomDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateCustomDomainResponse.proto
diff --git a/fixture/ListAutoScalingConfigurations.yaml b/fixture/ListAutoScalingConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAutoScalingConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListAutoScalingConfigurationsResponse.proto b/fixture/ListAutoScalingConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAutoScalingConfigurationsResponse.proto
diff --git a/fixture/ListConnections.yaml b/fixture/ListConnections.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListConnections.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListConnectionsResponse.proto b/fixture/ListConnectionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListConnectionsResponse.proto
diff --git a/fixture/ListObservabilityConfigurations.yaml b/fixture/ListObservabilityConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListObservabilityConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListObservabilityConfigurationsResponse.proto b/fixture/ListObservabilityConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListObservabilityConfigurationsResponse.proto
diff --git a/fixture/ListOperations.yaml b/fixture/ListOperations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListOperations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListOperationsResponse.proto b/fixture/ListOperationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListOperationsResponse.proto
diff --git a/fixture/ListServices.yaml b/fixture/ListServices.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListServices.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListServicesResponse.proto b/fixture/ListServicesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListServicesResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  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/ListVpcConnectors.yaml b/fixture/ListVpcConnectors.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListVpcConnectors.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListVpcConnectorsResponse.proto b/fixture/ListVpcConnectorsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListVpcConnectorsResponse.proto
diff --git a/fixture/ListVpcIngressConnections.yaml b/fixture/ListVpcIngressConnections.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListVpcIngressConnections.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListVpcIngressConnectionsResponse.proto b/fixture/ListVpcIngressConnectionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListVpcIngressConnectionsResponse.proto
diff --git a/fixture/PauseService.yaml b/fixture/PauseService.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PauseService.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PauseServiceResponse.proto b/fixture/PauseServiceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PauseServiceResponse.proto
diff --git a/fixture/ResumeService.yaml b/fixture/ResumeService.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ResumeService.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ResumeServiceResponse.proto b/fixture/ResumeServiceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ResumeServiceResponse.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/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  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/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/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  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/UpdateService.yaml b/fixture/UpdateService.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateService.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateServiceResponse.proto b/fixture/UpdateServiceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateServiceResponse.proto
diff --git a/fixture/UpdateVpcIngressConnection.yaml b/fixture/UpdateVpcIngressConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateVpcIngressConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apprunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apprunner.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateVpcIngressConnectionResponse.proto b/fixture/UpdateVpcIngressConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateVpcIngressConnectionResponse.proto
diff --git a/gen/Amazonka/AppRunner.hs b/gen/Amazonka/AppRunner.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner.hs
@@ -0,0 +1,538 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.AppRunner
+-- 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 @2020-05-15@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- App Runner
+--
+-- App Runner is an application service that provides a fast, simple, and
+-- cost-effective way to go directly from an existing container image or
+-- source code to a running service in the Amazon Web Services Cloud in
+-- seconds. You don\'t need to learn new technologies, decide which compute
+-- service to use, or understand how to provision and configure Amazon Web
+-- Services resources.
+--
+-- App Runner connects directly to your container registry or source code
+-- repository. It provides an automatic delivery pipeline with fully
+-- managed operations, high performance, scalability, and security.
+--
+-- For more information about App Runner, see the
+-- <https://docs.aws.amazon.com/apprunner/latest/dg/ App Runner Developer Guide>.
+-- For release information, see the
+-- <https://docs.aws.amazon.com/apprunner/latest/relnotes/ App Runner Release Notes>.
+--
+-- To install the Software Development Kits (SDKs), Integrated Development
+-- Environment (IDE) Toolkits, and command line tools that you can use to
+-- access the API, see
+-- <http://aws.amazon.com/tools/ Tools for Amazon Web Services>.
+--
+-- __Endpoints__
+--
+-- For a list of Region-specific endpoints that App Runner supports, see
+-- <https://docs.aws.amazon.com/general/latest/gr/apprunner.html App Runner endpoints and quotas>
+-- in the /Amazon Web Services General Reference/.
+module Amazonka.AppRunner
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** InternalServiceErrorException
+    _InternalServiceErrorException,
+
+    -- ** InvalidRequestException
+    _InvalidRequestException,
+
+    -- ** InvalidStateException
+    _InvalidStateException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** AssociateCustomDomain
+    AssociateCustomDomain (AssociateCustomDomain'),
+    newAssociateCustomDomain,
+    AssociateCustomDomainResponse (AssociateCustomDomainResponse'),
+    newAssociateCustomDomainResponse,
+
+    -- ** CreateAutoScalingConfiguration
+    CreateAutoScalingConfiguration (CreateAutoScalingConfiguration'),
+    newCreateAutoScalingConfiguration,
+    CreateAutoScalingConfigurationResponse (CreateAutoScalingConfigurationResponse'),
+    newCreateAutoScalingConfigurationResponse,
+
+    -- ** CreateConnection
+    CreateConnection (CreateConnection'),
+    newCreateConnection,
+    CreateConnectionResponse (CreateConnectionResponse'),
+    newCreateConnectionResponse,
+
+    -- ** CreateObservabilityConfiguration
+    CreateObservabilityConfiguration (CreateObservabilityConfiguration'),
+    newCreateObservabilityConfiguration,
+    CreateObservabilityConfigurationResponse (CreateObservabilityConfigurationResponse'),
+    newCreateObservabilityConfigurationResponse,
+
+    -- ** CreateService
+    CreateService (CreateService'),
+    newCreateService,
+    CreateServiceResponse (CreateServiceResponse'),
+    newCreateServiceResponse,
+
+    -- ** CreateVpcConnector
+    CreateVpcConnector (CreateVpcConnector'),
+    newCreateVpcConnector,
+    CreateVpcConnectorResponse (CreateVpcConnectorResponse'),
+    newCreateVpcConnectorResponse,
+
+    -- ** CreateVpcIngressConnection
+    CreateVpcIngressConnection (CreateVpcIngressConnection'),
+    newCreateVpcIngressConnection,
+    CreateVpcIngressConnectionResponse (CreateVpcIngressConnectionResponse'),
+    newCreateVpcIngressConnectionResponse,
+
+    -- ** DeleteAutoScalingConfiguration
+    DeleteAutoScalingConfiguration (DeleteAutoScalingConfiguration'),
+    newDeleteAutoScalingConfiguration,
+    DeleteAutoScalingConfigurationResponse (DeleteAutoScalingConfigurationResponse'),
+    newDeleteAutoScalingConfigurationResponse,
+
+    -- ** DeleteConnection
+    DeleteConnection (DeleteConnection'),
+    newDeleteConnection,
+    DeleteConnectionResponse (DeleteConnectionResponse'),
+    newDeleteConnectionResponse,
+
+    -- ** DeleteObservabilityConfiguration
+    DeleteObservabilityConfiguration (DeleteObservabilityConfiguration'),
+    newDeleteObservabilityConfiguration,
+    DeleteObservabilityConfigurationResponse (DeleteObservabilityConfigurationResponse'),
+    newDeleteObservabilityConfigurationResponse,
+
+    -- ** DeleteService
+    DeleteService (DeleteService'),
+    newDeleteService,
+    DeleteServiceResponse (DeleteServiceResponse'),
+    newDeleteServiceResponse,
+
+    -- ** DeleteVpcConnector
+    DeleteVpcConnector (DeleteVpcConnector'),
+    newDeleteVpcConnector,
+    DeleteVpcConnectorResponse (DeleteVpcConnectorResponse'),
+    newDeleteVpcConnectorResponse,
+
+    -- ** DeleteVpcIngressConnection
+    DeleteVpcIngressConnection (DeleteVpcIngressConnection'),
+    newDeleteVpcIngressConnection,
+    DeleteVpcIngressConnectionResponse (DeleteVpcIngressConnectionResponse'),
+    newDeleteVpcIngressConnectionResponse,
+
+    -- ** DescribeAutoScalingConfiguration
+    DescribeAutoScalingConfiguration (DescribeAutoScalingConfiguration'),
+    newDescribeAutoScalingConfiguration,
+    DescribeAutoScalingConfigurationResponse (DescribeAutoScalingConfigurationResponse'),
+    newDescribeAutoScalingConfigurationResponse,
+
+    -- ** DescribeCustomDomains
+    DescribeCustomDomains (DescribeCustomDomains'),
+    newDescribeCustomDomains,
+    DescribeCustomDomainsResponse (DescribeCustomDomainsResponse'),
+    newDescribeCustomDomainsResponse,
+
+    -- ** DescribeObservabilityConfiguration
+    DescribeObservabilityConfiguration (DescribeObservabilityConfiguration'),
+    newDescribeObservabilityConfiguration,
+    DescribeObservabilityConfigurationResponse (DescribeObservabilityConfigurationResponse'),
+    newDescribeObservabilityConfigurationResponse,
+
+    -- ** DescribeService
+    DescribeService (DescribeService'),
+    newDescribeService,
+    DescribeServiceResponse (DescribeServiceResponse'),
+    newDescribeServiceResponse,
+
+    -- ** DescribeVpcConnector
+    DescribeVpcConnector (DescribeVpcConnector'),
+    newDescribeVpcConnector,
+    DescribeVpcConnectorResponse (DescribeVpcConnectorResponse'),
+    newDescribeVpcConnectorResponse,
+
+    -- ** DescribeVpcIngressConnection
+    DescribeVpcIngressConnection (DescribeVpcIngressConnection'),
+    newDescribeVpcIngressConnection,
+    DescribeVpcIngressConnectionResponse (DescribeVpcIngressConnectionResponse'),
+    newDescribeVpcIngressConnectionResponse,
+
+    -- ** DisassociateCustomDomain
+    DisassociateCustomDomain (DisassociateCustomDomain'),
+    newDisassociateCustomDomain,
+    DisassociateCustomDomainResponse (DisassociateCustomDomainResponse'),
+    newDisassociateCustomDomainResponse,
+
+    -- ** ListAutoScalingConfigurations
+    ListAutoScalingConfigurations (ListAutoScalingConfigurations'),
+    newListAutoScalingConfigurations,
+    ListAutoScalingConfigurationsResponse (ListAutoScalingConfigurationsResponse'),
+    newListAutoScalingConfigurationsResponse,
+
+    -- ** ListConnections
+    ListConnections (ListConnections'),
+    newListConnections,
+    ListConnectionsResponse (ListConnectionsResponse'),
+    newListConnectionsResponse,
+
+    -- ** ListObservabilityConfigurations
+    ListObservabilityConfigurations (ListObservabilityConfigurations'),
+    newListObservabilityConfigurations,
+    ListObservabilityConfigurationsResponse (ListObservabilityConfigurationsResponse'),
+    newListObservabilityConfigurationsResponse,
+
+    -- ** ListOperations
+    ListOperations (ListOperations'),
+    newListOperations,
+    ListOperationsResponse (ListOperationsResponse'),
+    newListOperationsResponse,
+
+    -- ** ListServices
+    ListServices (ListServices'),
+    newListServices,
+    ListServicesResponse (ListServicesResponse'),
+    newListServicesResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListVpcConnectors
+    ListVpcConnectors (ListVpcConnectors'),
+    newListVpcConnectors,
+    ListVpcConnectorsResponse (ListVpcConnectorsResponse'),
+    newListVpcConnectorsResponse,
+
+    -- ** ListVpcIngressConnections
+    ListVpcIngressConnections (ListVpcIngressConnections'),
+    newListVpcIngressConnections,
+    ListVpcIngressConnectionsResponse (ListVpcIngressConnectionsResponse'),
+    newListVpcIngressConnectionsResponse,
+
+    -- ** PauseService
+    PauseService (PauseService'),
+    newPauseService,
+    PauseServiceResponse (PauseServiceResponse'),
+    newPauseServiceResponse,
+
+    -- ** ResumeService
+    ResumeService (ResumeService'),
+    newResumeService,
+    ResumeServiceResponse (ResumeServiceResponse'),
+    newResumeServiceResponse,
+
+    -- ** StartDeployment
+    StartDeployment (StartDeployment'),
+    newStartDeployment,
+    StartDeploymentResponse (StartDeploymentResponse'),
+    newStartDeploymentResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateService
+    UpdateService (UpdateService'),
+    newUpdateService,
+    UpdateServiceResponse (UpdateServiceResponse'),
+    newUpdateServiceResponse,
+
+    -- ** UpdateVpcIngressConnection
+    UpdateVpcIngressConnection (UpdateVpcIngressConnection'),
+    newUpdateVpcIngressConnection,
+    UpdateVpcIngressConnectionResponse (UpdateVpcIngressConnectionResponse'),
+    newUpdateVpcIngressConnectionResponse,
+
+    -- * Types
+
+    -- ** AutoScalingConfigurationStatus
+    AutoScalingConfigurationStatus (..),
+
+    -- ** CertificateValidationRecordStatus
+    CertificateValidationRecordStatus (..),
+
+    -- ** ConfigurationSource
+    ConfigurationSource (..),
+
+    -- ** ConnectionStatus
+    ConnectionStatus (..),
+
+    -- ** CustomDomainAssociationStatus
+    CustomDomainAssociationStatus (..),
+
+    -- ** EgressType
+    EgressType (..),
+
+    -- ** HealthCheckProtocol
+    HealthCheckProtocol (..),
+
+    -- ** ImageRepositoryType
+    ImageRepositoryType (..),
+
+    -- ** ObservabilityConfigurationStatus
+    ObservabilityConfigurationStatus (..),
+
+    -- ** OperationStatus
+    OperationStatus (..),
+
+    -- ** OperationType
+    OperationType (..),
+
+    -- ** ProviderType
+    ProviderType (..),
+
+    -- ** Runtime
+    Runtime (..),
+
+    -- ** ServiceStatus
+    ServiceStatus (..),
+
+    -- ** SourceCodeVersionType
+    SourceCodeVersionType (..),
+
+    -- ** TracingVendor
+    TracingVendor (..),
+
+    -- ** VpcConnectorStatus
+    VpcConnectorStatus (..),
+
+    -- ** VpcIngressConnectionStatus
+    VpcIngressConnectionStatus (..),
+
+    -- ** AuthenticationConfiguration
+    AuthenticationConfiguration (AuthenticationConfiguration'),
+    newAuthenticationConfiguration,
+
+    -- ** AutoScalingConfiguration
+    AutoScalingConfiguration (AutoScalingConfiguration'),
+    newAutoScalingConfiguration,
+
+    -- ** AutoScalingConfigurationSummary
+    AutoScalingConfigurationSummary (AutoScalingConfigurationSummary'),
+    newAutoScalingConfigurationSummary,
+
+    -- ** CertificateValidationRecord
+    CertificateValidationRecord (CertificateValidationRecord'),
+    newCertificateValidationRecord,
+
+    -- ** CodeConfiguration
+    CodeConfiguration (CodeConfiguration'),
+    newCodeConfiguration,
+
+    -- ** CodeConfigurationValues
+    CodeConfigurationValues (CodeConfigurationValues'),
+    newCodeConfigurationValues,
+
+    -- ** CodeRepository
+    CodeRepository (CodeRepository'),
+    newCodeRepository,
+
+    -- ** Connection
+    Connection (Connection'),
+    newConnection,
+
+    -- ** ConnectionSummary
+    ConnectionSummary (ConnectionSummary'),
+    newConnectionSummary,
+
+    -- ** CustomDomain
+    CustomDomain (CustomDomain'),
+    newCustomDomain,
+
+    -- ** EgressConfiguration
+    EgressConfiguration (EgressConfiguration'),
+    newEgressConfiguration,
+
+    -- ** EncryptionConfiguration
+    EncryptionConfiguration (EncryptionConfiguration'),
+    newEncryptionConfiguration,
+
+    -- ** HealthCheckConfiguration
+    HealthCheckConfiguration (HealthCheckConfiguration'),
+    newHealthCheckConfiguration,
+
+    -- ** ImageConfiguration
+    ImageConfiguration (ImageConfiguration'),
+    newImageConfiguration,
+
+    -- ** ImageRepository
+    ImageRepository (ImageRepository'),
+    newImageRepository,
+
+    -- ** IngressConfiguration
+    IngressConfiguration (IngressConfiguration'),
+    newIngressConfiguration,
+
+    -- ** IngressVpcConfiguration
+    IngressVpcConfiguration (IngressVpcConfiguration'),
+    newIngressVpcConfiguration,
+
+    -- ** InstanceConfiguration
+    InstanceConfiguration (InstanceConfiguration'),
+    newInstanceConfiguration,
+
+    -- ** ListVpcIngressConnectionsFilter
+    ListVpcIngressConnectionsFilter (ListVpcIngressConnectionsFilter'),
+    newListVpcIngressConnectionsFilter,
+
+    -- ** NetworkConfiguration
+    NetworkConfiguration (NetworkConfiguration'),
+    newNetworkConfiguration,
+
+    -- ** ObservabilityConfiguration
+    ObservabilityConfiguration (ObservabilityConfiguration'),
+    newObservabilityConfiguration,
+
+    -- ** ObservabilityConfigurationSummary
+    ObservabilityConfigurationSummary (ObservabilityConfigurationSummary'),
+    newObservabilityConfigurationSummary,
+
+    -- ** OperationSummary
+    OperationSummary (OperationSummary'),
+    newOperationSummary,
+
+    -- ** Service
+    Service (Service'),
+    newService,
+
+    -- ** ServiceObservabilityConfiguration
+    ServiceObservabilityConfiguration (ServiceObservabilityConfiguration'),
+    newServiceObservabilityConfiguration,
+
+    -- ** ServiceSummary
+    ServiceSummary (ServiceSummary'),
+    newServiceSummary,
+
+    -- ** SourceCodeVersion
+    SourceCodeVersion (SourceCodeVersion'),
+    newSourceCodeVersion,
+
+    -- ** SourceConfiguration
+    SourceConfiguration (SourceConfiguration'),
+    newSourceConfiguration,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** TraceConfiguration
+    TraceConfiguration (TraceConfiguration'),
+    newTraceConfiguration,
+
+    -- ** VpcConnector
+    VpcConnector (VpcConnector'),
+    newVpcConnector,
+
+    -- ** VpcDNSTarget
+    VpcDNSTarget (VpcDNSTarget'),
+    newVpcDNSTarget,
+
+    -- ** VpcIngressConnection
+    VpcIngressConnection (VpcIngressConnection'),
+    newVpcIngressConnection,
+
+    -- ** VpcIngressConnectionSummary
+    VpcIngressConnectionSummary (VpcIngressConnectionSummary'),
+    newVpcIngressConnectionSummary,
+  )
+where
+
+import Amazonka.AppRunner.AssociateCustomDomain
+import Amazonka.AppRunner.CreateAutoScalingConfiguration
+import Amazonka.AppRunner.CreateConnection
+import Amazonka.AppRunner.CreateObservabilityConfiguration
+import Amazonka.AppRunner.CreateService
+import Amazonka.AppRunner.CreateVpcConnector
+import Amazonka.AppRunner.CreateVpcIngressConnection
+import Amazonka.AppRunner.DeleteAutoScalingConfiguration
+import Amazonka.AppRunner.DeleteConnection
+import Amazonka.AppRunner.DeleteObservabilityConfiguration
+import Amazonka.AppRunner.DeleteService
+import Amazonka.AppRunner.DeleteVpcConnector
+import Amazonka.AppRunner.DeleteVpcIngressConnection
+import Amazonka.AppRunner.DescribeAutoScalingConfiguration
+import Amazonka.AppRunner.DescribeCustomDomains
+import Amazonka.AppRunner.DescribeObservabilityConfiguration
+import Amazonka.AppRunner.DescribeService
+import Amazonka.AppRunner.DescribeVpcConnector
+import Amazonka.AppRunner.DescribeVpcIngressConnection
+import Amazonka.AppRunner.DisassociateCustomDomain
+import Amazonka.AppRunner.Lens
+import Amazonka.AppRunner.ListAutoScalingConfigurations
+import Amazonka.AppRunner.ListConnections
+import Amazonka.AppRunner.ListObservabilityConfigurations
+import Amazonka.AppRunner.ListOperations
+import Amazonka.AppRunner.ListServices
+import Amazonka.AppRunner.ListTagsForResource
+import Amazonka.AppRunner.ListVpcConnectors
+import Amazonka.AppRunner.ListVpcIngressConnections
+import Amazonka.AppRunner.PauseService
+import Amazonka.AppRunner.ResumeService
+import Amazonka.AppRunner.StartDeployment
+import Amazonka.AppRunner.TagResource
+import Amazonka.AppRunner.Types
+import Amazonka.AppRunner.UntagResource
+import Amazonka.AppRunner.UpdateService
+import Amazonka.AppRunner.UpdateVpcIngressConnection
+import Amazonka.AppRunner.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 'AppRunner'.
+
+-- $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/AppRunner/AssociateCustomDomain.hs b/gen/Amazonka/AppRunner/AssociateCustomDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/AssociateCustomDomain.hs
@@ -0,0 +1,286 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.AssociateCustomDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associate your own domain name with the App Runner subdomain URL of your
+-- App Runner service.
+--
+-- After you call @AssociateCustomDomain@ and receive a successful
+-- response, use the information in the CustomDomain record that\'s
+-- returned to add CNAME records to your Domain Name System (DNS). For each
+-- mapped domain name, add a mapping to the target App Runner subdomain and
+-- one or more certificate validation records. App Runner then performs DNS
+-- validation to verify that you own or control the domain name that you
+-- associated. App Runner tracks domain validity in a certificate stored in
+-- <https://docs.aws.amazon.com/acm/latest/userguide AWS Certificate Manager (ACM)>.
+module Amazonka.AppRunner.AssociateCustomDomain
+  ( -- * Creating a Request
+    AssociateCustomDomain (..),
+    newAssociateCustomDomain,
+
+    -- * Request Lenses
+    associateCustomDomain_enableWWWSubdomain,
+    associateCustomDomain_serviceArn,
+    associateCustomDomain_domainName,
+
+    -- * Destructuring the Response
+    AssociateCustomDomainResponse (..),
+    newAssociateCustomDomainResponse,
+
+    -- * Response Lenses
+    associateCustomDomainResponse_httpStatus,
+    associateCustomDomainResponse_dNSTarget,
+    associateCustomDomainResponse_serviceArn,
+    associateCustomDomainResponse_customDomain,
+    associateCustomDomainResponse_vpcDNSTargets,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newAssociateCustomDomain' smart constructor.
+data AssociateCustomDomain = AssociateCustomDomain'
+  { -- | Set to @true@ to associate the subdomain @www.@/@DomainName@/@ @ with
+    -- the App Runner service in addition to the base domain.
+    --
+    -- Default: @true@
+    enableWWWSubdomain :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the App Runner service that you want
+    -- to associate a custom domain name with.
+    serviceArn :: Prelude.Text,
+    -- | A custom domain endpoint to associate. Specify a root domain (for
+    -- example, @example.com@), a subdomain (for example, @login.example.com@
+    -- or @admin.login.example.com@), or a wildcard (for example,
+    -- @*.example.com@).
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateCustomDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enableWWWSubdomain', 'associateCustomDomain_enableWWWSubdomain' - Set to @true@ to associate the subdomain @www.@/@DomainName@/@ @ with
+-- the App Runner service in addition to the base domain.
+--
+-- Default: @true@
+--
+-- 'serviceArn', 'associateCustomDomain_serviceArn' - The Amazon Resource Name (ARN) of the App Runner service that you want
+-- to associate a custom domain name with.
+--
+-- 'domainName', 'associateCustomDomain_domainName' - A custom domain endpoint to associate. Specify a root domain (for
+-- example, @example.com@), a subdomain (for example, @login.example.com@
+-- or @admin.login.example.com@), or a wildcard (for example,
+-- @*.example.com@).
+newAssociateCustomDomain ::
+  -- | 'serviceArn'
+  Prelude.Text ->
+  -- | 'domainName'
+  Prelude.Text ->
+  AssociateCustomDomain
+newAssociateCustomDomain pServiceArn_ pDomainName_ =
+  AssociateCustomDomain'
+    { enableWWWSubdomain =
+        Prelude.Nothing,
+      serviceArn = pServiceArn_,
+      domainName = pDomainName_
+    }
+
+-- | Set to @true@ to associate the subdomain @www.@/@DomainName@/@ @ with
+-- the App Runner service in addition to the base domain.
+--
+-- Default: @true@
+associateCustomDomain_enableWWWSubdomain :: Lens.Lens' AssociateCustomDomain (Prelude.Maybe Prelude.Bool)
+associateCustomDomain_enableWWWSubdomain = Lens.lens (\AssociateCustomDomain' {enableWWWSubdomain} -> enableWWWSubdomain) (\s@AssociateCustomDomain' {} a -> s {enableWWWSubdomain = a} :: AssociateCustomDomain)
+
+-- | The Amazon Resource Name (ARN) of the App Runner service that you want
+-- to associate a custom domain name with.
+associateCustomDomain_serviceArn :: Lens.Lens' AssociateCustomDomain Prelude.Text
+associateCustomDomain_serviceArn = Lens.lens (\AssociateCustomDomain' {serviceArn} -> serviceArn) (\s@AssociateCustomDomain' {} a -> s {serviceArn = a} :: AssociateCustomDomain)
+
+-- | A custom domain endpoint to associate. Specify a root domain (for
+-- example, @example.com@), a subdomain (for example, @login.example.com@
+-- or @admin.login.example.com@), or a wildcard (for example,
+-- @*.example.com@).
+associateCustomDomain_domainName :: Lens.Lens' AssociateCustomDomain Prelude.Text
+associateCustomDomain_domainName = Lens.lens (\AssociateCustomDomain' {domainName} -> domainName) (\s@AssociateCustomDomain' {} a -> s {domainName = a} :: AssociateCustomDomain)
+
+instance Core.AWSRequest AssociateCustomDomain where
+  type
+    AWSResponse AssociateCustomDomain =
+      AssociateCustomDomainResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AssociateCustomDomainResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "DNSTarget")
+            Prelude.<*> (x Data..:> "ServiceArn")
+            Prelude.<*> (x Data..:> "CustomDomain")
+            Prelude.<*> (x Data..?> "VpcDNSTargets" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable AssociateCustomDomain where
+  hashWithSalt _salt AssociateCustomDomain' {..} =
+    _salt
+      `Prelude.hashWithSalt` enableWWWSubdomain
+      `Prelude.hashWithSalt` serviceArn
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData AssociateCustomDomain where
+  rnf AssociateCustomDomain' {..} =
+    Prelude.rnf enableWWWSubdomain
+      `Prelude.seq` Prelude.rnf serviceArn
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders AssociateCustomDomain where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.AssociateCustomDomain" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateCustomDomain where
+  toJSON AssociateCustomDomain' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EnableWWWSubdomain" Data..=)
+              Prelude.<$> enableWWWSubdomain,
+            Prelude.Just ("ServiceArn" Data..= serviceArn),
+            Prelude.Just ("DomainName" Data..= domainName)
+          ]
+      )
+
+instance Data.ToPath AssociateCustomDomain where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateCustomDomain where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateCustomDomainResponse' smart constructor.
+data AssociateCustomDomainResponse = AssociateCustomDomainResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The App Runner subdomain of the App Runner service. The custom domain
+    -- name is mapped to this target name.
+    dNSTarget :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the App Runner service with which a
+    -- custom domain name is associated.
+    serviceArn :: Prelude.Text,
+    -- | A description of the domain name that\'s being associated.
+    customDomain :: CustomDomain,
+    -- | DNS Target records for the custom domains of this Amazon VPC.
+    vpcDNSTargets :: [VpcDNSTarget]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateCustomDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'associateCustomDomainResponse_httpStatus' - The response's http status code.
+--
+-- 'dNSTarget', 'associateCustomDomainResponse_dNSTarget' - The App Runner subdomain of the App Runner service. The custom domain
+-- name is mapped to this target name.
+--
+-- 'serviceArn', 'associateCustomDomainResponse_serviceArn' - The Amazon Resource Name (ARN) of the App Runner service with which a
+-- custom domain name is associated.
+--
+-- 'customDomain', 'associateCustomDomainResponse_customDomain' - A description of the domain name that\'s being associated.
+--
+-- 'vpcDNSTargets', 'associateCustomDomainResponse_vpcDNSTargets' - DNS Target records for the custom domains of this Amazon VPC.
+newAssociateCustomDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'dNSTarget'
+  Prelude.Text ->
+  -- | 'serviceArn'
+  Prelude.Text ->
+  -- | 'customDomain'
+  CustomDomain ->
+  AssociateCustomDomainResponse
+newAssociateCustomDomainResponse
+  pHttpStatus_
+  pDNSTarget_
+  pServiceArn_
+  pCustomDomain_ =
+    AssociateCustomDomainResponse'
+      { httpStatus =
+          pHttpStatus_,
+        dNSTarget = pDNSTarget_,
+        serviceArn = pServiceArn_,
+        customDomain = pCustomDomain_,
+        vpcDNSTargets = Prelude.mempty
+      }
+
+-- | The response's http status code.
+associateCustomDomainResponse_httpStatus :: Lens.Lens' AssociateCustomDomainResponse Prelude.Int
+associateCustomDomainResponse_httpStatus = Lens.lens (\AssociateCustomDomainResponse' {httpStatus} -> httpStatus) (\s@AssociateCustomDomainResponse' {} a -> s {httpStatus = a} :: AssociateCustomDomainResponse)
+
+-- | The App Runner subdomain of the App Runner service. The custom domain
+-- name is mapped to this target name.
+associateCustomDomainResponse_dNSTarget :: Lens.Lens' AssociateCustomDomainResponse Prelude.Text
+associateCustomDomainResponse_dNSTarget = Lens.lens (\AssociateCustomDomainResponse' {dNSTarget} -> dNSTarget) (\s@AssociateCustomDomainResponse' {} a -> s {dNSTarget = a} :: AssociateCustomDomainResponse)
+
+-- | The Amazon Resource Name (ARN) of the App Runner service with which a
+-- custom domain name is associated.
+associateCustomDomainResponse_serviceArn :: Lens.Lens' AssociateCustomDomainResponse Prelude.Text
+associateCustomDomainResponse_serviceArn = Lens.lens (\AssociateCustomDomainResponse' {serviceArn} -> serviceArn) (\s@AssociateCustomDomainResponse' {} a -> s {serviceArn = a} :: AssociateCustomDomainResponse)
+
+-- | A description of the domain name that\'s being associated.
+associateCustomDomainResponse_customDomain :: Lens.Lens' AssociateCustomDomainResponse CustomDomain
+associateCustomDomainResponse_customDomain = Lens.lens (\AssociateCustomDomainResponse' {customDomain} -> customDomain) (\s@AssociateCustomDomainResponse' {} a -> s {customDomain = a} :: AssociateCustomDomainResponse)
+
+-- | DNS Target records for the custom domains of this Amazon VPC.
+associateCustomDomainResponse_vpcDNSTargets :: Lens.Lens' AssociateCustomDomainResponse [VpcDNSTarget]
+associateCustomDomainResponse_vpcDNSTargets = Lens.lens (\AssociateCustomDomainResponse' {vpcDNSTargets} -> vpcDNSTargets) (\s@AssociateCustomDomainResponse' {} a -> s {vpcDNSTargets = a} :: AssociateCustomDomainResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData AssociateCustomDomainResponse where
+  rnf AssociateCustomDomainResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf dNSTarget
+      `Prelude.seq` Prelude.rnf serviceArn
+      `Prelude.seq` Prelude.rnf customDomain
+      `Prelude.seq` Prelude.rnf vpcDNSTargets
diff --git a/gen/Amazonka/AppRunner/CreateAutoScalingConfiguration.hs b/gen/Amazonka/AppRunner/CreateAutoScalingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/CreateAutoScalingConfiguration.hs
@@ -0,0 +1,371 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.CreateAutoScalingConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create an App Runner automatic scaling configuration resource. App
+-- Runner requires this resource when you create or update App Runner
+-- services and you require non-default auto scaling settings. You can
+-- share an auto scaling configuration across multiple services.
+--
+-- Create multiple revisions of a configuration by calling this action
+-- multiple times using the same @AutoScalingConfigurationName@. The call
+-- returns incremental @AutoScalingConfigurationRevision@ values. When you
+-- create a service and configure an auto scaling configuration resource,
+-- the service uses the latest active revision of the auto scaling
+-- configuration by default. You can optionally configure the service to
+-- use a specific revision.
+--
+-- Configure a higher @MinSize@ to increase the spread of your App Runner
+-- service over more Availability Zones in the Amazon Web Services Region.
+-- The tradeoff is a higher minimal cost.
+--
+-- Configure a lower @MaxSize@ to control your cost. The tradeoff is lower
+-- responsiveness during peak demand.
+module Amazonka.AppRunner.CreateAutoScalingConfiguration
+  ( -- * Creating a Request
+    CreateAutoScalingConfiguration (..),
+    newCreateAutoScalingConfiguration,
+
+    -- * Request Lenses
+    createAutoScalingConfiguration_maxConcurrency,
+    createAutoScalingConfiguration_maxSize,
+    createAutoScalingConfiguration_minSize,
+    createAutoScalingConfiguration_tags,
+    createAutoScalingConfiguration_autoScalingConfigurationName,
+
+    -- * Destructuring the Response
+    CreateAutoScalingConfigurationResponse (..),
+    newCreateAutoScalingConfigurationResponse,
+
+    -- * Response Lenses
+    createAutoScalingConfigurationResponse_httpStatus,
+    createAutoScalingConfigurationResponse_autoScalingConfiguration,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newCreateAutoScalingConfiguration' smart constructor.
+data CreateAutoScalingConfiguration = CreateAutoScalingConfiguration'
+  { -- | The maximum number of concurrent requests that you want an instance to
+    -- process. If the number of concurrent requests exceeds this limit, App
+    -- Runner scales up your service.
+    --
+    -- Default: @100@
+    maxConcurrency :: Prelude.Maybe Prelude.Natural,
+    -- | The maximum number of instances that your service scales up to. At most
+    -- @MaxSize@ instances actively serve traffic for your service.
+    --
+    -- Default: @25@
+    maxSize :: Prelude.Maybe Prelude.Natural,
+    -- | The minimum number of instances that App Runner provisions for your
+    -- service. The service always has at least @MinSize@ provisioned
+    -- instances. Some of them actively serve traffic. The rest of them
+    -- (provisioned and inactive instances) are a cost-effective compute
+    -- capacity reserve and are ready to be quickly activated. You pay for
+    -- memory usage of all the provisioned instances. You pay for CPU usage of
+    -- only the active subset.
+    --
+    -- App Runner temporarily doubles the number of provisioned instances
+    -- during deployments, to maintain the same capacity for both old and new
+    -- code.
+    --
+    -- Default: @1@
+    minSize :: Prelude.Maybe Prelude.Natural,
+    -- | A list of metadata items that you can associate with your auto scaling
+    -- configuration resource. A tag is a key-value pair.
+    tags :: Prelude.Maybe [Tag],
+    -- | A name for the auto scaling configuration. When you use it for the first
+    -- time in an Amazon Web Services Region, App Runner creates revision
+    -- number @1@ of this name. When you use the same name in subsequent calls,
+    -- App Runner creates incremental revisions of the configuration.
+    --
+    -- The name @DefaultConfiguration@ is reserved (it\'s the configuration
+    -- that App Runner uses if you don\'t provide a custome one). You can\'t
+    -- use it to create a new auto scaling configuration, and you can\'t create
+    -- a revision of it.
+    --
+    -- When you want to use your own auto scaling configuration for your App
+    -- Runner service, /create a configuration with a different name/, and then
+    -- provide it when you create or update your service.
+    autoScalingConfigurationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAutoScalingConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxConcurrency', 'createAutoScalingConfiguration_maxConcurrency' - The maximum number of concurrent requests that you want an instance to
+-- process. If the number of concurrent requests exceeds this limit, App
+-- Runner scales up your service.
+--
+-- Default: @100@
+--
+-- 'maxSize', 'createAutoScalingConfiguration_maxSize' - The maximum number of instances that your service scales up to. At most
+-- @MaxSize@ instances actively serve traffic for your service.
+--
+-- Default: @25@
+--
+-- 'minSize', 'createAutoScalingConfiguration_minSize' - The minimum number of instances that App Runner provisions for your
+-- service. The service always has at least @MinSize@ provisioned
+-- instances. Some of them actively serve traffic. The rest of them
+-- (provisioned and inactive instances) are a cost-effective compute
+-- capacity reserve and are ready to be quickly activated. You pay for
+-- memory usage of all the provisioned instances. You pay for CPU usage of
+-- only the active subset.
+--
+-- App Runner temporarily doubles the number of provisioned instances
+-- during deployments, to maintain the same capacity for both old and new
+-- code.
+--
+-- Default: @1@
+--
+-- 'tags', 'createAutoScalingConfiguration_tags' - A list of metadata items that you can associate with your auto scaling
+-- configuration resource. A tag is a key-value pair.
+--
+-- 'autoScalingConfigurationName', 'createAutoScalingConfiguration_autoScalingConfigurationName' - A name for the auto scaling configuration. When you use it for the first
+-- time in an Amazon Web Services Region, App Runner creates revision
+-- number @1@ of this name. When you use the same name in subsequent calls,
+-- App Runner creates incremental revisions of the configuration.
+--
+-- The name @DefaultConfiguration@ is reserved (it\'s the configuration
+-- that App Runner uses if you don\'t provide a custome one). You can\'t
+-- use it to create a new auto scaling configuration, and you can\'t create
+-- a revision of it.
+--
+-- When you want to use your own auto scaling configuration for your App
+-- Runner service, /create a configuration with a different name/, and then
+-- provide it when you create or update your service.
+newCreateAutoScalingConfiguration ::
+  -- | 'autoScalingConfigurationName'
+  Prelude.Text ->
+  CreateAutoScalingConfiguration
+newCreateAutoScalingConfiguration
+  pAutoScalingConfigurationName_ =
+    CreateAutoScalingConfiguration'
+      { maxConcurrency =
+          Prelude.Nothing,
+        maxSize = Prelude.Nothing,
+        minSize = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        autoScalingConfigurationName =
+          pAutoScalingConfigurationName_
+      }
+
+-- | The maximum number of concurrent requests that you want an instance to
+-- process. If the number of concurrent requests exceeds this limit, App
+-- Runner scales up your service.
+--
+-- Default: @100@
+createAutoScalingConfiguration_maxConcurrency :: Lens.Lens' CreateAutoScalingConfiguration (Prelude.Maybe Prelude.Natural)
+createAutoScalingConfiguration_maxConcurrency = Lens.lens (\CreateAutoScalingConfiguration' {maxConcurrency} -> maxConcurrency) (\s@CreateAutoScalingConfiguration' {} a -> s {maxConcurrency = a} :: CreateAutoScalingConfiguration)
+
+-- | The maximum number of instances that your service scales up to. At most
+-- @MaxSize@ instances actively serve traffic for your service.
+--
+-- Default: @25@
+createAutoScalingConfiguration_maxSize :: Lens.Lens' CreateAutoScalingConfiguration (Prelude.Maybe Prelude.Natural)
+createAutoScalingConfiguration_maxSize = Lens.lens (\CreateAutoScalingConfiguration' {maxSize} -> maxSize) (\s@CreateAutoScalingConfiguration' {} a -> s {maxSize = a} :: CreateAutoScalingConfiguration)
+
+-- | The minimum number of instances that App Runner provisions for your
+-- service. The service always has at least @MinSize@ provisioned
+-- instances. Some of them actively serve traffic. The rest of them
+-- (provisioned and inactive instances) are a cost-effective compute
+-- capacity reserve and are ready to be quickly activated. You pay for
+-- memory usage of all the provisioned instances. You pay for CPU usage of
+-- only the active subset.
+--
+-- App Runner temporarily doubles the number of provisioned instances
+-- during deployments, to maintain the same capacity for both old and new
+-- code.
+--
+-- Default: @1@
+createAutoScalingConfiguration_minSize :: Lens.Lens' CreateAutoScalingConfiguration (Prelude.Maybe Prelude.Natural)
+createAutoScalingConfiguration_minSize = Lens.lens (\CreateAutoScalingConfiguration' {minSize} -> minSize) (\s@CreateAutoScalingConfiguration' {} a -> s {minSize = a} :: CreateAutoScalingConfiguration)
+
+-- | A list of metadata items that you can associate with your auto scaling
+-- configuration resource. A tag is a key-value pair.
+createAutoScalingConfiguration_tags :: Lens.Lens' CreateAutoScalingConfiguration (Prelude.Maybe [Tag])
+createAutoScalingConfiguration_tags = Lens.lens (\CreateAutoScalingConfiguration' {tags} -> tags) (\s@CreateAutoScalingConfiguration' {} a -> s {tags = a} :: CreateAutoScalingConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A name for the auto scaling configuration. When you use it for the first
+-- time in an Amazon Web Services Region, App Runner creates revision
+-- number @1@ of this name. When you use the same name in subsequent calls,
+-- App Runner creates incremental revisions of the configuration.
+--
+-- The name @DefaultConfiguration@ is reserved (it\'s the configuration
+-- that App Runner uses if you don\'t provide a custome one). You can\'t
+-- use it to create a new auto scaling configuration, and you can\'t create
+-- a revision of it.
+--
+-- When you want to use your own auto scaling configuration for your App
+-- Runner service, /create a configuration with a different name/, and then
+-- provide it when you create or update your service.
+createAutoScalingConfiguration_autoScalingConfigurationName :: Lens.Lens' CreateAutoScalingConfiguration Prelude.Text
+createAutoScalingConfiguration_autoScalingConfigurationName = Lens.lens (\CreateAutoScalingConfiguration' {autoScalingConfigurationName} -> autoScalingConfigurationName) (\s@CreateAutoScalingConfiguration' {} a -> s {autoScalingConfigurationName = a} :: CreateAutoScalingConfiguration)
+
+instance
+  Core.AWSRequest
+    CreateAutoScalingConfiguration
+  where
+  type
+    AWSResponse CreateAutoScalingConfiguration =
+      CreateAutoScalingConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAutoScalingConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "AutoScalingConfiguration")
+      )
+
+instance
+  Prelude.Hashable
+    CreateAutoScalingConfiguration
+  where
+  hashWithSalt
+    _salt
+    CreateAutoScalingConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxConcurrency
+        `Prelude.hashWithSalt` maxSize
+        `Prelude.hashWithSalt` minSize
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` autoScalingConfigurationName
+
+instance
+  Prelude.NFData
+    CreateAutoScalingConfiguration
+  where
+  rnf CreateAutoScalingConfiguration' {..} =
+    Prelude.rnf maxConcurrency
+      `Prelude.seq` Prelude.rnf maxSize
+      `Prelude.seq` Prelude.rnf minSize
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf autoScalingConfigurationName
+
+instance
+  Data.ToHeaders
+    CreateAutoScalingConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.CreateAutoScalingConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAutoScalingConfiguration where
+  toJSON CreateAutoScalingConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxConcurrency" Data..=)
+              Prelude.<$> maxConcurrency,
+            ("MaxSize" Data..=) Prelude.<$> maxSize,
+            ("MinSize" Data..=) Prelude.<$> minSize,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ( "AutoScalingConfigurationName"
+                  Data..= autoScalingConfigurationName
+              )
+          ]
+      )
+
+instance Data.ToPath CreateAutoScalingConfiguration where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateAutoScalingConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAutoScalingConfigurationResponse' smart constructor.
+data CreateAutoScalingConfigurationResponse = CreateAutoScalingConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner auto scaling configuration that\'s
+    -- created by this request.
+    autoScalingConfiguration :: AutoScalingConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAutoScalingConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createAutoScalingConfigurationResponse_httpStatus' - The response's http status code.
+--
+-- 'autoScalingConfiguration', 'createAutoScalingConfigurationResponse_autoScalingConfiguration' - A description of the App Runner auto scaling configuration that\'s
+-- created by this request.
+newCreateAutoScalingConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'autoScalingConfiguration'
+  AutoScalingConfiguration ->
+  CreateAutoScalingConfigurationResponse
+newCreateAutoScalingConfigurationResponse
+  pHttpStatus_
+  pAutoScalingConfiguration_ =
+    CreateAutoScalingConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        autoScalingConfiguration =
+          pAutoScalingConfiguration_
+      }
+
+-- | The response's http status code.
+createAutoScalingConfigurationResponse_httpStatus :: Lens.Lens' CreateAutoScalingConfigurationResponse Prelude.Int
+createAutoScalingConfigurationResponse_httpStatus = Lens.lens (\CreateAutoScalingConfigurationResponse' {httpStatus} -> httpStatus) (\s@CreateAutoScalingConfigurationResponse' {} a -> s {httpStatus = a} :: CreateAutoScalingConfigurationResponse)
+
+-- | A description of the App Runner auto scaling configuration that\'s
+-- created by this request.
+createAutoScalingConfigurationResponse_autoScalingConfiguration :: Lens.Lens' CreateAutoScalingConfigurationResponse AutoScalingConfiguration
+createAutoScalingConfigurationResponse_autoScalingConfiguration = Lens.lens (\CreateAutoScalingConfigurationResponse' {autoScalingConfiguration} -> autoScalingConfiguration) (\s@CreateAutoScalingConfigurationResponse' {} a -> s {autoScalingConfiguration = a} :: CreateAutoScalingConfigurationResponse)
+
+instance
+  Prelude.NFData
+    CreateAutoScalingConfigurationResponse
+  where
+  rnf CreateAutoScalingConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf autoScalingConfiguration
diff --git a/gen/Amazonka/AppRunner/CreateConnection.hs b/gen/Amazonka/AppRunner/CreateConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/CreateConnection.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.CreateConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create an App Runner connection resource. App Runner requires a
+-- connection resource when you create App Runner services that access
+-- private repositories from certain third-party providers. You can share a
+-- connection across multiple services.
+--
+-- A connection resource is needed to access GitHub repositories. GitHub
+-- requires a user interface approval process through the App Runner
+-- console before you can use the connection.
+module Amazonka.AppRunner.CreateConnection
+  ( -- * Creating a Request
+    CreateConnection (..),
+    newCreateConnection,
+
+    -- * Request Lenses
+    createConnection_tags,
+    createConnection_connectionName,
+    createConnection_providerType,
+
+    -- * Destructuring the Response
+    CreateConnectionResponse (..),
+    newCreateConnectionResponse,
+
+    -- * Response Lenses
+    createConnectionResponse_httpStatus,
+    createConnectionResponse_connection,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newCreateConnection' smart constructor.
+data CreateConnection = CreateConnection'
+  { -- | A list of metadata items that you can associate with your connection
+    -- resource. A tag is a key-value pair.
+    tags :: Prelude.Maybe [Tag],
+    -- | A name for the new connection. It must be unique across all App Runner
+    -- connections for the Amazon Web Services account in the Amazon Web
+    -- Services Region.
+    connectionName :: Prelude.Text,
+    -- | The source repository provider.
+    providerType :: ProviderType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createConnection_tags' - A list of metadata items that you can associate with your connection
+-- resource. A tag is a key-value pair.
+--
+-- 'connectionName', 'createConnection_connectionName' - A name for the new connection. It must be unique across all App Runner
+-- connections for the Amazon Web Services account in the Amazon Web
+-- Services Region.
+--
+-- 'providerType', 'createConnection_providerType' - The source repository provider.
+newCreateConnection ::
+  -- | 'connectionName'
+  Prelude.Text ->
+  -- | 'providerType'
+  ProviderType ->
+  CreateConnection
+newCreateConnection pConnectionName_ pProviderType_ =
+  CreateConnection'
+    { tags = Prelude.Nothing,
+      connectionName = pConnectionName_,
+      providerType = pProviderType_
+    }
+
+-- | A list of metadata items that you can associate with your connection
+-- resource. A tag is a key-value pair.
+createConnection_tags :: Lens.Lens' CreateConnection (Prelude.Maybe [Tag])
+createConnection_tags = Lens.lens (\CreateConnection' {tags} -> tags) (\s@CreateConnection' {} a -> s {tags = a} :: CreateConnection) Prelude.. Lens.mapping Lens.coerced
+
+-- | A name for the new connection. It must be unique across all App Runner
+-- connections for the Amazon Web Services account in the Amazon Web
+-- Services Region.
+createConnection_connectionName :: Lens.Lens' CreateConnection Prelude.Text
+createConnection_connectionName = Lens.lens (\CreateConnection' {connectionName} -> connectionName) (\s@CreateConnection' {} a -> s {connectionName = a} :: CreateConnection)
+
+-- | The source repository provider.
+createConnection_providerType :: Lens.Lens' CreateConnection ProviderType
+createConnection_providerType = Lens.lens (\CreateConnection' {providerType} -> providerType) (\s@CreateConnection' {} a -> s {providerType = a} :: CreateConnection)
+
+instance Core.AWSRequest CreateConnection where
+  type
+    AWSResponse CreateConnection =
+      CreateConnectionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateConnectionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Connection")
+      )
+
+instance Prelude.Hashable CreateConnection where
+  hashWithSalt _salt CreateConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` connectionName
+      `Prelude.hashWithSalt` providerType
+
+instance Prelude.NFData CreateConnection where
+  rnf CreateConnection' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf connectionName
+      `Prelude.seq` Prelude.rnf providerType
+
+instance Data.ToHeaders CreateConnection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AppRunner.CreateConnection" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateConnection where
+  toJSON CreateConnection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("ConnectionName" Data..= connectionName),
+            Prelude.Just ("ProviderType" Data..= providerType)
+          ]
+      )
+
+instance Data.ToPath CreateConnection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateConnection where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateConnectionResponse' smart constructor.
+data CreateConnectionResponse = CreateConnectionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner connection that\'s created by this
+    -- request.
+    connection :: Connection
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateConnectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createConnectionResponse_httpStatus' - The response's http status code.
+--
+-- 'connection', 'createConnectionResponse_connection' - A description of the App Runner connection that\'s created by this
+-- request.
+newCreateConnectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'connection'
+  Connection ->
+  CreateConnectionResponse
+newCreateConnectionResponse pHttpStatus_ pConnection_ =
+  CreateConnectionResponse'
+    { httpStatus =
+        pHttpStatus_,
+      connection = pConnection_
+    }
+
+-- | The response's http status code.
+createConnectionResponse_httpStatus :: Lens.Lens' CreateConnectionResponse Prelude.Int
+createConnectionResponse_httpStatus = Lens.lens (\CreateConnectionResponse' {httpStatus} -> httpStatus) (\s@CreateConnectionResponse' {} a -> s {httpStatus = a} :: CreateConnectionResponse)
+
+-- | A description of the App Runner connection that\'s created by this
+-- request.
+createConnectionResponse_connection :: Lens.Lens' CreateConnectionResponse Connection
+createConnectionResponse_connection = Lens.lens (\CreateConnectionResponse' {connection} -> connection) (\s@CreateConnectionResponse' {} a -> s {connection = a} :: CreateConnectionResponse)
+
+instance Prelude.NFData CreateConnectionResponse where
+  rnf CreateConnectionResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf connection
diff --git a/gen/Amazonka/AppRunner/CreateObservabilityConfiguration.hs b/gen/Amazonka/AppRunner/CreateObservabilityConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/CreateObservabilityConfiguration.hs
@@ -0,0 +1,293 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.CreateObservabilityConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create an App Runner observability configuration resource. App Runner
+-- requires this resource when you create or update App Runner services and
+-- you want to enable non-default observability features. You can share an
+-- observability configuration across multiple services.
+--
+-- Create multiple revisions of a configuration by calling this action
+-- multiple times using the same @ObservabilityConfigurationName@. The call
+-- returns incremental @ObservabilityConfigurationRevision@ values. When
+-- you create a service and configure an observability configuration
+-- resource, the service uses the latest active revision of the
+-- observability configuration by default. You can optionally configure the
+-- service to use a specific revision.
+--
+-- The observability configuration resource is designed to configure
+-- multiple features (currently one feature, tracing). This action takes
+-- optional parameters that describe the configuration of these features
+-- (currently one parameter, @TraceConfiguration@). If you don\'t specify a
+-- feature parameter, App Runner doesn\'t enable the feature.
+module Amazonka.AppRunner.CreateObservabilityConfiguration
+  ( -- * Creating a Request
+    CreateObservabilityConfiguration (..),
+    newCreateObservabilityConfiguration,
+
+    -- * Request Lenses
+    createObservabilityConfiguration_tags,
+    createObservabilityConfiguration_traceConfiguration,
+    createObservabilityConfiguration_observabilityConfigurationName,
+
+    -- * Destructuring the Response
+    CreateObservabilityConfigurationResponse (..),
+    newCreateObservabilityConfigurationResponse,
+
+    -- * Response Lenses
+    createObservabilityConfigurationResponse_httpStatus,
+    createObservabilityConfigurationResponse_observabilityConfiguration,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newCreateObservabilityConfiguration' smart constructor.
+data CreateObservabilityConfiguration = CreateObservabilityConfiguration'
+  { -- | A list of metadata items that you can associate with your observability
+    -- configuration resource. A tag is a key-value pair.
+    tags :: Prelude.Maybe [Tag],
+    -- | The configuration of the tracing feature within this observability
+    -- configuration. If you don\'t specify it, App Runner doesn\'t enable
+    -- tracing.
+    traceConfiguration :: Prelude.Maybe TraceConfiguration,
+    -- | A name for the observability configuration. When you use it for the
+    -- first time in an Amazon Web Services Region, App Runner creates revision
+    -- number @1@ of this name. When you use the same name in subsequent calls,
+    -- App Runner creates incremental revisions of the configuration.
+    --
+    -- The name @DefaultConfiguration@ is reserved. You can\'t use it to create
+    -- a new observability configuration, and you can\'t create a revision of
+    -- it.
+    --
+    -- When you want to use your own observability configuration for your App
+    -- Runner service, /create a configuration with a different name/, and then
+    -- provide it when you create or update your service.
+    observabilityConfigurationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateObservabilityConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createObservabilityConfiguration_tags' - A list of metadata items that you can associate with your observability
+-- configuration resource. A tag is a key-value pair.
+--
+-- 'traceConfiguration', 'createObservabilityConfiguration_traceConfiguration' - The configuration of the tracing feature within this observability
+-- configuration. If you don\'t specify it, App Runner doesn\'t enable
+-- tracing.
+--
+-- 'observabilityConfigurationName', 'createObservabilityConfiguration_observabilityConfigurationName' - A name for the observability configuration. When you use it for the
+-- first time in an Amazon Web Services Region, App Runner creates revision
+-- number @1@ of this name. When you use the same name in subsequent calls,
+-- App Runner creates incremental revisions of the configuration.
+--
+-- The name @DefaultConfiguration@ is reserved. You can\'t use it to create
+-- a new observability configuration, and you can\'t create a revision of
+-- it.
+--
+-- When you want to use your own observability configuration for your App
+-- Runner service, /create a configuration with a different name/, and then
+-- provide it when you create or update your service.
+newCreateObservabilityConfiguration ::
+  -- | 'observabilityConfigurationName'
+  Prelude.Text ->
+  CreateObservabilityConfiguration
+newCreateObservabilityConfiguration
+  pObservabilityConfigurationName_ =
+    CreateObservabilityConfiguration'
+      { tags =
+          Prelude.Nothing,
+        traceConfiguration = Prelude.Nothing,
+        observabilityConfigurationName =
+          pObservabilityConfigurationName_
+      }
+
+-- | A list of metadata items that you can associate with your observability
+-- configuration resource. A tag is a key-value pair.
+createObservabilityConfiguration_tags :: Lens.Lens' CreateObservabilityConfiguration (Prelude.Maybe [Tag])
+createObservabilityConfiguration_tags = Lens.lens (\CreateObservabilityConfiguration' {tags} -> tags) (\s@CreateObservabilityConfiguration' {} a -> s {tags = a} :: CreateObservabilityConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The configuration of the tracing feature within this observability
+-- configuration. If you don\'t specify it, App Runner doesn\'t enable
+-- tracing.
+createObservabilityConfiguration_traceConfiguration :: Lens.Lens' CreateObservabilityConfiguration (Prelude.Maybe TraceConfiguration)
+createObservabilityConfiguration_traceConfiguration = Lens.lens (\CreateObservabilityConfiguration' {traceConfiguration} -> traceConfiguration) (\s@CreateObservabilityConfiguration' {} a -> s {traceConfiguration = a} :: CreateObservabilityConfiguration)
+
+-- | A name for the observability configuration. When you use it for the
+-- first time in an Amazon Web Services Region, App Runner creates revision
+-- number @1@ of this name. When you use the same name in subsequent calls,
+-- App Runner creates incremental revisions of the configuration.
+--
+-- The name @DefaultConfiguration@ is reserved. You can\'t use it to create
+-- a new observability configuration, and you can\'t create a revision of
+-- it.
+--
+-- When you want to use your own observability configuration for your App
+-- Runner service, /create a configuration with a different name/, and then
+-- provide it when you create or update your service.
+createObservabilityConfiguration_observabilityConfigurationName :: Lens.Lens' CreateObservabilityConfiguration Prelude.Text
+createObservabilityConfiguration_observabilityConfigurationName = Lens.lens (\CreateObservabilityConfiguration' {observabilityConfigurationName} -> observabilityConfigurationName) (\s@CreateObservabilityConfiguration' {} a -> s {observabilityConfigurationName = a} :: CreateObservabilityConfiguration)
+
+instance
+  Core.AWSRequest
+    CreateObservabilityConfiguration
+  where
+  type
+    AWSResponse CreateObservabilityConfiguration =
+      CreateObservabilityConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateObservabilityConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "ObservabilityConfiguration")
+      )
+
+instance
+  Prelude.Hashable
+    CreateObservabilityConfiguration
+  where
+  hashWithSalt
+    _salt
+    CreateObservabilityConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` traceConfiguration
+        `Prelude.hashWithSalt` observabilityConfigurationName
+
+instance
+  Prelude.NFData
+    CreateObservabilityConfiguration
+  where
+  rnf CreateObservabilityConfiguration' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf traceConfiguration
+      `Prelude.seq` Prelude.rnf observabilityConfigurationName
+
+instance
+  Data.ToHeaders
+    CreateObservabilityConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.CreateObservabilityConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateObservabilityConfiguration where
+  toJSON CreateObservabilityConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Tags" Data..=) Prelude.<$> tags,
+            ("TraceConfiguration" Data..=)
+              Prelude.<$> traceConfiguration,
+            Prelude.Just
+              ( "ObservabilityConfigurationName"
+                  Data..= observabilityConfigurationName
+              )
+          ]
+      )
+
+instance Data.ToPath CreateObservabilityConfiguration where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreateObservabilityConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateObservabilityConfigurationResponse' smart constructor.
+data CreateObservabilityConfigurationResponse = CreateObservabilityConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner observability configuration that\'s
+    -- created by this request.
+    observabilityConfiguration :: ObservabilityConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateObservabilityConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createObservabilityConfigurationResponse_httpStatus' - The response's http status code.
+--
+-- 'observabilityConfiguration', 'createObservabilityConfigurationResponse_observabilityConfiguration' - A description of the App Runner observability configuration that\'s
+-- created by this request.
+newCreateObservabilityConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'observabilityConfiguration'
+  ObservabilityConfiguration ->
+  CreateObservabilityConfigurationResponse
+newCreateObservabilityConfigurationResponse
+  pHttpStatus_
+  pObservabilityConfiguration_ =
+    CreateObservabilityConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        observabilityConfiguration =
+          pObservabilityConfiguration_
+      }
+
+-- | The response's http status code.
+createObservabilityConfigurationResponse_httpStatus :: Lens.Lens' CreateObservabilityConfigurationResponse Prelude.Int
+createObservabilityConfigurationResponse_httpStatus = Lens.lens (\CreateObservabilityConfigurationResponse' {httpStatus} -> httpStatus) (\s@CreateObservabilityConfigurationResponse' {} a -> s {httpStatus = a} :: CreateObservabilityConfigurationResponse)
+
+-- | A description of the App Runner observability configuration that\'s
+-- created by this request.
+createObservabilityConfigurationResponse_observabilityConfiguration :: Lens.Lens' CreateObservabilityConfigurationResponse ObservabilityConfiguration
+createObservabilityConfigurationResponse_observabilityConfiguration = Lens.lens (\CreateObservabilityConfigurationResponse' {observabilityConfiguration} -> observabilityConfiguration) (\s@CreateObservabilityConfigurationResponse' {} a -> s {observabilityConfiguration = a} :: CreateObservabilityConfigurationResponse)
+
+instance
+  Prelude.NFData
+    CreateObservabilityConfigurationResponse
+  where
+  rnf CreateObservabilityConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf observabilityConfiguration
diff --git a/gen/Amazonka/AppRunner/CreateService.hs b/gen/Amazonka/AppRunner/CreateService.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/CreateService.hs
@@ -0,0 +1,372 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.CreateService
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create an App Runner service. After the service is created, the action
+-- also automatically starts a deployment.
+--
+-- This is an asynchronous operation. On a successful call, you can use the
+-- returned @OperationId@ and the
+-- <https://docs.aws.amazon.com/apprunner/latest/api/API_ListOperations.html ListOperations>
+-- call to track the operation\'s progress.
+module Amazonka.AppRunner.CreateService
+  ( -- * Creating a Request
+    CreateService (..),
+    newCreateService,
+
+    -- * Request Lenses
+    createService_autoScalingConfigurationArn,
+    createService_encryptionConfiguration,
+    createService_healthCheckConfiguration,
+    createService_instanceConfiguration,
+    createService_networkConfiguration,
+    createService_observabilityConfiguration,
+    createService_tags,
+    createService_serviceName,
+    createService_sourceConfiguration,
+
+    -- * Destructuring the Response
+    CreateServiceResponse (..),
+    newCreateServiceResponse,
+
+    -- * Response Lenses
+    createServiceResponse_httpStatus,
+    createServiceResponse_service,
+    createServiceResponse_operationId,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newCreateService' smart constructor.
+data CreateService = CreateService'
+  { -- | The Amazon Resource Name (ARN) of an App Runner automatic scaling
+    -- configuration resource that you want to associate with your service. If
+    -- not provided, App Runner associates the latest revision of a default
+    -- auto scaling configuration.
+    --
+    -- Specify an ARN with a name and a revision number to associate that
+    -- revision. For example:
+    -- @arn:aws:apprunner:us-east-1:123456789012:autoscalingconfiguration\/high-availability\/3@
+    --
+    -- Specify just the name to associate the latest revision. For example:
+    -- @arn:aws:apprunner:us-east-1:123456789012:autoscalingconfiguration\/high-availability@
+    autoScalingConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | An optional custom encryption key that App Runner uses to encrypt the
+    -- copy of your source repository that it maintains and your service logs.
+    -- By default, App Runner uses an Amazon Web Services managed key.
+    encryptionConfiguration :: Prelude.Maybe EncryptionConfiguration,
+    -- | The settings for the health check that App Runner performs to monitor
+    -- the health of the App Runner service.
+    healthCheckConfiguration :: Prelude.Maybe HealthCheckConfiguration,
+    -- | The runtime configuration of instances (scaling units) of your service.
+    instanceConfiguration :: Prelude.Maybe InstanceConfiguration,
+    -- | Configuration settings related to network traffic of the web application
+    -- that the App Runner service runs.
+    networkConfiguration :: Prelude.Maybe NetworkConfiguration,
+    -- | The observability configuration of your service.
+    observabilityConfiguration :: Prelude.Maybe ServiceObservabilityConfiguration,
+    -- | An optional list of metadata items that you can associate with the App
+    -- Runner service resource. A tag is a key-value pair.
+    tags :: Prelude.Maybe [Tag],
+    -- | A name for the App Runner service. It must be unique across all the
+    -- running App Runner services in your Amazon Web Services account in the
+    -- Amazon Web Services Region.
+    serviceName :: Prelude.Text,
+    -- | The source to deploy to the App Runner service. It can be a code or an
+    -- image repository.
+    sourceConfiguration :: SourceConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateService' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoScalingConfigurationArn', 'createService_autoScalingConfigurationArn' - The Amazon Resource Name (ARN) of an App Runner automatic scaling
+-- configuration resource that you want to associate with your service. If
+-- not provided, App Runner associates the latest revision of a default
+-- auto scaling configuration.
+--
+-- Specify an ARN with a name and a revision number to associate that
+-- revision. For example:
+-- @arn:aws:apprunner:us-east-1:123456789012:autoscalingconfiguration\/high-availability\/3@
+--
+-- Specify just the name to associate the latest revision. For example:
+-- @arn:aws:apprunner:us-east-1:123456789012:autoscalingconfiguration\/high-availability@
+--
+-- 'encryptionConfiguration', 'createService_encryptionConfiguration' - An optional custom encryption key that App Runner uses to encrypt the
+-- copy of your source repository that it maintains and your service logs.
+-- By default, App Runner uses an Amazon Web Services managed key.
+--
+-- 'healthCheckConfiguration', 'createService_healthCheckConfiguration' - The settings for the health check that App Runner performs to monitor
+-- the health of the App Runner service.
+--
+-- 'instanceConfiguration', 'createService_instanceConfiguration' - The runtime configuration of instances (scaling units) of your service.
+--
+-- 'networkConfiguration', 'createService_networkConfiguration' - Configuration settings related to network traffic of the web application
+-- that the App Runner service runs.
+--
+-- 'observabilityConfiguration', 'createService_observabilityConfiguration' - The observability configuration of your service.
+--
+-- 'tags', 'createService_tags' - An optional list of metadata items that you can associate with the App
+-- Runner service resource. A tag is a key-value pair.
+--
+-- 'serviceName', 'createService_serviceName' - A name for the App Runner service. It must be unique across all the
+-- running App Runner services in your Amazon Web Services account in the
+-- Amazon Web Services Region.
+--
+-- 'sourceConfiguration', 'createService_sourceConfiguration' - The source to deploy to the App Runner service. It can be a code or an
+-- image repository.
+newCreateService ::
+  -- | 'serviceName'
+  Prelude.Text ->
+  -- | 'sourceConfiguration'
+  SourceConfiguration ->
+  CreateService
+newCreateService pServiceName_ pSourceConfiguration_ =
+  CreateService'
+    { autoScalingConfigurationArn =
+        Prelude.Nothing,
+      encryptionConfiguration = Prelude.Nothing,
+      healthCheckConfiguration = Prelude.Nothing,
+      instanceConfiguration = Prelude.Nothing,
+      networkConfiguration = Prelude.Nothing,
+      observabilityConfiguration = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      serviceName = pServiceName_,
+      sourceConfiguration = pSourceConfiguration_
+    }
+
+-- | The Amazon Resource Name (ARN) of an App Runner automatic scaling
+-- configuration resource that you want to associate with your service. If
+-- not provided, App Runner associates the latest revision of a default
+-- auto scaling configuration.
+--
+-- Specify an ARN with a name and a revision number to associate that
+-- revision. For example:
+-- @arn:aws:apprunner:us-east-1:123456789012:autoscalingconfiguration\/high-availability\/3@
+--
+-- Specify just the name to associate the latest revision. For example:
+-- @arn:aws:apprunner:us-east-1:123456789012:autoscalingconfiguration\/high-availability@
+createService_autoScalingConfigurationArn :: Lens.Lens' CreateService (Prelude.Maybe Prelude.Text)
+createService_autoScalingConfigurationArn = Lens.lens (\CreateService' {autoScalingConfigurationArn} -> autoScalingConfigurationArn) (\s@CreateService' {} a -> s {autoScalingConfigurationArn = a} :: CreateService)
+
+-- | An optional custom encryption key that App Runner uses to encrypt the
+-- copy of your source repository that it maintains and your service logs.
+-- By default, App Runner uses an Amazon Web Services managed key.
+createService_encryptionConfiguration :: Lens.Lens' CreateService (Prelude.Maybe EncryptionConfiguration)
+createService_encryptionConfiguration = Lens.lens (\CreateService' {encryptionConfiguration} -> encryptionConfiguration) (\s@CreateService' {} a -> s {encryptionConfiguration = a} :: CreateService)
+
+-- | The settings for the health check that App Runner performs to monitor
+-- the health of the App Runner service.
+createService_healthCheckConfiguration :: Lens.Lens' CreateService (Prelude.Maybe HealthCheckConfiguration)
+createService_healthCheckConfiguration = Lens.lens (\CreateService' {healthCheckConfiguration} -> healthCheckConfiguration) (\s@CreateService' {} a -> s {healthCheckConfiguration = a} :: CreateService)
+
+-- | The runtime configuration of instances (scaling units) of your service.
+createService_instanceConfiguration :: Lens.Lens' CreateService (Prelude.Maybe InstanceConfiguration)
+createService_instanceConfiguration = Lens.lens (\CreateService' {instanceConfiguration} -> instanceConfiguration) (\s@CreateService' {} a -> s {instanceConfiguration = a} :: CreateService)
+
+-- | Configuration settings related to network traffic of the web application
+-- that the App Runner service runs.
+createService_networkConfiguration :: Lens.Lens' CreateService (Prelude.Maybe NetworkConfiguration)
+createService_networkConfiguration = Lens.lens (\CreateService' {networkConfiguration} -> networkConfiguration) (\s@CreateService' {} a -> s {networkConfiguration = a} :: CreateService)
+
+-- | The observability configuration of your service.
+createService_observabilityConfiguration :: Lens.Lens' CreateService (Prelude.Maybe ServiceObservabilityConfiguration)
+createService_observabilityConfiguration = Lens.lens (\CreateService' {observabilityConfiguration} -> observabilityConfiguration) (\s@CreateService' {} a -> s {observabilityConfiguration = a} :: CreateService)
+
+-- | An optional list of metadata items that you can associate with the App
+-- Runner service resource. A tag is a key-value pair.
+createService_tags :: Lens.Lens' CreateService (Prelude.Maybe [Tag])
+createService_tags = Lens.lens (\CreateService' {tags} -> tags) (\s@CreateService' {} a -> s {tags = a} :: CreateService) Prelude.. Lens.mapping Lens.coerced
+
+-- | A name for the App Runner service. It must be unique across all the
+-- running App Runner services in your Amazon Web Services account in the
+-- Amazon Web Services Region.
+createService_serviceName :: Lens.Lens' CreateService Prelude.Text
+createService_serviceName = Lens.lens (\CreateService' {serviceName} -> serviceName) (\s@CreateService' {} a -> s {serviceName = a} :: CreateService)
+
+-- | The source to deploy to the App Runner service. It can be a code or an
+-- image repository.
+createService_sourceConfiguration :: Lens.Lens' CreateService SourceConfiguration
+createService_sourceConfiguration = Lens.lens (\CreateService' {sourceConfiguration} -> sourceConfiguration) (\s@CreateService' {} a -> s {sourceConfiguration = a} :: CreateService)
+
+instance Core.AWSRequest CreateService where
+  type
+    AWSResponse CreateService =
+      CreateServiceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateServiceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Service")
+            Prelude.<*> (x Data..:> "OperationId")
+      )
+
+instance Prelude.Hashable CreateService where
+  hashWithSalt _salt CreateService' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoScalingConfigurationArn
+      `Prelude.hashWithSalt` encryptionConfiguration
+      `Prelude.hashWithSalt` healthCheckConfiguration
+      `Prelude.hashWithSalt` instanceConfiguration
+      `Prelude.hashWithSalt` networkConfiguration
+      `Prelude.hashWithSalt` observabilityConfiguration
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` serviceName
+      `Prelude.hashWithSalt` sourceConfiguration
+
+instance Prelude.NFData CreateService where
+  rnf CreateService' {..} =
+    Prelude.rnf autoScalingConfigurationArn
+      `Prelude.seq` Prelude.rnf encryptionConfiguration
+      `Prelude.seq` Prelude.rnf healthCheckConfiguration
+      `Prelude.seq` Prelude.rnf instanceConfiguration
+      `Prelude.seq` Prelude.rnf networkConfiguration
+      `Prelude.seq` Prelude.rnf observabilityConfiguration
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf serviceName
+      `Prelude.seq` Prelude.rnf sourceConfiguration
+
+instance Data.ToHeaders CreateService where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AppRunner.CreateService" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateService where
+  toJSON CreateService' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AutoScalingConfigurationArn" Data..=)
+              Prelude.<$> autoScalingConfigurationArn,
+            ("EncryptionConfiguration" Data..=)
+              Prelude.<$> encryptionConfiguration,
+            ("HealthCheckConfiguration" Data..=)
+              Prelude.<$> healthCheckConfiguration,
+            ("InstanceConfiguration" Data..=)
+              Prelude.<$> instanceConfiguration,
+            ("NetworkConfiguration" Data..=)
+              Prelude.<$> networkConfiguration,
+            ("ObservabilityConfiguration" Data..=)
+              Prelude.<$> observabilityConfiguration,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("ServiceName" Data..= serviceName),
+            Prelude.Just
+              ("SourceConfiguration" Data..= sourceConfiguration)
+          ]
+      )
+
+instance Data.ToPath CreateService where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateService where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateServiceResponse' smart constructor.
+data CreateServiceResponse = CreateServiceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner service that\'s created by this request.
+    service :: Service,
+    -- | The unique ID of the asynchronous operation that this request started.
+    -- You can use it combined with the
+    -- <https://docs.aws.amazon.com/apprunner/latest/api/API_ListOperations.html ListOperations>
+    -- call to track the operation\'s progress.
+    operationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateServiceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createServiceResponse_httpStatus' - The response's http status code.
+--
+-- 'service', 'createServiceResponse_service' - A description of the App Runner service that\'s created by this request.
+--
+-- 'operationId', 'createServiceResponse_operationId' - The unique ID of the asynchronous operation that this request started.
+-- You can use it combined with the
+-- <https://docs.aws.amazon.com/apprunner/latest/api/API_ListOperations.html ListOperations>
+-- call to track the operation\'s progress.
+newCreateServiceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'service'
+  Service ->
+  -- | 'operationId'
+  Prelude.Text ->
+  CreateServiceResponse
+newCreateServiceResponse
+  pHttpStatus_
+  pService_
+  pOperationId_ =
+    CreateServiceResponse'
+      { httpStatus = pHttpStatus_,
+        service = pService_,
+        operationId = pOperationId_
+      }
+
+-- | The response's http status code.
+createServiceResponse_httpStatus :: Lens.Lens' CreateServiceResponse Prelude.Int
+createServiceResponse_httpStatus = Lens.lens (\CreateServiceResponse' {httpStatus} -> httpStatus) (\s@CreateServiceResponse' {} a -> s {httpStatus = a} :: CreateServiceResponse)
+
+-- | A description of the App Runner service that\'s created by this request.
+createServiceResponse_service :: Lens.Lens' CreateServiceResponse Service
+createServiceResponse_service = Lens.lens (\CreateServiceResponse' {service} -> service) (\s@CreateServiceResponse' {} a -> s {service = a} :: CreateServiceResponse)
+
+-- | The unique ID of the asynchronous operation that this request started.
+-- You can use it combined with the
+-- <https://docs.aws.amazon.com/apprunner/latest/api/API_ListOperations.html ListOperations>
+-- call to track the operation\'s progress.
+createServiceResponse_operationId :: Lens.Lens' CreateServiceResponse Prelude.Text
+createServiceResponse_operationId = Lens.lens (\CreateServiceResponse' {operationId} -> operationId) (\s@CreateServiceResponse' {} a -> s {operationId = a} :: CreateServiceResponse)
+
+instance Prelude.NFData CreateServiceResponse where
+  rnf CreateServiceResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf service
+      `Prelude.seq` Prelude.rnf operationId
diff --git a/gen/Amazonka/AppRunner/CreateVpcConnector.hs b/gen/Amazonka/AppRunner/CreateVpcConnector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/CreateVpcConnector.hs
@@ -0,0 +1,251 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.CreateVpcConnector
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create an App Runner VPC connector resource. App Runner requires this
+-- resource when you want to associate your App Runner service to a custom
+-- Amazon Virtual Private Cloud (Amazon VPC).
+module Amazonka.AppRunner.CreateVpcConnector
+  ( -- * Creating a Request
+    CreateVpcConnector (..),
+    newCreateVpcConnector,
+
+    -- * Request Lenses
+    createVpcConnector_securityGroups,
+    createVpcConnector_tags,
+    createVpcConnector_vpcConnectorName,
+    createVpcConnector_subnets,
+
+    -- * Destructuring the Response
+    CreateVpcConnectorResponse (..),
+    newCreateVpcConnectorResponse,
+
+    -- * Response Lenses
+    createVpcConnectorResponse_httpStatus,
+    createVpcConnectorResponse_vpcConnector,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newCreateVpcConnector' smart constructor.
+data CreateVpcConnector = CreateVpcConnector'
+  { -- | A list of IDs of security groups that App Runner should use for access
+    -- to Amazon Web Services resources under the specified subnets. If not
+    -- specified, App Runner uses the default security group of the Amazon VPC.
+    -- The default security group allows all outbound traffic.
+    securityGroups :: Prelude.Maybe [Prelude.Text],
+    -- | A list of metadata items that you can associate with your VPC connector
+    -- resource. A tag is a key-value pair.
+    tags :: Prelude.Maybe [Tag],
+    -- | A name for the VPC connector.
+    vpcConnectorName :: Prelude.Text,
+    -- | A list of IDs of subnets that App Runner should use when it associates
+    -- your service with a custom Amazon VPC. Specify IDs of subnets of a
+    -- single Amazon VPC. App Runner determines the Amazon VPC from the subnets
+    -- you specify.
+    --
+    -- App Runner currently only provides support for IPv4.
+    subnets :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcConnector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'securityGroups', 'createVpcConnector_securityGroups' - A list of IDs of security groups that App Runner should use for access
+-- to Amazon Web Services resources under the specified subnets. If not
+-- specified, App Runner uses the default security group of the Amazon VPC.
+-- The default security group allows all outbound traffic.
+--
+-- 'tags', 'createVpcConnector_tags' - A list of metadata items that you can associate with your VPC connector
+-- resource. A tag is a key-value pair.
+--
+-- 'vpcConnectorName', 'createVpcConnector_vpcConnectorName' - A name for the VPC connector.
+--
+-- 'subnets', 'createVpcConnector_subnets' - A list of IDs of subnets that App Runner should use when it associates
+-- your service with a custom Amazon VPC. Specify IDs of subnets of a
+-- single Amazon VPC. App Runner determines the Amazon VPC from the subnets
+-- you specify.
+--
+-- App Runner currently only provides support for IPv4.
+newCreateVpcConnector ::
+  -- | 'vpcConnectorName'
+  Prelude.Text ->
+  CreateVpcConnector
+newCreateVpcConnector pVpcConnectorName_ =
+  CreateVpcConnector'
+    { securityGroups =
+        Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcConnectorName = pVpcConnectorName_,
+      subnets = Prelude.mempty
+    }
+
+-- | A list of IDs of security groups that App Runner should use for access
+-- to Amazon Web Services resources under the specified subnets. If not
+-- specified, App Runner uses the default security group of the Amazon VPC.
+-- The default security group allows all outbound traffic.
+createVpcConnector_securityGroups :: Lens.Lens' CreateVpcConnector (Prelude.Maybe [Prelude.Text])
+createVpcConnector_securityGroups = Lens.lens (\CreateVpcConnector' {securityGroups} -> securityGroups) (\s@CreateVpcConnector' {} a -> s {securityGroups = a} :: CreateVpcConnector) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of metadata items that you can associate with your VPC connector
+-- resource. A tag is a key-value pair.
+createVpcConnector_tags :: Lens.Lens' CreateVpcConnector (Prelude.Maybe [Tag])
+createVpcConnector_tags = Lens.lens (\CreateVpcConnector' {tags} -> tags) (\s@CreateVpcConnector' {} a -> s {tags = a} :: CreateVpcConnector) Prelude.. Lens.mapping Lens.coerced
+
+-- | A name for the VPC connector.
+createVpcConnector_vpcConnectorName :: Lens.Lens' CreateVpcConnector Prelude.Text
+createVpcConnector_vpcConnectorName = Lens.lens (\CreateVpcConnector' {vpcConnectorName} -> vpcConnectorName) (\s@CreateVpcConnector' {} a -> s {vpcConnectorName = a} :: CreateVpcConnector)
+
+-- | A list of IDs of subnets that App Runner should use when it associates
+-- your service with a custom Amazon VPC. Specify IDs of subnets of a
+-- single Amazon VPC. App Runner determines the Amazon VPC from the subnets
+-- you specify.
+--
+-- App Runner currently only provides support for IPv4.
+createVpcConnector_subnets :: Lens.Lens' CreateVpcConnector [Prelude.Text]
+createVpcConnector_subnets = Lens.lens (\CreateVpcConnector' {subnets} -> subnets) (\s@CreateVpcConnector' {} a -> s {subnets = a} :: CreateVpcConnector) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateVpcConnector where
+  type
+    AWSResponse CreateVpcConnector =
+      CreateVpcConnectorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateVpcConnectorResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "VpcConnector")
+      )
+
+instance Prelude.Hashable CreateVpcConnector where
+  hashWithSalt _salt CreateVpcConnector' {..} =
+    _salt
+      `Prelude.hashWithSalt` securityGroups
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcConnectorName
+      `Prelude.hashWithSalt` subnets
+
+instance Prelude.NFData CreateVpcConnector where
+  rnf CreateVpcConnector' {..} =
+    Prelude.rnf securityGroups
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcConnectorName
+      `Prelude.seq` Prelude.rnf subnets
+
+instance Data.ToHeaders CreateVpcConnector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.CreateVpcConnector" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateVpcConnector where
+  toJSON CreateVpcConnector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SecurityGroups" Data..=)
+              Prelude.<$> securityGroups,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("VpcConnectorName" Data..= vpcConnectorName),
+            Prelude.Just ("Subnets" Data..= subnets)
+          ]
+      )
+
+instance Data.ToPath CreateVpcConnector where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateVpcConnector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateVpcConnectorResponse' smart constructor.
+data CreateVpcConnectorResponse = CreateVpcConnectorResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner VPC connector that\'s created by this
+    -- request.
+    vpcConnector :: VpcConnector
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcConnectorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createVpcConnectorResponse_httpStatus' - The response's http status code.
+--
+-- 'vpcConnector', 'createVpcConnectorResponse_vpcConnector' - A description of the App Runner VPC connector that\'s created by this
+-- request.
+newCreateVpcConnectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'vpcConnector'
+  VpcConnector ->
+  CreateVpcConnectorResponse
+newCreateVpcConnectorResponse
+  pHttpStatus_
+  pVpcConnector_ =
+    CreateVpcConnectorResponse'
+      { httpStatus =
+          pHttpStatus_,
+        vpcConnector = pVpcConnector_
+      }
+
+-- | The response's http status code.
+createVpcConnectorResponse_httpStatus :: Lens.Lens' CreateVpcConnectorResponse Prelude.Int
+createVpcConnectorResponse_httpStatus = Lens.lens (\CreateVpcConnectorResponse' {httpStatus} -> httpStatus) (\s@CreateVpcConnectorResponse' {} a -> s {httpStatus = a} :: CreateVpcConnectorResponse)
+
+-- | A description of the App Runner VPC connector that\'s created by this
+-- request.
+createVpcConnectorResponse_vpcConnector :: Lens.Lens' CreateVpcConnectorResponse VpcConnector
+createVpcConnectorResponse_vpcConnector = Lens.lens (\CreateVpcConnectorResponse' {vpcConnector} -> vpcConnector) (\s@CreateVpcConnectorResponse' {} a -> s {vpcConnector = a} :: CreateVpcConnectorResponse)
+
+instance Prelude.NFData CreateVpcConnectorResponse where
+  rnf CreateVpcConnectorResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf vpcConnector
diff --git a/gen/Amazonka/AppRunner/CreateVpcIngressConnection.hs b/gen/Amazonka/AppRunner/CreateVpcIngressConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/CreateVpcIngressConnection.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.CreateVpcIngressConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create an App Runner VPC Ingress Connection resource. App Runner
+-- requires this resource when you want to associate your App Runner
+-- service with an Amazon VPC endpoint.
+module Amazonka.AppRunner.CreateVpcIngressConnection
+  ( -- * Creating a Request
+    CreateVpcIngressConnection (..),
+    newCreateVpcIngressConnection,
+
+    -- * Request Lenses
+    createVpcIngressConnection_tags,
+    createVpcIngressConnection_serviceArn,
+    createVpcIngressConnection_vpcIngressConnectionName,
+    createVpcIngressConnection_ingressVpcConfiguration,
+
+    -- * Destructuring the Response
+    CreateVpcIngressConnectionResponse (..),
+    newCreateVpcIngressConnectionResponse,
+
+    -- * Response Lenses
+    createVpcIngressConnectionResponse_httpStatus,
+    createVpcIngressConnectionResponse_vpcIngressConnection,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newCreateVpcIngressConnection' smart constructor.
+data CreateVpcIngressConnection = CreateVpcIngressConnection'
+  { -- | An optional list of metadata items that you can associate with the VPC
+    -- Ingress Connection resource. A tag is a key-value pair.
+    tags :: Prelude.Maybe [Tag],
+    -- | The Amazon Resource Name (ARN) for this App Runner service that is used
+    -- to create the VPC Ingress Connection resource.
+    serviceArn :: Prelude.Text,
+    -- | A name for the VPC Ingress Connection resource. It must be unique across
+    -- all the active VPC Ingress Connections in your Amazon Web Services
+    -- account in the Amazon Web Services Region.
+    vpcIngressConnectionName :: Prelude.Text,
+    -- | Specifications for the customer’s Amazon VPC and the related Amazon Web
+    -- Services PrivateLink VPC endpoint that are used to create the VPC
+    -- Ingress Connection resource.
+    ingressVpcConfiguration :: IngressVpcConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcIngressConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createVpcIngressConnection_tags' - An optional list of metadata items that you can associate with the VPC
+-- Ingress Connection resource. A tag is a key-value pair.
+--
+-- 'serviceArn', 'createVpcIngressConnection_serviceArn' - The Amazon Resource Name (ARN) for this App Runner service that is used
+-- to create the VPC Ingress Connection resource.
+--
+-- 'vpcIngressConnectionName', 'createVpcIngressConnection_vpcIngressConnectionName' - A name for the VPC Ingress Connection resource. It must be unique across
+-- all the active VPC Ingress Connections in your Amazon Web Services
+-- account in the Amazon Web Services Region.
+--
+-- 'ingressVpcConfiguration', 'createVpcIngressConnection_ingressVpcConfiguration' - Specifications for the customer’s Amazon VPC and the related Amazon Web
+-- Services PrivateLink VPC endpoint that are used to create the VPC
+-- Ingress Connection resource.
+newCreateVpcIngressConnection ::
+  -- | 'serviceArn'
+  Prelude.Text ->
+  -- | 'vpcIngressConnectionName'
+  Prelude.Text ->
+  -- | 'ingressVpcConfiguration'
+  IngressVpcConfiguration ->
+  CreateVpcIngressConnection
+newCreateVpcIngressConnection
+  pServiceArn_
+  pVpcIngressConnectionName_
+  pIngressVpcConfiguration_ =
+    CreateVpcIngressConnection'
+      { tags = Prelude.Nothing,
+        serviceArn = pServiceArn_,
+        vpcIngressConnectionName =
+          pVpcIngressConnectionName_,
+        ingressVpcConfiguration =
+          pIngressVpcConfiguration_
+      }
+
+-- | An optional list of metadata items that you can associate with the VPC
+-- Ingress Connection resource. A tag is a key-value pair.
+createVpcIngressConnection_tags :: Lens.Lens' CreateVpcIngressConnection (Prelude.Maybe [Tag])
+createVpcIngressConnection_tags = Lens.lens (\CreateVpcIngressConnection' {tags} -> tags) (\s@CreateVpcIngressConnection' {} a -> s {tags = a} :: CreateVpcIngressConnection) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) for this App Runner service that is used
+-- to create the VPC Ingress Connection resource.
+createVpcIngressConnection_serviceArn :: Lens.Lens' CreateVpcIngressConnection Prelude.Text
+createVpcIngressConnection_serviceArn = Lens.lens (\CreateVpcIngressConnection' {serviceArn} -> serviceArn) (\s@CreateVpcIngressConnection' {} a -> s {serviceArn = a} :: CreateVpcIngressConnection)
+
+-- | A name for the VPC Ingress Connection resource. It must be unique across
+-- all the active VPC Ingress Connections in your Amazon Web Services
+-- account in the Amazon Web Services Region.
+createVpcIngressConnection_vpcIngressConnectionName :: Lens.Lens' CreateVpcIngressConnection Prelude.Text
+createVpcIngressConnection_vpcIngressConnectionName = Lens.lens (\CreateVpcIngressConnection' {vpcIngressConnectionName} -> vpcIngressConnectionName) (\s@CreateVpcIngressConnection' {} a -> s {vpcIngressConnectionName = a} :: CreateVpcIngressConnection)
+
+-- | Specifications for the customer’s Amazon VPC and the related Amazon Web
+-- Services PrivateLink VPC endpoint that are used to create the VPC
+-- Ingress Connection resource.
+createVpcIngressConnection_ingressVpcConfiguration :: Lens.Lens' CreateVpcIngressConnection IngressVpcConfiguration
+createVpcIngressConnection_ingressVpcConfiguration = Lens.lens (\CreateVpcIngressConnection' {ingressVpcConfiguration} -> ingressVpcConfiguration) (\s@CreateVpcIngressConnection' {} a -> s {ingressVpcConfiguration = a} :: CreateVpcIngressConnection)
+
+instance Core.AWSRequest CreateVpcIngressConnection where
+  type
+    AWSResponse CreateVpcIngressConnection =
+      CreateVpcIngressConnectionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateVpcIngressConnectionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "VpcIngressConnection")
+      )
+
+instance Prelude.Hashable CreateVpcIngressConnection where
+  hashWithSalt _salt CreateVpcIngressConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` serviceArn
+      `Prelude.hashWithSalt` vpcIngressConnectionName
+      `Prelude.hashWithSalt` ingressVpcConfiguration
+
+instance Prelude.NFData CreateVpcIngressConnection where
+  rnf CreateVpcIngressConnection' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf serviceArn
+      `Prelude.seq` Prelude.rnf vpcIngressConnectionName
+      `Prelude.seq` Prelude.rnf ingressVpcConfiguration
+
+instance Data.ToHeaders CreateVpcIngressConnection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.CreateVpcIngressConnection" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateVpcIngressConnection where
+  toJSON CreateVpcIngressConnection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("ServiceArn" Data..= serviceArn),
+            Prelude.Just
+              ( "VpcIngressConnectionName"
+                  Data..= vpcIngressConnectionName
+              ),
+            Prelude.Just
+              ( "IngressVpcConfiguration"
+                  Data..= ingressVpcConfiguration
+              )
+          ]
+      )
+
+instance Data.ToPath CreateVpcIngressConnection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateVpcIngressConnection where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateVpcIngressConnectionResponse' smart constructor.
+data CreateVpcIngressConnectionResponse = CreateVpcIngressConnectionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner VPC Ingress Connection resource that\'s
+    -- created by this request.
+    vpcIngressConnection :: VpcIngressConnection
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcIngressConnectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createVpcIngressConnectionResponse_httpStatus' - The response's http status code.
+--
+-- 'vpcIngressConnection', 'createVpcIngressConnectionResponse_vpcIngressConnection' - A description of the App Runner VPC Ingress Connection resource that\'s
+-- created by this request.
+newCreateVpcIngressConnectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'vpcIngressConnection'
+  VpcIngressConnection ->
+  CreateVpcIngressConnectionResponse
+newCreateVpcIngressConnectionResponse
+  pHttpStatus_
+  pVpcIngressConnection_ =
+    CreateVpcIngressConnectionResponse'
+      { httpStatus =
+          pHttpStatus_,
+        vpcIngressConnection =
+          pVpcIngressConnection_
+      }
+
+-- | The response's http status code.
+createVpcIngressConnectionResponse_httpStatus :: Lens.Lens' CreateVpcIngressConnectionResponse Prelude.Int
+createVpcIngressConnectionResponse_httpStatus = Lens.lens (\CreateVpcIngressConnectionResponse' {httpStatus} -> httpStatus) (\s@CreateVpcIngressConnectionResponse' {} a -> s {httpStatus = a} :: CreateVpcIngressConnectionResponse)
+
+-- | A description of the App Runner VPC Ingress Connection resource that\'s
+-- created by this request.
+createVpcIngressConnectionResponse_vpcIngressConnection :: Lens.Lens' CreateVpcIngressConnectionResponse VpcIngressConnection
+createVpcIngressConnectionResponse_vpcIngressConnection = Lens.lens (\CreateVpcIngressConnectionResponse' {vpcIngressConnection} -> vpcIngressConnection) (\s@CreateVpcIngressConnectionResponse' {} a -> s {vpcIngressConnection = a} :: CreateVpcIngressConnectionResponse)
+
+instance
+  Prelude.NFData
+    CreateVpcIngressConnectionResponse
+  where
+  rnf CreateVpcIngressConnectionResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf vpcIngressConnection
diff --git a/gen/Amazonka/AppRunner/DeleteAutoScalingConfiguration.hs b/gen/Amazonka/AppRunner/DeleteAutoScalingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/DeleteAutoScalingConfiguration.hs
@@ -0,0 +1,223 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.DeleteAutoScalingConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an App Runner automatic scaling configuration resource. You can
+-- delete a specific revision or the latest active revision. You can\'t
+-- delete a configuration that\'s used by one or more App Runner services.
+module Amazonka.AppRunner.DeleteAutoScalingConfiguration
+  ( -- * Creating a Request
+    DeleteAutoScalingConfiguration (..),
+    newDeleteAutoScalingConfiguration,
+
+    -- * Request Lenses
+    deleteAutoScalingConfiguration_autoScalingConfigurationArn,
+
+    -- * Destructuring the Response
+    DeleteAutoScalingConfigurationResponse (..),
+    newDeleteAutoScalingConfigurationResponse,
+
+    -- * Response Lenses
+    deleteAutoScalingConfigurationResponse_httpStatus,
+    deleteAutoScalingConfigurationResponse_autoScalingConfiguration,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newDeleteAutoScalingConfiguration' smart constructor.
+data DeleteAutoScalingConfiguration = DeleteAutoScalingConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the App Runner auto scaling
+    -- configuration that you want to delete.
+    --
+    -- The ARN can be a full auto scaling configuration ARN, or a partial ARN
+    -- ending with either @...\/@/@name@/@ @ or
+    -- @...\/@/@name@/@\/@/@revision@/@ @. If a revision isn\'t specified, the
+    -- latest active revision is deleted.
+    autoScalingConfigurationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAutoScalingConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoScalingConfigurationArn', 'deleteAutoScalingConfiguration_autoScalingConfigurationArn' - The Amazon Resource Name (ARN) of the App Runner auto scaling
+-- configuration that you want to delete.
+--
+-- The ARN can be a full auto scaling configuration ARN, or a partial ARN
+-- ending with either @...\/@/@name@/@ @ or
+-- @...\/@/@name@/@\/@/@revision@/@ @. If a revision isn\'t specified, the
+-- latest active revision is deleted.
+newDeleteAutoScalingConfiguration ::
+  -- | 'autoScalingConfigurationArn'
+  Prelude.Text ->
+  DeleteAutoScalingConfiguration
+newDeleteAutoScalingConfiguration
+  pAutoScalingConfigurationArn_ =
+    DeleteAutoScalingConfiguration'
+      { autoScalingConfigurationArn =
+          pAutoScalingConfigurationArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the App Runner auto scaling
+-- configuration that you want to delete.
+--
+-- The ARN can be a full auto scaling configuration ARN, or a partial ARN
+-- ending with either @...\/@/@name@/@ @ or
+-- @...\/@/@name@/@\/@/@revision@/@ @. If a revision isn\'t specified, the
+-- latest active revision is deleted.
+deleteAutoScalingConfiguration_autoScalingConfigurationArn :: Lens.Lens' DeleteAutoScalingConfiguration Prelude.Text
+deleteAutoScalingConfiguration_autoScalingConfigurationArn = Lens.lens (\DeleteAutoScalingConfiguration' {autoScalingConfigurationArn} -> autoScalingConfigurationArn) (\s@DeleteAutoScalingConfiguration' {} a -> s {autoScalingConfigurationArn = a} :: DeleteAutoScalingConfiguration)
+
+instance
+  Core.AWSRequest
+    DeleteAutoScalingConfiguration
+  where
+  type
+    AWSResponse DeleteAutoScalingConfiguration =
+      DeleteAutoScalingConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteAutoScalingConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "AutoScalingConfiguration")
+      )
+
+instance
+  Prelude.Hashable
+    DeleteAutoScalingConfiguration
+  where
+  hashWithSalt
+    _salt
+    DeleteAutoScalingConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` autoScalingConfigurationArn
+
+instance
+  Prelude.NFData
+    DeleteAutoScalingConfiguration
+  where
+  rnf DeleteAutoScalingConfiguration' {..} =
+    Prelude.rnf autoScalingConfigurationArn
+
+instance
+  Data.ToHeaders
+    DeleteAutoScalingConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.DeleteAutoScalingConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteAutoScalingConfiguration where
+  toJSON DeleteAutoScalingConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "AutoScalingConfigurationArn"
+                  Data..= autoScalingConfigurationArn
+              )
+          ]
+      )
+
+instance Data.ToPath DeleteAutoScalingConfiguration where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteAutoScalingConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAutoScalingConfigurationResponse' smart constructor.
+data DeleteAutoScalingConfigurationResponse = DeleteAutoScalingConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner auto scaling configuration that this
+    -- request just deleted.
+    autoScalingConfiguration :: AutoScalingConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAutoScalingConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteAutoScalingConfigurationResponse_httpStatus' - The response's http status code.
+--
+-- 'autoScalingConfiguration', 'deleteAutoScalingConfigurationResponse_autoScalingConfiguration' - A description of the App Runner auto scaling configuration that this
+-- request just deleted.
+newDeleteAutoScalingConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'autoScalingConfiguration'
+  AutoScalingConfiguration ->
+  DeleteAutoScalingConfigurationResponse
+newDeleteAutoScalingConfigurationResponse
+  pHttpStatus_
+  pAutoScalingConfiguration_ =
+    DeleteAutoScalingConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        autoScalingConfiguration =
+          pAutoScalingConfiguration_
+      }
+
+-- | The response's http status code.
+deleteAutoScalingConfigurationResponse_httpStatus :: Lens.Lens' DeleteAutoScalingConfigurationResponse Prelude.Int
+deleteAutoScalingConfigurationResponse_httpStatus = Lens.lens (\DeleteAutoScalingConfigurationResponse' {httpStatus} -> httpStatus) (\s@DeleteAutoScalingConfigurationResponse' {} a -> s {httpStatus = a} :: DeleteAutoScalingConfigurationResponse)
+
+-- | A description of the App Runner auto scaling configuration that this
+-- request just deleted.
+deleteAutoScalingConfigurationResponse_autoScalingConfiguration :: Lens.Lens' DeleteAutoScalingConfigurationResponse AutoScalingConfiguration
+deleteAutoScalingConfigurationResponse_autoScalingConfiguration = Lens.lens (\DeleteAutoScalingConfigurationResponse' {autoScalingConfiguration} -> autoScalingConfiguration) (\s@DeleteAutoScalingConfigurationResponse' {} a -> s {autoScalingConfiguration = a} :: DeleteAutoScalingConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DeleteAutoScalingConfigurationResponse
+  where
+  rnf DeleteAutoScalingConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf autoScalingConfiguration
diff --git a/gen/Amazonka/AppRunner/DeleteConnection.hs b/gen/Amazonka/AppRunner/DeleteConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/DeleteConnection.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.DeleteConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an App Runner connection. You must first ensure that there are no
+-- running App Runner services that use this connection. If there are any,
+-- the @DeleteConnection@ action fails.
+module Amazonka.AppRunner.DeleteConnection
+  ( -- * Creating a Request
+    DeleteConnection (..),
+    newDeleteConnection,
+
+    -- * Request Lenses
+    deleteConnection_connectionArn,
+
+    -- * Destructuring the Response
+    DeleteConnectionResponse (..),
+    newDeleteConnectionResponse,
+
+    -- * Response Lenses
+    deleteConnectionResponse_connection,
+    deleteConnectionResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newDeleteConnection' smart constructor.
+data DeleteConnection = DeleteConnection'
+  { -- | The Amazon Resource Name (ARN) of the App Runner connection that you
+    -- want to delete.
+    connectionArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionArn', 'deleteConnection_connectionArn' - The Amazon Resource Name (ARN) of the App Runner connection that you
+-- want to delete.
+newDeleteConnection ::
+  -- | 'connectionArn'
+  Prelude.Text ->
+  DeleteConnection
+newDeleteConnection pConnectionArn_ =
+  DeleteConnection' {connectionArn = pConnectionArn_}
+
+-- | The Amazon Resource Name (ARN) of the App Runner connection that you
+-- want to delete.
+deleteConnection_connectionArn :: Lens.Lens' DeleteConnection Prelude.Text
+deleteConnection_connectionArn = Lens.lens (\DeleteConnection' {connectionArn} -> connectionArn) (\s@DeleteConnection' {} a -> s {connectionArn = a} :: DeleteConnection)
+
+instance Core.AWSRequest DeleteConnection where
+  type
+    AWSResponse DeleteConnection =
+      DeleteConnectionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteConnectionResponse'
+            Prelude.<$> (x Data..?> "Connection")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteConnection where
+  hashWithSalt _salt DeleteConnection' {..} =
+    _salt `Prelude.hashWithSalt` connectionArn
+
+instance Prelude.NFData DeleteConnection where
+  rnf DeleteConnection' {..} = Prelude.rnf connectionArn
+
+instance Data.ToHeaders DeleteConnection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AppRunner.DeleteConnection" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteConnection where
+  toJSON DeleteConnection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ConnectionArn" Data..= connectionArn)
+          ]
+      )
+
+instance Data.ToPath DeleteConnection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteConnection where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteConnectionResponse' smart constructor.
+data DeleteConnectionResponse = DeleteConnectionResponse'
+  { -- | A description of the App Runner connection that this request just
+    -- deleted.
+    connection :: Prelude.Maybe Connection,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConnectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connection', 'deleteConnectionResponse_connection' - A description of the App Runner connection that this request just
+-- deleted.
+--
+-- 'httpStatus', 'deleteConnectionResponse_httpStatus' - The response's http status code.
+newDeleteConnectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteConnectionResponse
+newDeleteConnectionResponse pHttpStatus_ =
+  DeleteConnectionResponse'
+    { connection =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A description of the App Runner connection that this request just
+-- deleted.
+deleteConnectionResponse_connection :: Lens.Lens' DeleteConnectionResponse (Prelude.Maybe Connection)
+deleteConnectionResponse_connection = Lens.lens (\DeleteConnectionResponse' {connection} -> connection) (\s@DeleteConnectionResponse' {} a -> s {connection = a} :: DeleteConnectionResponse)
+
+-- | The response's http status code.
+deleteConnectionResponse_httpStatus :: Lens.Lens' DeleteConnectionResponse Prelude.Int
+deleteConnectionResponse_httpStatus = Lens.lens (\DeleteConnectionResponse' {httpStatus} -> httpStatus) (\s@DeleteConnectionResponse' {} a -> s {httpStatus = a} :: DeleteConnectionResponse)
+
+instance Prelude.NFData DeleteConnectionResponse where
+  rnf DeleteConnectionResponse' {..} =
+    Prelude.rnf connection
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppRunner/DeleteObservabilityConfiguration.hs b/gen/Amazonka/AppRunner/DeleteObservabilityConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/DeleteObservabilityConfiguration.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.DeleteObservabilityConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an App Runner observability configuration resource. You can
+-- delete a specific revision or the latest active revision. You can\'t
+-- delete a configuration that\'s used by one or more App Runner services.
+module Amazonka.AppRunner.DeleteObservabilityConfiguration
+  ( -- * Creating a Request
+    DeleteObservabilityConfiguration (..),
+    newDeleteObservabilityConfiguration,
+
+    -- * Request Lenses
+    deleteObservabilityConfiguration_observabilityConfigurationArn,
+
+    -- * Destructuring the Response
+    DeleteObservabilityConfigurationResponse (..),
+    newDeleteObservabilityConfigurationResponse,
+
+    -- * Response Lenses
+    deleteObservabilityConfigurationResponse_httpStatus,
+    deleteObservabilityConfigurationResponse_observabilityConfiguration,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newDeleteObservabilityConfiguration' smart constructor.
+data DeleteObservabilityConfiguration = DeleteObservabilityConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the App Runner observability
+    -- configuration that you want to delete.
+    --
+    -- The ARN can be a full observability configuration ARN, or a partial ARN
+    -- ending with either @...\/@/@name@/@ @ or
+    -- @...\/@/@name@/@\/@/@revision@/@ @. If a revision isn\'t specified, the
+    -- latest active revision is deleted.
+    observabilityConfigurationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteObservabilityConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'observabilityConfigurationArn', 'deleteObservabilityConfiguration_observabilityConfigurationArn' - The Amazon Resource Name (ARN) of the App Runner observability
+-- configuration that you want to delete.
+--
+-- The ARN can be a full observability configuration ARN, or a partial ARN
+-- ending with either @...\/@/@name@/@ @ or
+-- @...\/@/@name@/@\/@/@revision@/@ @. If a revision isn\'t specified, the
+-- latest active revision is deleted.
+newDeleteObservabilityConfiguration ::
+  -- | 'observabilityConfigurationArn'
+  Prelude.Text ->
+  DeleteObservabilityConfiguration
+newDeleteObservabilityConfiguration
+  pObservabilityConfigurationArn_ =
+    DeleteObservabilityConfiguration'
+      { observabilityConfigurationArn =
+          pObservabilityConfigurationArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the App Runner observability
+-- configuration that you want to delete.
+--
+-- The ARN can be a full observability configuration ARN, or a partial ARN
+-- ending with either @...\/@/@name@/@ @ or
+-- @...\/@/@name@/@\/@/@revision@/@ @. If a revision isn\'t specified, the
+-- latest active revision is deleted.
+deleteObservabilityConfiguration_observabilityConfigurationArn :: Lens.Lens' DeleteObservabilityConfiguration Prelude.Text
+deleteObservabilityConfiguration_observabilityConfigurationArn = Lens.lens (\DeleteObservabilityConfiguration' {observabilityConfigurationArn} -> observabilityConfigurationArn) (\s@DeleteObservabilityConfiguration' {} a -> s {observabilityConfigurationArn = a} :: DeleteObservabilityConfiguration)
+
+instance
+  Core.AWSRequest
+    DeleteObservabilityConfiguration
+  where
+  type
+    AWSResponse DeleteObservabilityConfiguration =
+      DeleteObservabilityConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteObservabilityConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "ObservabilityConfiguration")
+      )
+
+instance
+  Prelude.Hashable
+    DeleteObservabilityConfiguration
+  where
+  hashWithSalt
+    _salt
+    DeleteObservabilityConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` observabilityConfigurationArn
+
+instance
+  Prelude.NFData
+    DeleteObservabilityConfiguration
+  where
+  rnf DeleteObservabilityConfiguration' {..} =
+    Prelude.rnf observabilityConfigurationArn
+
+instance
+  Data.ToHeaders
+    DeleteObservabilityConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.DeleteObservabilityConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteObservabilityConfiguration where
+  toJSON DeleteObservabilityConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "ObservabilityConfigurationArn"
+                  Data..= observabilityConfigurationArn
+              )
+          ]
+      )
+
+instance Data.ToPath DeleteObservabilityConfiguration where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteObservabilityConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteObservabilityConfigurationResponse' smart constructor.
+data DeleteObservabilityConfigurationResponse = DeleteObservabilityConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner observability configuration that this
+    -- request just deleted.
+    observabilityConfiguration :: ObservabilityConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteObservabilityConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteObservabilityConfigurationResponse_httpStatus' - The response's http status code.
+--
+-- 'observabilityConfiguration', 'deleteObservabilityConfigurationResponse_observabilityConfiguration' - A description of the App Runner observability configuration that this
+-- request just deleted.
+newDeleteObservabilityConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'observabilityConfiguration'
+  ObservabilityConfiguration ->
+  DeleteObservabilityConfigurationResponse
+newDeleteObservabilityConfigurationResponse
+  pHttpStatus_
+  pObservabilityConfiguration_ =
+    DeleteObservabilityConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        observabilityConfiguration =
+          pObservabilityConfiguration_
+      }
+
+-- | The response's http status code.
+deleteObservabilityConfigurationResponse_httpStatus :: Lens.Lens' DeleteObservabilityConfigurationResponse Prelude.Int
+deleteObservabilityConfigurationResponse_httpStatus = Lens.lens (\DeleteObservabilityConfigurationResponse' {httpStatus} -> httpStatus) (\s@DeleteObservabilityConfigurationResponse' {} a -> s {httpStatus = a} :: DeleteObservabilityConfigurationResponse)
+
+-- | A description of the App Runner observability configuration that this
+-- request just deleted.
+deleteObservabilityConfigurationResponse_observabilityConfiguration :: Lens.Lens' DeleteObservabilityConfigurationResponse ObservabilityConfiguration
+deleteObservabilityConfigurationResponse_observabilityConfiguration = Lens.lens (\DeleteObservabilityConfigurationResponse' {observabilityConfiguration} -> observabilityConfiguration) (\s@DeleteObservabilityConfigurationResponse' {} a -> s {observabilityConfiguration = a} :: DeleteObservabilityConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DeleteObservabilityConfigurationResponse
+  where
+  rnf DeleteObservabilityConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf observabilityConfiguration
diff --git a/gen/Amazonka/AppRunner/DeleteService.hs b/gen/Amazonka/AppRunner/DeleteService.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/DeleteService.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.DeleteService
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an App Runner service.
+--
+-- This is an asynchronous operation. On a successful call, you can use the
+-- returned @OperationId@ and the ListOperations call to track the
+-- operation\'s progress.
+--
+-- Make sure that you don\'t have any active VPCIngressConnections
+-- associated with the service you want to delete.
+module Amazonka.AppRunner.DeleteService
+  ( -- * Creating a Request
+    DeleteService (..),
+    newDeleteService,
+
+    -- * Request Lenses
+    deleteService_serviceArn,
+
+    -- * Destructuring the Response
+    DeleteServiceResponse (..),
+    newDeleteServiceResponse,
+
+    -- * Response Lenses
+    deleteServiceResponse_httpStatus,
+    deleteServiceResponse_service,
+    deleteServiceResponse_operationId,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newDeleteService' smart constructor.
+data DeleteService = DeleteService'
+  { -- | The Amazon Resource Name (ARN) of the App Runner service that you want
+    -- to delete.
+    serviceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteService' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serviceArn', 'deleteService_serviceArn' - The Amazon Resource Name (ARN) of the App Runner service that you want
+-- to delete.
+newDeleteService ::
+  -- | 'serviceArn'
+  Prelude.Text ->
+  DeleteService
+newDeleteService pServiceArn_ =
+  DeleteService' {serviceArn = pServiceArn_}
+
+-- | The Amazon Resource Name (ARN) of the App Runner service that you want
+-- to delete.
+deleteService_serviceArn :: Lens.Lens' DeleteService Prelude.Text
+deleteService_serviceArn = Lens.lens (\DeleteService' {serviceArn} -> serviceArn) (\s@DeleteService' {} a -> s {serviceArn = a} :: DeleteService)
+
+instance Core.AWSRequest DeleteService where
+  type
+    AWSResponse DeleteService =
+      DeleteServiceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteServiceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Service")
+            Prelude.<*> (x Data..:> "OperationId")
+      )
+
+instance Prelude.Hashable DeleteService where
+  hashWithSalt _salt DeleteService' {..} =
+    _salt `Prelude.hashWithSalt` serviceArn
+
+instance Prelude.NFData DeleteService where
+  rnf DeleteService' {..} = Prelude.rnf serviceArn
+
+instance Data.ToHeaders DeleteService where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AppRunner.DeleteService" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteService where
+  toJSON DeleteService' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ServiceArn" Data..= serviceArn)]
+      )
+
+instance Data.ToPath DeleteService where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteService where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteServiceResponse' smart constructor.
+data DeleteServiceResponse = DeleteServiceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner service that this request just deleted.
+    service :: Service,
+    -- | The unique ID of the asynchronous operation that this request started.
+    -- You can use it combined with the ListOperations call to track the
+    -- operation\'s progress.
+    operationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteServiceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteServiceResponse_httpStatus' - The response's http status code.
+--
+-- 'service', 'deleteServiceResponse_service' - A description of the App Runner service that this request just deleted.
+--
+-- 'operationId', 'deleteServiceResponse_operationId' - The unique ID of the asynchronous operation that this request started.
+-- You can use it combined with the ListOperations call to track the
+-- operation\'s progress.
+newDeleteServiceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'service'
+  Service ->
+  -- | 'operationId'
+  Prelude.Text ->
+  DeleteServiceResponse
+newDeleteServiceResponse
+  pHttpStatus_
+  pService_
+  pOperationId_ =
+    DeleteServiceResponse'
+      { httpStatus = pHttpStatus_,
+        service = pService_,
+        operationId = pOperationId_
+      }
+
+-- | The response's http status code.
+deleteServiceResponse_httpStatus :: Lens.Lens' DeleteServiceResponse Prelude.Int
+deleteServiceResponse_httpStatus = Lens.lens (\DeleteServiceResponse' {httpStatus} -> httpStatus) (\s@DeleteServiceResponse' {} a -> s {httpStatus = a} :: DeleteServiceResponse)
+
+-- | A description of the App Runner service that this request just deleted.
+deleteServiceResponse_service :: Lens.Lens' DeleteServiceResponse Service
+deleteServiceResponse_service = Lens.lens (\DeleteServiceResponse' {service} -> service) (\s@DeleteServiceResponse' {} a -> s {service = a} :: DeleteServiceResponse)
+
+-- | The unique ID of the asynchronous operation that this request started.
+-- You can use it combined with the ListOperations call to track the
+-- operation\'s progress.
+deleteServiceResponse_operationId :: Lens.Lens' DeleteServiceResponse Prelude.Text
+deleteServiceResponse_operationId = Lens.lens (\DeleteServiceResponse' {operationId} -> operationId) (\s@DeleteServiceResponse' {} a -> s {operationId = a} :: DeleteServiceResponse)
+
+instance Prelude.NFData DeleteServiceResponse where
+  rnf DeleteServiceResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf service
+      `Prelude.seq` Prelude.rnf operationId
diff --git a/gen/Amazonka/AppRunner/DeleteVpcConnector.hs b/gen/Amazonka/AppRunner/DeleteVpcConnector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/DeleteVpcConnector.hs
@@ -0,0 +1,191 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.DeleteVpcConnector
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an App Runner VPC connector resource. You can\'t delete a
+-- connector that\'s used by one or more App Runner services.
+module Amazonka.AppRunner.DeleteVpcConnector
+  ( -- * Creating a Request
+    DeleteVpcConnector (..),
+    newDeleteVpcConnector,
+
+    -- * Request Lenses
+    deleteVpcConnector_vpcConnectorArn,
+
+    -- * Destructuring the Response
+    DeleteVpcConnectorResponse (..),
+    newDeleteVpcConnectorResponse,
+
+    -- * Response Lenses
+    deleteVpcConnectorResponse_httpStatus,
+    deleteVpcConnectorResponse_vpcConnector,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newDeleteVpcConnector' smart constructor.
+data DeleteVpcConnector = DeleteVpcConnector'
+  { -- | The Amazon Resource Name (ARN) of the App Runner VPC connector that you
+    -- want to delete.
+    --
+    -- The ARN must be a full VPC connector ARN.
+    vpcConnectorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcConnector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpcConnectorArn', 'deleteVpcConnector_vpcConnectorArn' - The Amazon Resource Name (ARN) of the App Runner VPC connector that you
+-- want to delete.
+--
+-- The ARN must be a full VPC connector ARN.
+newDeleteVpcConnector ::
+  -- | 'vpcConnectorArn'
+  Prelude.Text ->
+  DeleteVpcConnector
+newDeleteVpcConnector pVpcConnectorArn_ =
+  DeleteVpcConnector'
+    { vpcConnectorArn =
+        pVpcConnectorArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the App Runner VPC connector that you
+-- want to delete.
+--
+-- The ARN must be a full VPC connector ARN.
+deleteVpcConnector_vpcConnectorArn :: Lens.Lens' DeleteVpcConnector Prelude.Text
+deleteVpcConnector_vpcConnectorArn = Lens.lens (\DeleteVpcConnector' {vpcConnectorArn} -> vpcConnectorArn) (\s@DeleteVpcConnector' {} a -> s {vpcConnectorArn = a} :: DeleteVpcConnector)
+
+instance Core.AWSRequest DeleteVpcConnector where
+  type
+    AWSResponse DeleteVpcConnector =
+      DeleteVpcConnectorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteVpcConnectorResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "VpcConnector")
+      )
+
+instance Prelude.Hashable DeleteVpcConnector where
+  hashWithSalt _salt DeleteVpcConnector' {..} =
+    _salt `Prelude.hashWithSalt` vpcConnectorArn
+
+instance Prelude.NFData DeleteVpcConnector where
+  rnf DeleteVpcConnector' {..} =
+    Prelude.rnf vpcConnectorArn
+
+instance Data.ToHeaders DeleteVpcConnector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.DeleteVpcConnector" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteVpcConnector where
+  toJSON DeleteVpcConnector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("VpcConnectorArn" Data..= vpcConnectorArn)
+          ]
+      )
+
+instance Data.ToPath DeleteVpcConnector where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteVpcConnector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteVpcConnectorResponse' smart constructor.
+data DeleteVpcConnectorResponse = DeleteVpcConnectorResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner VPC connector that this request just
+    -- deleted.
+    vpcConnector :: VpcConnector
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcConnectorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteVpcConnectorResponse_httpStatus' - The response's http status code.
+--
+-- 'vpcConnector', 'deleteVpcConnectorResponse_vpcConnector' - A description of the App Runner VPC connector that this request just
+-- deleted.
+newDeleteVpcConnectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'vpcConnector'
+  VpcConnector ->
+  DeleteVpcConnectorResponse
+newDeleteVpcConnectorResponse
+  pHttpStatus_
+  pVpcConnector_ =
+    DeleteVpcConnectorResponse'
+      { httpStatus =
+          pHttpStatus_,
+        vpcConnector = pVpcConnector_
+      }
+
+-- | The response's http status code.
+deleteVpcConnectorResponse_httpStatus :: Lens.Lens' DeleteVpcConnectorResponse Prelude.Int
+deleteVpcConnectorResponse_httpStatus = Lens.lens (\DeleteVpcConnectorResponse' {httpStatus} -> httpStatus) (\s@DeleteVpcConnectorResponse' {} a -> s {httpStatus = a} :: DeleteVpcConnectorResponse)
+
+-- | A description of the App Runner VPC connector that this request just
+-- deleted.
+deleteVpcConnectorResponse_vpcConnector :: Lens.Lens' DeleteVpcConnectorResponse VpcConnector
+deleteVpcConnectorResponse_vpcConnector = Lens.lens (\DeleteVpcConnectorResponse' {vpcConnector} -> vpcConnector) (\s@DeleteVpcConnectorResponse' {} a -> s {vpcConnector = a} :: DeleteVpcConnectorResponse)
+
+instance Prelude.NFData DeleteVpcConnectorResponse where
+  rnf DeleteVpcConnectorResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf vpcConnector
diff --git a/gen/Amazonka/AppRunner/DeleteVpcIngressConnection.hs b/gen/Amazonka/AppRunner/DeleteVpcIngressConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/DeleteVpcIngressConnection.hs
@@ -0,0 +1,202 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.DeleteVpcIngressConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an App Runner VPC Ingress Connection resource that\'s associated
+-- with an App Runner service. The VPC Ingress Connection must be in one of
+-- the following states to be deleted:
+--
+-- -   @AVAILABLE@
+--
+-- -   @FAILED_CREATION@
+--
+-- -   @FAILED_UPDATE@
+--
+-- -   @FAILED_DELETION@
+module Amazonka.AppRunner.DeleteVpcIngressConnection
+  ( -- * Creating a Request
+    DeleteVpcIngressConnection (..),
+    newDeleteVpcIngressConnection,
+
+    -- * Request Lenses
+    deleteVpcIngressConnection_vpcIngressConnectionArn,
+
+    -- * Destructuring the Response
+    DeleteVpcIngressConnectionResponse (..),
+    newDeleteVpcIngressConnectionResponse,
+
+    -- * Response Lenses
+    deleteVpcIngressConnectionResponse_httpStatus,
+    deleteVpcIngressConnectionResponse_vpcIngressConnection,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newDeleteVpcIngressConnection' smart constructor.
+data DeleteVpcIngressConnection = DeleteVpcIngressConnection'
+  { -- | The Amazon Resource Name (ARN) of the App Runner VPC Ingress Connection
+    -- that you want to delete.
+    vpcIngressConnectionArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcIngressConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpcIngressConnectionArn', 'deleteVpcIngressConnection_vpcIngressConnectionArn' - The Amazon Resource Name (ARN) of the App Runner VPC Ingress Connection
+-- that you want to delete.
+newDeleteVpcIngressConnection ::
+  -- | 'vpcIngressConnectionArn'
+  Prelude.Text ->
+  DeleteVpcIngressConnection
+newDeleteVpcIngressConnection
+  pVpcIngressConnectionArn_ =
+    DeleteVpcIngressConnection'
+      { vpcIngressConnectionArn =
+          pVpcIngressConnectionArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the App Runner VPC Ingress Connection
+-- that you want to delete.
+deleteVpcIngressConnection_vpcIngressConnectionArn :: Lens.Lens' DeleteVpcIngressConnection Prelude.Text
+deleteVpcIngressConnection_vpcIngressConnectionArn = Lens.lens (\DeleteVpcIngressConnection' {vpcIngressConnectionArn} -> vpcIngressConnectionArn) (\s@DeleteVpcIngressConnection' {} a -> s {vpcIngressConnectionArn = a} :: DeleteVpcIngressConnection)
+
+instance Core.AWSRequest DeleteVpcIngressConnection where
+  type
+    AWSResponse DeleteVpcIngressConnection =
+      DeleteVpcIngressConnectionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteVpcIngressConnectionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "VpcIngressConnection")
+      )
+
+instance Prelude.Hashable DeleteVpcIngressConnection where
+  hashWithSalt _salt DeleteVpcIngressConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` vpcIngressConnectionArn
+
+instance Prelude.NFData DeleteVpcIngressConnection where
+  rnf DeleteVpcIngressConnection' {..} =
+    Prelude.rnf vpcIngressConnectionArn
+
+instance Data.ToHeaders DeleteVpcIngressConnection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.DeleteVpcIngressConnection" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteVpcIngressConnection where
+  toJSON DeleteVpcIngressConnection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "VpcIngressConnectionArn"
+                  Data..= vpcIngressConnectionArn
+              )
+          ]
+      )
+
+instance Data.ToPath DeleteVpcIngressConnection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteVpcIngressConnection where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteVpcIngressConnectionResponse' smart constructor.
+data DeleteVpcIngressConnectionResponse = DeleteVpcIngressConnectionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner VPC Ingress Connection that this request
+    -- just deleted.
+    vpcIngressConnection :: VpcIngressConnection
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcIngressConnectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteVpcIngressConnectionResponse_httpStatus' - The response's http status code.
+--
+-- 'vpcIngressConnection', 'deleteVpcIngressConnectionResponse_vpcIngressConnection' - A description of the App Runner VPC Ingress Connection that this request
+-- just deleted.
+newDeleteVpcIngressConnectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'vpcIngressConnection'
+  VpcIngressConnection ->
+  DeleteVpcIngressConnectionResponse
+newDeleteVpcIngressConnectionResponse
+  pHttpStatus_
+  pVpcIngressConnection_ =
+    DeleteVpcIngressConnectionResponse'
+      { httpStatus =
+          pHttpStatus_,
+        vpcIngressConnection =
+          pVpcIngressConnection_
+      }
+
+-- | The response's http status code.
+deleteVpcIngressConnectionResponse_httpStatus :: Lens.Lens' DeleteVpcIngressConnectionResponse Prelude.Int
+deleteVpcIngressConnectionResponse_httpStatus = Lens.lens (\DeleteVpcIngressConnectionResponse' {httpStatus} -> httpStatus) (\s@DeleteVpcIngressConnectionResponse' {} a -> s {httpStatus = a} :: DeleteVpcIngressConnectionResponse)
+
+-- | A description of the App Runner VPC Ingress Connection that this request
+-- just deleted.
+deleteVpcIngressConnectionResponse_vpcIngressConnection :: Lens.Lens' DeleteVpcIngressConnectionResponse VpcIngressConnection
+deleteVpcIngressConnectionResponse_vpcIngressConnection = Lens.lens (\DeleteVpcIngressConnectionResponse' {vpcIngressConnection} -> vpcIngressConnection) (\s@DeleteVpcIngressConnectionResponse' {} a -> s {vpcIngressConnection = a} :: DeleteVpcIngressConnectionResponse)
+
+instance
+  Prelude.NFData
+    DeleteVpcIngressConnectionResponse
+  where
+  rnf DeleteVpcIngressConnectionResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf vpcIngressConnection
diff --git a/gen/Amazonka/AppRunner/DescribeAutoScalingConfiguration.hs b/gen/Amazonka/AppRunner/DescribeAutoScalingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/DescribeAutoScalingConfiguration.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.DescribeAutoScalingConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Return a full description of an App Runner automatic scaling
+-- configuration resource.
+module Amazonka.AppRunner.DescribeAutoScalingConfiguration
+  ( -- * Creating a Request
+    DescribeAutoScalingConfiguration (..),
+    newDescribeAutoScalingConfiguration,
+
+    -- * Request Lenses
+    describeAutoScalingConfiguration_autoScalingConfigurationArn,
+
+    -- * Destructuring the Response
+    DescribeAutoScalingConfigurationResponse (..),
+    newDescribeAutoScalingConfigurationResponse,
+
+    -- * Response Lenses
+    describeAutoScalingConfigurationResponse_httpStatus,
+    describeAutoScalingConfigurationResponse_autoScalingConfiguration,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newDescribeAutoScalingConfiguration' smart constructor.
+data DescribeAutoScalingConfiguration = DescribeAutoScalingConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the App Runner auto scaling
+    -- configuration that you want a description for.
+    --
+    -- The ARN can be a full auto scaling configuration ARN, or a partial ARN
+    -- ending with either @...\/@/@name@/@ @ or
+    -- @...\/@/@name@/@\/@/@revision@/@ @. If a revision isn\'t specified, the
+    -- latest active revision is described.
+    autoScalingConfigurationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAutoScalingConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoScalingConfigurationArn', 'describeAutoScalingConfiguration_autoScalingConfigurationArn' - The Amazon Resource Name (ARN) of the App Runner auto scaling
+-- configuration that you want a description for.
+--
+-- The ARN can be a full auto scaling configuration ARN, or a partial ARN
+-- ending with either @...\/@/@name@/@ @ or
+-- @...\/@/@name@/@\/@/@revision@/@ @. If a revision isn\'t specified, the
+-- latest active revision is described.
+newDescribeAutoScalingConfiguration ::
+  -- | 'autoScalingConfigurationArn'
+  Prelude.Text ->
+  DescribeAutoScalingConfiguration
+newDescribeAutoScalingConfiguration
+  pAutoScalingConfigurationArn_ =
+    DescribeAutoScalingConfiguration'
+      { autoScalingConfigurationArn =
+          pAutoScalingConfigurationArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the App Runner auto scaling
+-- configuration that you want a description for.
+--
+-- The ARN can be a full auto scaling configuration ARN, or a partial ARN
+-- ending with either @...\/@/@name@/@ @ or
+-- @...\/@/@name@/@\/@/@revision@/@ @. If a revision isn\'t specified, the
+-- latest active revision is described.
+describeAutoScalingConfiguration_autoScalingConfigurationArn :: Lens.Lens' DescribeAutoScalingConfiguration Prelude.Text
+describeAutoScalingConfiguration_autoScalingConfigurationArn = Lens.lens (\DescribeAutoScalingConfiguration' {autoScalingConfigurationArn} -> autoScalingConfigurationArn) (\s@DescribeAutoScalingConfiguration' {} a -> s {autoScalingConfigurationArn = a} :: DescribeAutoScalingConfiguration)
+
+instance
+  Core.AWSRequest
+    DescribeAutoScalingConfiguration
+  where
+  type
+    AWSResponse DescribeAutoScalingConfiguration =
+      DescribeAutoScalingConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAutoScalingConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "AutoScalingConfiguration")
+      )
+
+instance
+  Prelude.Hashable
+    DescribeAutoScalingConfiguration
+  where
+  hashWithSalt
+    _salt
+    DescribeAutoScalingConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` autoScalingConfigurationArn
+
+instance
+  Prelude.NFData
+    DescribeAutoScalingConfiguration
+  where
+  rnf DescribeAutoScalingConfiguration' {..} =
+    Prelude.rnf autoScalingConfigurationArn
+
+instance
+  Data.ToHeaders
+    DescribeAutoScalingConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.DescribeAutoScalingConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeAutoScalingConfiguration where
+  toJSON DescribeAutoScalingConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "AutoScalingConfigurationArn"
+                  Data..= autoScalingConfigurationArn
+              )
+          ]
+      )
+
+instance Data.ToPath DescribeAutoScalingConfiguration where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeAutoScalingConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAutoScalingConfigurationResponse' smart constructor.
+data DescribeAutoScalingConfigurationResponse = DescribeAutoScalingConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A full description of the App Runner auto scaling configuration that you
+    -- specified in this request.
+    autoScalingConfiguration :: AutoScalingConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAutoScalingConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'describeAutoScalingConfigurationResponse_httpStatus' - The response's http status code.
+--
+-- 'autoScalingConfiguration', 'describeAutoScalingConfigurationResponse_autoScalingConfiguration' - A full description of the App Runner auto scaling configuration that you
+-- specified in this request.
+newDescribeAutoScalingConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'autoScalingConfiguration'
+  AutoScalingConfiguration ->
+  DescribeAutoScalingConfigurationResponse
+newDescribeAutoScalingConfigurationResponse
+  pHttpStatus_
+  pAutoScalingConfiguration_ =
+    DescribeAutoScalingConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        autoScalingConfiguration =
+          pAutoScalingConfiguration_
+      }
+
+-- | The response's http status code.
+describeAutoScalingConfigurationResponse_httpStatus :: Lens.Lens' DescribeAutoScalingConfigurationResponse Prelude.Int
+describeAutoScalingConfigurationResponse_httpStatus = Lens.lens (\DescribeAutoScalingConfigurationResponse' {httpStatus} -> httpStatus) (\s@DescribeAutoScalingConfigurationResponse' {} a -> s {httpStatus = a} :: DescribeAutoScalingConfigurationResponse)
+
+-- | A full description of the App Runner auto scaling configuration that you
+-- specified in this request.
+describeAutoScalingConfigurationResponse_autoScalingConfiguration :: Lens.Lens' DescribeAutoScalingConfigurationResponse AutoScalingConfiguration
+describeAutoScalingConfigurationResponse_autoScalingConfiguration = Lens.lens (\DescribeAutoScalingConfigurationResponse' {autoScalingConfiguration} -> autoScalingConfiguration) (\s@DescribeAutoScalingConfigurationResponse' {} a -> s {autoScalingConfiguration = a} :: DescribeAutoScalingConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DescribeAutoScalingConfigurationResponse
+  where
+  rnf DescribeAutoScalingConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf autoScalingConfiguration
diff --git a/gen/Amazonka/AppRunner/DescribeCustomDomains.hs b/gen/Amazonka/AppRunner/DescribeCustomDomains.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/DescribeCustomDomains.hs
@@ -0,0 +1,301 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.DescribeCustomDomains
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Return a description of custom domain names that are associated with an
+-- App Runner service.
+module Amazonka.AppRunner.DescribeCustomDomains
+  ( -- * Creating a Request
+    DescribeCustomDomains (..),
+    newDescribeCustomDomains,
+
+    -- * Request Lenses
+    describeCustomDomains_maxResults,
+    describeCustomDomains_nextToken,
+    describeCustomDomains_serviceArn,
+
+    -- * Destructuring the Response
+    DescribeCustomDomainsResponse (..),
+    newDescribeCustomDomainsResponse,
+
+    -- * Response Lenses
+    describeCustomDomainsResponse_nextToken,
+    describeCustomDomainsResponse_httpStatus,
+    describeCustomDomainsResponse_dNSTarget,
+    describeCustomDomainsResponse_serviceArn,
+    describeCustomDomainsResponse_customDomains,
+    describeCustomDomainsResponse_vpcDNSTargets,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newDescribeCustomDomains' smart constructor.
+data DescribeCustomDomains = DescribeCustomDomains'
+  { -- | The maximum number of results that each response (result page) can
+    -- include. It\'s used for a paginated request.
+    --
+    -- If you don\'t specify @MaxResults@, the request retrieves all available
+    -- results in a single response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token from a previous result page. It\'s used for a paginated request.
+    -- The request retrieves the next result page. All other parameter values
+    -- must be identical to the ones that are specified in the initial request.
+    --
+    -- If you don\'t specify @NextToken@, the request retrieves the first
+    -- result page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the App Runner service that you want
+    -- associated custom domain names to be described for.
+    serviceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomDomains' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeCustomDomains_maxResults' - The maximum number of results that each response (result page) can
+-- include. It\'s used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+--
+-- 'nextToken', 'describeCustomDomains_nextToken' - A token from a previous result page. It\'s used for a paginated request.
+-- The request retrieves the next result page. All other parameter values
+-- must be identical to the ones that are specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+--
+-- 'serviceArn', 'describeCustomDomains_serviceArn' - The Amazon Resource Name (ARN) of the App Runner service that you want
+-- associated custom domain names to be described for.
+newDescribeCustomDomains ::
+  -- | 'serviceArn'
+  Prelude.Text ->
+  DescribeCustomDomains
+newDescribeCustomDomains pServiceArn_ =
+  DescribeCustomDomains'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      serviceArn = pServiceArn_
+    }
+
+-- | The maximum number of results that each response (result page) can
+-- include. It\'s used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+describeCustomDomains_maxResults :: Lens.Lens' DescribeCustomDomains (Prelude.Maybe Prelude.Natural)
+describeCustomDomains_maxResults = Lens.lens (\DescribeCustomDomains' {maxResults} -> maxResults) (\s@DescribeCustomDomains' {} a -> s {maxResults = a} :: DescribeCustomDomains)
+
+-- | A token from a previous result page. It\'s used for a paginated request.
+-- The request retrieves the next result page. All other parameter values
+-- must be identical to the ones that are specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+describeCustomDomains_nextToken :: Lens.Lens' DescribeCustomDomains (Prelude.Maybe Prelude.Text)
+describeCustomDomains_nextToken = Lens.lens (\DescribeCustomDomains' {nextToken} -> nextToken) (\s@DescribeCustomDomains' {} a -> s {nextToken = a} :: DescribeCustomDomains)
+
+-- | The Amazon Resource Name (ARN) of the App Runner service that you want
+-- associated custom domain names to be described for.
+describeCustomDomains_serviceArn :: Lens.Lens' DescribeCustomDomains Prelude.Text
+describeCustomDomains_serviceArn = Lens.lens (\DescribeCustomDomains' {serviceArn} -> serviceArn) (\s@DescribeCustomDomains' {} a -> s {serviceArn = a} :: DescribeCustomDomains)
+
+instance Core.AWSRequest DescribeCustomDomains where
+  type
+    AWSResponse DescribeCustomDomains =
+      DescribeCustomDomainsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeCustomDomainsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "DNSTarget")
+            Prelude.<*> (x Data..:> "ServiceArn")
+            Prelude.<*> (x Data..?> "CustomDomains" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "VpcDNSTargets" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable DescribeCustomDomains where
+  hashWithSalt _salt DescribeCustomDomains' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` serviceArn
+
+instance Prelude.NFData DescribeCustomDomains where
+  rnf DescribeCustomDomains' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf serviceArn
+
+instance Data.ToHeaders DescribeCustomDomains where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.DescribeCustomDomains" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeCustomDomains where
+  toJSON DescribeCustomDomains' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("ServiceArn" Data..= serviceArn)
+          ]
+      )
+
+instance Data.ToPath DescribeCustomDomains where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeCustomDomains where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeCustomDomainsResponse' smart constructor.
+data DescribeCustomDomainsResponse = DescribeCustomDomainsResponse'
+  { -- | The token that you can pass in a subsequent request to get the next
+    -- result page. It\'s returned in a paginated request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The App Runner subdomain of the App Runner service. The associated
+    -- custom domain names are mapped to this target name.
+    dNSTarget :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the App Runner service whose
+    -- associated custom domain names you want to describe.
+    serviceArn :: Prelude.Text,
+    -- | A list of descriptions of custom domain names that are associated with
+    -- the service. In a paginated request, the request returns up to
+    -- @MaxResults@ records per call.
+    customDomains :: [CustomDomain],
+    -- | DNS Target records for the custom domains of this Amazon VPC.
+    vpcDNSTargets :: [VpcDNSTarget]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomDomainsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeCustomDomainsResponse_nextToken' - The token that you can pass in a subsequent request to get the next
+-- result page. It\'s returned in a paginated request.
+--
+-- 'httpStatus', 'describeCustomDomainsResponse_httpStatus' - The response's http status code.
+--
+-- 'dNSTarget', 'describeCustomDomainsResponse_dNSTarget' - The App Runner subdomain of the App Runner service. The associated
+-- custom domain names are mapped to this target name.
+--
+-- 'serviceArn', 'describeCustomDomainsResponse_serviceArn' - The Amazon Resource Name (ARN) of the App Runner service whose
+-- associated custom domain names you want to describe.
+--
+-- 'customDomains', 'describeCustomDomainsResponse_customDomains' - A list of descriptions of custom domain names that are associated with
+-- the service. In a paginated request, the request returns up to
+-- @MaxResults@ records per call.
+--
+-- 'vpcDNSTargets', 'describeCustomDomainsResponse_vpcDNSTargets' - DNS Target records for the custom domains of this Amazon VPC.
+newDescribeCustomDomainsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'dNSTarget'
+  Prelude.Text ->
+  -- | 'serviceArn'
+  Prelude.Text ->
+  DescribeCustomDomainsResponse
+newDescribeCustomDomainsResponse
+  pHttpStatus_
+  pDNSTarget_
+  pServiceArn_ =
+    DescribeCustomDomainsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        dNSTarget = pDNSTarget_,
+        serviceArn = pServiceArn_,
+        customDomains = Prelude.mempty,
+        vpcDNSTargets = Prelude.mempty
+      }
+
+-- | The token that you can pass in a subsequent request to get the next
+-- result page. It\'s returned in a paginated request.
+describeCustomDomainsResponse_nextToken :: Lens.Lens' DescribeCustomDomainsResponse (Prelude.Maybe Prelude.Text)
+describeCustomDomainsResponse_nextToken = Lens.lens (\DescribeCustomDomainsResponse' {nextToken} -> nextToken) (\s@DescribeCustomDomainsResponse' {} a -> s {nextToken = a} :: DescribeCustomDomainsResponse)
+
+-- | The response's http status code.
+describeCustomDomainsResponse_httpStatus :: Lens.Lens' DescribeCustomDomainsResponse Prelude.Int
+describeCustomDomainsResponse_httpStatus = Lens.lens (\DescribeCustomDomainsResponse' {httpStatus} -> httpStatus) (\s@DescribeCustomDomainsResponse' {} a -> s {httpStatus = a} :: DescribeCustomDomainsResponse)
+
+-- | The App Runner subdomain of the App Runner service. The associated
+-- custom domain names are mapped to this target name.
+describeCustomDomainsResponse_dNSTarget :: Lens.Lens' DescribeCustomDomainsResponse Prelude.Text
+describeCustomDomainsResponse_dNSTarget = Lens.lens (\DescribeCustomDomainsResponse' {dNSTarget} -> dNSTarget) (\s@DescribeCustomDomainsResponse' {} a -> s {dNSTarget = a} :: DescribeCustomDomainsResponse)
+
+-- | The Amazon Resource Name (ARN) of the App Runner service whose
+-- associated custom domain names you want to describe.
+describeCustomDomainsResponse_serviceArn :: Lens.Lens' DescribeCustomDomainsResponse Prelude.Text
+describeCustomDomainsResponse_serviceArn = Lens.lens (\DescribeCustomDomainsResponse' {serviceArn} -> serviceArn) (\s@DescribeCustomDomainsResponse' {} a -> s {serviceArn = a} :: DescribeCustomDomainsResponse)
+
+-- | A list of descriptions of custom domain names that are associated with
+-- the service. In a paginated request, the request returns up to
+-- @MaxResults@ records per call.
+describeCustomDomainsResponse_customDomains :: Lens.Lens' DescribeCustomDomainsResponse [CustomDomain]
+describeCustomDomainsResponse_customDomains = Lens.lens (\DescribeCustomDomainsResponse' {customDomains} -> customDomains) (\s@DescribeCustomDomainsResponse' {} a -> s {customDomains = a} :: DescribeCustomDomainsResponse) Prelude.. Lens.coerced
+
+-- | DNS Target records for the custom domains of this Amazon VPC.
+describeCustomDomainsResponse_vpcDNSTargets :: Lens.Lens' DescribeCustomDomainsResponse [VpcDNSTarget]
+describeCustomDomainsResponse_vpcDNSTargets = Lens.lens (\DescribeCustomDomainsResponse' {vpcDNSTargets} -> vpcDNSTargets) (\s@DescribeCustomDomainsResponse' {} a -> s {vpcDNSTargets = a} :: DescribeCustomDomainsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData DescribeCustomDomainsResponse where
+  rnf DescribeCustomDomainsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf dNSTarget
+      `Prelude.seq` Prelude.rnf serviceArn
+      `Prelude.seq` Prelude.rnf customDomains
+      `Prelude.seq` Prelude.rnf vpcDNSTargets
diff --git a/gen/Amazonka/AppRunner/DescribeObservabilityConfiguration.hs b/gen/Amazonka/AppRunner/DescribeObservabilityConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/DescribeObservabilityConfiguration.hs
@@ -0,0 +1,231 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.DescribeObservabilityConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Return a full description of an App Runner observability configuration
+-- resource.
+module Amazonka.AppRunner.DescribeObservabilityConfiguration
+  ( -- * Creating a Request
+    DescribeObservabilityConfiguration (..),
+    newDescribeObservabilityConfiguration,
+
+    -- * Request Lenses
+    describeObservabilityConfiguration_observabilityConfigurationArn,
+
+    -- * Destructuring the Response
+    DescribeObservabilityConfigurationResponse (..),
+    newDescribeObservabilityConfigurationResponse,
+
+    -- * Response Lenses
+    describeObservabilityConfigurationResponse_httpStatus,
+    describeObservabilityConfigurationResponse_observabilityConfiguration,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newDescribeObservabilityConfiguration' smart constructor.
+data DescribeObservabilityConfiguration = DescribeObservabilityConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the App Runner observability
+    -- configuration that you want a description for.
+    --
+    -- The ARN can be a full observability configuration ARN, or a partial ARN
+    -- ending with either @...\/@/@name@/@ @ or
+    -- @...\/@/@name@/@\/@/@revision@/@ @. If a revision isn\'t specified, the
+    -- latest active revision is described.
+    observabilityConfigurationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeObservabilityConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'observabilityConfigurationArn', 'describeObservabilityConfiguration_observabilityConfigurationArn' - The Amazon Resource Name (ARN) of the App Runner observability
+-- configuration that you want a description for.
+--
+-- The ARN can be a full observability configuration ARN, or a partial ARN
+-- ending with either @...\/@/@name@/@ @ or
+-- @...\/@/@name@/@\/@/@revision@/@ @. If a revision isn\'t specified, the
+-- latest active revision is described.
+newDescribeObservabilityConfiguration ::
+  -- | 'observabilityConfigurationArn'
+  Prelude.Text ->
+  DescribeObservabilityConfiguration
+newDescribeObservabilityConfiguration
+  pObservabilityConfigurationArn_ =
+    DescribeObservabilityConfiguration'
+      { observabilityConfigurationArn =
+          pObservabilityConfigurationArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the App Runner observability
+-- configuration that you want a description for.
+--
+-- The ARN can be a full observability configuration ARN, or a partial ARN
+-- ending with either @...\/@/@name@/@ @ or
+-- @...\/@/@name@/@\/@/@revision@/@ @. If a revision isn\'t specified, the
+-- latest active revision is described.
+describeObservabilityConfiguration_observabilityConfigurationArn :: Lens.Lens' DescribeObservabilityConfiguration Prelude.Text
+describeObservabilityConfiguration_observabilityConfigurationArn = Lens.lens (\DescribeObservabilityConfiguration' {observabilityConfigurationArn} -> observabilityConfigurationArn) (\s@DescribeObservabilityConfiguration' {} a -> s {observabilityConfigurationArn = a} :: DescribeObservabilityConfiguration)
+
+instance
+  Core.AWSRequest
+    DescribeObservabilityConfiguration
+  where
+  type
+    AWSResponse DescribeObservabilityConfiguration =
+      DescribeObservabilityConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeObservabilityConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "ObservabilityConfiguration")
+      )
+
+instance
+  Prelude.Hashable
+    DescribeObservabilityConfiguration
+  where
+  hashWithSalt
+    _salt
+    DescribeObservabilityConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` observabilityConfigurationArn
+
+instance
+  Prelude.NFData
+    DescribeObservabilityConfiguration
+  where
+  rnf DescribeObservabilityConfiguration' {..} =
+    Prelude.rnf observabilityConfigurationArn
+
+instance
+  Data.ToHeaders
+    DescribeObservabilityConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.DescribeObservabilityConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribeObservabilityConfiguration
+  where
+  toJSON DescribeObservabilityConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "ObservabilityConfigurationArn"
+                  Data..= observabilityConfigurationArn
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    DescribeObservabilityConfiguration
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeObservabilityConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeObservabilityConfigurationResponse' smart constructor.
+data DescribeObservabilityConfigurationResponse = DescribeObservabilityConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A full description of the App Runner observability configuration that
+    -- you specified in this request.
+    observabilityConfiguration :: ObservabilityConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeObservabilityConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'describeObservabilityConfigurationResponse_httpStatus' - The response's http status code.
+--
+-- 'observabilityConfiguration', 'describeObservabilityConfigurationResponse_observabilityConfiguration' - A full description of the App Runner observability configuration that
+-- you specified in this request.
+newDescribeObservabilityConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'observabilityConfiguration'
+  ObservabilityConfiguration ->
+  DescribeObservabilityConfigurationResponse
+newDescribeObservabilityConfigurationResponse
+  pHttpStatus_
+  pObservabilityConfiguration_ =
+    DescribeObservabilityConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        observabilityConfiguration =
+          pObservabilityConfiguration_
+      }
+
+-- | The response's http status code.
+describeObservabilityConfigurationResponse_httpStatus :: Lens.Lens' DescribeObservabilityConfigurationResponse Prelude.Int
+describeObservabilityConfigurationResponse_httpStatus = Lens.lens (\DescribeObservabilityConfigurationResponse' {httpStatus} -> httpStatus) (\s@DescribeObservabilityConfigurationResponse' {} a -> s {httpStatus = a} :: DescribeObservabilityConfigurationResponse)
+
+-- | A full description of the App Runner observability configuration that
+-- you specified in this request.
+describeObservabilityConfigurationResponse_observabilityConfiguration :: Lens.Lens' DescribeObservabilityConfigurationResponse ObservabilityConfiguration
+describeObservabilityConfigurationResponse_observabilityConfiguration = Lens.lens (\DescribeObservabilityConfigurationResponse' {observabilityConfiguration} -> observabilityConfiguration) (\s@DescribeObservabilityConfigurationResponse' {} a -> s {observabilityConfiguration = a} :: DescribeObservabilityConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DescribeObservabilityConfigurationResponse
+  where
+  rnf DescribeObservabilityConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf observabilityConfiguration
diff --git a/gen/Amazonka/AppRunner/DescribeService.hs b/gen/Amazonka/AppRunner/DescribeService.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/DescribeService.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.AppRunner.DescribeService
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Return a full description of an App Runner service.
+module Amazonka.AppRunner.DescribeService
+  ( -- * Creating a Request
+    DescribeService (..),
+    newDescribeService,
+
+    -- * Request Lenses
+    describeService_serviceArn,
+
+    -- * Destructuring the Response
+    DescribeServiceResponse (..),
+    newDescribeServiceResponse,
+
+    -- * Response Lenses
+    describeServiceResponse_httpStatus,
+    describeServiceResponse_service,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newDescribeService' smart constructor.
+data DescribeService = DescribeService'
+  { -- | The Amazon Resource Name (ARN) of the App Runner service that you want a
+    -- description for.
+    serviceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeService' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serviceArn', 'describeService_serviceArn' - The Amazon Resource Name (ARN) of the App Runner service that you want a
+-- description for.
+newDescribeService ::
+  -- | 'serviceArn'
+  Prelude.Text ->
+  DescribeService
+newDescribeService pServiceArn_ =
+  DescribeService' {serviceArn = pServiceArn_}
+
+-- | The Amazon Resource Name (ARN) of the App Runner service that you want a
+-- description for.
+describeService_serviceArn :: Lens.Lens' DescribeService Prelude.Text
+describeService_serviceArn = Lens.lens (\DescribeService' {serviceArn} -> serviceArn) (\s@DescribeService' {} a -> s {serviceArn = a} :: DescribeService)
+
+instance Core.AWSRequest DescribeService where
+  type
+    AWSResponse DescribeService =
+      DescribeServiceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeServiceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Service")
+      )
+
+instance Prelude.Hashable DescribeService where
+  hashWithSalt _salt DescribeService' {..} =
+    _salt `Prelude.hashWithSalt` serviceArn
+
+instance Prelude.NFData DescribeService where
+  rnf DescribeService' {..} = Prelude.rnf serviceArn
+
+instance Data.ToHeaders DescribeService where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AppRunner.DescribeService" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeService where
+  toJSON DescribeService' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ServiceArn" Data..= serviceArn)]
+      )
+
+instance Data.ToPath DescribeService where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeService where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeServiceResponse' smart constructor.
+data DescribeServiceResponse = DescribeServiceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A full description of the App Runner service that you specified in this
+    -- request.
+    service :: Service
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeServiceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'describeServiceResponse_httpStatus' - The response's http status code.
+--
+-- 'service', 'describeServiceResponse_service' - A full description of the App Runner service that you specified in this
+-- request.
+newDescribeServiceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'service'
+  Service ->
+  DescribeServiceResponse
+newDescribeServiceResponse pHttpStatus_ pService_ =
+  DescribeServiceResponse'
+    { httpStatus = pHttpStatus_,
+      service = pService_
+    }
+
+-- | The response's http status code.
+describeServiceResponse_httpStatus :: Lens.Lens' DescribeServiceResponse Prelude.Int
+describeServiceResponse_httpStatus = Lens.lens (\DescribeServiceResponse' {httpStatus} -> httpStatus) (\s@DescribeServiceResponse' {} a -> s {httpStatus = a} :: DescribeServiceResponse)
+
+-- | A full description of the App Runner service that you specified in this
+-- request.
+describeServiceResponse_service :: Lens.Lens' DescribeServiceResponse Service
+describeServiceResponse_service = Lens.lens (\DescribeServiceResponse' {service} -> service) (\s@DescribeServiceResponse' {} a -> s {service = a} :: DescribeServiceResponse)
+
+instance Prelude.NFData DescribeServiceResponse where
+  rnf DescribeServiceResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf service
diff --git a/gen/Amazonka/AppRunner/DescribeVpcConnector.hs b/gen/Amazonka/AppRunner/DescribeVpcConnector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/DescribeVpcConnector.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.DescribeVpcConnector
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Return a description of an App Runner VPC connector resource.
+module Amazonka.AppRunner.DescribeVpcConnector
+  ( -- * Creating a Request
+    DescribeVpcConnector (..),
+    newDescribeVpcConnector,
+
+    -- * Request Lenses
+    describeVpcConnector_vpcConnectorArn,
+
+    -- * Destructuring the Response
+    DescribeVpcConnectorResponse (..),
+    newDescribeVpcConnectorResponse,
+
+    -- * Response Lenses
+    describeVpcConnectorResponse_httpStatus,
+    describeVpcConnectorResponse_vpcConnector,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newDescribeVpcConnector' smart constructor.
+data DescribeVpcConnector = DescribeVpcConnector'
+  { -- | The Amazon Resource Name (ARN) of the App Runner VPC connector that you
+    -- want a description for.
+    --
+    -- The ARN must be a full VPC connector ARN.
+    vpcConnectorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcConnector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpcConnectorArn', 'describeVpcConnector_vpcConnectorArn' - The Amazon Resource Name (ARN) of the App Runner VPC connector that you
+-- want a description for.
+--
+-- The ARN must be a full VPC connector ARN.
+newDescribeVpcConnector ::
+  -- | 'vpcConnectorArn'
+  Prelude.Text ->
+  DescribeVpcConnector
+newDescribeVpcConnector pVpcConnectorArn_ =
+  DescribeVpcConnector'
+    { vpcConnectorArn =
+        pVpcConnectorArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the App Runner VPC connector that you
+-- want a description for.
+--
+-- The ARN must be a full VPC connector ARN.
+describeVpcConnector_vpcConnectorArn :: Lens.Lens' DescribeVpcConnector Prelude.Text
+describeVpcConnector_vpcConnectorArn = Lens.lens (\DescribeVpcConnector' {vpcConnectorArn} -> vpcConnectorArn) (\s@DescribeVpcConnector' {} a -> s {vpcConnectorArn = a} :: DescribeVpcConnector)
+
+instance Core.AWSRequest DescribeVpcConnector where
+  type
+    AWSResponse DescribeVpcConnector =
+      DescribeVpcConnectorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeVpcConnectorResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "VpcConnector")
+      )
+
+instance Prelude.Hashable DescribeVpcConnector where
+  hashWithSalt _salt DescribeVpcConnector' {..} =
+    _salt `Prelude.hashWithSalt` vpcConnectorArn
+
+instance Prelude.NFData DescribeVpcConnector where
+  rnf DescribeVpcConnector' {..} =
+    Prelude.rnf vpcConnectorArn
+
+instance Data.ToHeaders DescribeVpcConnector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.DescribeVpcConnector" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeVpcConnector where
+  toJSON DescribeVpcConnector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("VpcConnectorArn" Data..= vpcConnectorArn)
+          ]
+      )
+
+instance Data.ToPath DescribeVpcConnector where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVpcConnector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeVpcConnectorResponse' smart constructor.
+data DescribeVpcConnectorResponse = DescribeVpcConnectorResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner VPC connector that you specified in this
+    -- request.
+    vpcConnector :: VpcConnector
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcConnectorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'describeVpcConnectorResponse_httpStatus' - The response's http status code.
+--
+-- 'vpcConnector', 'describeVpcConnectorResponse_vpcConnector' - A description of the App Runner VPC connector that you specified in this
+-- request.
+newDescribeVpcConnectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'vpcConnector'
+  VpcConnector ->
+  DescribeVpcConnectorResponse
+newDescribeVpcConnectorResponse
+  pHttpStatus_
+  pVpcConnector_ =
+    DescribeVpcConnectorResponse'
+      { httpStatus =
+          pHttpStatus_,
+        vpcConnector = pVpcConnector_
+      }
+
+-- | The response's http status code.
+describeVpcConnectorResponse_httpStatus :: Lens.Lens' DescribeVpcConnectorResponse Prelude.Int
+describeVpcConnectorResponse_httpStatus = Lens.lens (\DescribeVpcConnectorResponse' {httpStatus} -> httpStatus) (\s@DescribeVpcConnectorResponse' {} a -> s {httpStatus = a} :: DescribeVpcConnectorResponse)
+
+-- | A description of the App Runner VPC connector that you specified in this
+-- request.
+describeVpcConnectorResponse_vpcConnector :: Lens.Lens' DescribeVpcConnectorResponse VpcConnector
+describeVpcConnectorResponse_vpcConnector = Lens.lens (\DescribeVpcConnectorResponse' {vpcConnector} -> vpcConnector) (\s@DescribeVpcConnectorResponse' {} a -> s {vpcConnector = a} :: DescribeVpcConnectorResponse)
+
+instance Prelude.NFData DescribeVpcConnectorResponse where
+  rnf DescribeVpcConnectorResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf vpcConnector
diff --git a/gen/Amazonka/AppRunner/DescribeVpcIngressConnection.hs b/gen/Amazonka/AppRunner/DescribeVpcIngressConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/DescribeVpcIngressConnection.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.DescribeVpcIngressConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Return a full description of an App Runner VPC Ingress Connection
+-- resource.
+module Amazonka.AppRunner.DescribeVpcIngressConnection
+  ( -- * Creating a Request
+    DescribeVpcIngressConnection (..),
+    newDescribeVpcIngressConnection,
+
+    -- * Request Lenses
+    describeVpcIngressConnection_vpcIngressConnectionArn,
+
+    -- * Destructuring the Response
+    DescribeVpcIngressConnectionResponse (..),
+    newDescribeVpcIngressConnectionResponse,
+
+    -- * Response Lenses
+    describeVpcIngressConnectionResponse_httpStatus,
+    describeVpcIngressConnectionResponse_vpcIngressConnection,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newDescribeVpcIngressConnection' smart constructor.
+data DescribeVpcIngressConnection = DescribeVpcIngressConnection'
+  { -- | The Amazon Resource Name (ARN) of the App Runner VPC Ingress Connection
+    -- that you want a description for.
+    vpcIngressConnectionArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcIngressConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpcIngressConnectionArn', 'describeVpcIngressConnection_vpcIngressConnectionArn' - The Amazon Resource Name (ARN) of the App Runner VPC Ingress Connection
+-- that you want a description for.
+newDescribeVpcIngressConnection ::
+  -- | 'vpcIngressConnectionArn'
+  Prelude.Text ->
+  DescribeVpcIngressConnection
+newDescribeVpcIngressConnection
+  pVpcIngressConnectionArn_ =
+    DescribeVpcIngressConnection'
+      { vpcIngressConnectionArn =
+          pVpcIngressConnectionArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the App Runner VPC Ingress Connection
+-- that you want a description for.
+describeVpcIngressConnection_vpcIngressConnectionArn :: Lens.Lens' DescribeVpcIngressConnection Prelude.Text
+describeVpcIngressConnection_vpcIngressConnectionArn = Lens.lens (\DescribeVpcIngressConnection' {vpcIngressConnectionArn} -> vpcIngressConnectionArn) (\s@DescribeVpcIngressConnection' {} a -> s {vpcIngressConnectionArn = a} :: DescribeVpcIngressConnection)
+
+instance Core.AWSRequest DescribeVpcIngressConnection where
+  type
+    AWSResponse DescribeVpcIngressConnection =
+      DescribeVpcIngressConnectionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeVpcIngressConnectionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "VpcIngressConnection")
+      )
+
+instance
+  Prelude.Hashable
+    DescribeVpcIngressConnection
+  where
+  hashWithSalt _salt DescribeVpcIngressConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` vpcIngressConnectionArn
+
+instance Prelude.NFData DescribeVpcIngressConnection where
+  rnf DescribeVpcIngressConnection' {..} =
+    Prelude.rnf vpcIngressConnectionArn
+
+instance Data.ToHeaders DescribeVpcIngressConnection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.DescribeVpcIngressConnection" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeVpcIngressConnection where
+  toJSON DescribeVpcIngressConnection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "VpcIngressConnectionArn"
+                  Data..= vpcIngressConnectionArn
+              )
+          ]
+      )
+
+instance Data.ToPath DescribeVpcIngressConnection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVpcIngressConnection where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeVpcIngressConnectionResponse' smart constructor.
+data DescribeVpcIngressConnectionResponse = DescribeVpcIngressConnectionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner VPC Ingress Connection that you
+    -- specified in this request.
+    vpcIngressConnection :: VpcIngressConnection
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcIngressConnectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'describeVpcIngressConnectionResponse_httpStatus' - The response's http status code.
+--
+-- 'vpcIngressConnection', 'describeVpcIngressConnectionResponse_vpcIngressConnection' - A description of the App Runner VPC Ingress Connection that you
+-- specified in this request.
+newDescribeVpcIngressConnectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'vpcIngressConnection'
+  VpcIngressConnection ->
+  DescribeVpcIngressConnectionResponse
+newDescribeVpcIngressConnectionResponse
+  pHttpStatus_
+  pVpcIngressConnection_ =
+    DescribeVpcIngressConnectionResponse'
+      { httpStatus =
+          pHttpStatus_,
+        vpcIngressConnection =
+          pVpcIngressConnection_
+      }
+
+-- | The response's http status code.
+describeVpcIngressConnectionResponse_httpStatus :: Lens.Lens' DescribeVpcIngressConnectionResponse Prelude.Int
+describeVpcIngressConnectionResponse_httpStatus = Lens.lens (\DescribeVpcIngressConnectionResponse' {httpStatus} -> httpStatus) (\s@DescribeVpcIngressConnectionResponse' {} a -> s {httpStatus = a} :: DescribeVpcIngressConnectionResponse)
+
+-- | A description of the App Runner VPC Ingress Connection that you
+-- specified in this request.
+describeVpcIngressConnectionResponse_vpcIngressConnection :: Lens.Lens' DescribeVpcIngressConnectionResponse VpcIngressConnection
+describeVpcIngressConnectionResponse_vpcIngressConnection = Lens.lens (\DescribeVpcIngressConnectionResponse' {vpcIngressConnection} -> vpcIngressConnection) (\s@DescribeVpcIngressConnectionResponse' {} a -> s {vpcIngressConnection = a} :: DescribeVpcIngressConnectionResponse)
+
+instance
+  Prelude.NFData
+    DescribeVpcIngressConnectionResponse
+  where
+  rnf DescribeVpcIngressConnectionResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf vpcIngressConnection
diff --git a/gen/Amazonka/AppRunner/DisassociateCustomDomain.hs b/gen/Amazonka/AppRunner/DisassociateCustomDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/DisassociateCustomDomain.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.AppRunner.DisassociateCustomDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociate a custom domain name from an App Runner service.
+--
+-- Certificates tracking domain validity are associated with a custom
+-- domain and are stored in
+-- <https://docs.aws.amazon.com/acm/latest/userguide AWS Certificate Manager (ACM)>.
+-- These certificates aren\'t deleted as part of this action. App Runner
+-- delays certificate deletion for 30 days after a domain is disassociated
+-- from your service.
+module Amazonka.AppRunner.DisassociateCustomDomain
+  ( -- * Creating a Request
+    DisassociateCustomDomain (..),
+    newDisassociateCustomDomain,
+
+    -- * Request Lenses
+    disassociateCustomDomain_serviceArn,
+    disassociateCustomDomain_domainName,
+
+    -- * Destructuring the Response
+    DisassociateCustomDomainResponse (..),
+    newDisassociateCustomDomainResponse,
+
+    -- * Response Lenses
+    disassociateCustomDomainResponse_httpStatus,
+    disassociateCustomDomainResponse_dNSTarget,
+    disassociateCustomDomainResponse_serviceArn,
+    disassociateCustomDomainResponse_customDomain,
+    disassociateCustomDomainResponse_vpcDNSTargets,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newDisassociateCustomDomain' smart constructor.
+data DisassociateCustomDomain = DisassociateCustomDomain'
+  { -- | The Amazon Resource Name (ARN) of the App Runner service that you want
+    -- to disassociate a custom domain name from.
+    serviceArn :: Prelude.Text,
+    -- | The domain name that you want to disassociate from the App Runner
+    -- service.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateCustomDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serviceArn', 'disassociateCustomDomain_serviceArn' - The Amazon Resource Name (ARN) of the App Runner service that you want
+-- to disassociate a custom domain name from.
+--
+-- 'domainName', 'disassociateCustomDomain_domainName' - The domain name that you want to disassociate from the App Runner
+-- service.
+newDisassociateCustomDomain ::
+  -- | 'serviceArn'
+  Prelude.Text ->
+  -- | 'domainName'
+  Prelude.Text ->
+  DisassociateCustomDomain
+newDisassociateCustomDomain pServiceArn_ pDomainName_ =
+  DisassociateCustomDomain'
+    { serviceArn =
+        pServiceArn_,
+      domainName = pDomainName_
+    }
+
+-- | The Amazon Resource Name (ARN) of the App Runner service that you want
+-- to disassociate a custom domain name from.
+disassociateCustomDomain_serviceArn :: Lens.Lens' DisassociateCustomDomain Prelude.Text
+disassociateCustomDomain_serviceArn = Lens.lens (\DisassociateCustomDomain' {serviceArn} -> serviceArn) (\s@DisassociateCustomDomain' {} a -> s {serviceArn = a} :: DisassociateCustomDomain)
+
+-- | The domain name that you want to disassociate from the App Runner
+-- service.
+disassociateCustomDomain_domainName :: Lens.Lens' DisassociateCustomDomain Prelude.Text
+disassociateCustomDomain_domainName = Lens.lens (\DisassociateCustomDomain' {domainName} -> domainName) (\s@DisassociateCustomDomain' {} a -> s {domainName = a} :: DisassociateCustomDomain)
+
+instance Core.AWSRequest DisassociateCustomDomain where
+  type
+    AWSResponse DisassociateCustomDomain =
+      DisassociateCustomDomainResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DisassociateCustomDomainResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "DNSTarget")
+            Prelude.<*> (x Data..:> "ServiceArn")
+            Prelude.<*> (x Data..:> "CustomDomain")
+            Prelude.<*> (x Data..?> "VpcDNSTargets" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable DisassociateCustomDomain where
+  hashWithSalt _salt DisassociateCustomDomain' {..} =
+    _salt
+      `Prelude.hashWithSalt` serviceArn
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData DisassociateCustomDomain where
+  rnf DisassociateCustomDomain' {..} =
+    Prelude.rnf serviceArn
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders DisassociateCustomDomain where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.DisassociateCustomDomain" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateCustomDomain where
+  toJSON DisassociateCustomDomain' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ServiceArn" Data..= serviceArn),
+            Prelude.Just ("DomainName" Data..= domainName)
+          ]
+      )
+
+instance Data.ToPath DisassociateCustomDomain where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateCustomDomain where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateCustomDomainResponse' smart constructor.
+data DisassociateCustomDomainResponse = DisassociateCustomDomainResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The App Runner subdomain of the App Runner service. The disassociated
+    -- custom domain name was mapped to this target name.
+    dNSTarget :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the App Runner service that a custom
+    -- domain name is disassociated from.
+    serviceArn :: Prelude.Text,
+    -- | A description of the domain name that\'s being disassociated.
+    customDomain :: CustomDomain,
+    -- | DNS Target records for the custom domains of this Amazon VPC.
+    vpcDNSTargets :: [VpcDNSTarget]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateCustomDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'disassociateCustomDomainResponse_httpStatus' - The response's http status code.
+--
+-- 'dNSTarget', 'disassociateCustomDomainResponse_dNSTarget' - The App Runner subdomain of the App Runner service. The disassociated
+-- custom domain name was mapped to this target name.
+--
+-- 'serviceArn', 'disassociateCustomDomainResponse_serviceArn' - The Amazon Resource Name (ARN) of the App Runner service that a custom
+-- domain name is disassociated from.
+--
+-- 'customDomain', 'disassociateCustomDomainResponse_customDomain' - A description of the domain name that\'s being disassociated.
+--
+-- 'vpcDNSTargets', 'disassociateCustomDomainResponse_vpcDNSTargets' - DNS Target records for the custom domains of this Amazon VPC.
+newDisassociateCustomDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'dNSTarget'
+  Prelude.Text ->
+  -- | 'serviceArn'
+  Prelude.Text ->
+  -- | 'customDomain'
+  CustomDomain ->
+  DisassociateCustomDomainResponse
+newDisassociateCustomDomainResponse
+  pHttpStatus_
+  pDNSTarget_
+  pServiceArn_
+  pCustomDomain_ =
+    DisassociateCustomDomainResponse'
+      { httpStatus =
+          pHttpStatus_,
+        dNSTarget = pDNSTarget_,
+        serviceArn = pServiceArn_,
+        customDomain = pCustomDomain_,
+        vpcDNSTargets = Prelude.mempty
+      }
+
+-- | The response's http status code.
+disassociateCustomDomainResponse_httpStatus :: Lens.Lens' DisassociateCustomDomainResponse Prelude.Int
+disassociateCustomDomainResponse_httpStatus = Lens.lens (\DisassociateCustomDomainResponse' {httpStatus} -> httpStatus) (\s@DisassociateCustomDomainResponse' {} a -> s {httpStatus = a} :: DisassociateCustomDomainResponse)
+
+-- | The App Runner subdomain of the App Runner service. The disassociated
+-- custom domain name was mapped to this target name.
+disassociateCustomDomainResponse_dNSTarget :: Lens.Lens' DisassociateCustomDomainResponse Prelude.Text
+disassociateCustomDomainResponse_dNSTarget = Lens.lens (\DisassociateCustomDomainResponse' {dNSTarget} -> dNSTarget) (\s@DisassociateCustomDomainResponse' {} a -> s {dNSTarget = a} :: DisassociateCustomDomainResponse)
+
+-- | The Amazon Resource Name (ARN) of the App Runner service that a custom
+-- domain name is disassociated from.
+disassociateCustomDomainResponse_serviceArn :: Lens.Lens' DisassociateCustomDomainResponse Prelude.Text
+disassociateCustomDomainResponse_serviceArn = Lens.lens (\DisassociateCustomDomainResponse' {serviceArn} -> serviceArn) (\s@DisassociateCustomDomainResponse' {} a -> s {serviceArn = a} :: DisassociateCustomDomainResponse)
+
+-- | A description of the domain name that\'s being disassociated.
+disassociateCustomDomainResponse_customDomain :: Lens.Lens' DisassociateCustomDomainResponse CustomDomain
+disassociateCustomDomainResponse_customDomain = Lens.lens (\DisassociateCustomDomainResponse' {customDomain} -> customDomain) (\s@DisassociateCustomDomainResponse' {} a -> s {customDomain = a} :: DisassociateCustomDomainResponse)
+
+-- | DNS Target records for the custom domains of this Amazon VPC.
+disassociateCustomDomainResponse_vpcDNSTargets :: Lens.Lens' DisassociateCustomDomainResponse [VpcDNSTarget]
+disassociateCustomDomainResponse_vpcDNSTargets = Lens.lens (\DisassociateCustomDomainResponse' {vpcDNSTargets} -> vpcDNSTargets) (\s@DisassociateCustomDomainResponse' {} a -> s {vpcDNSTargets = a} :: DisassociateCustomDomainResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    DisassociateCustomDomainResponse
+  where
+  rnf DisassociateCustomDomainResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf dNSTarget
+      `Prelude.seq` Prelude.rnf serviceArn
+      `Prelude.seq` Prelude.rnf customDomain
+      `Prelude.seq` Prelude.rnf vpcDNSTargets
diff --git a/gen/Amazonka/AppRunner/Lens.hs b/gen/Amazonka/AppRunner/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Lens.hs
@@ -0,0 +1,545 @@
+{-# 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.AppRunner.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.AppRunner.Lens
+  ( -- * Operations
+
+    -- ** AssociateCustomDomain
+    associateCustomDomain_enableWWWSubdomain,
+    associateCustomDomain_serviceArn,
+    associateCustomDomain_domainName,
+    associateCustomDomainResponse_httpStatus,
+    associateCustomDomainResponse_dNSTarget,
+    associateCustomDomainResponse_serviceArn,
+    associateCustomDomainResponse_customDomain,
+    associateCustomDomainResponse_vpcDNSTargets,
+
+    -- ** CreateAutoScalingConfiguration
+    createAutoScalingConfiguration_maxConcurrency,
+    createAutoScalingConfiguration_maxSize,
+    createAutoScalingConfiguration_minSize,
+    createAutoScalingConfiguration_tags,
+    createAutoScalingConfiguration_autoScalingConfigurationName,
+    createAutoScalingConfigurationResponse_httpStatus,
+    createAutoScalingConfigurationResponse_autoScalingConfiguration,
+
+    -- ** CreateConnection
+    createConnection_tags,
+    createConnection_connectionName,
+    createConnection_providerType,
+    createConnectionResponse_httpStatus,
+    createConnectionResponse_connection,
+
+    -- ** CreateObservabilityConfiguration
+    createObservabilityConfiguration_tags,
+    createObservabilityConfiguration_traceConfiguration,
+    createObservabilityConfiguration_observabilityConfigurationName,
+    createObservabilityConfigurationResponse_httpStatus,
+    createObservabilityConfigurationResponse_observabilityConfiguration,
+
+    -- ** CreateService
+    createService_autoScalingConfigurationArn,
+    createService_encryptionConfiguration,
+    createService_healthCheckConfiguration,
+    createService_instanceConfiguration,
+    createService_networkConfiguration,
+    createService_observabilityConfiguration,
+    createService_tags,
+    createService_serviceName,
+    createService_sourceConfiguration,
+    createServiceResponse_httpStatus,
+    createServiceResponse_service,
+    createServiceResponse_operationId,
+
+    -- ** CreateVpcConnector
+    createVpcConnector_securityGroups,
+    createVpcConnector_tags,
+    createVpcConnector_vpcConnectorName,
+    createVpcConnector_subnets,
+    createVpcConnectorResponse_httpStatus,
+    createVpcConnectorResponse_vpcConnector,
+
+    -- ** CreateVpcIngressConnection
+    createVpcIngressConnection_tags,
+    createVpcIngressConnection_serviceArn,
+    createVpcIngressConnection_vpcIngressConnectionName,
+    createVpcIngressConnection_ingressVpcConfiguration,
+    createVpcIngressConnectionResponse_httpStatus,
+    createVpcIngressConnectionResponse_vpcIngressConnection,
+
+    -- ** DeleteAutoScalingConfiguration
+    deleteAutoScalingConfiguration_autoScalingConfigurationArn,
+    deleteAutoScalingConfigurationResponse_httpStatus,
+    deleteAutoScalingConfigurationResponse_autoScalingConfiguration,
+
+    -- ** DeleteConnection
+    deleteConnection_connectionArn,
+    deleteConnectionResponse_connection,
+    deleteConnectionResponse_httpStatus,
+
+    -- ** DeleteObservabilityConfiguration
+    deleteObservabilityConfiguration_observabilityConfigurationArn,
+    deleteObservabilityConfigurationResponse_httpStatus,
+    deleteObservabilityConfigurationResponse_observabilityConfiguration,
+
+    -- ** DeleteService
+    deleteService_serviceArn,
+    deleteServiceResponse_httpStatus,
+    deleteServiceResponse_service,
+    deleteServiceResponse_operationId,
+
+    -- ** DeleteVpcConnector
+    deleteVpcConnector_vpcConnectorArn,
+    deleteVpcConnectorResponse_httpStatus,
+    deleteVpcConnectorResponse_vpcConnector,
+
+    -- ** DeleteVpcIngressConnection
+    deleteVpcIngressConnection_vpcIngressConnectionArn,
+    deleteVpcIngressConnectionResponse_httpStatus,
+    deleteVpcIngressConnectionResponse_vpcIngressConnection,
+
+    -- ** DescribeAutoScalingConfiguration
+    describeAutoScalingConfiguration_autoScalingConfigurationArn,
+    describeAutoScalingConfigurationResponse_httpStatus,
+    describeAutoScalingConfigurationResponse_autoScalingConfiguration,
+
+    -- ** DescribeCustomDomains
+    describeCustomDomains_maxResults,
+    describeCustomDomains_nextToken,
+    describeCustomDomains_serviceArn,
+    describeCustomDomainsResponse_nextToken,
+    describeCustomDomainsResponse_httpStatus,
+    describeCustomDomainsResponse_dNSTarget,
+    describeCustomDomainsResponse_serviceArn,
+    describeCustomDomainsResponse_customDomains,
+    describeCustomDomainsResponse_vpcDNSTargets,
+
+    -- ** DescribeObservabilityConfiguration
+    describeObservabilityConfiguration_observabilityConfigurationArn,
+    describeObservabilityConfigurationResponse_httpStatus,
+    describeObservabilityConfigurationResponse_observabilityConfiguration,
+
+    -- ** DescribeService
+    describeService_serviceArn,
+    describeServiceResponse_httpStatus,
+    describeServiceResponse_service,
+
+    -- ** DescribeVpcConnector
+    describeVpcConnector_vpcConnectorArn,
+    describeVpcConnectorResponse_httpStatus,
+    describeVpcConnectorResponse_vpcConnector,
+
+    -- ** DescribeVpcIngressConnection
+    describeVpcIngressConnection_vpcIngressConnectionArn,
+    describeVpcIngressConnectionResponse_httpStatus,
+    describeVpcIngressConnectionResponse_vpcIngressConnection,
+
+    -- ** DisassociateCustomDomain
+    disassociateCustomDomain_serviceArn,
+    disassociateCustomDomain_domainName,
+    disassociateCustomDomainResponse_httpStatus,
+    disassociateCustomDomainResponse_dNSTarget,
+    disassociateCustomDomainResponse_serviceArn,
+    disassociateCustomDomainResponse_customDomain,
+    disassociateCustomDomainResponse_vpcDNSTargets,
+
+    -- ** ListAutoScalingConfigurations
+    listAutoScalingConfigurations_autoScalingConfigurationName,
+    listAutoScalingConfigurations_latestOnly,
+    listAutoScalingConfigurations_maxResults,
+    listAutoScalingConfigurations_nextToken,
+    listAutoScalingConfigurationsResponse_nextToken,
+    listAutoScalingConfigurationsResponse_httpStatus,
+    listAutoScalingConfigurationsResponse_autoScalingConfigurationSummaryList,
+
+    -- ** ListConnections
+    listConnections_connectionName,
+    listConnections_maxResults,
+    listConnections_nextToken,
+    listConnectionsResponse_nextToken,
+    listConnectionsResponse_httpStatus,
+    listConnectionsResponse_connectionSummaryList,
+
+    -- ** ListObservabilityConfigurations
+    listObservabilityConfigurations_latestOnly,
+    listObservabilityConfigurations_maxResults,
+    listObservabilityConfigurations_nextToken,
+    listObservabilityConfigurations_observabilityConfigurationName,
+    listObservabilityConfigurationsResponse_nextToken,
+    listObservabilityConfigurationsResponse_httpStatus,
+    listObservabilityConfigurationsResponse_observabilityConfigurationSummaryList,
+
+    -- ** ListOperations
+    listOperations_maxResults,
+    listOperations_nextToken,
+    listOperations_serviceArn,
+    listOperationsResponse_nextToken,
+    listOperationsResponse_operationSummaryList,
+    listOperationsResponse_httpStatus,
+
+    -- ** ListServices
+    listServices_maxResults,
+    listServices_nextToken,
+    listServicesResponse_nextToken,
+    listServicesResponse_httpStatus,
+    listServicesResponse_serviceSummaryList,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListVpcConnectors
+    listVpcConnectors_maxResults,
+    listVpcConnectors_nextToken,
+    listVpcConnectorsResponse_nextToken,
+    listVpcConnectorsResponse_httpStatus,
+    listVpcConnectorsResponse_vpcConnectors,
+
+    -- ** ListVpcIngressConnections
+    listVpcIngressConnections_filter,
+    listVpcIngressConnections_maxResults,
+    listVpcIngressConnections_nextToken,
+    listVpcIngressConnectionsResponse_nextToken,
+    listVpcIngressConnectionsResponse_httpStatus,
+    listVpcIngressConnectionsResponse_vpcIngressConnectionSummaryList,
+
+    -- ** PauseService
+    pauseService_serviceArn,
+    pauseServiceResponse_operationId,
+    pauseServiceResponse_httpStatus,
+    pauseServiceResponse_service,
+
+    -- ** ResumeService
+    resumeService_serviceArn,
+    resumeServiceResponse_operationId,
+    resumeServiceResponse_httpStatus,
+    resumeServiceResponse_service,
+
+    -- ** StartDeployment
+    startDeployment_serviceArn,
+    startDeploymentResponse_httpStatus,
+    startDeploymentResponse_operationId,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateService
+    updateService_autoScalingConfigurationArn,
+    updateService_healthCheckConfiguration,
+    updateService_instanceConfiguration,
+    updateService_networkConfiguration,
+    updateService_observabilityConfiguration,
+    updateService_sourceConfiguration,
+    updateService_serviceArn,
+    updateServiceResponse_httpStatus,
+    updateServiceResponse_service,
+    updateServiceResponse_operationId,
+
+    -- ** UpdateVpcIngressConnection
+    updateVpcIngressConnection_vpcIngressConnectionArn,
+    updateVpcIngressConnection_ingressVpcConfiguration,
+    updateVpcIngressConnectionResponse_httpStatus,
+    updateVpcIngressConnectionResponse_vpcIngressConnection,
+
+    -- * Types
+
+    -- ** AuthenticationConfiguration
+    authenticationConfiguration_accessRoleArn,
+    authenticationConfiguration_connectionArn,
+
+    -- ** AutoScalingConfiguration
+    autoScalingConfiguration_autoScalingConfigurationArn,
+    autoScalingConfiguration_autoScalingConfigurationName,
+    autoScalingConfiguration_autoScalingConfigurationRevision,
+    autoScalingConfiguration_createdAt,
+    autoScalingConfiguration_deletedAt,
+    autoScalingConfiguration_latest,
+    autoScalingConfiguration_maxConcurrency,
+    autoScalingConfiguration_maxSize,
+    autoScalingConfiguration_minSize,
+    autoScalingConfiguration_status,
+
+    -- ** AutoScalingConfigurationSummary
+    autoScalingConfigurationSummary_autoScalingConfigurationArn,
+    autoScalingConfigurationSummary_autoScalingConfigurationName,
+    autoScalingConfigurationSummary_autoScalingConfigurationRevision,
+
+    -- ** CertificateValidationRecord
+    certificateValidationRecord_name,
+    certificateValidationRecord_status,
+    certificateValidationRecord_type,
+    certificateValidationRecord_value,
+
+    -- ** CodeConfiguration
+    codeConfiguration_codeConfigurationValues,
+    codeConfiguration_configurationSource,
+
+    -- ** CodeConfigurationValues
+    codeConfigurationValues_buildCommand,
+    codeConfigurationValues_port,
+    codeConfigurationValues_runtimeEnvironmentSecrets,
+    codeConfigurationValues_runtimeEnvironmentVariables,
+    codeConfigurationValues_startCommand,
+    codeConfigurationValues_runtime,
+
+    -- ** CodeRepository
+    codeRepository_codeConfiguration,
+    codeRepository_repositoryUrl,
+    codeRepository_sourceCodeVersion,
+
+    -- ** Connection
+    connection_connectionArn,
+    connection_connectionName,
+    connection_createdAt,
+    connection_providerType,
+    connection_status,
+
+    -- ** ConnectionSummary
+    connectionSummary_connectionArn,
+    connectionSummary_connectionName,
+    connectionSummary_createdAt,
+    connectionSummary_providerType,
+    connectionSummary_status,
+
+    -- ** CustomDomain
+    customDomain_certificateValidationRecords,
+    customDomain_domainName,
+    customDomain_enableWWWSubdomain,
+    customDomain_status,
+
+    -- ** EgressConfiguration
+    egressConfiguration_egressType,
+    egressConfiguration_vpcConnectorArn,
+
+    -- ** EncryptionConfiguration
+    encryptionConfiguration_kmsKey,
+
+    -- ** HealthCheckConfiguration
+    healthCheckConfiguration_healthyThreshold,
+    healthCheckConfiguration_interval,
+    healthCheckConfiguration_path,
+    healthCheckConfiguration_protocol,
+    healthCheckConfiguration_timeout,
+    healthCheckConfiguration_unhealthyThreshold,
+
+    -- ** ImageConfiguration
+    imageConfiguration_port,
+    imageConfiguration_runtimeEnvironmentSecrets,
+    imageConfiguration_runtimeEnvironmentVariables,
+    imageConfiguration_startCommand,
+
+    -- ** ImageRepository
+    imageRepository_imageConfiguration,
+    imageRepository_imageIdentifier,
+    imageRepository_imageRepositoryType,
+
+    -- ** IngressConfiguration
+    ingressConfiguration_isPubliclyAccessible,
+
+    -- ** IngressVpcConfiguration
+    ingressVpcConfiguration_vpcEndpointId,
+    ingressVpcConfiguration_vpcId,
+
+    -- ** InstanceConfiguration
+    instanceConfiguration_cpu,
+    instanceConfiguration_instanceRoleArn,
+    instanceConfiguration_memory,
+
+    -- ** ListVpcIngressConnectionsFilter
+    listVpcIngressConnectionsFilter_serviceArn,
+    listVpcIngressConnectionsFilter_vpcEndpointId,
+
+    -- ** NetworkConfiguration
+    networkConfiguration_egressConfiguration,
+    networkConfiguration_ingressConfiguration,
+
+    -- ** ObservabilityConfiguration
+    observabilityConfiguration_createdAt,
+    observabilityConfiguration_deletedAt,
+    observabilityConfiguration_latest,
+    observabilityConfiguration_observabilityConfigurationArn,
+    observabilityConfiguration_observabilityConfigurationName,
+    observabilityConfiguration_observabilityConfigurationRevision,
+    observabilityConfiguration_status,
+    observabilityConfiguration_traceConfiguration,
+
+    -- ** ObservabilityConfigurationSummary
+    observabilityConfigurationSummary_observabilityConfigurationArn,
+    observabilityConfigurationSummary_observabilityConfigurationName,
+    observabilityConfigurationSummary_observabilityConfigurationRevision,
+
+    -- ** OperationSummary
+    operationSummary_endedAt,
+    operationSummary_id,
+    operationSummary_startedAt,
+    operationSummary_status,
+    operationSummary_targetArn,
+    operationSummary_type,
+    operationSummary_updatedAt,
+
+    -- ** Service
+    service_deletedAt,
+    service_encryptionConfiguration,
+    service_healthCheckConfiguration,
+    service_observabilityConfiguration,
+    service_serviceUrl,
+    service_serviceName,
+    service_serviceId,
+    service_serviceArn,
+    service_createdAt,
+    service_updatedAt,
+    service_status,
+    service_sourceConfiguration,
+    service_instanceConfiguration,
+    service_autoScalingConfigurationSummary,
+    service_networkConfiguration,
+
+    -- ** ServiceObservabilityConfiguration
+    serviceObservabilityConfiguration_observabilityConfigurationArn,
+    serviceObservabilityConfiguration_observabilityEnabled,
+
+    -- ** ServiceSummary
+    serviceSummary_createdAt,
+    serviceSummary_serviceArn,
+    serviceSummary_serviceId,
+    serviceSummary_serviceName,
+    serviceSummary_serviceUrl,
+    serviceSummary_status,
+    serviceSummary_updatedAt,
+
+    -- ** SourceCodeVersion
+    sourceCodeVersion_type,
+    sourceCodeVersion_value,
+
+    -- ** SourceConfiguration
+    sourceConfiguration_authenticationConfiguration,
+    sourceConfiguration_autoDeploymentsEnabled,
+    sourceConfiguration_codeRepository,
+    sourceConfiguration_imageRepository,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** TraceConfiguration
+    traceConfiguration_vendor,
+
+    -- ** VpcConnector
+    vpcConnector_createdAt,
+    vpcConnector_deletedAt,
+    vpcConnector_securityGroups,
+    vpcConnector_status,
+    vpcConnector_subnets,
+    vpcConnector_vpcConnectorArn,
+    vpcConnector_vpcConnectorName,
+    vpcConnector_vpcConnectorRevision,
+
+    -- ** VpcDNSTarget
+    vpcDNSTarget_domainName,
+    vpcDNSTarget_vpcId,
+    vpcDNSTarget_vpcIngressConnectionArn,
+
+    -- ** VpcIngressConnection
+    vpcIngressConnection_accountId,
+    vpcIngressConnection_createdAt,
+    vpcIngressConnection_deletedAt,
+    vpcIngressConnection_domainName,
+    vpcIngressConnection_ingressVpcConfiguration,
+    vpcIngressConnection_serviceArn,
+    vpcIngressConnection_status,
+    vpcIngressConnection_vpcIngressConnectionArn,
+    vpcIngressConnection_vpcIngressConnectionName,
+
+    -- ** VpcIngressConnectionSummary
+    vpcIngressConnectionSummary_serviceArn,
+    vpcIngressConnectionSummary_vpcIngressConnectionArn,
+  )
+where
+
+import Amazonka.AppRunner.AssociateCustomDomain
+import Amazonka.AppRunner.CreateAutoScalingConfiguration
+import Amazonka.AppRunner.CreateConnection
+import Amazonka.AppRunner.CreateObservabilityConfiguration
+import Amazonka.AppRunner.CreateService
+import Amazonka.AppRunner.CreateVpcConnector
+import Amazonka.AppRunner.CreateVpcIngressConnection
+import Amazonka.AppRunner.DeleteAutoScalingConfiguration
+import Amazonka.AppRunner.DeleteConnection
+import Amazonka.AppRunner.DeleteObservabilityConfiguration
+import Amazonka.AppRunner.DeleteService
+import Amazonka.AppRunner.DeleteVpcConnector
+import Amazonka.AppRunner.DeleteVpcIngressConnection
+import Amazonka.AppRunner.DescribeAutoScalingConfiguration
+import Amazonka.AppRunner.DescribeCustomDomains
+import Amazonka.AppRunner.DescribeObservabilityConfiguration
+import Amazonka.AppRunner.DescribeService
+import Amazonka.AppRunner.DescribeVpcConnector
+import Amazonka.AppRunner.DescribeVpcIngressConnection
+import Amazonka.AppRunner.DisassociateCustomDomain
+import Amazonka.AppRunner.ListAutoScalingConfigurations
+import Amazonka.AppRunner.ListConnections
+import Amazonka.AppRunner.ListObservabilityConfigurations
+import Amazonka.AppRunner.ListOperations
+import Amazonka.AppRunner.ListServices
+import Amazonka.AppRunner.ListTagsForResource
+import Amazonka.AppRunner.ListVpcConnectors
+import Amazonka.AppRunner.ListVpcIngressConnections
+import Amazonka.AppRunner.PauseService
+import Amazonka.AppRunner.ResumeService
+import Amazonka.AppRunner.StartDeployment
+import Amazonka.AppRunner.TagResource
+import Amazonka.AppRunner.Types.AuthenticationConfiguration
+import Amazonka.AppRunner.Types.AutoScalingConfiguration
+import Amazonka.AppRunner.Types.AutoScalingConfigurationSummary
+import Amazonka.AppRunner.Types.CertificateValidationRecord
+import Amazonka.AppRunner.Types.CodeConfiguration
+import Amazonka.AppRunner.Types.CodeConfigurationValues
+import Amazonka.AppRunner.Types.CodeRepository
+import Amazonka.AppRunner.Types.Connection
+import Amazonka.AppRunner.Types.ConnectionSummary
+import Amazonka.AppRunner.Types.CustomDomain
+import Amazonka.AppRunner.Types.EgressConfiguration
+import Amazonka.AppRunner.Types.EncryptionConfiguration
+import Amazonka.AppRunner.Types.HealthCheckConfiguration
+import Amazonka.AppRunner.Types.ImageConfiguration
+import Amazonka.AppRunner.Types.ImageRepository
+import Amazonka.AppRunner.Types.IngressConfiguration
+import Amazonka.AppRunner.Types.IngressVpcConfiguration
+import Amazonka.AppRunner.Types.InstanceConfiguration
+import Amazonka.AppRunner.Types.ListVpcIngressConnectionsFilter
+import Amazonka.AppRunner.Types.NetworkConfiguration
+import Amazonka.AppRunner.Types.ObservabilityConfiguration
+import Amazonka.AppRunner.Types.ObservabilityConfigurationSummary
+import Amazonka.AppRunner.Types.OperationSummary
+import Amazonka.AppRunner.Types.Service
+import Amazonka.AppRunner.Types.ServiceObservabilityConfiguration
+import Amazonka.AppRunner.Types.ServiceSummary
+import Amazonka.AppRunner.Types.SourceCodeVersion
+import Amazonka.AppRunner.Types.SourceConfiguration
+import Amazonka.AppRunner.Types.Tag
+import Amazonka.AppRunner.Types.TraceConfiguration
+import Amazonka.AppRunner.Types.VpcConnector
+import Amazonka.AppRunner.Types.VpcDNSTarget
+import Amazonka.AppRunner.Types.VpcIngressConnection
+import Amazonka.AppRunner.Types.VpcIngressConnectionSummary
+import Amazonka.AppRunner.UntagResource
+import Amazonka.AppRunner.UpdateService
+import Amazonka.AppRunner.UpdateVpcIngressConnection
diff --git a/gen/Amazonka/AppRunner/ListAutoScalingConfigurations.hs b/gen/Amazonka/AppRunner/ListAutoScalingConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/ListAutoScalingConfigurations.hs
@@ -0,0 +1,308 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.ListAutoScalingConfigurations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of active App Runner automatic scaling configurations in
+-- your Amazon Web Services account. You can query the revisions for a
+-- specific configuration name or the revisions for all active
+-- configurations in your account. You can optionally query only the latest
+-- revision of each requested name.
+--
+-- To retrieve a full description of a particular configuration revision,
+-- call and provide one of the ARNs returned by
+-- @ListAutoScalingConfigurations@.
+module Amazonka.AppRunner.ListAutoScalingConfigurations
+  ( -- * Creating a Request
+    ListAutoScalingConfigurations (..),
+    newListAutoScalingConfigurations,
+
+    -- * Request Lenses
+    listAutoScalingConfigurations_autoScalingConfigurationName,
+    listAutoScalingConfigurations_latestOnly,
+    listAutoScalingConfigurations_maxResults,
+    listAutoScalingConfigurations_nextToken,
+
+    -- * Destructuring the Response
+    ListAutoScalingConfigurationsResponse (..),
+    newListAutoScalingConfigurationsResponse,
+
+    -- * Response Lenses
+    listAutoScalingConfigurationsResponse_nextToken,
+    listAutoScalingConfigurationsResponse_httpStatus,
+    listAutoScalingConfigurationsResponse_autoScalingConfigurationSummaryList,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newListAutoScalingConfigurations' smart constructor.
+data ListAutoScalingConfigurations = ListAutoScalingConfigurations'
+  { -- | The name of the App Runner auto scaling configuration that you want to
+    -- list. If specified, App Runner lists revisions that share this name. If
+    -- not specified, App Runner returns revisions of all active
+    -- configurations.
+    autoScalingConfigurationName :: Prelude.Maybe Prelude.Text,
+    -- | Set to @true@ to list only the latest revision for each requested
+    -- configuration name.
+    --
+    -- Set to @false@ to list all revisions for each requested configuration
+    -- name.
+    --
+    -- Default: @true@
+    latestOnly :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results to include in each response (result page).
+    -- It\'s used for a paginated request.
+    --
+    -- If you don\'t specify @MaxResults@, the request retrieves all available
+    -- results in a single response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token from a previous result page. It\'s used for a paginated request.
+    -- The request retrieves the next result page. All other parameter values
+    -- must be identical to the ones that are specified in the initial request.
+    --
+    -- If you don\'t specify @NextToken@, the request retrieves the first
+    -- result page.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAutoScalingConfigurations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoScalingConfigurationName', 'listAutoScalingConfigurations_autoScalingConfigurationName' - The name of the App Runner auto scaling configuration that you want to
+-- list. If specified, App Runner lists revisions that share this name. If
+-- not specified, App Runner returns revisions of all active
+-- configurations.
+--
+-- 'latestOnly', 'listAutoScalingConfigurations_latestOnly' - Set to @true@ to list only the latest revision for each requested
+-- configuration name.
+--
+-- Set to @false@ to list all revisions for each requested configuration
+-- name.
+--
+-- Default: @true@
+--
+-- 'maxResults', 'listAutoScalingConfigurations_maxResults' - The maximum number of results to include in each response (result page).
+-- It\'s used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+--
+-- 'nextToken', 'listAutoScalingConfigurations_nextToken' - A token from a previous result page. It\'s used for a paginated request.
+-- The request retrieves the next result page. All other parameter values
+-- must be identical to the ones that are specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+newListAutoScalingConfigurations ::
+  ListAutoScalingConfigurations
+newListAutoScalingConfigurations =
+  ListAutoScalingConfigurations'
+    { autoScalingConfigurationName =
+        Prelude.Nothing,
+      latestOnly = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The name of the App Runner auto scaling configuration that you want to
+-- list. If specified, App Runner lists revisions that share this name. If
+-- not specified, App Runner returns revisions of all active
+-- configurations.
+listAutoScalingConfigurations_autoScalingConfigurationName :: Lens.Lens' ListAutoScalingConfigurations (Prelude.Maybe Prelude.Text)
+listAutoScalingConfigurations_autoScalingConfigurationName = Lens.lens (\ListAutoScalingConfigurations' {autoScalingConfigurationName} -> autoScalingConfigurationName) (\s@ListAutoScalingConfigurations' {} a -> s {autoScalingConfigurationName = a} :: ListAutoScalingConfigurations)
+
+-- | Set to @true@ to list only the latest revision for each requested
+-- configuration name.
+--
+-- Set to @false@ to list all revisions for each requested configuration
+-- name.
+--
+-- Default: @true@
+listAutoScalingConfigurations_latestOnly :: Lens.Lens' ListAutoScalingConfigurations (Prelude.Maybe Prelude.Bool)
+listAutoScalingConfigurations_latestOnly = Lens.lens (\ListAutoScalingConfigurations' {latestOnly} -> latestOnly) (\s@ListAutoScalingConfigurations' {} a -> s {latestOnly = a} :: ListAutoScalingConfigurations)
+
+-- | The maximum number of results to include in each response (result page).
+-- It\'s used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+listAutoScalingConfigurations_maxResults :: Lens.Lens' ListAutoScalingConfigurations (Prelude.Maybe Prelude.Natural)
+listAutoScalingConfigurations_maxResults = Lens.lens (\ListAutoScalingConfigurations' {maxResults} -> maxResults) (\s@ListAutoScalingConfigurations' {} a -> s {maxResults = a} :: ListAutoScalingConfigurations)
+
+-- | A token from a previous result page. It\'s used for a paginated request.
+-- The request retrieves the next result page. All other parameter values
+-- must be identical to the ones that are specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+listAutoScalingConfigurations_nextToken :: Lens.Lens' ListAutoScalingConfigurations (Prelude.Maybe Prelude.Text)
+listAutoScalingConfigurations_nextToken = Lens.lens (\ListAutoScalingConfigurations' {nextToken} -> nextToken) (\s@ListAutoScalingConfigurations' {} a -> s {nextToken = a} :: ListAutoScalingConfigurations)
+
+instance
+  Core.AWSRequest
+    ListAutoScalingConfigurations
+  where
+  type
+    AWSResponse ListAutoScalingConfigurations =
+      ListAutoScalingConfigurationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAutoScalingConfigurationsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "AutoScalingConfigurationSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    ListAutoScalingConfigurations
+  where
+  hashWithSalt _salt ListAutoScalingConfigurations' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoScalingConfigurationName
+      `Prelude.hashWithSalt` latestOnly
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListAutoScalingConfigurations where
+  rnf ListAutoScalingConfigurations' {..} =
+    Prelude.rnf autoScalingConfigurationName
+      `Prelude.seq` Prelude.rnf latestOnly
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListAutoScalingConfigurations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.ListAutoScalingConfigurations" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAutoScalingConfigurations where
+  toJSON ListAutoScalingConfigurations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AutoScalingConfigurationName" Data..=)
+              Prelude.<$> autoScalingConfigurationName,
+            ("LatestOnly" Data..=) Prelude.<$> latestOnly,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListAutoScalingConfigurations where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListAutoScalingConfigurations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAutoScalingConfigurationsResponse' smart constructor.
+data ListAutoScalingConfigurationsResponse = ListAutoScalingConfigurationsResponse'
+  { -- | The token that you can pass in a subsequent request to get the next
+    -- result page. It\'s returned in a paginated request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of summary information records for auto scaling configurations.
+    -- In a paginated request, the request returns up to @MaxResults@ records
+    -- for each call.
+    autoScalingConfigurationSummaryList :: [AutoScalingConfigurationSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAutoScalingConfigurationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listAutoScalingConfigurationsResponse_nextToken' - The token that you can pass in a subsequent request to get the next
+-- result page. It\'s returned in a paginated request.
+--
+-- 'httpStatus', 'listAutoScalingConfigurationsResponse_httpStatus' - The response's http status code.
+--
+-- 'autoScalingConfigurationSummaryList', 'listAutoScalingConfigurationsResponse_autoScalingConfigurationSummaryList' - A list of summary information records for auto scaling configurations.
+-- In a paginated request, the request returns up to @MaxResults@ records
+-- for each call.
+newListAutoScalingConfigurationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAutoScalingConfigurationsResponse
+newListAutoScalingConfigurationsResponse pHttpStatus_ =
+  ListAutoScalingConfigurationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      autoScalingConfigurationSummaryList =
+        Prelude.mempty
+    }
+
+-- | The token that you can pass in a subsequent request to get the next
+-- result page. It\'s returned in a paginated request.
+listAutoScalingConfigurationsResponse_nextToken :: Lens.Lens' ListAutoScalingConfigurationsResponse (Prelude.Maybe Prelude.Text)
+listAutoScalingConfigurationsResponse_nextToken = Lens.lens (\ListAutoScalingConfigurationsResponse' {nextToken} -> nextToken) (\s@ListAutoScalingConfigurationsResponse' {} a -> s {nextToken = a} :: ListAutoScalingConfigurationsResponse)
+
+-- | The response's http status code.
+listAutoScalingConfigurationsResponse_httpStatus :: Lens.Lens' ListAutoScalingConfigurationsResponse Prelude.Int
+listAutoScalingConfigurationsResponse_httpStatus = Lens.lens (\ListAutoScalingConfigurationsResponse' {httpStatus} -> httpStatus) (\s@ListAutoScalingConfigurationsResponse' {} a -> s {httpStatus = a} :: ListAutoScalingConfigurationsResponse)
+
+-- | A list of summary information records for auto scaling configurations.
+-- In a paginated request, the request returns up to @MaxResults@ records
+-- for each call.
+listAutoScalingConfigurationsResponse_autoScalingConfigurationSummaryList :: Lens.Lens' ListAutoScalingConfigurationsResponse [AutoScalingConfigurationSummary]
+listAutoScalingConfigurationsResponse_autoScalingConfigurationSummaryList = Lens.lens (\ListAutoScalingConfigurationsResponse' {autoScalingConfigurationSummaryList} -> autoScalingConfigurationSummaryList) (\s@ListAutoScalingConfigurationsResponse' {} a -> s {autoScalingConfigurationSummaryList = a} :: ListAutoScalingConfigurationsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListAutoScalingConfigurationsResponse
+  where
+  rnf ListAutoScalingConfigurationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf autoScalingConfigurationSummaryList
diff --git a/gen/Amazonka/AppRunner/ListConnections.hs b/gen/Amazonka/AppRunner/ListConnections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/ListConnections.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.ListConnections
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of App Runner connections that are associated with your
+-- Amazon Web Services account.
+module Amazonka.AppRunner.ListConnections
+  ( -- * Creating a Request
+    ListConnections (..),
+    newListConnections,
+
+    -- * Request Lenses
+    listConnections_connectionName,
+    listConnections_maxResults,
+    listConnections_nextToken,
+
+    -- * Destructuring the Response
+    ListConnectionsResponse (..),
+    newListConnectionsResponse,
+
+    -- * Response Lenses
+    listConnectionsResponse_nextToken,
+    listConnectionsResponse_httpStatus,
+    listConnectionsResponse_connectionSummaryList,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newListConnections' smart constructor.
+data ListConnections = ListConnections'
+  { -- | If specified, only this connection is returned. If not specified, the
+    -- result isn\'t filtered by name.
+    connectionName :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to include in each response (result page).
+    -- Used for a paginated request.
+    --
+    -- If you don\'t specify @MaxResults@, the request retrieves all available
+    -- results in a single response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token from a previous result page. Used for a paginated request. The
+    -- request retrieves the next result page. All other parameter values must
+    -- be identical to the ones specified in the initial request.
+    --
+    -- If you don\'t specify @NextToken@, the request retrieves the first
+    -- result page.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListConnections' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionName', 'listConnections_connectionName' - If specified, only this connection is returned. If not specified, the
+-- result isn\'t filtered by name.
+--
+-- 'maxResults', 'listConnections_maxResults' - The maximum number of results to include in each response (result page).
+-- Used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+--
+-- 'nextToken', 'listConnections_nextToken' - A token from a previous result page. Used for a paginated request. The
+-- request retrieves the next result page. All other parameter values must
+-- be identical to the ones specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+newListConnections ::
+  ListConnections
+newListConnections =
+  ListConnections'
+    { connectionName = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | If specified, only this connection is returned. If not specified, the
+-- result isn\'t filtered by name.
+listConnections_connectionName :: Lens.Lens' ListConnections (Prelude.Maybe Prelude.Text)
+listConnections_connectionName = Lens.lens (\ListConnections' {connectionName} -> connectionName) (\s@ListConnections' {} a -> s {connectionName = a} :: ListConnections)
+
+-- | The maximum number of results to include in each response (result page).
+-- Used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+listConnections_maxResults :: Lens.Lens' ListConnections (Prelude.Maybe Prelude.Natural)
+listConnections_maxResults = Lens.lens (\ListConnections' {maxResults} -> maxResults) (\s@ListConnections' {} a -> s {maxResults = a} :: ListConnections)
+
+-- | A token from a previous result page. Used for a paginated request. The
+-- request retrieves the next result page. All other parameter values must
+-- be identical to the ones specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+listConnections_nextToken :: Lens.Lens' ListConnections (Prelude.Maybe Prelude.Text)
+listConnections_nextToken = Lens.lens (\ListConnections' {nextToken} -> nextToken) (\s@ListConnections' {} a -> s {nextToken = a} :: ListConnections)
+
+instance Core.AWSRequest ListConnections where
+  type
+    AWSResponse ListConnections =
+      ListConnectionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListConnectionsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "ConnectionSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListConnections where
+  hashWithSalt _salt ListConnections' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectionName
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListConnections where
+  rnf ListConnections' {..} =
+    Prelude.rnf connectionName
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListConnections where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AppRunner.ListConnections" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListConnections where
+  toJSON ListConnections' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ConnectionName" Data..=)
+              Prelude.<$> connectionName,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListConnections where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListConnections where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListConnectionsResponse' smart constructor.
+data ListConnectionsResponse = ListConnectionsResponse'
+  { -- | The token that you can pass in a subsequent request to get the next
+    -- result page. Returned in a paginated request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of summary information records for connections. In a paginated
+    -- request, the request returns up to @MaxResults@ records for each call.
+    connectionSummaryList :: [ConnectionSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListConnectionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listConnectionsResponse_nextToken' - The token that you can pass in a subsequent request to get the next
+-- result page. Returned in a paginated request.
+--
+-- 'httpStatus', 'listConnectionsResponse_httpStatus' - The response's http status code.
+--
+-- 'connectionSummaryList', 'listConnectionsResponse_connectionSummaryList' - A list of summary information records for connections. In a paginated
+-- request, the request returns up to @MaxResults@ records for each call.
+newListConnectionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListConnectionsResponse
+newListConnectionsResponse pHttpStatus_ =
+  ListConnectionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      connectionSummaryList = Prelude.mempty
+    }
+
+-- | The token that you can pass in a subsequent request to get the next
+-- result page. Returned in a paginated request.
+listConnectionsResponse_nextToken :: Lens.Lens' ListConnectionsResponse (Prelude.Maybe Prelude.Text)
+listConnectionsResponse_nextToken = Lens.lens (\ListConnectionsResponse' {nextToken} -> nextToken) (\s@ListConnectionsResponse' {} a -> s {nextToken = a} :: ListConnectionsResponse)
+
+-- | The response's http status code.
+listConnectionsResponse_httpStatus :: Lens.Lens' ListConnectionsResponse Prelude.Int
+listConnectionsResponse_httpStatus = Lens.lens (\ListConnectionsResponse' {httpStatus} -> httpStatus) (\s@ListConnectionsResponse' {} a -> s {httpStatus = a} :: ListConnectionsResponse)
+
+-- | A list of summary information records for connections. In a paginated
+-- request, the request returns up to @MaxResults@ records for each call.
+listConnectionsResponse_connectionSummaryList :: Lens.Lens' ListConnectionsResponse [ConnectionSummary]
+listConnectionsResponse_connectionSummaryList = Lens.lens (\ListConnectionsResponse' {connectionSummaryList} -> connectionSummaryList) (\s@ListConnectionsResponse' {} a -> s {connectionSummaryList = a} :: ListConnectionsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListConnectionsResponse where
+  rnf ListConnectionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf connectionSummaryList
diff --git a/gen/Amazonka/AppRunner/ListObservabilityConfigurations.hs b/gen/Amazonka/AppRunner/ListObservabilityConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/ListObservabilityConfigurations.hs
@@ -0,0 +1,318 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.ListObservabilityConfigurations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of active App Runner observability configurations in your
+-- Amazon Web Services account. You can query the revisions for a specific
+-- configuration name or the revisions for all active configurations in
+-- your account. You can optionally query only the latest revision of each
+-- requested name.
+--
+-- To retrieve a full description of a particular configuration revision,
+-- call and provide one of the ARNs returned by
+-- @ListObservabilityConfigurations@.
+module Amazonka.AppRunner.ListObservabilityConfigurations
+  ( -- * Creating a Request
+    ListObservabilityConfigurations (..),
+    newListObservabilityConfigurations,
+
+    -- * Request Lenses
+    listObservabilityConfigurations_latestOnly,
+    listObservabilityConfigurations_maxResults,
+    listObservabilityConfigurations_nextToken,
+    listObservabilityConfigurations_observabilityConfigurationName,
+
+    -- * Destructuring the Response
+    ListObservabilityConfigurationsResponse (..),
+    newListObservabilityConfigurationsResponse,
+
+    -- * Response Lenses
+    listObservabilityConfigurationsResponse_nextToken,
+    listObservabilityConfigurationsResponse_httpStatus,
+    listObservabilityConfigurationsResponse_observabilityConfigurationSummaryList,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newListObservabilityConfigurations' smart constructor.
+data ListObservabilityConfigurations = ListObservabilityConfigurations'
+  { -- | Set to @true@ to list only the latest revision for each requested
+    -- configuration name.
+    --
+    -- Set to @false@ to list all revisions for each requested configuration
+    -- name.
+    --
+    -- Default: @true@
+    latestOnly :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results to include in each response (result page).
+    -- It\'s used for a paginated request.
+    --
+    -- If you don\'t specify @MaxResults@, the request retrieves all available
+    -- results in a single response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token from a previous result page. It\'s used for a paginated request.
+    -- The request retrieves the next result page. All other parameter values
+    -- must be identical to the ones that are specified in the initial request.
+    --
+    -- If you don\'t specify @NextToken@, the request retrieves the first
+    -- result page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the App Runner observability configuration that you want to
+    -- list. If specified, App Runner lists revisions that share this name. If
+    -- not specified, App Runner returns revisions of all active
+    -- configurations.
+    observabilityConfigurationName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListObservabilityConfigurations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'latestOnly', 'listObservabilityConfigurations_latestOnly' - Set to @true@ to list only the latest revision for each requested
+-- configuration name.
+--
+-- Set to @false@ to list all revisions for each requested configuration
+-- name.
+--
+-- Default: @true@
+--
+-- 'maxResults', 'listObservabilityConfigurations_maxResults' - The maximum number of results to include in each response (result page).
+-- It\'s used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+--
+-- 'nextToken', 'listObservabilityConfigurations_nextToken' - A token from a previous result page. It\'s used for a paginated request.
+-- The request retrieves the next result page. All other parameter values
+-- must be identical to the ones that are specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+--
+-- 'observabilityConfigurationName', 'listObservabilityConfigurations_observabilityConfigurationName' - The name of the App Runner observability configuration that you want to
+-- list. If specified, App Runner lists revisions that share this name. If
+-- not specified, App Runner returns revisions of all active
+-- configurations.
+newListObservabilityConfigurations ::
+  ListObservabilityConfigurations
+newListObservabilityConfigurations =
+  ListObservabilityConfigurations'
+    { latestOnly =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      observabilityConfigurationName =
+        Prelude.Nothing
+    }
+
+-- | Set to @true@ to list only the latest revision for each requested
+-- configuration name.
+--
+-- Set to @false@ to list all revisions for each requested configuration
+-- name.
+--
+-- Default: @true@
+listObservabilityConfigurations_latestOnly :: Lens.Lens' ListObservabilityConfigurations (Prelude.Maybe Prelude.Bool)
+listObservabilityConfigurations_latestOnly = Lens.lens (\ListObservabilityConfigurations' {latestOnly} -> latestOnly) (\s@ListObservabilityConfigurations' {} a -> s {latestOnly = a} :: ListObservabilityConfigurations)
+
+-- | The maximum number of results to include in each response (result page).
+-- It\'s used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+listObservabilityConfigurations_maxResults :: Lens.Lens' ListObservabilityConfigurations (Prelude.Maybe Prelude.Natural)
+listObservabilityConfigurations_maxResults = Lens.lens (\ListObservabilityConfigurations' {maxResults} -> maxResults) (\s@ListObservabilityConfigurations' {} a -> s {maxResults = a} :: ListObservabilityConfigurations)
+
+-- | A token from a previous result page. It\'s used for a paginated request.
+-- The request retrieves the next result page. All other parameter values
+-- must be identical to the ones that are specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+listObservabilityConfigurations_nextToken :: Lens.Lens' ListObservabilityConfigurations (Prelude.Maybe Prelude.Text)
+listObservabilityConfigurations_nextToken = Lens.lens (\ListObservabilityConfigurations' {nextToken} -> nextToken) (\s@ListObservabilityConfigurations' {} a -> s {nextToken = a} :: ListObservabilityConfigurations)
+
+-- | The name of the App Runner observability configuration that you want to
+-- list. If specified, App Runner lists revisions that share this name. If
+-- not specified, App Runner returns revisions of all active
+-- configurations.
+listObservabilityConfigurations_observabilityConfigurationName :: Lens.Lens' ListObservabilityConfigurations (Prelude.Maybe Prelude.Text)
+listObservabilityConfigurations_observabilityConfigurationName = Lens.lens (\ListObservabilityConfigurations' {observabilityConfigurationName} -> observabilityConfigurationName) (\s@ListObservabilityConfigurations' {} a -> s {observabilityConfigurationName = a} :: ListObservabilityConfigurations)
+
+instance
+  Core.AWSRequest
+    ListObservabilityConfigurations
+  where
+  type
+    AWSResponse ListObservabilityConfigurations =
+      ListObservabilityConfigurationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListObservabilityConfigurationsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "ObservabilityConfigurationSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    ListObservabilityConfigurations
+  where
+  hashWithSalt
+    _salt
+    ListObservabilityConfigurations' {..} =
+      _salt
+        `Prelude.hashWithSalt` latestOnly
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` observabilityConfigurationName
+
+instance
+  Prelude.NFData
+    ListObservabilityConfigurations
+  where
+  rnf ListObservabilityConfigurations' {..} =
+    Prelude.rnf latestOnly
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf observabilityConfigurationName
+
+instance
+  Data.ToHeaders
+    ListObservabilityConfigurations
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.ListObservabilityConfigurations" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListObservabilityConfigurations where
+  toJSON ListObservabilityConfigurations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("LatestOnly" Data..=) Prelude.<$> latestOnly,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("ObservabilityConfigurationName" Data..=)
+              Prelude.<$> observabilityConfigurationName
+          ]
+      )
+
+instance Data.ToPath ListObservabilityConfigurations where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListObservabilityConfigurations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListObservabilityConfigurationsResponse' smart constructor.
+data ListObservabilityConfigurationsResponse = ListObservabilityConfigurationsResponse'
+  { -- | The token that you can pass in a subsequent request to get the next
+    -- result page. It\'s returned in a paginated request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of summary information records for observability configurations.
+    -- In a paginated request, the request returns up to @MaxResults@ records
+    -- for each call.
+    observabilityConfigurationSummaryList :: [ObservabilityConfigurationSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListObservabilityConfigurationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listObservabilityConfigurationsResponse_nextToken' - The token that you can pass in a subsequent request to get the next
+-- result page. It\'s returned in a paginated request.
+--
+-- 'httpStatus', 'listObservabilityConfigurationsResponse_httpStatus' - The response's http status code.
+--
+-- 'observabilityConfigurationSummaryList', 'listObservabilityConfigurationsResponse_observabilityConfigurationSummaryList' - A list of summary information records for observability configurations.
+-- In a paginated request, the request returns up to @MaxResults@ records
+-- for each call.
+newListObservabilityConfigurationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListObservabilityConfigurationsResponse
+newListObservabilityConfigurationsResponse
+  pHttpStatus_ =
+    ListObservabilityConfigurationsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        observabilityConfigurationSummaryList =
+          Prelude.mempty
+      }
+
+-- | The token that you can pass in a subsequent request to get the next
+-- result page. It\'s returned in a paginated request.
+listObservabilityConfigurationsResponse_nextToken :: Lens.Lens' ListObservabilityConfigurationsResponse (Prelude.Maybe Prelude.Text)
+listObservabilityConfigurationsResponse_nextToken = Lens.lens (\ListObservabilityConfigurationsResponse' {nextToken} -> nextToken) (\s@ListObservabilityConfigurationsResponse' {} a -> s {nextToken = a} :: ListObservabilityConfigurationsResponse)
+
+-- | The response's http status code.
+listObservabilityConfigurationsResponse_httpStatus :: Lens.Lens' ListObservabilityConfigurationsResponse Prelude.Int
+listObservabilityConfigurationsResponse_httpStatus = Lens.lens (\ListObservabilityConfigurationsResponse' {httpStatus} -> httpStatus) (\s@ListObservabilityConfigurationsResponse' {} a -> s {httpStatus = a} :: ListObservabilityConfigurationsResponse)
+
+-- | A list of summary information records for observability configurations.
+-- In a paginated request, the request returns up to @MaxResults@ records
+-- for each call.
+listObservabilityConfigurationsResponse_observabilityConfigurationSummaryList :: Lens.Lens' ListObservabilityConfigurationsResponse [ObservabilityConfigurationSummary]
+listObservabilityConfigurationsResponse_observabilityConfigurationSummaryList = Lens.lens (\ListObservabilityConfigurationsResponse' {observabilityConfigurationSummaryList} -> observabilityConfigurationSummaryList) (\s@ListObservabilityConfigurationsResponse' {} a -> s {observabilityConfigurationSummaryList = a} :: ListObservabilityConfigurationsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListObservabilityConfigurationsResponse
+  where
+  rnf ListObservabilityConfigurationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf observabilityConfigurationSummaryList
diff --git a/gen/Amazonka/AppRunner/ListOperations.hs b/gen/Amazonka/AppRunner/ListOperations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/ListOperations.hs
@@ -0,0 +1,252 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.ListOperations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Return a list of operations that occurred on an App Runner service.
+--
+-- The resulting list of OperationSummary objects is sorted in reverse
+-- chronological order. The first object on the list represents the last
+-- started operation.
+module Amazonka.AppRunner.ListOperations
+  ( -- * Creating a Request
+    ListOperations (..),
+    newListOperations,
+
+    -- * Request Lenses
+    listOperations_maxResults,
+    listOperations_nextToken,
+    listOperations_serviceArn,
+
+    -- * Destructuring the Response
+    ListOperationsResponse (..),
+    newListOperationsResponse,
+
+    -- * Response Lenses
+    listOperationsResponse_nextToken,
+    listOperationsResponse_operationSummaryList,
+    listOperationsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newListOperations' smart constructor.
+data ListOperations = ListOperations'
+  { -- | The maximum number of results to include in each response (result page).
+    -- It\'s used for a paginated request.
+    --
+    -- If you don\'t specify @MaxResults@, the request retrieves all available
+    -- results in a single response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token from a previous result page. It\'s used for a paginated request.
+    -- The request retrieves the next result page. All other parameter values
+    -- must be identical to the ones specified in the initial request.
+    --
+    -- If you don\'t specify @NextToken@, the request retrieves the first
+    -- result page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the App Runner service that you want a
+    -- list of operations for.
+    serviceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListOperations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listOperations_maxResults' - The maximum number of results to include in each response (result page).
+-- It\'s used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+--
+-- 'nextToken', 'listOperations_nextToken' - A token from a previous result page. It\'s used for a paginated request.
+-- The request retrieves the next result page. All other parameter values
+-- must be identical to the ones specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+--
+-- 'serviceArn', 'listOperations_serviceArn' - The Amazon Resource Name (ARN) of the App Runner service that you want a
+-- list of operations for.
+newListOperations ::
+  -- | 'serviceArn'
+  Prelude.Text ->
+  ListOperations
+newListOperations pServiceArn_ =
+  ListOperations'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      serviceArn = pServiceArn_
+    }
+
+-- | The maximum number of results to include in each response (result page).
+-- It\'s used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+listOperations_maxResults :: Lens.Lens' ListOperations (Prelude.Maybe Prelude.Natural)
+listOperations_maxResults = Lens.lens (\ListOperations' {maxResults} -> maxResults) (\s@ListOperations' {} a -> s {maxResults = a} :: ListOperations)
+
+-- | A token from a previous result page. It\'s used for a paginated request.
+-- The request retrieves the next result page. All other parameter values
+-- must be identical to the ones specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+listOperations_nextToken :: Lens.Lens' ListOperations (Prelude.Maybe Prelude.Text)
+listOperations_nextToken = Lens.lens (\ListOperations' {nextToken} -> nextToken) (\s@ListOperations' {} a -> s {nextToken = a} :: ListOperations)
+
+-- | The Amazon Resource Name (ARN) of the App Runner service that you want a
+-- list of operations for.
+listOperations_serviceArn :: Lens.Lens' ListOperations Prelude.Text
+listOperations_serviceArn = Lens.lens (\ListOperations' {serviceArn} -> serviceArn) (\s@ListOperations' {} a -> s {serviceArn = a} :: ListOperations)
+
+instance Core.AWSRequest ListOperations where
+  type
+    AWSResponse ListOperations =
+      ListOperationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListOperationsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "OperationSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListOperations where
+  hashWithSalt _salt ListOperations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` serviceArn
+
+instance Prelude.NFData ListOperations where
+  rnf ListOperations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf serviceArn
+
+instance Data.ToHeaders ListOperations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AppRunner.ListOperations" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListOperations where
+  toJSON ListOperations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("ServiceArn" Data..= serviceArn)
+          ]
+      )
+
+instance Data.ToPath ListOperations where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListOperations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListOperationsResponse' smart constructor.
+data ListOperationsResponse = ListOperationsResponse'
+  { -- | The token that you can pass in a subsequent request to get the next
+    -- result page. It\'s returned in a paginated request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of operation summary information records. In a paginated request,
+    -- the request returns up to @MaxResults@ records for each call.
+    operationSummaryList :: Prelude.Maybe [OperationSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListOperationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listOperationsResponse_nextToken' - The token that you can pass in a subsequent request to get the next
+-- result page. It\'s returned in a paginated request.
+--
+-- 'operationSummaryList', 'listOperationsResponse_operationSummaryList' - A list of operation summary information records. In a paginated request,
+-- the request returns up to @MaxResults@ records for each call.
+--
+-- 'httpStatus', 'listOperationsResponse_httpStatus' - The response's http status code.
+newListOperationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListOperationsResponse
+newListOperationsResponse pHttpStatus_ =
+  ListOperationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      operationSummaryList = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token that you can pass in a subsequent request to get the next
+-- result page. It\'s returned in a paginated request.
+listOperationsResponse_nextToken :: Lens.Lens' ListOperationsResponse (Prelude.Maybe Prelude.Text)
+listOperationsResponse_nextToken = Lens.lens (\ListOperationsResponse' {nextToken} -> nextToken) (\s@ListOperationsResponse' {} a -> s {nextToken = a} :: ListOperationsResponse)
+
+-- | A list of operation summary information records. In a paginated request,
+-- the request returns up to @MaxResults@ records for each call.
+listOperationsResponse_operationSummaryList :: Lens.Lens' ListOperationsResponse (Prelude.Maybe [OperationSummary])
+listOperationsResponse_operationSummaryList = Lens.lens (\ListOperationsResponse' {operationSummaryList} -> operationSummaryList) (\s@ListOperationsResponse' {} a -> s {operationSummaryList = a} :: ListOperationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listOperationsResponse_httpStatus :: Lens.Lens' ListOperationsResponse Prelude.Int
+listOperationsResponse_httpStatus = Lens.lens (\ListOperationsResponse' {httpStatus} -> httpStatus) (\s@ListOperationsResponse' {} a -> s {httpStatus = a} :: ListOperationsResponse)
+
+instance Prelude.NFData ListOperationsResponse where
+  rnf ListOperationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf operationSummaryList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppRunner/ListServices.hs b/gen/Amazonka/AppRunner/ListServices.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/ListServices.hs
@@ -0,0 +1,228 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.ListServices
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of running App Runner services in your Amazon Web
+-- Services account.
+module Amazonka.AppRunner.ListServices
+  ( -- * Creating a Request
+    ListServices (..),
+    newListServices,
+
+    -- * Request Lenses
+    listServices_maxResults,
+    listServices_nextToken,
+
+    -- * Destructuring the Response
+    ListServicesResponse (..),
+    newListServicesResponse,
+
+    -- * Response Lenses
+    listServicesResponse_nextToken,
+    listServicesResponse_httpStatus,
+    listServicesResponse_serviceSummaryList,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newListServices' smart constructor.
+data ListServices = ListServices'
+  { -- | The maximum number of results to include in each response (result page).
+    -- It\'s used for a paginated request.
+    --
+    -- If you don\'t specify @MaxResults@, the request retrieves all available
+    -- results in a single response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token from a previous result page. Used for a paginated request. The
+    -- request retrieves the next result page. All other parameter values must
+    -- be identical to the ones specified in the initial request.
+    --
+    -- If you don\'t specify @NextToken@, the request retrieves the first
+    -- result page.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListServices' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listServices_maxResults' - The maximum number of results to include in each response (result page).
+-- It\'s used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+--
+-- 'nextToken', 'listServices_nextToken' - A token from a previous result page. Used for a paginated request. The
+-- request retrieves the next result page. All other parameter values must
+-- be identical to the ones specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+newListServices ::
+  ListServices
+newListServices =
+  ListServices'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to include in each response (result page).
+-- It\'s used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+listServices_maxResults :: Lens.Lens' ListServices (Prelude.Maybe Prelude.Natural)
+listServices_maxResults = Lens.lens (\ListServices' {maxResults} -> maxResults) (\s@ListServices' {} a -> s {maxResults = a} :: ListServices)
+
+-- | A token from a previous result page. Used for a paginated request. The
+-- request retrieves the next result page. All other parameter values must
+-- be identical to the ones specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+listServices_nextToken :: Lens.Lens' ListServices (Prelude.Maybe Prelude.Text)
+listServices_nextToken = Lens.lens (\ListServices' {nextToken} -> nextToken) (\s@ListServices' {} a -> s {nextToken = a} :: ListServices)
+
+instance Core.AWSRequest ListServices where
+  type AWSResponse ListServices = ListServicesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListServicesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "ServiceSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListServices where
+  hashWithSalt _salt ListServices' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListServices where
+  rnf ListServices' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListServices where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AppRunner.ListServices" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListServices where
+  toJSON ListServices' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListServices where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListServices where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListServicesResponse' smart constructor.
+data ListServicesResponse = ListServicesResponse'
+  { -- | The token that you can pass in a subsequent request to get the next
+    -- result page. It\'s returned in a paginated request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of service summary information records. In a paginated request,
+    -- the request returns up to @MaxResults@ records for each call.
+    serviceSummaryList :: [ServiceSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListServicesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listServicesResponse_nextToken' - The token that you can pass in a subsequent request to get the next
+-- result page. It\'s returned in a paginated request.
+--
+-- 'httpStatus', 'listServicesResponse_httpStatus' - The response's http status code.
+--
+-- 'serviceSummaryList', 'listServicesResponse_serviceSummaryList' - A list of service summary information records. In a paginated request,
+-- the request returns up to @MaxResults@ records for each call.
+newListServicesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListServicesResponse
+newListServicesResponse pHttpStatus_ =
+  ListServicesResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      serviceSummaryList = Prelude.mempty
+    }
+
+-- | The token that you can pass in a subsequent request to get the next
+-- result page. It\'s returned in a paginated request.
+listServicesResponse_nextToken :: Lens.Lens' ListServicesResponse (Prelude.Maybe Prelude.Text)
+listServicesResponse_nextToken = Lens.lens (\ListServicesResponse' {nextToken} -> nextToken) (\s@ListServicesResponse' {} a -> s {nextToken = a} :: ListServicesResponse)
+
+-- | The response's http status code.
+listServicesResponse_httpStatus :: Lens.Lens' ListServicesResponse Prelude.Int
+listServicesResponse_httpStatus = Lens.lens (\ListServicesResponse' {httpStatus} -> httpStatus) (\s@ListServicesResponse' {} a -> s {httpStatus = a} :: ListServicesResponse)
+
+-- | A list of service summary information records. In a paginated request,
+-- the request returns up to @MaxResults@ records for each call.
+listServicesResponse_serviceSummaryList :: Lens.Lens' ListServicesResponse [ServiceSummary]
+listServicesResponse_serviceSummaryList = Lens.lens (\ListServicesResponse' {serviceSummaryList} -> serviceSummaryList) (\s@ListServicesResponse' {} a -> s {serviceSummaryList = a} :: ListServicesResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListServicesResponse where
+  rnf ListServicesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf serviceSummaryList
diff --git a/gen/Amazonka/AppRunner/ListTagsForResource.hs b/gen/Amazonka/AppRunner/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/ListTagsForResource.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List tags that are associated with for an App Runner resource. The
+-- response contains a list of tag key-value pairs.
+module Amazonka.AppRunner.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppRunner.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 Amazon Resource Name (ARN) of the resource that a tag list is
+    -- requested for.
+    --
+    -- It must be the ARN of an App Runner resource.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) of the resource that a tag list is
+-- requested for.
+--
+-- It must be the ARN of an App Runner resource.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the resource that a tag list is
+-- requested for.
+--
+-- It must be the ARN of an App Runner resource.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.ListTagsForResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTagsForResource where
+  toJSON ListTagsForResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ResourceArn" Data..= resourceArn)]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | A list of the tag key-value pairs that are associated with the resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - A list of the tag key-value pairs that are associated with the resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of the tag key-value pairs that are associated with the resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe [Tag])
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppRunner/ListVpcConnectors.hs b/gen/Amazonka/AppRunner/ListVpcConnectors.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/ListVpcConnectors.hs
@@ -0,0 +1,230 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.ListVpcConnectors
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of App Runner VPC connectors in your Amazon Web Services
+-- account.
+module Amazonka.AppRunner.ListVpcConnectors
+  ( -- * Creating a Request
+    ListVpcConnectors (..),
+    newListVpcConnectors,
+
+    -- * Request Lenses
+    listVpcConnectors_maxResults,
+    listVpcConnectors_nextToken,
+
+    -- * Destructuring the Response
+    ListVpcConnectorsResponse (..),
+    newListVpcConnectorsResponse,
+
+    -- * Response Lenses
+    listVpcConnectorsResponse_nextToken,
+    listVpcConnectorsResponse_httpStatus,
+    listVpcConnectorsResponse_vpcConnectors,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newListVpcConnectors' smart constructor.
+data ListVpcConnectors = ListVpcConnectors'
+  { -- | The maximum number of results to include in each response (result page).
+    -- It\'s used for a paginated request.
+    --
+    -- If you don\'t specify @MaxResults@, the request retrieves all available
+    -- results in a single response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token from a previous result page. It\'s used for a paginated request.
+    -- The request retrieves the next result page. All other parameter values
+    -- must be identical to the ones that are specified in the initial request.
+    --
+    -- If you don\'t specify @NextToken@, the request retrieves the first
+    -- result page.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListVpcConnectors' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listVpcConnectors_maxResults' - The maximum number of results to include in each response (result page).
+-- It\'s used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+--
+-- 'nextToken', 'listVpcConnectors_nextToken' - A token from a previous result page. It\'s used for a paginated request.
+-- The request retrieves the next result page. All other parameter values
+-- must be identical to the ones that are specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+newListVpcConnectors ::
+  ListVpcConnectors
+newListVpcConnectors =
+  ListVpcConnectors'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to include in each response (result page).
+-- It\'s used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+listVpcConnectors_maxResults :: Lens.Lens' ListVpcConnectors (Prelude.Maybe Prelude.Natural)
+listVpcConnectors_maxResults = Lens.lens (\ListVpcConnectors' {maxResults} -> maxResults) (\s@ListVpcConnectors' {} a -> s {maxResults = a} :: ListVpcConnectors)
+
+-- | A token from a previous result page. It\'s used for a paginated request.
+-- The request retrieves the next result page. All other parameter values
+-- must be identical to the ones that are specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+listVpcConnectors_nextToken :: Lens.Lens' ListVpcConnectors (Prelude.Maybe Prelude.Text)
+listVpcConnectors_nextToken = Lens.lens (\ListVpcConnectors' {nextToken} -> nextToken) (\s@ListVpcConnectors' {} a -> s {nextToken = a} :: ListVpcConnectors)
+
+instance Core.AWSRequest ListVpcConnectors where
+  type
+    AWSResponse ListVpcConnectors =
+      ListVpcConnectorsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListVpcConnectorsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "VpcConnectors" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListVpcConnectors where
+  hashWithSalt _salt ListVpcConnectors' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListVpcConnectors where
+  rnf ListVpcConnectors' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListVpcConnectors where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.ListVpcConnectors" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListVpcConnectors where
+  toJSON ListVpcConnectors' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListVpcConnectors where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListVpcConnectors where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListVpcConnectorsResponse' smart constructor.
+data ListVpcConnectorsResponse = ListVpcConnectorsResponse'
+  { -- | The token that you can pass in a subsequent request to get the next
+    -- result page. It\'s returned in a paginated request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of information records for VPC connectors. In a paginated
+    -- request, the request returns up to @MaxResults@ records for each call.
+    vpcConnectors :: [VpcConnector]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListVpcConnectorsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listVpcConnectorsResponse_nextToken' - The token that you can pass in a subsequent request to get the next
+-- result page. It\'s returned in a paginated request.
+--
+-- 'httpStatus', 'listVpcConnectorsResponse_httpStatus' - The response's http status code.
+--
+-- 'vpcConnectors', 'listVpcConnectorsResponse_vpcConnectors' - A list of information records for VPC connectors. In a paginated
+-- request, the request returns up to @MaxResults@ records for each call.
+newListVpcConnectorsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListVpcConnectorsResponse
+newListVpcConnectorsResponse pHttpStatus_ =
+  ListVpcConnectorsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      vpcConnectors = Prelude.mempty
+    }
+
+-- | The token that you can pass in a subsequent request to get the next
+-- result page. It\'s returned in a paginated request.
+listVpcConnectorsResponse_nextToken :: Lens.Lens' ListVpcConnectorsResponse (Prelude.Maybe Prelude.Text)
+listVpcConnectorsResponse_nextToken = Lens.lens (\ListVpcConnectorsResponse' {nextToken} -> nextToken) (\s@ListVpcConnectorsResponse' {} a -> s {nextToken = a} :: ListVpcConnectorsResponse)
+
+-- | The response's http status code.
+listVpcConnectorsResponse_httpStatus :: Lens.Lens' ListVpcConnectorsResponse Prelude.Int
+listVpcConnectorsResponse_httpStatus = Lens.lens (\ListVpcConnectorsResponse' {httpStatus} -> httpStatus) (\s@ListVpcConnectorsResponse' {} a -> s {httpStatus = a} :: ListVpcConnectorsResponse)
+
+-- | A list of information records for VPC connectors. In a paginated
+-- request, the request returns up to @MaxResults@ records for each call.
+listVpcConnectorsResponse_vpcConnectors :: Lens.Lens' ListVpcConnectorsResponse [VpcConnector]
+listVpcConnectorsResponse_vpcConnectors = Lens.lens (\ListVpcConnectorsResponse' {vpcConnectors} -> vpcConnectors) (\s@ListVpcConnectorsResponse' {} a -> s {vpcConnectors = a} :: ListVpcConnectorsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListVpcConnectorsResponse where
+  rnf ListVpcConnectorsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf vpcConnectors
diff --git a/gen/Amazonka/AppRunner/ListVpcIngressConnections.hs b/gen/Amazonka/AppRunner/ListVpcIngressConnections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/ListVpcIngressConnections.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.AppRunner.ListVpcIngressConnections
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Return a list of App Runner VPC Ingress Connections in your Amazon Web
+-- Services account.
+module Amazonka.AppRunner.ListVpcIngressConnections
+  ( -- * Creating a Request
+    ListVpcIngressConnections (..),
+    newListVpcIngressConnections,
+
+    -- * Request Lenses
+    listVpcIngressConnections_filter,
+    listVpcIngressConnections_maxResults,
+    listVpcIngressConnections_nextToken,
+
+    -- * Destructuring the Response
+    ListVpcIngressConnectionsResponse (..),
+    newListVpcIngressConnectionsResponse,
+
+    -- * Response Lenses
+    listVpcIngressConnectionsResponse_nextToken,
+    listVpcIngressConnectionsResponse_httpStatus,
+    listVpcIngressConnectionsResponse_vpcIngressConnectionSummaryList,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newListVpcIngressConnections' smart constructor.
+data ListVpcIngressConnections = ListVpcIngressConnections'
+  { -- | The VPC Ingress Connections to be listed based on either the Service Arn
+    -- or Vpc Endpoint Id, or both.
+    filter' :: Prelude.Maybe ListVpcIngressConnectionsFilter,
+    -- | The maximum number of results to include in each response (result page).
+    -- It\'s used for a paginated request.
+    --
+    -- If you don\'t specify @MaxResults@, the request retrieves all available
+    -- results in a single response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token from a previous result page. It\'s used for a paginated request.
+    -- The request retrieves the next result page. All other parameter values
+    -- must be identical to the ones that are specified in the initial request.
+    --
+    -- If you don\'t specify @NextToken@, the request retrieves the first
+    -- result page.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListVpcIngressConnections' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filter'', 'listVpcIngressConnections_filter' - The VPC Ingress Connections to be listed based on either the Service Arn
+-- or Vpc Endpoint Id, or both.
+--
+-- 'maxResults', 'listVpcIngressConnections_maxResults' - The maximum number of results to include in each response (result page).
+-- It\'s used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+--
+-- 'nextToken', 'listVpcIngressConnections_nextToken' - A token from a previous result page. It\'s used for a paginated request.
+-- The request retrieves the next result page. All other parameter values
+-- must be identical to the ones that are specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+newListVpcIngressConnections ::
+  ListVpcIngressConnections
+newListVpcIngressConnections =
+  ListVpcIngressConnections'
+    { filter' =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The VPC Ingress Connections to be listed based on either the Service Arn
+-- or Vpc Endpoint Id, or both.
+listVpcIngressConnections_filter :: Lens.Lens' ListVpcIngressConnections (Prelude.Maybe ListVpcIngressConnectionsFilter)
+listVpcIngressConnections_filter = Lens.lens (\ListVpcIngressConnections' {filter'} -> filter') (\s@ListVpcIngressConnections' {} a -> s {filter' = a} :: ListVpcIngressConnections)
+
+-- | The maximum number of results to include in each response (result page).
+-- It\'s used for a paginated request.
+--
+-- If you don\'t specify @MaxResults@, the request retrieves all available
+-- results in a single response.
+listVpcIngressConnections_maxResults :: Lens.Lens' ListVpcIngressConnections (Prelude.Maybe Prelude.Natural)
+listVpcIngressConnections_maxResults = Lens.lens (\ListVpcIngressConnections' {maxResults} -> maxResults) (\s@ListVpcIngressConnections' {} a -> s {maxResults = a} :: ListVpcIngressConnections)
+
+-- | A token from a previous result page. It\'s used for a paginated request.
+-- The request retrieves the next result page. All other parameter values
+-- must be identical to the ones that are specified in the initial request.
+--
+-- If you don\'t specify @NextToken@, the request retrieves the first
+-- result page.
+listVpcIngressConnections_nextToken :: Lens.Lens' ListVpcIngressConnections (Prelude.Maybe Prelude.Text)
+listVpcIngressConnections_nextToken = Lens.lens (\ListVpcIngressConnections' {nextToken} -> nextToken) (\s@ListVpcIngressConnections' {} a -> s {nextToken = a} :: ListVpcIngressConnections)
+
+instance Core.AWSRequest ListVpcIngressConnections where
+  type
+    AWSResponse ListVpcIngressConnections =
+      ListVpcIngressConnectionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListVpcIngressConnectionsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "VpcIngressConnectionSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListVpcIngressConnections where
+  hashWithSalt _salt ListVpcIngressConnections' {..} =
+    _salt
+      `Prelude.hashWithSalt` filter'
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListVpcIngressConnections where
+  rnf ListVpcIngressConnections' {..} =
+    Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListVpcIngressConnections where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.ListVpcIngressConnections" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListVpcIngressConnections where
+  toJSON ListVpcIngressConnections' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filter" Data..=) Prelude.<$> filter',
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListVpcIngressConnections where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListVpcIngressConnections where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListVpcIngressConnectionsResponse' smart constructor.
+data ListVpcIngressConnectionsResponse = ListVpcIngressConnectionsResponse'
+  { -- | The token that you can pass in a subsequent request to get the next
+    -- result page. It\'s returned in a paginated request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of summary information records for VPC Ingress Connections. In a
+    -- paginated request, the request returns up to @MaxResults@ records for
+    -- each call.
+    vpcIngressConnectionSummaryList :: [VpcIngressConnectionSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListVpcIngressConnectionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listVpcIngressConnectionsResponse_nextToken' - The token that you can pass in a subsequent request to get the next
+-- result page. It\'s returned in a paginated request.
+--
+-- 'httpStatus', 'listVpcIngressConnectionsResponse_httpStatus' - The response's http status code.
+--
+-- 'vpcIngressConnectionSummaryList', 'listVpcIngressConnectionsResponse_vpcIngressConnectionSummaryList' - A list of summary information records for VPC Ingress Connections. In a
+-- paginated request, the request returns up to @MaxResults@ records for
+-- each call.
+newListVpcIngressConnectionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListVpcIngressConnectionsResponse
+newListVpcIngressConnectionsResponse pHttpStatus_ =
+  ListVpcIngressConnectionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      vpcIngressConnectionSummaryList =
+        Prelude.mempty
+    }
+
+-- | The token that you can pass in a subsequent request to get the next
+-- result page. It\'s returned in a paginated request.
+listVpcIngressConnectionsResponse_nextToken :: Lens.Lens' ListVpcIngressConnectionsResponse (Prelude.Maybe Prelude.Text)
+listVpcIngressConnectionsResponse_nextToken = Lens.lens (\ListVpcIngressConnectionsResponse' {nextToken} -> nextToken) (\s@ListVpcIngressConnectionsResponse' {} a -> s {nextToken = a} :: ListVpcIngressConnectionsResponse)
+
+-- | The response's http status code.
+listVpcIngressConnectionsResponse_httpStatus :: Lens.Lens' ListVpcIngressConnectionsResponse Prelude.Int
+listVpcIngressConnectionsResponse_httpStatus = Lens.lens (\ListVpcIngressConnectionsResponse' {httpStatus} -> httpStatus) (\s@ListVpcIngressConnectionsResponse' {} a -> s {httpStatus = a} :: ListVpcIngressConnectionsResponse)
+
+-- | A list of summary information records for VPC Ingress Connections. In a
+-- paginated request, the request returns up to @MaxResults@ records for
+-- each call.
+listVpcIngressConnectionsResponse_vpcIngressConnectionSummaryList :: Lens.Lens' ListVpcIngressConnectionsResponse [VpcIngressConnectionSummary]
+listVpcIngressConnectionsResponse_vpcIngressConnectionSummaryList = Lens.lens (\ListVpcIngressConnectionsResponse' {vpcIngressConnectionSummaryList} -> vpcIngressConnectionSummaryList) (\s@ListVpcIngressConnectionsResponse' {} a -> s {vpcIngressConnectionSummaryList = a} :: ListVpcIngressConnectionsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListVpcIngressConnectionsResponse
+  where
+  rnf ListVpcIngressConnectionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf vpcIngressConnectionSummaryList
diff --git a/gen/Amazonka/AppRunner/PauseService.hs b/gen/Amazonka/AppRunner/PauseService.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/PauseService.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.PauseService
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Pause an active App Runner service. App Runner reduces compute capacity
+-- for the service to zero and loses state (for example, ephemeral storage
+-- is removed).
+--
+-- This is an asynchronous operation. On a successful call, you can use the
+-- returned @OperationId@ and the ListOperations call to track the
+-- operation\'s progress.
+module Amazonka.AppRunner.PauseService
+  ( -- * Creating a Request
+    PauseService (..),
+    newPauseService,
+
+    -- * Request Lenses
+    pauseService_serviceArn,
+
+    -- * Destructuring the Response
+    PauseServiceResponse (..),
+    newPauseServiceResponse,
+
+    -- * Response Lenses
+    pauseServiceResponse_operationId,
+    pauseServiceResponse_httpStatus,
+    pauseServiceResponse_service,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newPauseService' smart constructor.
+data PauseService = PauseService'
+  { -- | The Amazon Resource Name (ARN) of the App Runner service that you want
+    -- to pause.
+    serviceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PauseService' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serviceArn', 'pauseService_serviceArn' - The Amazon Resource Name (ARN) of the App Runner service that you want
+-- to pause.
+newPauseService ::
+  -- | 'serviceArn'
+  Prelude.Text ->
+  PauseService
+newPauseService pServiceArn_ =
+  PauseService' {serviceArn = pServiceArn_}
+
+-- | The Amazon Resource Name (ARN) of the App Runner service that you want
+-- to pause.
+pauseService_serviceArn :: Lens.Lens' PauseService Prelude.Text
+pauseService_serviceArn = Lens.lens (\PauseService' {serviceArn} -> serviceArn) (\s@PauseService' {} a -> s {serviceArn = a} :: PauseService)
+
+instance Core.AWSRequest PauseService where
+  type AWSResponse PauseService = PauseServiceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PauseServiceResponse'
+            Prelude.<$> (x Data..?> "OperationId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Service")
+      )
+
+instance Prelude.Hashable PauseService where
+  hashWithSalt _salt PauseService' {..} =
+    _salt `Prelude.hashWithSalt` serviceArn
+
+instance Prelude.NFData PauseService where
+  rnf PauseService' {..} = Prelude.rnf serviceArn
+
+instance Data.ToHeaders PauseService where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AppRunner.PauseService" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PauseService where
+  toJSON PauseService' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ServiceArn" Data..= serviceArn)]
+      )
+
+instance Data.ToPath PauseService where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PauseService where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPauseServiceResponse' smart constructor.
+data PauseServiceResponse = PauseServiceResponse'
+  { -- | The unique ID of the asynchronous operation that this request started.
+    -- You can use it combined with the ListOperations call to track the
+    -- operation\'s progress.
+    operationId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner service that this request just paused.
+    service :: Service
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PauseServiceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'operationId', 'pauseServiceResponse_operationId' - The unique ID of the asynchronous operation that this request started.
+-- You can use it combined with the ListOperations call to track the
+-- operation\'s progress.
+--
+-- 'httpStatus', 'pauseServiceResponse_httpStatus' - The response's http status code.
+--
+-- 'service', 'pauseServiceResponse_service' - A description of the App Runner service that this request just paused.
+newPauseServiceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'service'
+  Service ->
+  PauseServiceResponse
+newPauseServiceResponse pHttpStatus_ pService_ =
+  PauseServiceResponse'
+    { operationId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      service = pService_
+    }
+
+-- | The unique ID of the asynchronous operation that this request started.
+-- You can use it combined with the ListOperations call to track the
+-- operation\'s progress.
+pauseServiceResponse_operationId :: Lens.Lens' PauseServiceResponse (Prelude.Maybe Prelude.Text)
+pauseServiceResponse_operationId = Lens.lens (\PauseServiceResponse' {operationId} -> operationId) (\s@PauseServiceResponse' {} a -> s {operationId = a} :: PauseServiceResponse)
+
+-- | The response's http status code.
+pauseServiceResponse_httpStatus :: Lens.Lens' PauseServiceResponse Prelude.Int
+pauseServiceResponse_httpStatus = Lens.lens (\PauseServiceResponse' {httpStatus} -> httpStatus) (\s@PauseServiceResponse' {} a -> s {httpStatus = a} :: PauseServiceResponse)
+
+-- | A description of the App Runner service that this request just paused.
+pauseServiceResponse_service :: Lens.Lens' PauseServiceResponse Service
+pauseServiceResponse_service = Lens.lens (\PauseServiceResponse' {service} -> service) (\s@PauseServiceResponse' {} a -> s {service = a} :: PauseServiceResponse)
+
+instance Prelude.NFData PauseServiceResponse where
+  rnf PauseServiceResponse' {..} =
+    Prelude.rnf operationId
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf service
diff --git a/gen/Amazonka/AppRunner/ResumeService.hs b/gen/Amazonka/AppRunner/ResumeService.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/ResumeService.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.AppRunner.ResumeService
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Resume an active App Runner service. App Runner provisions compute
+-- capacity for the service.
+--
+-- This is an asynchronous operation. On a successful call, you can use the
+-- returned @OperationId@ and the ListOperations call to track the
+-- operation\'s progress.
+module Amazonka.AppRunner.ResumeService
+  ( -- * Creating a Request
+    ResumeService (..),
+    newResumeService,
+
+    -- * Request Lenses
+    resumeService_serviceArn,
+
+    -- * Destructuring the Response
+    ResumeServiceResponse (..),
+    newResumeServiceResponse,
+
+    -- * Response Lenses
+    resumeServiceResponse_operationId,
+    resumeServiceResponse_httpStatus,
+    resumeServiceResponse_service,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newResumeService' smart constructor.
+data ResumeService = ResumeService'
+  { -- | The Amazon Resource Name (ARN) of the App Runner service that you want
+    -- to resume.
+    serviceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResumeService' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serviceArn', 'resumeService_serviceArn' - The Amazon Resource Name (ARN) of the App Runner service that you want
+-- to resume.
+newResumeService ::
+  -- | 'serviceArn'
+  Prelude.Text ->
+  ResumeService
+newResumeService pServiceArn_ =
+  ResumeService' {serviceArn = pServiceArn_}
+
+-- | The Amazon Resource Name (ARN) of the App Runner service that you want
+-- to resume.
+resumeService_serviceArn :: Lens.Lens' ResumeService Prelude.Text
+resumeService_serviceArn = Lens.lens (\ResumeService' {serviceArn} -> serviceArn) (\s@ResumeService' {} a -> s {serviceArn = a} :: ResumeService)
+
+instance Core.AWSRequest ResumeService where
+  type
+    AWSResponse ResumeService =
+      ResumeServiceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ResumeServiceResponse'
+            Prelude.<$> (x Data..?> "OperationId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Service")
+      )
+
+instance Prelude.Hashable ResumeService where
+  hashWithSalt _salt ResumeService' {..} =
+    _salt `Prelude.hashWithSalt` serviceArn
+
+instance Prelude.NFData ResumeService where
+  rnf ResumeService' {..} = Prelude.rnf serviceArn
+
+instance Data.ToHeaders ResumeService where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AppRunner.ResumeService" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ResumeService where
+  toJSON ResumeService' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ServiceArn" Data..= serviceArn)]
+      )
+
+instance Data.ToPath ResumeService where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ResumeService where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newResumeServiceResponse' smart constructor.
+data ResumeServiceResponse = ResumeServiceResponse'
+  { -- | The unique ID of the asynchronous operation that this request started.
+    -- You can use it combined with the ListOperations call to track the
+    -- operation\'s progress.
+    operationId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner service that this request just resumed.
+    service :: Service
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResumeServiceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'operationId', 'resumeServiceResponse_operationId' - The unique ID of the asynchronous operation that this request started.
+-- You can use it combined with the ListOperations call to track the
+-- operation\'s progress.
+--
+-- 'httpStatus', 'resumeServiceResponse_httpStatus' - The response's http status code.
+--
+-- 'service', 'resumeServiceResponse_service' - A description of the App Runner service that this request just resumed.
+newResumeServiceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'service'
+  Service ->
+  ResumeServiceResponse
+newResumeServiceResponse pHttpStatus_ pService_ =
+  ResumeServiceResponse'
+    { operationId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      service = pService_
+    }
+
+-- | The unique ID of the asynchronous operation that this request started.
+-- You can use it combined with the ListOperations call to track the
+-- operation\'s progress.
+resumeServiceResponse_operationId :: Lens.Lens' ResumeServiceResponse (Prelude.Maybe Prelude.Text)
+resumeServiceResponse_operationId = Lens.lens (\ResumeServiceResponse' {operationId} -> operationId) (\s@ResumeServiceResponse' {} a -> s {operationId = a} :: ResumeServiceResponse)
+
+-- | The response's http status code.
+resumeServiceResponse_httpStatus :: Lens.Lens' ResumeServiceResponse Prelude.Int
+resumeServiceResponse_httpStatus = Lens.lens (\ResumeServiceResponse' {httpStatus} -> httpStatus) (\s@ResumeServiceResponse' {} a -> s {httpStatus = a} :: ResumeServiceResponse)
+
+-- | A description of the App Runner service that this request just resumed.
+resumeServiceResponse_service :: Lens.Lens' ResumeServiceResponse Service
+resumeServiceResponse_service = Lens.lens (\ResumeServiceResponse' {service} -> service) (\s@ResumeServiceResponse' {} a -> s {service = a} :: ResumeServiceResponse)
+
+instance Prelude.NFData ResumeServiceResponse where
+  rnf ResumeServiceResponse' {..} =
+    Prelude.rnf operationId
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf service
diff --git a/gen/Amazonka/AppRunner/StartDeployment.hs b/gen/Amazonka/AppRunner/StartDeployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/StartDeployment.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.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)
+--
+-- Initiate a manual deployment of the latest commit in a source code
+-- repository or the latest image in a source image repository to an App
+-- Runner service.
+--
+-- For a source code repository, App Runner retrieves the commit and builds
+-- a Docker image. For a source image repository, App Runner retrieves the
+-- latest Docker image. In both cases, App Runner then deploys the new
+-- image to your service and starts a new container instance.
+--
+-- This is an asynchronous operation. On a successful call, you can use the
+-- returned @OperationId@ and the ListOperations call to track the
+-- operation\'s progress.
+module Amazonka.AppRunner.StartDeployment
+  ( -- * Creating a Request
+    StartDeployment (..),
+    newStartDeployment,
+
+    -- * Request Lenses
+    startDeployment_serviceArn,
+
+    -- * Destructuring the Response
+    StartDeploymentResponse (..),
+    newStartDeploymentResponse,
+
+    -- * Response Lenses
+    startDeploymentResponse_httpStatus,
+    startDeploymentResponse_operationId,
+  )
+where
+
+import Amazonka.AppRunner.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'
+  { -- | The Amazon Resource Name (ARN) of the App Runner service that you want
+    -- to manually deploy to.
+    serviceArn :: 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:
+--
+-- 'serviceArn', 'startDeployment_serviceArn' - The Amazon Resource Name (ARN) of the App Runner service that you want
+-- to manually deploy to.
+newStartDeployment ::
+  -- | 'serviceArn'
+  Prelude.Text ->
+  StartDeployment
+newStartDeployment pServiceArn_ =
+  StartDeployment' {serviceArn = pServiceArn_}
+
+-- | The Amazon Resource Name (ARN) of the App Runner service that you want
+-- to manually deploy to.
+startDeployment_serviceArn :: Lens.Lens' StartDeployment Prelude.Text
+startDeployment_serviceArn = Lens.lens (\StartDeployment' {serviceArn} -> serviceArn) (\s@StartDeployment' {} a -> s {serviceArn = a} :: StartDeployment)
+
+instance Core.AWSRequest StartDeployment where
+  type
+    AWSResponse StartDeployment =
+      StartDeploymentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartDeploymentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "OperationId")
+      )
+
+instance Prelude.Hashable StartDeployment where
+  hashWithSalt _salt StartDeployment' {..} =
+    _salt `Prelude.hashWithSalt` serviceArn
+
+instance Prelude.NFData StartDeployment where
+  rnf StartDeployment' {..} = Prelude.rnf serviceArn
+
+instance Data.ToHeaders StartDeployment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AppRunner.StartDeployment" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartDeployment where
+  toJSON StartDeployment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ServiceArn" Data..= serviceArn)]
+      )
+
+instance Data.ToPath StartDeployment where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartDeployment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartDeploymentResponse' smart constructor.
+data StartDeploymentResponse = StartDeploymentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique ID of the asynchronous operation that this request started.
+    -- You can use it combined with the ListOperations call to track the
+    -- operation\'s progress.
+    operationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartDeploymentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'startDeploymentResponse_httpStatus' - The response's http status code.
+--
+-- 'operationId', 'startDeploymentResponse_operationId' - The unique ID of the asynchronous operation that this request started.
+-- You can use it combined with the ListOperations call to track the
+-- operation\'s progress.
+newStartDeploymentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'operationId'
+  Prelude.Text ->
+  StartDeploymentResponse
+newStartDeploymentResponse pHttpStatus_ pOperationId_ =
+  StartDeploymentResponse'
+    { httpStatus = pHttpStatus_,
+      operationId = pOperationId_
+    }
+
+-- | The response's http status code.
+startDeploymentResponse_httpStatus :: Lens.Lens' StartDeploymentResponse Prelude.Int
+startDeploymentResponse_httpStatus = Lens.lens (\StartDeploymentResponse' {httpStatus} -> httpStatus) (\s@StartDeploymentResponse' {} a -> s {httpStatus = a} :: StartDeploymentResponse)
+
+-- | The unique ID of the asynchronous operation that this request started.
+-- You can use it combined with the ListOperations call to track the
+-- operation\'s progress.
+startDeploymentResponse_operationId :: Lens.Lens' StartDeploymentResponse Prelude.Text
+startDeploymentResponse_operationId = Lens.lens (\StartDeploymentResponse' {operationId} -> operationId) (\s@StartDeploymentResponse' {} a -> s {operationId = a} :: StartDeploymentResponse)
+
+instance Prelude.NFData StartDeploymentResponse where
+  rnf StartDeploymentResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf operationId
diff --git a/gen/Amazonka/AppRunner/TagResource.hs b/gen/Amazonka/AppRunner/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/TagResource.hs
@@ -0,0 +1,182 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Add tags to, or update the tag values of, an App Runner resource. A tag
+-- is a key-value pair.
+module Amazonka.AppRunner.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppRunner.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 Amazon Resource Name (ARN) of the resource that you want to update
+    -- tags for.
+    --
+    -- It must be the ARN of an App Runner resource.
+    resourceArn :: Prelude.Text,
+    -- | A list of tag key-value pairs to add or update. If a key is new to the
+    -- resource, the tag is added with the provided value. If a key is already
+    -- associated with the resource, the value of the tag is updated.
+    tags :: [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource that you want to update
+-- tags for.
+--
+-- It must be the ARN of an App Runner resource.
+--
+-- 'tags', 'tagResource_tags' - A list of tag key-value pairs to add or update. If a key is new to the
+-- resource, the tag is added with the provided value. If a key is already
+-- associated with the resource, the value of the tag is updated.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource that you want to update
+-- tags for.
+--
+-- It must be the ARN of an App Runner resource.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | A list of tag key-value pairs to add or update. If a key is new to the
+-- resource, the tag is added with the provided value. If a key is already
+-- associated with the resource, the value of the tag is updated.
+tagResource_tags :: Lens.Lens' TagResource [Tag]
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AppRunner.TagResource" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceArn" Data..= resourceArn),
+            Prelude.Just ("Tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppRunner/Types.hs b/gen/Amazonka/AppRunner/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types.hs
@@ -0,0 +1,530 @@
+{-# 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.AppRunner.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.AppRunner.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _InternalServiceErrorException,
+    _InvalidRequestException,
+    _InvalidStateException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+
+    -- * AutoScalingConfigurationStatus
+    AutoScalingConfigurationStatus (..),
+
+    -- * CertificateValidationRecordStatus
+    CertificateValidationRecordStatus (..),
+
+    -- * ConfigurationSource
+    ConfigurationSource (..),
+
+    -- * ConnectionStatus
+    ConnectionStatus (..),
+
+    -- * CustomDomainAssociationStatus
+    CustomDomainAssociationStatus (..),
+
+    -- * EgressType
+    EgressType (..),
+
+    -- * HealthCheckProtocol
+    HealthCheckProtocol (..),
+
+    -- * ImageRepositoryType
+    ImageRepositoryType (..),
+
+    -- * ObservabilityConfigurationStatus
+    ObservabilityConfigurationStatus (..),
+
+    -- * OperationStatus
+    OperationStatus (..),
+
+    -- * OperationType
+    OperationType (..),
+
+    -- * ProviderType
+    ProviderType (..),
+
+    -- * Runtime
+    Runtime (..),
+
+    -- * ServiceStatus
+    ServiceStatus (..),
+
+    -- * SourceCodeVersionType
+    SourceCodeVersionType (..),
+
+    -- * TracingVendor
+    TracingVendor (..),
+
+    -- * VpcConnectorStatus
+    VpcConnectorStatus (..),
+
+    -- * VpcIngressConnectionStatus
+    VpcIngressConnectionStatus (..),
+
+    -- * AuthenticationConfiguration
+    AuthenticationConfiguration (..),
+    newAuthenticationConfiguration,
+    authenticationConfiguration_accessRoleArn,
+    authenticationConfiguration_connectionArn,
+
+    -- * AutoScalingConfiguration
+    AutoScalingConfiguration (..),
+    newAutoScalingConfiguration,
+    autoScalingConfiguration_autoScalingConfigurationArn,
+    autoScalingConfiguration_autoScalingConfigurationName,
+    autoScalingConfiguration_autoScalingConfigurationRevision,
+    autoScalingConfiguration_createdAt,
+    autoScalingConfiguration_deletedAt,
+    autoScalingConfiguration_latest,
+    autoScalingConfiguration_maxConcurrency,
+    autoScalingConfiguration_maxSize,
+    autoScalingConfiguration_minSize,
+    autoScalingConfiguration_status,
+
+    -- * AutoScalingConfigurationSummary
+    AutoScalingConfigurationSummary (..),
+    newAutoScalingConfigurationSummary,
+    autoScalingConfigurationSummary_autoScalingConfigurationArn,
+    autoScalingConfigurationSummary_autoScalingConfigurationName,
+    autoScalingConfigurationSummary_autoScalingConfigurationRevision,
+
+    -- * CertificateValidationRecord
+    CertificateValidationRecord (..),
+    newCertificateValidationRecord,
+    certificateValidationRecord_name,
+    certificateValidationRecord_status,
+    certificateValidationRecord_type,
+    certificateValidationRecord_value,
+
+    -- * CodeConfiguration
+    CodeConfiguration (..),
+    newCodeConfiguration,
+    codeConfiguration_codeConfigurationValues,
+    codeConfiguration_configurationSource,
+
+    -- * CodeConfigurationValues
+    CodeConfigurationValues (..),
+    newCodeConfigurationValues,
+    codeConfigurationValues_buildCommand,
+    codeConfigurationValues_port,
+    codeConfigurationValues_runtimeEnvironmentSecrets,
+    codeConfigurationValues_runtimeEnvironmentVariables,
+    codeConfigurationValues_startCommand,
+    codeConfigurationValues_runtime,
+
+    -- * CodeRepository
+    CodeRepository (..),
+    newCodeRepository,
+    codeRepository_codeConfiguration,
+    codeRepository_repositoryUrl,
+    codeRepository_sourceCodeVersion,
+
+    -- * Connection
+    Connection (..),
+    newConnection,
+    connection_connectionArn,
+    connection_connectionName,
+    connection_createdAt,
+    connection_providerType,
+    connection_status,
+
+    -- * ConnectionSummary
+    ConnectionSummary (..),
+    newConnectionSummary,
+    connectionSummary_connectionArn,
+    connectionSummary_connectionName,
+    connectionSummary_createdAt,
+    connectionSummary_providerType,
+    connectionSummary_status,
+
+    -- * CustomDomain
+    CustomDomain (..),
+    newCustomDomain,
+    customDomain_certificateValidationRecords,
+    customDomain_domainName,
+    customDomain_enableWWWSubdomain,
+    customDomain_status,
+
+    -- * EgressConfiguration
+    EgressConfiguration (..),
+    newEgressConfiguration,
+    egressConfiguration_egressType,
+    egressConfiguration_vpcConnectorArn,
+
+    -- * EncryptionConfiguration
+    EncryptionConfiguration (..),
+    newEncryptionConfiguration,
+    encryptionConfiguration_kmsKey,
+
+    -- * HealthCheckConfiguration
+    HealthCheckConfiguration (..),
+    newHealthCheckConfiguration,
+    healthCheckConfiguration_healthyThreshold,
+    healthCheckConfiguration_interval,
+    healthCheckConfiguration_path,
+    healthCheckConfiguration_protocol,
+    healthCheckConfiguration_timeout,
+    healthCheckConfiguration_unhealthyThreshold,
+
+    -- * ImageConfiguration
+    ImageConfiguration (..),
+    newImageConfiguration,
+    imageConfiguration_port,
+    imageConfiguration_runtimeEnvironmentSecrets,
+    imageConfiguration_runtimeEnvironmentVariables,
+    imageConfiguration_startCommand,
+
+    -- * ImageRepository
+    ImageRepository (..),
+    newImageRepository,
+    imageRepository_imageConfiguration,
+    imageRepository_imageIdentifier,
+    imageRepository_imageRepositoryType,
+
+    -- * IngressConfiguration
+    IngressConfiguration (..),
+    newIngressConfiguration,
+    ingressConfiguration_isPubliclyAccessible,
+
+    -- * IngressVpcConfiguration
+    IngressVpcConfiguration (..),
+    newIngressVpcConfiguration,
+    ingressVpcConfiguration_vpcEndpointId,
+    ingressVpcConfiguration_vpcId,
+
+    -- * InstanceConfiguration
+    InstanceConfiguration (..),
+    newInstanceConfiguration,
+    instanceConfiguration_cpu,
+    instanceConfiguration_instanceRoleArn,
+    instanceConfiguration_memory,
+
+    -- * ListVpcIngressConnectionsFilter
+    ListVpcIngressConnectionsFilter (..),
+    newListVpcIngressConnectionsFilter,
+    listVpcIngressConnectionsFilter_serviceArn,
+    listVpcIngressConnectionsFilter_vpcEndpointId,
+
+    -- * NetworkConfiguration
+    NetworkConfiguration (..),
+    newNetworkConfiguration,
+    networkConfiguration_egressConfiguration,
+    networkConfiguration_ingressConfiguration,
+
+    -- * ObservabilityConfiguration
+    ObservabilityConfiguration (..),
+    newObservabilityConfiguration,
+    observabilityConfiguration_createdAt,
+    observabilityConfiguration_deletedAt,
+    observabilityConfiguration_latest,
+    observabilityConfiguration_observabilityConfigurationArn,
+    observabilityConfiguration_observabilityConfigurationName,
+    observabilityConfiguration_observabilityConfigurationRevision,
+    observabilityConfiguration_status,
+    observabilityConfiguration_traceConfiguration,
+
+    -- * ObservabilityConfigurationSummary
+    ObservabilityConfigurationSummary (..),
+    newObservabilityConfigurationSummary,
+    observabilityConfigurationSummary_observabilityConfigurationArn,
+    observabilityConfigurationSummary_observabilityConfigurationName,
+    observabilityConfigurationSummary_observabilityConfigurationRevision,
+
+    -- * OperationSummary
+    OperationSummary (..),
+    newOperationSummary,
+    operationSummary_endedAt,
+    operationSummary_id,
+    operationSummary_startedAt,
+    operationSummary_status,
+    operationSummary_targetArn,
+    operationSummary_type,
+    operationSummary_updatedAt,
+
+    -- * Service
+    Service (..),
+    newService,
+    service_deletedAt,
+    service_encryptionConfiguration,
+    service_healthCheckConfiguration,
+    service_observabilityConfiguration,
+    service_serviceUrl,
+    service_serviceName,
+    service_serviceId,
+    service_serviceArn,
+    service_createdAt,
+    service_updatedAt,
+    service_status,
+    service_sourceConfiguration,
+    service_instanceConfiguration,
+    service_autoScalingConfigurationSummary,
+    service_networkConfiguration,
+
+    -- * ServiceObservabilityConfiguration
+    ServiceObservabilityConfiguration (..),
+    newServiceObservabilityConfiguration,
+    serviceObservabilityConfiguration_observabilityConfigurationArn,
+    serviceObservabilityConfiguration_observabilityEnabled,
+
+    -- * ServiceSummary
+    ServiceSummary (..),
+    newServiceSummary,
+    serviceSummary_createdAt,
+    serviceSummary_serviceArn,
+    serviceSummary_serviceId,
+    serviceSummary_serviceName,
+    serviceSummary_serviceUrl,
+    serviceSummary_status,
+    serviceSummary_updatedAt,
+
+    -- * SourceCodeVersion
+    SourceCodeVersion (..),
+    newSourceCodeVersion,
+    sourceCodeVersion_type,
+    sourceCodeVersion_value,
+
+    -- * SourceConfiguration
+    SourceConfiguration (..),
+    newSourceConfiguration,
+    sourceConfiguration_authenticationConfiguration,
+    sourceConfiguration_autoDeploymentsEnabled,
+    sourceConfiguration_codeRepository,
+    sourceConfiguration_imageRepository,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * TraceConfiguration
+    TraceConfiguration (..),
+    newTraceConfiguration,
+    traceConfiguration_vendor,
+
+    -- * VpcConnector
+    VpcConnector (..),
+    newVpcConnector,
+    vpcConnector_createdAt,
+    vpcConnector_deletedAt,
+    vpcConnector_securityGroups,
+    vpcConnector_status,
+    vpcConnector_subnets,
+    vpcConnector_vpcConnectorArn,
+    vpcConnector_vpcConnectorName,
+    vpcConnector_vpcConnectorRevision,
+
+    -- * VpcDNSTarget
+    VpcDNSTarget (..),
+    newVpcDNSTarget,
+    vpcDNSTarget_domainName,
+    vpcDNSTarget_vpcId,
+    vpcDNSTarget_vpcIngressConnectionArn,
+
+    -- * VpcIngressConnection
+    VpcIngressConnection (..),
+    newVpcIngressConnection,
+    vpcIngressConnection_accountId,
+    vpcIngressConnection_createdAt,
+    vpcIngressConnection_deletedAt,
+    vpcIngressConnection_domainName,
+    vpcIngressConnection_ingressVpcConfiguration,
+    vpcIngressConnection_serviceArn,
+    vpcIngressConnection_status,
+    vpcIngressConnection_vpcIngressConnectionArn,
+    vpcIngressConnection_vpcIngressConnectionName,
+
+    -- * VpcIngressConnectionSummary
+    VpcIngressConnectionSummary (..),
+    newVpcIngressConnectionSummary,
+    vpcIngressConnectionSummary_serviceArn,
+    vpcIngressConnectionSummary_vpcIngressConnectionArn,
+  )
+where
+
+import Amazonka.AppRunner.Types.AuthenticationConfiguration
+import Amazonka.AppRunner.Types.AutoScalingConfiguration
+import Amazonka.AppRunner.Types.AutoScalingConfigurationStatus
+import Amazonka.AppRunner.Types.AutoScalingConfigurationSummary
+import Amazonka.AppRunner.Types.CertificateValidationRecord
+import Amazonka.AppRunner.Types.CertificateValidationRecordStatus
+import Amazonka.AppRunner.Types.CodeConfiguration
+import Amazonka.AppRunner.Types.CodeConfigurationValues
+import Amazonka.AppRunner.Types.CodeRepository
+import Amazonka.AppRunner.Types.ConfigurationSource
+import Amazonka.AppRunner.Types.Connection
+import Amazonka.AppRunner.Types.ConnectionStatus
+import Amazonka.AppRunner.Types.ConnectionSummary
+import Amazonka.AppRunner.Types.CustomDomain
+import Amazonka.AppRunner.Types.CustomDomainAssociationStatus
+import Amazonka.AppRunner.Types.EgressConfiguration
+import Amazonka.AppRunner.Types.EgressType
+import Amazonka.AppRunner.Types.EncryptionConfiguration
+import Amazonka.AppRunner.Types.HealthCheckConfiguration
+import Amazonka.AppRunner.Types.HealthCheckProtocol
+import Amazonka.AppRunner.Types.ImageConfiguration
+import Amazonka.AppRunner.Types.ImageRepository
+import Amazonka.AppRunner.Types.ImageRepositoryType
+import Amazonka.AppRunner.Types.IngressConfiguration
+import Amazonka.AppRunner.Types.IngressVpcConfiguration
+import Amazonka.AppRunner.Types.InstanceConfiguration
+import Amazonka.AppRunner.Types.ListVpcIngressConnectionsFilter
+import Amazonka.AppRunner.Types.NetworkConfiguration
+import Amazonka.AppRunner.Types.ObservabilityConfiguration
+import Amazonka.AppRunner.Types.ObservabilityConfigurationStatus
+import Amazonka.AppRunner.Types.ObservabilityConfigurationSummary
+import Amazonka.AppRunner.Types.OperationStatus
+import Amazonka.AppRunner.Types.OperationSummary
+import Amazonka.AppRunner.Types.OperationType
+import Amazonka.AppRunner.Types.ProviderType
+import Amazonka.AppRunner.Types.Runtime
+import Amazonka.AppRunner.Types.Service
+import Amazonka.AppRunner.Types.ServiceObservabilityConfiguration
+import Amazonka.AppRunner.Types.ServiceStatus
+import Amazonka.AppRunner.Types.ServiceSummary
+import Amazonka.AppRunner.Types.SourceCodeVersion
+import Amazonka.AppRunner.Types.SourceCodeVersionType
+import Amazonka.AppRunner.Types.SourceConfiguration
+import Amazonka.AppRunner.Types.Tag
+import Amazonka.AppRunner.Types.TraceConfiguration
+import Amazonka.AppRunner.Types.TracingVendor
+import Amazonka.AppRunner.Types.VpcConnector
+import Amazonka.AppRunner.Types.VpcConnectorStatus
+import Amazonka.AppRunner.Types.VpcDNSTarget
+import Amazonka.AppRunner.Types.VpcIngressConnection
+import Amazonka.AppRunner.Types.VpcIngressConnectionStatus
+import Amazonka.AppRunner.Types.VpcIngressConnectionSummary
+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 @2020-05-15@ of the Amazon App Runner SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "AppRunner",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "apprunner",
+      Core.signingName = "apprunner",
+      Core.version = "2020-05-15",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "AppRunner",
+      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
+
+-- | An unexpected service exception occurred.
+_InternalServiceErrorException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServiceErrorException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServiceErrorException"
+
+-- | One or more input parameters aren\'t valid. Refer to the API action\'s
+-- document page, correct the input parameters, and try the action again.
+_InvalidRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidRequestException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidRequestException"
+
+-- | You can\'t perform this action when the resource is in its current
+-- state.
+_InvalidStateException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidStateException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidStateException"
+
+-- | A resource doesn\'t exist for the specified Amazon Resource Name (ARN)
+-- in your Amazon Web Services account.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+
+-- | App Runner can\'t create this resource. You\'ve reached your account
+-- quota for this resource type.
+--
+-- For App Runner per-resource quotas, see
+-- <https://docs.aws.amazon.com/general/latest/gr/apprunner.html App Runner endpoints and quotas>
+-- in the /Amazon Web Services General Reference/.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
diff --git a/gen/Amazonka/AppRunner/Types/AuthenticationConfiguration.hs b/gen/Amazonka/AppRunner/Types/AuthenticationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/AuthenticationConfiguration.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.AuthenticationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.AuthenticationConfiguration 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
+
+-- | Describes resources needed to authenticate access to some source
+-- repositories. The specific resource depends on the repository provider.
+--
+-- /See:/ 'newAuthenticationConfiguration' smart constructor.
+data AuthenticationConfiguration = AuthenticationConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the IAM role that grants the App
+    -- Runner service access to a source repository. It\'s required for ECR
+    -- image repositories (but not for ECR Public repositories).
+    accessRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the App Runner connection that enables
+    -- the App Runner service to connect to a source repository. It\'s required
+    -- for GitHub code repositories.
+    connectionArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AuthenticationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessRoleArn', 'authenticationConfiguration_accessRoleArn' - The Amazon Resource Name (ARN) of the IAM role that grants the App
+-- Runner service access to a source repository. It\'s required for ECR
+-- image repositories (but not for ECR Public repositories).
+--
+-- 'connectionArn', 'authenticationConfiguration_connectionArn' - The Amazon Resource Name (ARN) of the App Runner connection that enables
+-- the App Runner service to connect to a source repository. It\'s required
+-- for GitHub code repositories.
+newAuthenticationConfiguration ::
+  AuthenticationConfiguration
+newAuthenticationConfiguration =
+  AuthenticationConfiguration'
+    { accessRoleArn =
+        Prelude.Nothing,
+      connectionArn = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the IAM role that grants the App
+-- Runner service access to a source repository. It\'s required for ECR
+-- image repositories (but not for ECR Public repositories).
+authenticationConfiguration_accessRoleArn :: Lens.Lens' AuthenticationConfiguration (Prelude.Maybe Prelude.Text)
+authenticationConfiguration_accessRoleArn = Lens.lens (\AuthenticationConfiguration' {accessRoleArn} -> accessRoleArn) (\s@AuthenticationConfiguration' {} a -> s {accessRoleArn = a} :: AuthenticationConfiguration)
+
+-- | The Amazon Resource Name (ARN) of the App Runner connection that enables
+-- the App Runner service to connect to a source repository. It\'s required
+-- for GitHub code repositories.
+authenticationConfiguration_connectionArn :: Lens.Lens' AuthenticationConfiguration (Prelude.Maybe Prelude.Text)
+authenticationConfiguration_connectionArn = Lens.lens (\AuthenticationConfiguration' {connectionArn} -> connectionArn) (\s@AuthenticationConfiguration' {} a -> s {connectionArn = a} :: AuthenticationConfiguration)
+
+instance Data.FromJSON AuthenticationConfiguration where
+  parseJSON =
+    Data.withObject
+      "AuthenticationConfiguration"
+      ( \x ->
+          AuthenticationConfiguration'
+            Prelude.<$> (x Data..:? "AccessRoleArn")
+            Prelude.<*> (x Data..:? "ConnectionArn")
+      )
+
+instance Prelude.Hashable AuthenticationConfiguration where
+  hashWithSalt _salt AuthenticationConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessRoleArn
+      `Prelude.hashWithSalt` connectionArn
+
+instance Prelude.NFData AuthenticationConfiguration where
+  rnf AuthenticationConfiguration' {..} =
+    Prelude.rnf accessRoleArn
+      `Prelude.seq` Prelude.rnf connectionArn
+
+instance Data.ToJSON AuthenticationConfiguration where
+  toJSON AuthenticationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccessRoleArn" Data..=) Prelude.<$> accessRoleArn,
+            ("ConnectionArn" Data..=) Prelude.<$> connectionArn
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/AutoScalingConfiguration.hs b/gen/Amazonka/AppRunner/Types/AutoScalingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/AutoScalingConfiguration.hs
@@ -0,0 +1,263 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.AutoScalingConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.AutoScalingConfiguration where
+
+import Amazonka.AppRunner.Types.AutoScalingConfigurationStatus
+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
+
+-- | Describes an App Runner automatic scaling configuration resource.
+--
+-- A higher @MinSize@ increases the spread of your App Runner service over
+-- more Availability Zones in the Amazon Web Services Region. The tradeoff
+-- is a higher minimal cost.
+--
+-- A lower @MaxSize@ controls your cost. The tradeoff is lower
+-- responsiveness during peak demand.
+--
+-- Multiple revisions of a configuration might have the same
+-- @AutoScalingConfigurationName@ and different
+-- @AutoScalingConfigurationRevision@ values.
+--
+-- /See:/ 'newAutoScalingConfiguration' smart constructor.
+data AutoScalingConfiguration = AutoScalingConfiguration'
+  { -- | The Amazon Resource Name (ARN) of this auto scaling configuration.
+    autoScalingConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The customer-provided auto scaling configuration name. It can be used in
+    -- multiple revisions of a configuration.
+    autoScalingConfigurationName :: Prelude.Maybe Prelude.Text,
+    -- | The revision of this auto scaling configuration. It\'s unique among all
+    -- the active configurations (@\"Status\": \"ACTIVE\"@) that share the same
+    -- @AutoScalingConfigurationName@.
+    autoScalingConfigurationRevision :: Prelude.Maybe Prelude.Int,
+    -- | The time when the auto scaling configuration was created. It\'s in Unix
+    -- time stamp format.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The time when the auto scaling configuration was deleted. It\'s in Unix
+    -- time stamp format.
+    deletedAt :: Prelude.Maybe Data.POSIX,
+    -- | It\'s set to @true@ for the configuration with the highest @Revision@
+    -- among all configurations that share the same
+    -- @AutoScalingConfigurationName@. It\'s set to @false@ otherwise.
+    latest :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of concurrent requests that an instance processes. If
+    -- the number of concurrent requests exceeds this limit, App Runner scales
+    -- the service up.
+    maxConcurrency :: Prelude.Maybe Prelude.Int,
+    -- | The maximum number of instances that a service scales up to. At most
+    -- @MaxSize@ instances actively serve traffic for your service.
+    maxSize :: Prelude.Maybe Prelude.Int,
+    -- | The minimum number of instances that App Runner provisions for a
+    -- service. The service always has at least @MinSize@ provisioned
+    -- instances. Some of them actively serve traffic. The rest of them
+    -- (provisioned and inactive instances) are a cost-effective compute
+    -- capacity reserve and are ready to be quickly activated. You pay for
+    -- memory usage of all the provisioned instances. You pay for CPU usage of
+    -- only the active subset.
+    --
+    -- App Runner temporarily doubles the number of provisioned instances
+    -- during deployments, to maintain the same capacity for both old and new
+    -- code.
+    minSize :: Prelude.Maybe Prelude.Int,
+    -- | The current state of the auto scaling configuration. If the status of a
+    -- configuration revision is @INACTIVE@, it was deleted and can\'t be used.
+    -- Inactive configuration revisions are permanently removed some time after
+    -- they are deleted.
+    status :: Prelude.Maybe AutoScalingConfigurationStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AutoScalingConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoScalingConfigurationArn', 'autoScalingConfiguration_autoScalingConfigurationArn' - The Amazon Resource Name (ARN) of this auto scaling configuration.
+--
+-- 'autoScalingConfigurationName', 'autoScalingConfiguration_autoScalingConfigurationName' - The customer-provided auto scaling configuration name. It can be used in
+-- multiple revisions of a configuration.
+--
+-- 'autoScalingConfigurationRevision', 'autoScalingConfiguration_autoScalingConfigurationRevision' - The revision of this auto scaling configuration. It\'s unique among all
+-- the active configurations (@\"Status\": \"ACTIVE\"@) that share the same
+-- @AutoScalingConfigurationName@.
+--
+-- 'createdAt', 'autoScalingConfiguration_createdAt' - The time when the auto scaling configuration was created. It\'s in Unix
+-- time stamp format.
+--
+-- 'deletedAt', 'autoScalingConfiguration_deletedAt' - The time when the auto scaling configuration was deleted. It\'s in Unix
+-- time stamp format.
+--
+-- 'latest', 'autoScalingConfiguration_latest' - It\'s set to @true@ for the configuration with the highest @Revision@
+-- among all configurations that share the same
+-- @AutoScalingConfigurationName@. It\'s set to @false@ otherwise.
+--
+-- 'maxConcurrency', 'autoScalingConfiguration_maxConcurrency' - The maximum number of concurrent requests that an instance processes. If
+-- the number of concurrent requests exceeds this limit, App Runner scales
+-- the service up.
+--
+-- 'maxSize', 'autoScalingConfiguration_maxSize' - The maximum number of instances that a service scales up to. At most
+-- @MaxSize@ instances actively serve traffic for your service.
+--
+-- 'minSize', 'autoScalingConfiguration_minSize' - The minimum number of instances that App Runner provisions for a
+-- service. The service always has at least @MinSize@ provisioned
+-- instances. Some of them actively serve traffic. The rest of them
+-- (provisioned and inactive instances) are a cost-effective compute
+-- capacity reserve and are ready to be quickly activated. You pay for
+-- memory usage of all the provisioned instances. You pay for CPU usage of
+-- only the active subset.
+--
+-- App Runner temporarily doubles the number of provisioned instances
+-- during deployments, to maintain the same capacity for both old and new
+-- code.
+--
+-- 'status', 'autoScalingConfiguration_status' - The current state of the auto scaling configuration. If the status of a
+-- configuration revision is @INACTIVE@, it was deleted and can\'t be used.
+-- Inactive configuration revisions are permanently removed some time after
+-- they are deleted.
+newAutoScalingConfiguration ::
+  AutoScalingConfiguration
+newAutoScalingConfiguration =
+  AutoScalingConfiguration'
+    { autoScalingConfigurationArn =
+        Prelude.Nothing,
+      autoScalingConfigurationName = Prelude.Nothing,
+      autoScalingConfigurationRevision =
+        Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      deletedAt = Prelude.Nothing,
+      latest = Prelude.Nothing,
+      maxConcurrency = Prelude.Nothing,
+      maxSize = Prelude.Nothing,
+      minSize = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of this auto scaling configuration.
+autoScalingConfiguration_autoScalingConfigurationArn :: Lens.Lens' AutoScalingConfiguration (Prelude.Maybe Prelude.Text)
+autoScalingConfiguration_autoScalingConfigurationArn = Lens.lens (\AutoScalingConfiguration' {autoScalingConfigurationArn} -> autoScalingConfigurationArn) (\s@AutoScalingConfiguration' {} a -> s {autoScalingConfigurationArn = a} :: AutoScalingConfiguration)
+
+-- | The customer-provided auto scaling configuration name. It can be used in
+-- multiple revisions of a configuration.
+autoScalingConfiguration_autoScalingConfigurationName :: Lens.Lens' AutoScalingConfiguration (Prelude.Maybe Prelude.Text)
+autoScalingConfiguration_autoScalingConfigurationName = Lens.lens (\AutoScalingConfiguration' {autoScalingConfigurationName} -> autoScalingConfigurationName) (\s@AutoScalingConfiguration' {} a -> s {autoScalingConfigurationName = a} :: AutoScalingConfiguration)
+
+-- | The revision of this auto scaling configuration. It\'s unique among all
+-- the active configurations (@\"Status\": \"ACTIVE\"@) that share the same
+-- @AutoScalingConfigurationName@.
+autoScalingConfiguration_autoScalingConfigurationRevision :: Lens.Lens' AutoScalingConfiguration (Prelude.Maybe Prelude.Int)
+autoScalingConfiguration_autoScalingConfigurationRevision = Lens.lens (\AutoScalingConfiguration' {autoScalingConfigurationRevision} -> autoScalingConfigurationRevision) (\s@AutoScalingConfiguration' {} a -> s {autoScalingConfigurationRevision = a} :: AutoScalingConfiguration)
+
+-- | The time when the auto scaling configuration was created. It\'s in Unix
+-- time stamp format.
+autoScalingConfiguration_createdAt :: Lens.Lens' AutoScalingConfiguration (Prelude.Maybe Prelude.UTCTime)
+autoScalingConfiguration_createdAt = Lens.lens (\AutoScalingConfiguration' {createdAt} -> createdAt) (\s@AutoScalingConfiguration' {} a -> s {createdAt = a} :: AutoScalingConfiguration) Prelude.. Lens.mapping Data._Time
+
+-- | The time when the auto scaling configuration was deleted. It\'s in Unix
+-- time stamp format.
+autoScalingConfiguration_deletedAt :: Lens.Lens' AutoScalingConfiguration (Prelude.Maybe Prelude.UTCTime)
+autoScalingConfiguration_deletedAt = Lens.lens (\AutoScalingConfiguration' {deletedAt} -> deletedAt) (\s@AutoScalingConfiguration' {} a -> s {deletedAt = a} :: AutoScalingConfiguration) Prelude.. Lens.mapping Data._Time
+
+-- | It\'s set to @true@ for the configuration with the highest @Revision@
+-- among all configurations that share the same
+-- @AutoScalingConfigurationName@. It\'s set to @false@ otherwise.
+autoScalingConfiguration_latest :: Lens.Lens' AutoScalingConfiguration (Prelude.Maybe Prelude.Bool)
+autoScalingConfiguration_latest = Lens.lens (\AutoScalingConfiguration' {latest} -> latest) (\s@AutoScalingConfiguration' {} a -> s {latest = a} :: AutoScalingConfiguration)
+
+-- | The maximum number of concurrent requests that an instance processes. If
+-- the number of concurrent requests exceeds this limit, App Runner scales
+-- the service up.
+autoScalingConfiguration_maxConcurrency :: Lens.Lens' AutoScalingConfiguration (Prelude.Maybe Prelude.Int)
+autoScalingConfiguration_maxConcurrency = Lens.lens (\AutoScalingConfiguration' {maxConcurrency} -> maxConcurrency) (\s@AutoScalingConfiguration' {} a -> s {maxConcurrency = a} :: AutoScalingConfiguration)
+
+-- | The maximum number of instances that a service scales up to. At most
+-- @MaxSize@ instances actively serve traffic for your service.
+autoScalingConfiguration_maxSize :: Lens.Lens' AutoScalingConfiguration (Prelude.Maybe Prelude.Int)
+autoScalingConfiguration_maxSize = Lens.lens (\AutoScalingConfiguration' {maxSize} -> maxSize) (\s@AutoScalingConfiguration' {} a -> s {maxSize = a} :: AutoScalingConfiguration)
+
+-- | The minimum number of instances that App Runner provisions for a
+-- service. The service always has at least @MinSize@ provisioned
+-- instances. Some of them actively serve traffic. The rest of them
+-- (provisioned and inactive instances) are a cost-effective compute
+-- capacity reserve and are ready to be quickly activated. You pay for
+-- memory usage of all the provisioned instances. You pay for CPU usage of
+-- only the active subset.
+--
+-- App Runner temporarily doubles the number of provisioned instances
+-- during deployments, to maintain the same capacity for both old and new
+-- code.
+autoScalingConfiguration_minSize :: Lens.Lens' AutoScalingConfiguration (Prelude.Maybe Prelude.Int)
+autoScalingConfiguration_minSize = Lens.lens (\AutoScalingConfiguration' {minSize} -> minSize) (\s@AutoScalingConfiguration' {} a -> s {minSize = a} :: AutoScalingConfiguration)
+
+-- | The current state of the auto scaling configuration. If the status of a
+-- configuration revision is @INACTIVE@, it was deleted and can\'t be used.
+-- Inactive configuration revisions are permanently removed some time after
+-- they are deleted.
+autoScalingConfiguration_status :: Lens.Lens' AutoScalingConfiguration (Prelude.Maybe AutoScalingConfigurationStatus)
+autoScalingConfiguration_status = Lens.lens (\AutoScalingConfiguration' {status} -> status) (\s@AutoScalingConfiguration' {} a -> s {status = a} :: AutoScalingConfiguration)
+
+instance Data.FromJSON AutoScalingConfiguration where
+  parseJSON =
+    Data.withObject
+      "AutoScalingConfiguration"
+      ( \x ->
+          AutoScalingConfiguration'
+            Prelude.<$> (x Data..:? "AutoScalingConfigurationArn")
+            Prelude.<*> (x Data..:? "AutoScalingConfigurationName")
+            Prelude.<*> (x Data..:? "AutoScalingConfigurationRevision")
+            Prelude.<*> (x Data..:? "CreatedAt")
+            Prelude.<*> (x Data..:? "DeletedAt")
+            Prelude.<*> (x Data..:? "Latest")
+            Prelude.<*> (x Data..:? "MaxConcurrency")
+            Prelude.<*> (x Data..:? "MaxSize")
+            Prelude.<*> (x Data..:? "MinSize")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable AutoScalingConfiguration where
+  hashWithSalt _salt AutoScalingConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoScalingConfigurationArn
+      `Prelude.hashWithSalt` autoScalingConfigurationName
+      `Prelude.hashWithSalt` autoScalingConfigurationRevision
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` deletedAt
+      `Prelude.hashWithSalt` latest
+      `Prelude.hashWithSalt` maxConcurrency
+      `Prelude.hashWithSalt` maxSize
+      `Prelude.hashWithSalt` minSize
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData AutoScalingConfiguration where
+  rnf AutoScalingConfiguration' {..} =
+    Prelude.rnf autoScalingConfigurationArn
+      `Prelude.seq` Prelude.rnf autoScalingConfigurationName
+      `Prelude.seq` Prelude.rnf autoScalingConfigurationRevision
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf deletedAt
+      `Prelude.seq` Prelude.rnf latest
+      `Prelude.seq` Prelude.rnf maxConcurrency
+      `Prelude.seq` Prelude.rnf maxSize
+      `Prelude.seq` Prelude.rnf minSize
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/AppRunner/Types/AutoScalingConfigurationStatus.hs b/gen/Amazonka/AppRunner/Types/AutoScalingConfigurationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/AutoScalingConfigurationStatus.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.AppRunner.Types.AutoScalingConfigurationStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.AutoScalingConfigurationStatus
+  ( AutoScalingConfigurationStatus
+      ( ..,
+        AutoScalingConfigurationStatus_ACTIVE,
+        AutoScalingConfigurationStatus_INACTIVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AutoScalingConfigurationStatus = AutoScalingConfigurationStatus'
+  { fromAutoScalingConfigurationStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AutoScalingConfigurationStatus_ACTIVE :: AutoScalingConfigurationStatus
+pattern AutoScalingConfigurationStatus_ACTIVE = AutoScalingConfigurationStatus' "ACTIVE"
+
+pattern AutoScalingConfigurationStatus_INACTIVE :: AutoScalingConfigurationStatus
+pattern AutoScalingConfigurationStatus_INACTIVE = AutoScalingConfigurationStatus' "INACTIVE"
+
+{-# COMPLETE
+  AutoScalingConfigurationStatus_ACTIVE,
+  AutoScalingConfigurationStatus_INACTIVE,
+  AutoScalingConfigurationStatus'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/AutoScalingConfigurationSummary.hs b/gen/Amazonka/AppRunner/Types/AutoScalingConfigurationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/AutoScalingConfigurationSummary.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.AutoScalingConfigurationSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.AutoScalingConfigurationSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides summary information about an App Runner automatic scaling
+-- configuration resource.
+--
+-- This type contains limited information about an auto scaling
+-- configuration. It includes only identification information, without
+-- configuration details. It\'s returned by the
+-- ListAutoScalingConfigurations action. Complete configuration information
+-- is returned by the CreateAutoScalingConfiguration,
+-- DescribeAutoScalingConfiguration, and DeleteAutoScalingConfiguration
+-- actions using the AutoScalingConfiguration type.
+--
+-- /See:/ 'newAutoScalingConfigurationSummary' smart constructor.
+data AutoScalingConfigurationSummary = AutoScalingConfigurationSummary'
+  { -- | The Amazon Resource Name (ARN) of this auto scaling configuration.
+    autoScalingConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The customer-provided auto scaling configuration name. It can be used in
+    -- multiple revisions of a configuration.
+    autoScalingConfigurationName :: Prelude.Maybe Prelude.Text,
+    -- | The revision of this auto scaling configuration. It\'s unique among all
+    -- the active configurations (@\"Status\": \"ACTIVE\"@) with the same
+    -- @AutoScalingConfigurationName@.
+    autoScalingConfigurationRevision :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AutoScalingConfigurationSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoScalingConfigurationArn', 'autoScalingConfigurationSummary_autoScalingConfigurationArn' - The Amazon Resource Name (ARN) of this auto scaling configuration.
+--
+-- 'autoScalingConfigurationName', 'autoScalingConfigurationSummary_autoScalingConfigurationName' - The customer-provided auto scaling configuration name. It can be used in
+-- multiple revisions of a configuration.
+--
+-- 'autoScalingConfigurationRevision', 'autoScalingConfigurationSummary_autoScalingConfigurationRevision' - The revision of this auto scaling configuration. It\'s unique among all
+-- the active configurations (@\"Status\": \"ACTIVE\"@) with the same
+-- @AutoScalingConfigurationName@.
+newAutoScalingConfigurationSummary ::
+  AutoScalingConfigurationSummary
+newAutoScalingConfigurationSummary =
+  AutoScalingConfigurationSummary'
+    { autoScalingConfigurationArn =
+        Prelude.Nothing,
+      autoScalingConfigurationName =
+        Prelude.Nothing,
+      autoScalingConfigurationRevision =
+        Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of this auto scaling configuration.
+autoScalingConfigurationSummary_autoScalingConfigurationArn :: Lens.Lens' AutoScalingConfigurationSummary (Prelude.Maybe Prelude.Text)
+autoScalingConfigurationSummary_autoScalingConfigurationArn = Lens.lens (\AutoScalingConfigurationSummary' {autoScalingConfigurationArn} -> autoScalingConfigurationArn) (\s@AutoScalingConfigurationSummary' {} a -> s {autoScalingConfigurationArn = a} :: AutoScalingConfigurationSummary)
+
+-- | The customer-provided auto scaling configuration name. It can be used in
+-- multiple revisions of a configuration.
+autoScalingConfigurationSummary_autoScalingConfigurationName :: Lens.Lens' AutoScalingConfigurationSummary (Prelude.Maybe Prelude.Text)
+autoScalingConfigurationSummary_autoScalingConfigurationName = Lens.lens (\AutoScalingConfigurationSummary' {autoScalingConfigurationName} -> autoScalingConfigurationName) (\s@AutoScalingConfigurationSummary' {} a -> s {autoScalingConfigurationName = a} :: AutoScalingConfigurationSummary)
+
+-- | The revision of this auto scaling configuration. It\'s unique among all
+-- the active configurations (@\"Status\": \"ACTIVE\"@) with the same
+-- @AutoScalingConfigurationName@.
+autoScalingConfigurationSummary_autoScalingConfigurationRevision :: Lens.Lens' AutoScalingConfigurationSummary (Prelude.Maybe Prelude.Int)
+autoScalingConfigurationSummary_autoScalingConfigurationRevision = Lens.lens (\AutoScalingConfigurationSummary' {autoScalingConfigurationRevision} -> autoScalingConfigurationRevision) (\s@AutoScalingConfigurationSummary' {} a -> s {autoScalingConfigurationRevision = a} :: AutoScalingConfigurationSummary)
+
+instance
+  Data.FromJSON
+    AutoScalingConfigurationSummary
+  where
+  parseJSON =
+    Data.withObject
+      "AutoScalingConfigurationSummary"
+      ( \x ->
+          AutoScalingConfigurationSummary'
+            Prelude.<$> (x Data..:? "AutoScalingConfigurationArn")
+            Prelude.<*> (x Data..:? "AutoScalingConfigurationName")
+            Prelude.<*> (x Data..:? "AutoScalingConfigurationRevision")
+      )
+
+instance
+  Prelude.Hashable
+    AutoScalingConfigurationSummary
+  where
+  hashWithSalt
+    _salt
+    AutoScalingConfigurationSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` autoScalingConfigurationArn
+        `Prelude.hashWithSalt` autoScalingConfigurationName
+        `Prelude.hashWithSalt` autoScalingConfigurationRevision
+
+instance
+  Prelude.NFData
+    AutoScalingConfigurationSummary
+  where
+  rnf AutoScalingConfigurationSummary' {..} =
+    Prelude.rnf autoScalingConfigurationArn
+      `Prelude.seq` Prelude.rnf autoScalingConfigurationName
+      `Prelude.seq` Prelude.rnf autoScalingConfigurationRevision
diff --git a/gen/Amazonka/AppRunner/Types/CertificateValidationRecord.hs b/gen/Amazonka/AppRunner/Types/CertificateValidationRecord.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/CertificateValidationRecord.hs
@@ -0,0 +1,115 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.CertificateValidationRecord
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.CertificateValidationRecord where
+
+import Amazonka.AppRunner.Types.CertificateValidationRecordStatus
+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
+
+-- | Describes a certificate CNAME record to add to your DNS. For more
+-- information, see
+-- <https://docs.aws.amazon.com/apprunner/latest/api/API_AssociateCustomDomain.html AssociateCustomDomain>.
+--
+-- /See:/ 'newCertificateValidationRecord' smart constructor.
+data CertificateValidationRecord = CertificateValidationRecord'
+  { -- | The certificate CNAME record name.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the certificate CNAME record validation. It should
+    -- change to @SUCCESS@ after App Runner completes validation with your DNS.
+    status :: Prelude.Maybe CertificateValidationRecordStatus,
+    -- | The record type, always @CNAME@.
+    type' :: Prelude.Maybe Prelude.Text,
+    -- | The certificate CNAME record value.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CertificateValidationRecord' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'certificateValidationRecord_name' - The certificate CNAME record name.
+--
+-- 'status', 'certificateValidationRecord_status' - The current state of the certificate CNAME record validation. It should
+-- change to @SUCCESS@ after App Runner completes validation with your DNS.
+--
+-- 'type'', 'certificateValidationRecord_type' - The record type, always @CNAME@.
+--
+-- 'value', 'certificateValidationRecord_value' - The certificate CNAME record value.
+newCertificateValidationRecord ::
+  CertificateValidationRecord
+newCertificateValidationRecord =
+  CertificateValidationRecord'
+    { name =
+        Prelude.Nothing,
+      status = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The certificate CNAME record name.
+certificateValidationRecord_name :: Lens.Lens' CertificateValidationRecord (Prelude.Maybe Prelude.Text)
+certificateValidationRecord_name = Lens.lens (\CertificateValidationRecord' {name} -> name) (\s@CertificateValidationRecord' {} a -> s {name = a} :: CertificateValidationRecord)
+
+-- | The current state of the certificate CNAME record validation. It should
+-- change to @SUCCESS@ after App Runner completes validation with your DNS.
+certificateValidationRecord_status :: Lens.Lens' CertificateValidationRecord (Prelude.Maybe CertificateValidationRecordStatus)
+certificateValidationRecord_status = Lens.lens (\CertificateValidationRecord' {status} -> status) (\s@CertificateValidationRecord' {} a -> s {status = a} :: CertificateValidationRecord)
+
+-- | The record type, always @CNAME@.
+certificateValidationRecord_type :: Lens.Lens' CertificateValidationRecord (Prelude.Maybe Prelude.Text)
+certificateValidationRecord_type = Lens.lens (\CertificateValidationRecord' {type'} -> type') (\s@CertificateValidationRecord' {} a -> s {type' = a} :: CertificateValidationRecord)
+
+-- | The certificate CNAME record value.
+certificateValidationRecord_value :: Lens.Lens' CertificateValidationRecord (Prelude.Maybe Prelude.Text)
+certificateValidationRecord_value = Lens.lens (\CertificateValidationRecord' {value} -> value) (\s@CertificateValidationRecord' {} a -> s {value = a} :: CertificateValidationRecord)
+
+instance Data.FromJSON CertificateValidationRecord where
+  parseJSON =
+    Data.withObject
+      "CertificateValidationRecord"
+      ( \x ->
+          CertificateValidationRecord'
+            Prelude.<$> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Type")
+            Prelude.<*> (x Data..:? "Value")
+      )
+
+instance Prelude.Hashable CertificateValidationRecord where
+  hashWithSalt _salt CertificateValidationRecord' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData CertificateValidationRecord where
+  rnf CertificateValidationRecord' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/AppRunner/Types/CertificateValidationRecordStatus.hs b/gen/Amazonka/AppRunner/Types/CertificateValidationRecordStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/CertificateValidationRecordStatus.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.CertificateValidationRecordStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.CertificateValidationRecordStatus
+  ( CertificateValidationRecordStatus
+      ( ..,
+        CertificateValidationRecordStatus_FAILED,
+        CertificateValidationRecordStatus_PENDING_VALIDATION,
+        CertificateValidationRecordStatus_SUCCESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CertificateValidationRecordStatus = CertificateValidationRecordStatus'
+  { fromCertificateValidationRecordStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CertificateValidationRecordStatus_FAILED :: CertificateValidationRecordStatus
+pattern CertificateValidationRecordStatus_FAILED = CertificateValidationRecordStatus' "FAILED"
+
+pattern CertificateValidationRecordStatus_PENDING_VALIDATION :: CertificateValidationRecordStatus
+pattern CertificateValidationRecordStatus_PENDING_VALIDATION = CertificateValidationRecordStatus' "PENDING_VALIDATION"
+
+pattern CertificateValidationRecordStatus_SUCCESS :: CertificateValidationRecordStatus
+pattern CertificateValidationRecordStatus_SUCCESS = CertificateValidationRecordStatus' "SUCCESS"
+
+{-# COMPLETE
+  CertificateValidationRecordStatus_FAILED,
+  CertificateValidationRecordStatus_PENDING_VALIDATION,
+  CertificateValidationRecordStatus_SUCCESS,
+  CertificateValidationRecordStatus'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/CodeConfiguration.hs b/gen/Amazonka/AppRunner/Types/CodeConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/CodeConfiguration.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.CodeConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.CodeConfiguration where
+
+import Amazonka.AppRunner.Types.CodeConfigurationValues
+import Amazonka.AppRunner.Types.ConfigurationSource
+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
+
+-- | Describes the configuration that App Runner uses to build and run an App
+-- Runner service from a source code repository.
+--
+-- /See:/ 'newCodeConfiguration' smart constructor.
+data CodeConfiguration = CodeConfiguration'
+  { -- | The basic configuration for building and running the App Runner service.
+    -- Use it to quickly launch an App Runner service without providing a
+    -- @apprunner.yaml@ file in the source code repository (or ignoring the
+    -- file if it exists).
+    codeConfigurationValues :: Prelude.Maybe CodeConfigurationValues,
+    -- | The source of the App Runner configuration. Values are interpreted as
+    -- follows:
+    --
+    -- -   @REPOSITORY@ – App Runner reads configuration values from the
+    --     @apprunner.yaml@ file in the source code repository and ignores
+    --     @CodeConfigurationValues@.
+    --
+    -- -   @API@ – App Runner uses configuration values provided in
+    --     @CodeConfigurationValues@ and ignores the @apprunner.yaml@ file in
+    --     the source code repository.
+    configurationSource :: ConfigurationSource
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CodeConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'codeConfigurationValues', 'codeConfiguration_codeConfigurationValues' - The basic configuration for building and running the App Runner service.
+-- Use it to quickly launch an App Runner service without providing a
+-- @apprunner.yaml@ file in the source code repository (or ignoring the
+-- file if it exists).
+--
+-- 'configurationSource', 'codeConfiguration_configurationSource' - The source of the App Runner configuration. Values are interpreted as
+-- follows:
+--
+-- -   @REPOSITORY@ – App Runner reads configuration values from the
+--     @apprunner.yaml@ file in the source code repository and ignores
+--     @CodeConfigurationValues@.
+--
+-- -   @API@ – App Runner uses configuration values provided in
+--     @CodeConfigurationValues@ and ignores the @apprunner.yaml@ file in
+--     the source code repository.
+newCodeConfiguration ::
+  -- | 'configurationSource'
+  ConfigurationSource ->
+  CodeConfiguration
+newCodeConfiguration pConfigurationSource_ =
+  CodeConfiguration'
+    { codeConfigurationValues =
+        Prelude.Nothing,
+      configurationSource = pConfigurationSource_
+    }
+
+-- | The basic configuration for building and running the App Runner service.
+-- Use it to quickly launch an App Runner service without providing a
+-- @apprunner.yaml@ file in the source code repository (or ignoring the
+-- file if it exists).
+codeConfiguration_codeConfigurationValues :: Lens.Lens' CodeConfiguration (Prelude.Maybe CodeConfigurationValues)
+codeConfiguration_codeConfigurationValues = Lens.lens (\CodeConfiguration' {codeConfigurationValues} -> codeConfigurationValues) (\s@CodeConfiguration' {} a -> s {codeConfigurationValues = a} :: CodeConfiguration)
+
+-- | The source of the App Runner configuration. Values are interpreted as
+-- follows:
+--
+-- -   @REPOSITORY@ – App Runner reads configuration values from the
+--     @apprunner.yaml@ file in the source code repository and ignores
+--     @CodeConfigurationValues@.
+--
+-- -   @API@ – App Runner uses configuration values provided in
+--     @CodeConfigurationValues@ and ignores the @apprunner.yaml@ file in
+--     the source code repository.
+codeConfiguration_configurationSource :: Lens.Lens' CodeConfiguration ConfigurationSource
+codeConfiguration_configurationSource = Lens.lens (\CodeConfiguration' {configurationSource} -> configurationSource) (\s@CodeConfiguration' {} a -> s {configurationSource = a} :: CodeConfiguration)
+
+instance Data.FromJSON CodeConfiguration where
+  parseJSON =
+    Data.withObject
+      "CodeConfiguration"
+      ( \x ->
+          CodeConfiguration'
+            Prelude.<$> (x Data..:? "CodeConfigurationValues")
+            Prelude.<*> (x Data..: "ConfigurationSource")
+      )
+
+instance Prelude.Hashable CodeConfiguration where
+  hashWithSalt _salt CodeConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` codeConfigurationValues
+      `Prelude.hashWithSalt` configurationSource
+
+instance Prelude.NFData CodeConfiguration where
+  rnf CodeConfiguration' {..} =
+    Prelude.rnf codeConfigurationValues
+      `Prelude.seq` Prelude.rnf configurationSource
+
+instance Data.ToJSON CodeConfiguration where
+  toJSON CodeConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CodeConfigurationValues" Data..=)
+              Prelude.<$> codeConfigurationValues,
+            Prelude.Just
+              ("ConfigurationSource" Data..= configurationSource)
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/CodeConfigurationValues.hs b/gen/Amazonka/AppRunner/Types/CodeConfigurationValues.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/CodeConfigurationValues.hs
@@ -0,0 +1,211 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.CodeConfigurationValues
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.CodeConfigurationValues where
+
+import Amazonka.AppRunner.Types.Runtime
+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
+
+-- | Describes the basic configuration needed for building and running an App
+-- Runner service. This type doesn\'t support the full set of possible
+-- configuration options. Fur full configuration capabilities, use a
+-- @apprunner.yaml@ file in the source code repository.
+--
+-- /See:/ 'newCodeConfigurationValues' smart constructor.
+data CodeConfigurationValues = CodeConfigurationValues'
+  { -- | The command App Runner runs to build your application.
+    buildCommand :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The port that your application listens to in the container.
+    --
+    -- Default: @8080@
+    port :: Prelude.Maybe Prelude.Text,
+    -- | An array of key-value pairs representing the secrets and parameters that
+    -- get referenced to your service as an environment variable. The supported
+    -- values are either the full Amazon Resource Name (ARN) of the Secrets
+    -- Manager secret or the full ARN of the parameter in the Amazon Web
+    -- Services Systems Manager Parameter Store.
+    --
+    -- -   If the Amazon Web Services Systems Manager Parameter Store parameter
+    --     exists in the same Amazon Web Services Region as the service that
+    --     you\'re launching, you can use either the full ARN or name of the
+    --     secret. If the parameter exists in a different Region, then the full
+    --     ARN must be specified.
+    --
+    -- -   Currently, cross account referencing of Amazon Web Services Systems
+    --     Manager Parameter Store parameter is not supported.
+    runtimeEnvironmentSecrets :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Data.Sensitive Prelude.Text)),
+    -- | The environment variables that are available to your running App Runner
+    -- service. An array of key-value pairs.
+    runtimeEnvironmentVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Data.Sensitive Prelude.Text)),
+    -- | The command App Runner runs to start your application.
+    startCommand :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | A runtime environment type for building and running an App Runner
+    -- service. It represents a programming language runtime.
+    runtime :: Runtime
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CodeConfigurationValues' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'buildCommand', 'codeConfigurationValues_buildCommand' - The command App Runner runs to build your application.
+--
+-- 'port', 'codeConfigurationValues_port' - The port that your application listens to in the container.
+--
+-- Default: @8080@
+--
+-- 'runtimeEnvironmentSecrets', 'codeConfigurationValues_runtimeEnvironmentSecrets' - An array of key-value pairs representing the secrets and parameters that
+-- get referenced to your service as an environment variable. The supported
+-- values are either the full Amazon Resource Name (ARN) of the Secrets
+-- Manager secret or the full ARN of the parameter in the Amazon Web
+-- Services Systems Manager Parameter Store.
+--
+-- -   If the Amazon Web Services Systems Manager Parameter Store parameter
+--     exists in the same Amazon Web Services Region as the service that
+--     you\'re launching, you can use either the full ARN or name of the
+--     secret. If the parameter exists in a different Region, then the full
+--     ARN must be specified.
+--
+-- -   Currently, cross account referencing of Amazon Web Services Systems
+--     Manager Parameter Store parameter is not supported.
+--
+-- 'runtimeEnvironmentVariables', 'codeConfigurationValues_runtimeEnvironmentVariables' - The environment variables that are available to your running App Runner
+-- service. An array of key-value pairs.
+--
+-- 'startCommand', 'codeConfigurationValues_startCommand' - The command App Runner runs to start your application.
+--
+-- 'runtime', 'codeConfigurationValues_runtime' - A runtime environment type for building and running an App Runner
+-- service. It represents a programming language runtime.
+newCodeConfigurationValues ::
+  -- | 'runtime'
+  Runtime ->
+  CodeConfigurationValues
+newCodeConfigurationValues pRuntime_ =
+  CodeConfigurationValues'
+    { buildCommand =
+        Prelude.Nothing,
+      port = Prelude.Nothing,
+      runtimeEnvironmentSecrets = Prelude.Nothing,
+      runtimeEnvironmentVariables = Prelude.Nothing,
+      startCommand = Prelude.Nothing,
+      runtime = pRuntime_
+    }
+
+-- | The command App Runner runs to build your application.
+codeConfigurationValues_buildCommand :: Lens.Lens' CodeConfigurationValues (Prelude.Maybe Prelude.Text)
+codeConfigurationValues_buildCommand = Lens.lens (\CodeConfigurationValues' {buildCommand} -> buildCommand) (\s@CodeConfigurationValues' {} a -> s {buildCommand = a} :: CodeConfigurationValues) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The port that your application listens to in the container.
+--
+-- Default: @8080@
+codeConfigurationValues_port :: Lens.Lens' CodeConfigurationValues (Prelude.Maybe Prelude.Text)
+codeConfigurationValues_port = Lens.lens (\CodeConfigurationValues' {port} -> port) (\s@CodeConfigurationValues' {} a -> s {port = a} :: CodeConfigurationValues)
+
+-- | An array of key-value pairs representing the secrets and parameters that
+-- get referenced to your service as an environment variable. The supported
+-- values are either the full Amazon Resource Name (ARN) of the Secrets
+-- Manager secret or the full ARN of the parameter in the Amazon Web
+-- Services Systems Manager Parameter Store.
+--
+-- -   If the Amazon Web Services Systems Manager Parameter Store parameter
+--     exists in the same Amazon Web Services Region as the service that
+--     you\'re launching, you can use either the full ARN or name of the
+--     secret. If the parameter exists in a different Region, then the full
+--     ARN must be specified.
+--
+-- -   Currently, cross account referencing of Amazon Web Services Systems
+--     Manager Parameter Store parameter is not supported.
+codeConfigurationValues_runtimeEnvironmentSecrets :: Lens.Lens' CodeConfigurationValues (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+codeConfigurationValues_runtimeEnvironmentSecrets = Lens.lens (\CodeConfigurationValues' {runtimeEnvironmentSecrets} -> runtimeEnvironmentSecrets) (\s@CodeConfigurationValues' {} a -> s {runtimeEnvironmentSecrets = a} :: CodeConfigurationValues) Prelude.. Lens.mapping Lens.coerced
+
+-- | The environment variables that are available to your running App Runner
+-- service. An array of key-value pairs.
+codeConfigurationValues_runtimeEnvironmentVariables :: Lens.Lens' CodeConfigurationValues (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+codeConfigurationValues_runtimeEnvironmentVariables = Lens.lens (\CodeConfigurationValues' {runtimeEnvironmentVariables} -> runtimeEnvironmentVariables) (\s@CodeConfigurationValues' {} a -> s {runtimeEnvironmentVariables = a} :: CodeConfigurationValues) Prelude.. Lens.mapping Lens.coerced
+
+-- | The command App Runner runs to start your application.
+codeConfigurationValues_startCommand :: Lens.Lens' CodeConfigurationValues (Prelude.Maybe Prelude.Text)
+codeConfigurationValues_startCommand = Lens.lens (\CodeConfigurationValues' {startCommand} -> startCommand) (\s@CodeConfigurationValues' {} a -> s {startCommand = a} :: CodeConfigurationValues) Prelude.. Lens.mapping Data._Sensitive
+
+-- | A runtime environment type for building and running an App Runner
+-- service. It represents a programming language runtime.
+codeConfigurationValues_runtime :: Lens.Lens' CodeConfigurationValues Runtime
+codeConfigurationValues_runtime = Lens.lens (\CodeConfigurationValues' {runtime} -> runtime) (\s@CodeConfigurationValues' {} a -> s {runtime = a} :: CodeConfigurationValues)
+
+instance Data.FromJSON CodeConfigurationValues where
+  parseJSON =
+    Data.withObject
+      "CodeConfigurationValues"
+      ( \x ->
+          CodeConfigurationValues'
+            Prelude.<$> (x Data..:? "BuildCommand")
+            Prelude.<*> (x Data..:? "Port")
+            Prelude.<*> ( x
+                            Data..:? "RuntimeEnvironmentSecrets"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "RuntimeEnvironmentVariables"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "StartCommand")
+            Prelude.<*> (x Data..: "Runtime")
+      )
+
+instance Prelude.Hashable CodeConfigurationValues where
+  hashWithSalt _salt CodeConfigurationValues' {..} =
+    _salt
+      `Prelude.hashWithSalt` buildCommand
+      `Prelude.hashWithSalt` port
+      `Prelude.hashWithSalt` runtimeEnvironmentSecrets
+      `Prelude.hashWithSalt` runtimeEnvironmentVariables
+      `Prelude.hashWithSalt` startCommand
+      `Prelude.hashWithSalt` runtime
+
+instance Prelude.NFData CodeConfigurationValues where
+  rnf CodeConfigurationValues' {..} =
+    Prelude.rnf buildCommand
+      `Prelude.seq` Prelude.rnf port
+      `Prelude.seq` Prelude.rnf runtimeEnvironmentSecrets
+      `Prelude.seq` Prelude.rnf runtimeEnvironmentVariables
+      `Prelude.seq` Prelude.rnf startCommand
+      `Prelude.seq` Prelude.rnf runtime
+
+instance Data.ToJSON CodeConfigurationValues where
+  toJSON CodeConfigurationValues' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BuildCommand" Data..=) Prelude.<$> buildCommand,
+            ("Port" Data..=) Prelude.<$> port,
+            ("RuntimeEnvironmentSecrets" Data..=)
+              Prelude.<$> runtimeEnvironmentSecrets,
+            ("RuntimeEnvironmentVariables" Data..=)
+              Prelude.<$> runtimeEnvironmentVariables,
+            ("StartCommand" Data..=) Prelude.<$> startCommand,
+            Prelude.Just ("Runtime" Data..= runtime)
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/CodeRepository.hs b/gen/Amazonka/AppRunner/Types/CodeRepository.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/CodeRepository.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.CodeRepository
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.CodeRepository where
+
+import Amazonka.AppRunner.Types.CodeConfiguration
+import Amazonka.AppRunner.Types.SourceCodeVersion
+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
+
+-- | Describes a source code repository.
+--
+-- /See:/ 'newCodeRepository' smart constructor.
+data CodeRepository = CodeRepository'
+  { -- | Configuration for building and running the service from a source code
+    -- repository.
+    --
+    -- @CodeConfiguration@ is required only for @CreateService@ request.
+    codeConfiguration :: Prelude.Maybe CodeConfiguration,
+    -- | The location of the repository that contains the source code.
+    repositoryUrl :: Prelude.Text,
+    -- | The version that should be used within the source code repository.
+    sourceCodeVersion :: SourceCodeVersion
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CodeRepository' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'codeConfiguration', 'codeRepository_codeConfiguration' - Configuration for building and running the service from a source code
+-- repository.
+--
+-- @CodeConfiguration@ is required only for @CreateService@ request.
+--
+-- 'repositoryUrl', 'codeRepository_repositoryUrl' - The location of the repository that contains the source code.
+--
+-- 'sourceCodeVersion', 'codeRepository_sourceCodeVersion' - The version that should be used within the source code repository.
+newCodeRepository ::
+  -- | 'repositoryUrl'
+  Prelude.Text ->
+  -- | 'sourceCodeVersion'
+  SourceCodeVersion ->
+  CodeRepository
+newCodeRepository pRepositoryUrl_ pSourceCodeVersion_ =
+  CodeRepository'
+    { codeConfiguration =
+        Prelude.Nothing,
+      repositoryUrl = pRepositoryUrl_,
+      sourceCodeVersion = pSourceCodeVersion_
+    }
+
+-- | Configuration for building and running the service from a source code
+-- repository.
+--
+-- @CodeConfiguration@ is required only for @CreateService@ request.
+codeRepository_codeConfiguration :: Lens.Lens' CodeRepository (Prelude.Maybe CodeConfiguration)
+codeRepository_codeConfiguration = Lens.lens (\CodeRepository' {codeConfiguration} -> codeConfiguration) (\s@CodeRepository' {} a -> s {codeConfiguration = a} :: CodeRepository)
+
+-- | The location of the repository that contains the source code.
+codeRepository_repositoryUrl :: Lens.Lens' CodeRepository Prelude.Text
+codeRepository_repositoryUrl = Lens.lens (\CodeRepository' {repositoryUrl} -> repositoryUrl) (\s@CodeRepository' {} a -> s {repositoryUrl = a} :: CodeRepository)
+
+-- | The version that should be used within the source code repository.
+codeRepository_sourceCodeVersion :: Lens.Lens' CodeRepository SourceCodeVersion
+codeRepository_sourceCodeVersion = Lens.lens (\CodeRepository' {sourceCodeVersion} -> sourceCodeVersion) (\s@CodeRepository' {} a -> s {sourceCodeVersion = a} :: CodeRepository)
+
+instance Data.FromJSON CodeRepository where
+  parseJSON =
+    Data.withObject
+      "CodeRepository"
+      ( \x ->
+          CodeRepository'
+            Prelude.<$> (x Data..:? "CodeConfiguration")
+            Prelude.<*> (x Data..: "RepositoryUrl")
+            Prelude.<*> (x Data..: "SourceCodeVersion")
+      )
+
+instance Prelude.Hashable CodeRepository where
+  hashWithSalt _salt CodeRepository' {..} =
+    _salt
+      `Prelude.hashWithSalt` codeConfiguration
+      `Prelude.hashWithSalt` repositoryUrl
+      `Prelude.hashWithSalt` sourceCodeVersion
+
+instance Prelude.NFData CodeRepository where
+  rnf CodeRepository' {..} =
+    Prelude.rnf codeConfiguration
+      `Prelude.seq` Prelude.rnf repositoryUrl
+      `Prelude.seq` Prelude.rnf sourceCodeVersion
+
+instance Data.ToJSON CodeRepository where
+  toJSON CodeRepository' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CodeConfiguration" Data..=)
+              Prelude.<$> codeConfiguration,
+            Prelude.Just ("RepositoryUrl" Data..= repositoryUrl),
+            Prelude.Just
+              ("SourceCodeVersion" Data..= sourceCodeVersion)
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/ConfigurationSource.hs b/gen/Amazonka/AppRunner/Types/ConfigurationSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/ConfigurationSource.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.AppRunner.Types.ConfigurationSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.ConfigurationSource
+  ( ConfigurationSource
+      ( ..,
+        ConfigurationSource_API,
+        ConfigurationSource_REPOSITORY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConfigurationSource = ConfigurationSource'
+  { fromConfigurationSource ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ConfigurationSource_API :: ConfigurationSource
+pattern ConfigurationSource_API = ConfigurationSource' "API"
+
+pattern ConfigurationSource_REPOSITORY :: ConfigurationSource
+pattern ConfigurationSource_REPOSITORY = ConfigurationSource' "REPOSITORY"
+
+{-# COMPLETE
+  ConfigurationSource_API,
+  ConfigurationSource_REPOSITORY,
+  ConfigurationSource'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/Connection.hs b/gen/Amazonka/AppRunner/Types/Connection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/Connection.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.Connection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.Connection where
+
+import Amazonka.AppRunner.Types.ConnectionStatus
+import Amazonka.AppRunner.Types.ProviderType
+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
+
+-- | Describes an App Runner connection resource.
+--
+-- /See:/ 'newConnection' smart constructor.
+data Connection = Connection'
+  { -- | The Amazon Resource Name (ARN) of this connection.
+    connectionArn :: Prelude.Maybe Prelude.Text,
+    -- | The customer-provided connection name.
+    connectionName :: Prelude.Maybe Prelude.Text,
+    -- | The App Runner connection creation time, expressed as a Unix time stamp.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The source repository provider.
+    providerType :: Prelude.Maybe ProviderType,
+    -- | The current state of the App Runner connection. When the state is
+    -- @AVAILABLE@, you can use the connection to create an App Runner service.
+    status :: Prelude.Maybe ConnectionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Connection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionArn', 'connection_connectionArn' - The Amazon Resource Name (ARN) of this connection.
+--
+-- 'connectionName', 'connection_connectionName' - The customer-provided connection name.
+--
+-- 'createdAt', 'connection_createdAt' - The App Runner connection creation time, expressed as a Unix time stamp.
+--
+-- 'providerType', 'connection_providerType' - The source repository provider.
+--
+-- 'status', 'connection_status' - The current state of the App Runner connection. When the state is
+-- @AVAILABLE@, you can use the connection to create an App Runner service.
+newConnection ::
+  Connection
+newConnection =
+  Connection'
+    { connectionArn = Prelude.Nothing,
+      connectionName = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      providerType = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of this connection.
+connection_connectionArn :: Lens.Lens' Connection (Prelude.Maybe Prelude.Text)
+connection_connectionArn = Lens.lens (\Connection' {connectionArn} -> connectionArn) (\s@Connection' {} a -> s {connectionArn = a} :: Connection)
+
+-- | The customer-provided connection name.
+connection_connectionName :: Lens.Lens' Connection (Prelude.Maybe Prelude.Text)
+connection_connectionName = Lens.lens (\Connection' {connectionName} -> connectionName) (\s@Connection' {} a -> s {connectionName = a} :: Connection)
+
+-- | The App Runner connection creation time, expressed as a Unix time stamp.
+connection_createdAt :: Lens.Lens' Connection (Prelude.Maybe Prelude.UTCTime)
+connection_createdAt = Lens.lens (\Connection' {createdAt} -> createdAt) (\s@Connection' {} a -> s {createdAt = a} :: Connection) Prelude.. Lens.mapping Data._Time
+
+-- | The source repository provider.
+connection_providerType :: Lens.Lens' Connection (Prelude.Maybe ProviderType)
+connection_providerType = Lens.lens (\Connection' {providerType} -> providerType) (\s@Connection' {} a -> s {providerType = a} :: Connection)
+
+-- | The current state of the App Runner connection. When the state is
+-- @AVAILABLE@, you can use the connection to create an App Runner service.
+connection_status :: Lens.Lens' Connection (Prelude.Maybe ConnectionStatus)
+connection_status = Lens.lens (\Connection' {status} -> status) (\s@Connection' {} a -> s {status = a} :: Connection)
+
+instance Data.FromJSON Connection where
+  parseJSON =
+    Data.withObject
+      "Connection"
+      ( \x ->
+          Connection'
+            Prelude.<$> (x Data..:? "ConnectionArn")
+            Prelude.<*> (x Data..:? "ConnectionName")
+            Prelude.<*> (x Data..:? "CreatedAt")
+            Prelude.<*> (x Data..:? "ProviderType")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable Connection where
+  hashWithSalt _salt Connection' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectionArn
+      `Prelude.hashWithSalt` connectionName
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` providerType
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData Connection where
+  rnf Connection' {..} =
+    Prelude.rnf connectionArn
+      `Prelude.seq` Prelude.rnf connectionName
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf providerType
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/AppRunner/Types/ConnectionStatus.hs b/gen/Amazonka/AppRunner/Types/ConnectionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/ConnectionStatus.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.AppRunner.Types.ConnectionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.ConnectionStatus
+  ( ConnectionStatus
+      ( ..,
+        ConnectionStatus_AVAILABLE,
+        ConnectionStatus_DELETED,
+        ConnectionStatus_ERROR,
+        ConnectionStatus_PENDING_HANDSHAKE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConnectionStatus = ConnectionStatus'
+  { fromConnectionStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ConnectionStatus_AVAILABLE :: ConnectionStatus
+pattern ConnectionStatus_AVAILABLE = ConnectionStatus' "AVAILABLE"
+
+pattern ConnectionStatus_DELETED :: ConnectionStatus
+pattern ConnectionStatus_DELETED = ConnectionStatus' "DELETED"
+
+pattern ConnectionStatus_ERROR :: ConnectionStatus
+pattern ConnectionStatus_ERROR = ConnectionStatus' "ERROR"
+
+pattern ConnectionStatus_PENDING_HANDSHAKE :: ConnectionStatus
+pattern ConnectionStatus_PENDING_HANDSHAKE = ConnectionStatus' "PENDING_HANDSHAKE"
+
+{-# COMPLETE
+  ConnectionStatus_AVAILABLE,
+  ConnectionStatus_DELETED,
+  ConnectionStatus_ERROR,
+  ConnectionStatus_PENDING_HANDSHAKE,
+  ConnectionStatus'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/ConnectionSummary.hs b/gen/Amazonka/AppRunner/Types/ConnectionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/ConnectionSummary.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.ConnectionSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.ConnectionSummary where
+
+import Amazonka.AppRunner.Types.ConnectionStatus
+import Amazonka.AppRunner.Types.ProviderType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides summary information about an App Runner connection resource.
+--
+-- /See:/ 'newConnectionSummary' smart constructor.
+data ConnectionSummary = ConnectionSummary'
+  { -- | The Amazon Resource Name (ARN) of this connection.
+    connectionArn :: Prelude.Maybe Prelude.Text,
+    -- | The customer-provided connection name.
+    connectionName :: Prelude.Maybe Prelude.Text,
+    -- | The App Runner connection creation time, expressed as a Unix time stamp.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The source repository provider.
+    providerType :: Prelude.Maybe ProviderType,
+    -- | The current state of the App Runner connection. When the state is
+    -- @AVAILABLE@, you can use the connection to create an App Runner service.
+    status :: Prelude.Maybe ConnectionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConnectionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionArn', 'connectionSummary_connectionArn' - The Amazon Resource Name (ARN) of this connection.
+--
+-- 'connectionName', 'connectionSummary_connectionName' - The customer-provided connection name.
+--
+-- 'createdAt', 'connectionSummary_createdAt' - The App Runner connection creation time, expressed as a Unix time stamp.
+--
+-- 'providerType', 'connectionSummary_providerType' - The source repository provider.
+--
+-- 'status', 'connectionSummary_status' - The current state of the App Runner connection. When the state is
+-- @AVAILABLE@, you can use the connection to create an App Runner service.
+newConnectionSummary ::
+  ConnectionSummary
+newConnectionSummary =
+  ConnectionSummary'
+    { connectionArn = Prelude.Nothing,
+      connectionName = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      providerType = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of this connection.
+connectionSummary_connectionArn :: Lens.Lens' ConnectionSummary (Prelude.Maybe Prelude.Text)
+connectionSummary_connectionArn = Lens.lens (\ConnectionSummary' {connectionArn} -> connectionArn) (\s@ConnectionSummary' {} a -> s {connectionArn = a} :: ConnectionSummary)
+
+-- | The customer-provided connection name.
+connectionSummary_connectionName :: Lens.Lens' ConnectionSummary (Prelude.Maybe Prelude.Text)
+connectionSummary_connectionName = Lens.lens (\ConnectionSummary' {connectionName} -> connectionName) (\s@ConnectionSummary' {} a -> s {connectionName = a} :: ConnectionSummary)
+
+-- | The App Runner connection creation time, expressed as a Unix time stamp.
+connectionSummary_createdAt :: Lens.Lens' ConnectionSummary (Prelude.Maybe Prelude.UTCTime)
+connectionSummary_createdAt = Lens.lens (\ConnectionSummary' {createdAt} -> createdAt) (\s@ConnectionSummary' {} a -> s {createdAt = a} :: ConnectionSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The source repository provider.
+connectionSummary_providerType :: Lens.Lens' ConnectionSummary (Prelude.Maybe ProviderType)
+connectionSummary_providerType = Lens.lens (\ConnectionSummary' {providerType} -> providerType) (\s@ConnectionSummary' {} a -> s {providerType = a} :: ConnectionSummary)
+
+-- | The current state of the App Runner connection. When the state is
+-- @AVAILABLE@, you can use the connection to create an App Runner service.
+connectionSummary_status :: Lens.Lens' ConnectionSummary (Prelude.Maybe ConnectionStatus)
+connectionSummary_status = Lens.lens (\ConnectionSummary' {status} -> status) (\s@ConnectionSummary' {} a -> s {status = a} :: ConnectionSummary)
+
+instance Data.FromJSON ConnectionSummary where
+  parseJSON =
+    Data.withObject
+      "ConnectionSummary"
+      ( \x ->
+          ConnectionSummary'
+            Prelude.<$> (x Data..:? "ConnectionArn")
+            Prelude.<*> (x Data..:? "ConnectionName")
+            Prelude.<*> (x Data..:? "CreatedAt")
+            Prelude.<*> (x Data..:? "ProviderType")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable ConnectionSummary where
+  hashWithSalt _salt ConnectionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectionArn
+      `Prelude.hashWithSalt` connectionName
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` providerType
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ConnectionSummary where
+  rnf ConnectionSummary' {..} =
+    Prelude.rnf connectionArn
+      `Prelude.seq` Prelude.rnf connectionName
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf providerType
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/AppRunner/Types/CustomDomain.hs b/gen/Amazonka/AppRunner/Types/CustomDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/CustomDomain.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.CustomDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.CustomDomain where
+
+import Amazonka.AppRunner.Types.CertificateValidationRecord
+import Amazonka.AppRunner.Types.CustomDomainAssociationStatus
+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
+
+-- | Describes a custom domain that\'s associated with an App Runner service.
+--
+-- /See:/ 'newCustomDomain' smart constructor.
+data CustomDomain = CustomDomain'
+  { -- | A list of certificate CNAME records that\'s used for this domain name.
+    certificateValidationRecords :: Prelude.Maybe [CertificateValidationRecord],
+    -- | An associated custom domain endpoint. It can be a root domain (for
+    -- example, @example.com@), a subdomain (for example, @login.example.com@
+    -- or @admin.login.example.com@), or a wildcard (for example,
+    -- @*.example.com@).
+    domainName :: Prelude.Text,
+    -- | When @true@, the subdomain @www.@/@DomainName@/@ @ is associated with
+    -- the App Runner service in addition to the base domain.
+    enableWWWSubdomain :: Prelude.Bool,
+    -- | The current state of the domain name association.
+    status :: CustomDomainAssociationStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateValidationRecords', 'customDomain_certificateValidationRecords' - A list of certificate CNAME records that\'s used for this domain name.
+--
+-- 'domainName', 'customDomain_domainName' - An associated custom domain endpoint. It can be a root domain (for
+-- example, @example.com@), a subdomain (for example, @login.example.com@
+-- or @admin.login.example.com@), or a wildcard (for example,
+-- @*.example.com@).
+--
+-- 'enableWWWSubdomain', 'customDomain_enableWWWSubdomain' - When @true@, the subdomain @www.@/@DomainName@/@ @ is associated with
+-- the App Runner service in addition to the base domain.
+--
+-- 'status', 'customDomain_status' - The current state of the domain name association.
+newCustomDomain ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'enableWWWSubdomain'
+  Prelude.Bool ->
+  -- | 'status'
+  CustomDomainAssociationStatus ->
+  CustomDomain
+newCustomDomain
+  pDomainName_
+  pEnableWWWSubdomain_
+  pStatus_ =
+    CustomDomain'
+      { certificateValidationRecords =
+          Prelude.Nothing,
+        domainName = pDomainName_,
+        enableWWWSubdomain = pEnableWWWSubdomain_,
+        status = pStatus_
+      }
+
+-- | A list of certificate CNAME records that\'s used for this domain name.
+customDomain_certificateValidationRecords :: Lens.Lens' CustomDomain (Prelude.Maybe [CertificateValidationRecord])
+customDomain_certificateValidationRecords = Lens.lens (\CustomDomain' {certificateValidationRecords} -> certificateValidationRecords) (\s@CustomDomain' {} a -> s {certificateValidationRecords = a} :: CustomDomain) Prelude.. Lens.mapping Lens.coerced
+
+-- | An associated custom domain endpoint. It can be a root domain (for
+-- example, @example.com@), a subdomain (for example, @login.example.com@
+-- or @admin.login.example.com@), or a wildcard (for example,
+-- @*.example.com@).
+customDomain_domainName :: Lens.Lens' CustomDomain Prelude.Text
+customDomain_domainName = Lens.lens (\CustomDomain' {domainName} -> domainName) (\s@CustomDomain' {} a -> s {domainName = a} :: CustomDomain)
+
+-- | When @true@, the subdomain @www.@/@DomainName@/@ @ is associated with
+-- the App Runner service in addition to the base domain.
+customDomain_enableWWWSubdomain :: Lens.Lens' CustomDomain Prelude.Bool
+customDomain_enableWWWSubdomain = Lens.lens (\CustomDomain' {enableWWWSubdomain} -> enableWWWSubdomain) (\s@CustomDomain' {} a -> s {enableWWWSubdomain = a} :: CustomDomain)
+
+-- | The current state of the domain name association.
+customDomain_status :: Lens.Lens' CustomDomain CustomDomainAssociationStatus
+customDomain_status = Lens.lens (\CustomDomain' {status} -> status) (\s@CustomDomain' {} a -> s {status = a} :: CustomDomain)
+
+instance Data.FromJSON CustomDomain where
+  parseJSON =
+    Data.withObject
+      "CustomDomain"
+      ( \x ->
+          CustomDomain'
+            Prelude.<$> ( x
+                            Data..:? "CertificateValidationRecords"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "DomainName")
+            Prelude.<*> (x Data..: "EnableWWWSubdomain")
+            Prelude.<*> (x Data..: "Status")
+      )
+
+instance Prelude.Hashable CustomDomain where
+  hashWithSalt _salt CustomDomain' {..} =
+    _salt
+      `Prelude.hashWithSalt` certificateValidationRecords
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` enableWWWSubdomain
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData CustomDomain where
+  rnf CustomDomain' {..} =
+    Prelude.rnf certificateValidationRecords
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf enableWWWSubdomain
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/AppRunner/Types/CustomDomainAssociationStatus.hs b/gen/Amazonka/AppRunner/Types/CustomDomainAssociationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/CustomDomainAssociationStatus.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.AppRunner.Types.CustomDomainAssociationStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.CustomDomainAssociationStatus
+  ( CustomDomainAssociationStatus
+      ( ..,
+        CustomDomainAssociationStatus_ACTIVE,
+        CustomDomainAssociationStatus_BINDING_CERTIFICATE,
+        CustomDomainAssociationStatus_CREATE_FAILED,
+        CustomDomainAssociationStatus_CREATING,
+        CustomDomainAssociationStatus_DELETE_FAILED,
+        CustomDomainAssociationStatus_DELETING,
+        CustomDomainAssociationStatus_PENDING_CERTIFICATE_DNS_VALIDATION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CustomDomainAssociationStatus = CustomDomainAssociationStatus'
+  { fromCustomDomainAssociationStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CustomDomainAssociationStatus_ACTIVE :: CustomDomainAssociationStatus
+pattern CustomDomainAssociationStatus_ACTIVE = CustomDomainAssociationStatus' "ACTIVE"
+
+pattern CustomDomainAssociationStatus_BINDING_CERTIFICATE :: CustomDomainAssociationStatus
+pattern CustomDomainAssociationStatus_BINDING_CERTIFICATE = CustomDomainAssociationStatus' "BINDING_CERTIFICATE"
+
+pattern CustomDomainAssociationStatus_CREATE_FAILED :: CustomDomainAssociationStatus
+pattern CustomDomainAssociationStatus_CREATE_FAILED = CustomDomainAssociationStatus' "CREATE_FAILED"
+
+pattern CustomDomainAssociationStatus_CREATING :: CustomDomainAssociationStatus
+pattern CustomDomainAssociationStatus_CREATING = CustomDomainAssociationStatus' "CREATING"
+
+pattern CustomDomainAssociationStatus_DELETE_FAILED :: CustomDomainAssociationStatus
+pattern CustomDomainAssociationStatus_DELETE_FAILED = CustomDomainAssociationStatus' "DELETE_FAILED"
+
+pattern CustomDomainAssociationStatus_DELETING :: CustomDomainAssociationStatus
+pattern CustomDomainAssociationStatus_DELETING = CustomDomainAssociationStatus' "DELETING"
+
+pattern CustomDomainAssociationStatus_PENDING_CERTIFICATE_DNS_VALIDATION :: CustomDomainAssociationStatus
+pattern CustomDomainAssociationStatus_PENDING_CERTIFICATE_DNS_VALIDATION = CustomDomainAssociationStatus' "PENDING_CERTIFICATE_DNS_VALIDATION"
+
+{-# COMPLETE
+  CustomDomainAssociationStatus_ACTIVE,
+  CustomDomainAssociationStatus_BINDING_CERTIFICATE,
+  CustomDomainAssociationStatus_CREATE_FAILED,
+  CustomDomainAssociationStatus_CREATING,
+  CustomDomainAssociationStatus_DELETE_FAILED,
+  CustomDomainAssociationStatus_DELETING,
+  CustomDomainAssociationStatus_PENDING_CERTIFICATE_DNS_VALIDATION,
+  CustomDomainAssociationStatus'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/EgressConfiguration.hs b/gen/Amazonka/AppRunner/Types/EgressConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/EgressConfiguration.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.EgressConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.EgressConfiguration where
+
+import Amazonka.AppRunner.Types.EgressType
+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
+
+-- | Describes configuration settings related to outbound network traffic of
+-- an App Runner service.
+--
+-- /See:/ 'newEgressConfiguration' smart constructor.
+data EgressConfiguration = EgressConfiguration'
+  { -- | The type of egress configuration.
+    --
+    -- Set to @DEFAULT@ for access to resources hosted on public networks.
+    --
+    -- Set to @VPC@ to associate your service to a custom VPC specified by
+    -- @VpcConnectorArn@.
+    egressType :: Prelude.Maybe EgressType,
+    -- | The Amazon Resource Name (ARN) of the App Runner VPC connector that you
+    -- want to associate with your App Runner service. Only valid when
+    -- @EgressType = VPC@.
+    vpcConnectorArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EgressConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'egressType', 'egressConfiguration_egressType' - The type of egress configuration.
+--
+-- Set to @DEFAULT@ for access to resources hosted on public networks.
+--
+-- Set to @VPC@ to associate your service to a custom VPC specified by
+-- @VpcConnectorArn@.
+--
+-- 'vpcConnectorArn', 'egressConfiguration_vpcConnectorArn' - The Amazon Resource Name (ARN) of the App Runner VPC connector that you
+-- want to associate with your App Runner service. Only valid when
+-- @EgressType = VPC@.
+newEgressConfiguration ::
+  EgressConfiguration
+newEgressConfiguration =
+  EgressConfiguration'
+    { egressType = Prelude.Nothing,
+      vpcConnectorArn = Prelude.Nothing
+    }
+
+-- | The type of egress configuration.
+--
+-- Set to @DEFAULT@ for access to resources hosted on public networks.
+--
+-- Set to @VPC@ to associate your service to a custom VPC specified by
+-- @VpcConnectorArn@.
+egressConfiguration_egressType :: Lens.Lens' EgressConfiguration (Prelude.Maybe EgressType)
+egressConfiguration_egressType = Lens.lens (\EgressConfiguration' {egressType} -> egressType) (\s@EgressConfiguration' {} a -> s {egressType = a} :: EgressConfiguration)
+
+-- | The Amazon Resource Name (ARN) of the App Runner VPC connector that you
+-- want to associate with your App Runner service. Only valid when
+-- @EgressType = VPC@.
+egressConfiguration_vpcConnectorArn :: Lens.Lens' EgressConfiguration (Prelude.Maybe Prelude.Text)
+egressConfiguration_vpcConnectorArn = Lens.lens (\EgressConfiguration' {vpcConnectorArn} -> vpcConnectorArn) (\s@EgressConfiguration' {} a -> s {vpcConnectorArn = a} :: EgressConfiguration)
+
+instance Data.FromJSON EgressConfiguration where
+  parseJSON =
+    Data.withObject
+      "EgressConfiguration"
+      ( \x ->
+          EgressConfiguration'
+            Prelude.<$> (x Data..:? "EgressType")
+            Prelude.<*> (x Data..:? "VpcConnectorArn")
+      )
+
+instance Prelude.Hashable EgressConfiguration where
+  hashWithSalt _salt EgressConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` egressType
+      `Prelude.hashWithSalt` vpcConnectorArn
+
+instance Prelude.NFData EgressConfiguration where
+  rnf EgressConfiguration' {..} =
+    Prelude.rnf egressType
+      `Prelude.seq` Prelude.rnf vpcConnectorArn
+
+instance Data.ToJSON EgressConfiguration where
+  toJSON EgressConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EgressType" Data..=) Prelude.<$> egressType,
+            ("VpcConnectorArn" Data..=)
+              Prelude.<$> vpcConnectorArn
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/EgressType.hs b/gen/Amazonka/AppRunner/Types/EgressType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/EgressType.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.AppRunner.Types.EgressType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.EgressType
+  ( EgressType
+      ( ..,
+        EgressType_DEFAULT,
+        EgressType_VPC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EgressType = EgressType'
+  { fromEgressType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EgressType_DEFAULT :: EgressType
+pattern EgressType_DEFAULT = EgressType' "DEFAULT"
+
+pattern EgressType_VPC :: EgressType
+pattern EgressType_VPC = EgressType' "VPC"
+
+{-# COMPLETE
+  EgressType_DEFAULT,
+  EgressType_VPC,
+  EgressType'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/EncryptionConfiguration.hs b/gen/Amazonka/AppRunner/Types/EncryptionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/EncryptionConfiguration.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.EncryptionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.EncryptionConfiguration 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
+
+-- | Describes a custom encryption key that App Runner uses to encrypt copies
+-- of the source repository and service logs.
+--
+-- /See:/ 'newEncryptionConfiguration' smart constructor.
+data EncryptionConfiguration = EncryptionConfiguration'
+  { -- | The ARN of the KMS key that\'s used for encryption.
+    kmsKey :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EncryptionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsKey', 'encryptionConfiguration_kmsKey' - The ARN of the KMS key that\'s used for encryption.
+newEncryptionConfiguration ::
+  -- | 'kmsKey'
+  Prelude.Text ->
+  EncryptionConfiguration
+newEncryptionConfiguration pKmsKey_ =
+  EncryptionConfiguration' {kmsKey = pKmsKey_}
+
+-- | The ARN of the KMS key that\'s used for encryption.
+encryptionConfiguration_kmsKey :: Lens.Lens' EncryptionConfiguration Prelude.Text
+encryptionConfiguration_kmsKey = Lens.lens (\EncryptionConfiguration' {kmsKey} -> kmsKey) (\s@EncryptionConfiguration' {} a -> s {kmsKey = a} :: EncryptionConfiguration)
+
+instance Data.FromJSON EncryptionConfiguration where
+  parseJSON =
+    Data.withObject
+      "EncryptionConfiguration"
+      ( \x ->
+          EncryptionConfiguration'
+            Prelude.<$> (x Data..: "KmsKey")
+      )
+
+instance Prelude.Hashable EncryptionConfiguration where
+  hashWithSalt _salt EncryptionConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` kmsKey
+
+instance Prelude.NFData EncryptionConfiguration where
+  rnf EncryptionConfiguration' {..} = Prelude.rnf kmsKey
+
+instance Data.ToJSON EncryptionConfiguration where
+  toJSON EncryptionConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("KmsKey" Data..= kmsKey)]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/HealthCheckConfiguration.hs b/gen/Amazonka/AppRunner/Types/HealthCheckConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/HealthCheckConfiguration.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.HealthCheckConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.HealthCheckConfiguration where
+
+import Amazonka.AppRunner.Types.HealthCheckProtocol
+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
+
+-- | Describes the settings for the health check that App Runner performs to
+-- monitor the health of a service.
+--
+-- /See:/ 'newHealthCheckConfiguration' smart constructor.
+data HealthCheckConfiguration = HealthCheckConfiguration'
+  { -- | The number of consecutive checks that must succeed before App Runner
+    -- decides that the service is healthy.
+    --
+    -- Default: @1@
+    healthyThreshold :: Prelude.Maybe Prelude.Natural,
+    -- | The time interval, in seconds, between health checks.
+    --
+    -- Default: @5@
+    interval :: Prelude.Maybe Prelude.Natural,
+    -- | The URL that health check requests are sent to.
+    --
+    -- @Path@ is only applicable when you set @Protocol@ to @HTTP@.
+    --
+    -- Default: @\"\/\"@
+    path :: Prelude.Maybe Prelude.Text,
+    -- | The IP protocol that App Runner uses to perform health checks for your
+    -- service.
+    --
+    -- If you set @Protocol@ to @HTTP@, App Runner sends health check requests
+    -- to the HTTP path specified by @Path@.
+    --
+    -- Default: @TCP@
+    protocol :: Prelude.Maybe HealthCheckProtocol,
+    -- | The time, in seconds, to wait for a health check response before
+    -- deciding it failed.
+    --
+    -- Default: @2@
+    timeout :: Prelude.Maybe Prelude.Natural,
+    -- | The number of consecutive checks that must fail before App Runner
+    -- decides that the service is unhealthy.
+    --
+    -- Default: @5@
+    unhealthyThreshold :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HealthCheckConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'healthyThreshold', 'healthCheckConfiguration_healthyThreshold' - The number of consecutive checks that must succeed before App Runner
+-- decides that the service is healthy.
+--
+-- Default: @1@
+--
+-- 'interval', 'healthCheckConfiguration_interval' - The time interval, in seconds, between health checks.
+--
+-- Default: @5@
+--
+-- 'path', 'healthCheckConfiguration_path' - The URL that health check requests are sent to.
+--
+-- @Path@ is only applicable when you set @Protocol@ to @HTTP@.
+--
+-- Default: @\"\/\"@
+--
+-- 'protocol', 'healthCheckConfiguration_protocol' - The IP protocol that App Runner uses to perform health checks for your
+-- service.
+--
+-- If you set @Protocol@ to @HTTP@, App Runner sends health check requests
+-- to the HTTP path specified by @Path@.
+--
+-- Default: @TCP@
+--
+-- 'timeout', 'healthCheckConfiguration_timeout' - The time, in seconds, to wait for a health check response before
+-- deciding it failed.
+--
+-- Default: @2@
+--
+-- 'unhealthyThreshold', 'healthCheckConfiguration_unhealthyThreshold' - The number of consecutive checks that must fail before App Runner
+-- decides that the service is unhealthy.
+--
+-- Default: @5@
+newHealthCheckConfiguration ::
+  HealthCheckConfiguration
+newHealthCheckConfiguration =
+  HealthCheckConfiguration'
+    { healthyThreshold =
+        Prelude.Nothing,
+      interval = Prelude.Nothing,
+      path = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      timeout = Prelude.Nothing,
+      unhealthyThreshold = Prelude.Nothing
+    }
+
+-- | The number of consecutive checks that must succeed before App Runner
+-- decides that the service is healthy.
+--
+-- Default: @1@
+healthCheckConfiguration_healthyThreshold :: Lens.Lens' HealthCheckConfiguration (Prelude.Maybe Prelude.Natural)
+healthCheckConfiguration_healthyThreshold = Lens.lens (\HealthCheckConfiguration' {healthyThreshold} -> healthyThreshold) (\s@HealthCheckConfiguration' {} a -> s {healthyThreshold = a} :: HealthCheckConfiguration)
+
+-- | The time interval, in seconds, between health checks.
+--
+-- Default: @5@
+healthCheckConfiguration_interval :: Lens.Lens' HealthCheckConfiguration (Prelude.Maybe Prelude.Natural)
+healthCheckConfiguration_interval = Lens.lens (\HealthCheckConfiguration' {interval} -> interval) (\s@HealthCheckConfiguration' {} a -> s {interval = a} :: HealthCheckConfiguration)
+
+-- | The URL that health check requests are sent to.
+--
+-- @Path@ is only applicable when you set @Protocol@ to @HTTP@.
+--
+-- Default: @\"\/\"@
+healthCheckConfiguration_path :: Lens.Lens' HealthCheckConfiguration (Prelude.Maybe Prelude.Text)
+healthCheckConfiguration_path = Lens.lens (\HealthCheckConfiguration' {path} -> path) (\s@HealthCheckConfiguration' {} a -> s {path = a} :: HealthCheckConfiguration)
+
+-- | The IP protocol that App Runner uses to perform health checks for your
+-- service.
+--
+-- If you set @Protocol@ to @HTTP@, App Runner sends health check requests
+-- to the HTTP path specified by @Path@.
+--
+-- Default: @TCP@
+healthCheckConfiguration_protocol :: Lens.Lens' HealthCheckConfiguration (Prelude.Maybe HealthCheckProtocol)
+healthCheckConfiguration_protocol = Lens.lens (\HealthCheckConfiguration' {protocol} -> protocol) (\s@HealthCheckConfiguration' {} a -> s {protocol = a} :: HealthCheckConfiguration)
+
+-- | The time, in seconds, to wait for a health check response before
+-- deciding it failed.
+--
+-- Default: @2@
+healthCheckConfiguration_timeout :: Lens.Lens' HealthCheckConfiguration (Prelude.Maybe Prelude.Natural)
+healthCheckConfiguration_timeout = Lens.lens (\HealthCheckConfiguration' {timeout} -> timeout) (\s@HealthCheckConfiguration' {} a -> s {timeout = a} :: HealthCheckConfiguration)
+
+-- | The number of consecutive checks that must fail before App Runner
+-- decides that the service is unhealthy.
+--
+-- Default: @5@
+healthCheckConfiguration_unhealthyThreshold :: Lens.Lens' HealthCheckConfiguration (Prelude.Maybe Prelude.Natural)
+healthCheckConfiguration_unhealthyThreshold = Lens.lens (\HealthCheckConfiguration' {unhealthyThreshold} -> unhealthyThreshold) (\s@HealthCheckConfiguration' {} a -> s {unhealthyThreshold = a} :: HealthCheckConfiguration)
+
+instance Data.FromJSON HealthCheckConfiguration where
+  parseJSON =
+    Data.withObject
+      "HealthCheckConfiguration"
+      ( \x ->
+          HealthCheckConfiguration'
+            Prelude.<$> (x Data..:? "HealthyThreshold")
+            Prelude.<*> (x Data..:? "Interval")
+            Prelude.<*> (x Data..:? "Path")
+            Prelude.<*> (x Data..:? "Protocol")
+            Prelude.<*> (x Data..:? "Timeout")
+            Prelude.<*> (x Data..:? "UnhealthyThreshold")
+      )
+
+instance Prelude.Hashable HealthCheckConfiguration where
+  hashWithSalt _salt HealthCheckConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` healthyThreshold
+      `Prelude.hashWithSalt` interval
+      `Prelude.hashWithSalt` path
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` timeout
+      `Prelude.hashWithSalt` unhealthyThreshold
+
+instance Prelude.NFData HealthCheckConfiguration where
+  rnf HealthCheckConfiguration' {..} =
+    Prelude.rnf healthyThreshold
+      `Prelude.seq` Prelude.rnf interval
+      `Prelude.seq` Prelude.rnf path
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf timeout
+      `Prelude.seq` Prelude.rnf unhealthyThreshold
+
+instance Data.ToJSON HealthCheckConfiguration where
+  toJSON HealthCheckConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("HealthyThreshold" Data..=)
+              Prelude.<$> healthyThreshold,
+            ("Interval" Data..=) Prelude.<$> interval,
+            ("Path" Data..=) Prelude.<$> path,
+            ("Protocol" Data..=) Prelude.<$> protocol,
+            ("Timeout" Data..=) Prelude.<$> timeout,
+            ("UnhealthyThreshold" Data..=)
+              Prelude.<$> unhealthyThreshold
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/HealthCheckProtocol.hs b/gen/Amazonka/AppRunner/Types/HealthCheckProtocol.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/HealthCheckProtocol.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.AppRunner.Types.HealthCheckProtocol
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.HealthCheckProtocol
+  ( HealthCheckProtocol
+      ( ..,
+        HealthCheckProtocol_HTTP,
+        HealthCheckProtocol_TCP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype HealthCheckProtocol = HealthCheckProtocol'
+  { fromHealthCheckProtocol ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern HealthCheckProtocol_HTTP :: HealthCheckProtocol
+pattern HealthCheckProtocol_HTTP = HealthCheckProtocol' "HTTP"
+
+pattern HealthCheckProtocol_TCP :: HealthCheckProtocol
+pattern HealthCheckProtocol_TCP = HealthCheckProtocol' "TCP"
+
+{-# COMPLETE
+  HealthCheckProtocol_HTTP,
+  HealthCheckProtocol_TCP,
+  HealthCheckProtocol'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/ImageConfiguration.hs b/gen/Amazonka/AppRunner/Types/ImageConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/ImageConfiguration.hs
@@ -0,0 +1,182 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.ImageConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.ImageConfiguration 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
+
+-- | Describes the configuration that App Runner uses to run an App Runner
+-- service using an image pulled from a source image repository.
+--
+-- /See:/ 'newImageConfiguration' smart constructor.
+data ImageConfiguration = ImageConfiguration'
+  { -- | The port that your application listens to in the container.
+    --
+    -- Default: @8080@
+    port :: Prelude.Maybe Prelude.Text,
+    -- | An array of key-value pairs representing the secrets and parameters that
+    -- get referenced to your service as an environment variable. The supported
+    -- values are either the full Amazon Resource Name (ARN) of the Secrets
+    -- Manager secret or the full ARN of the parameter in the Amazon Web
+    -- Services Systems Manager Parameter Store.
+    --
+    -- -   If the Amazon Web Services Systems Manager Parameter Store parameter
+    --     exists in the same Amazon Web Services Region as the service that
+    --     you\'re launching, you can use either the full ARN or name of the
+    --     secret. If the parameter exists in a different Region, then the full
+    --     ARN must be specified.
+    --
+    -- -   Currently, cross account referencing of Amazon Web Services Systems
+    --     Manager Parameter Store parameter is not supported.
+    runtimeEnvironmentSecrets :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Data.Sensitive Prelude.Text)),
+    -- | Environment variables that are available to your running App Runner
+    -- service. An array of key-value pairs.
+    runtimeEnvironmentVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Data.Sensitive Prelude.Text)),
+    -- | An optional command that App Runner runs to start the application in the
+    -- source image. If specified, this command overrides the Docker image’s
+    -- default start command.
+    startCommand :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'port', 'imageConfiguration_port' - The port that your application listens to in the container.
+--
+-- Default: @8080@
+--
+-- 'runtimeEnvironmentSecrets', 'imageConfiguration_runtimeEnvironmentSecrets' - An array of key-value pairs representing the secrets and parameters that
+-- get referenced to your service as an environment variable. The supported
+-- values are either the full Amazon Resource Name (ARN) of the Secrets
+-- Manager secret or the full ARN of the parameter in the Amazon Web
+-- Services Systems Manager Parameter Store.
+--
+-- -   If the Amazon Web Services Systems Manager Parameter Store parameter
+--     exists in the same Amazon Web Services Region as the service that
+--     you\'re launching, you can use either the full ARN or name of the
+--     secret. If the parameter exists in a different Region, then the full
+--     ARN must be specified.
+--
+-- -   Currently, cross account referencing of Amazon Web Services Systems
+--     Manager Parameter Store parameter is not supported.
+--
+-- 'runtimeEnvironmentVariables', 'imageConfiguration_runtimeEnvironmentVariables' - Environment variables that are available to your running App Runner
+-- service. An array of key-value pairs.
+--
+-- 'startCommand', 'imageConfiguration_startCommand' - An optional command that App Runner runs to start the application in the
+-- source image. If specified, this command overrides the Docker image’s
+-- default start command.
+newImageConfiguration ::
+  ImageConfiguration
+newImageConfiguration =
+  ImageConfiguration'
+    { port = Prelude.Nothing,
+      runtimeEnvironmentSecrets = Prelude.Nothing,
+      runtimeEnvironmentVariables = Prelude.Nothing,
+      startCommand = Prelude.Nothing
+    }
+
+-- | The port that your application listens to in the container.
+--
+-- Default: @8080@
+imageConfiguration_port :: Lens.Lens' ImageConfiguration (Prelude.Maybe Prelude.Text)
+imageConfiguration_port = Lens.lens (\ImageConfiguration' {port} -> port) (\s@ImageConfiguration' {} a -> s {port = a} :: ImageConfiguration)
+
+-- | An array of key-value pairs representing the secrets and parameters that
+-- get referenced to your service as an environment variable. The supported
+-- values are either the full Amazon Resource Name (ARN) of the Secrets
+-- Manager secret or the full ARN of the parameter in the Amazon Web
+-- Services Systems Manager Parameter Store.
+--
+-- -   If the Amazon Web Services Systems Manager Parameter Store parameter
+--     exists in the same Amazon Web Services Region as the service that
+--     you\'re launching, you can use either the full ARN or name of the
+--     secret. If the parameter exists in a different Region, then the full
+--     ARN must be specified.
+--
+-- -   Currently, cross account referencing of Amazon Web Services Systems
+--     Manager Parameter Store parameter is not supported.
+imageConfiguration_runtimeEnvironmentSecrets :: Lens.Lens' ImageConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+imageConfiguration_runtimeEnvironmentSecrets = Lens.lens (\ImageConfiguration' {runtimeEnvironmentSecrets} -> runtimeEnvironmentSecrets) (\s@ImageConfiguration' {} a -> s {runtimeEnvironmentSecrets = a} :: ImageConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Environment variables that are available to your running App Runner
+-- service. An array of key-value pairs.
+imageConfiguration_runtimeEnvironmentVariables :: Lens.Lens' ImageConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+imageConfiguration_runtimeEnvironmentVariables = Lens.lens (\ImageConfiguration' {runtimeEnvironmentVariables} -> runtimeEnvironmentVariables) (\s@ImageConfiguration' {} a -> s {runtimeEnvironmentVariables = a} :: ImageConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | An optional command that App Runner runs to start the application in the
+-- source image. If specified, this command overrides the Docker image’s
+-- default start command.
+imageConfiguration_startCommand :: Lens.Lens' ImageConfiguration (Prelude.Maybe Prelude.Text)
+imageConfiguration_startCommand = Lens.lens (\ImageConfiguration' {startCommand} -> startCommand) (\s@ImageConfiguration' {} a -> s {startCommand = a} :: ImageConfiguration) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON ImageConfiguration where
+  parseJSON =
+    Data.withObject
+      "ImageConfiguration"
+      ( \x ->
+          ImageConfiguration'
+            Prelude.<$> (x Data..:? "Port")
+            Prelude.<*> ( x
+                            Data..:? "RuntimeEnvironmentSecrets"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "RuntimeEnvironmentVariables"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "StartCommand")
+      )
+
+instance Prelude.Hashable ImageConfiguration where
+  hashWithSalt _salt ImageConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` port
+      `Prelude.hashWithSalt` runtimeEnvironmentSecrets
+      `Prelude.hashWithSalt` runtimeEnvironmentVariables
+      `Prelude.hashWithSalt` startCommand
+
+instance Prelude.NFData ImageConfiguration where
+  rnf ImageConfiguration' {..} =
+    Prelude.rnf port
+      `Prelude.seq` Prelude.rnf runtimeEnvironmentSecrets
+      `Prelude.seq` Prelude.rnf runtimeEnvironmentVariables
+      `Prelude.seq` Prelude.rnf startCommand
+
+instance Data.ToJSON ImageConfiguration where
+  toJSON ImageConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Port" Data..=) Prelude.<$> port,
+            ("RuntimeEnvironmentSecrets" Data..=)
+              Prelude.<$> runtimeEnvironmentSecrets,
+            ("RuntimeEnvironmentVariables" Data..=)
+              Prelude.<$> runtimeEnvironmentVariables,
+            ("StartCommand" Data..=) Prelude.<$> startCommand
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/ImageRepository.hs b/gen/Amazonka/AppRunner/Types/ImageRepository.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/ImageRepository.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.ImageRepository
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.ImageRepository where
+
+import Amazonka.AppRunner.Types.ImageConfiguration
+import Amazonka.AppRunner.Types.ImageRepositoryType
+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
+
+-- | Describes a source image repository.
+--
+-- /See:/ 'newImageRepository' smart constructor.
+data ImageRepository = ImageRepository'
+  { -- | Configuration for running the identified image.
+    imageConfiguration :: Prelude.Maybe ImageConfiguration,
+    -- | The identifier of an image.
+    --
+    -- For an image in Amazon Elastic Container Registry (Amazon ECR), this is
+    -- an image name. For the image name format, see
+    -- <https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-pull-ecr-image.html Pulling an image>
+    -- in the /Amazon ECR User Guide/.
+    imageIdentifier :: Prelude.Text,
+    -- | The type of the image repository. This reflects the repository provider
+    -- and whether the repository is private or public.
+    imageRepositoryType :: ImageRepositoryType
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageRepository' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageConfiguration', 'imageRepository_imageConfiguration' - Configuration for running the identified image.
+--
+-- 'imageIdentifier', 'imageRepository_imageIdentifier' - The identifier of an image.
+--
+-- For an image in Amazon Elastic Container Registry (Amazon ECR), this is
+-- an image name. For the image name format, see
+-- <https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-pull-ecr-image.html Pulling an image>
+-- in the /Amazon ECR User Guide/.
+--
+-- 'imageRepositoryType', 'imageRepository_imageRepositoryType' - The type of the image repository. This reflects the repository provider
+-- and whether the repository is private or public.
+newImageRepository ::
+  -- | 'imageIdentifier'
+  Prelude.Text ->
+  -- | 'imageRepositoryType'
+  ImageRepositoryType ->
+  ImageRepository
+newImageRepository
+  pImageIdentifier_
+  pImageRepositoryType_ =
+    ImageRepository'
+      { imageConfiguration =
+          Prelude.Nothing,
+        imageIdentifier = pImageIdentifier_,
+        imageRepositoryType = pImageRepositoryType_
+      }
+
+-- | Configuration for running the identified image.
+imageRepository_imageConfiguration :: Lens.Lens' ImageRepository (Prelude.Maybe ImageConfiguration)
+imageRepository_imageConfiguration = Lens.lens (\ImageRepository' {imageConfiguration} -> imageConfiguration) (\s@ImageRepository' {} a -> s {imageConfiguration = a} :: ImageRepository)
+
+-- | The identifier of an image.
+--
+-- For an image in Amazon Elastic Container Registry (Amazon ECR), this is
+-- an image name. For the image name format, see
+-- <https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-pull-ecr-image.html Pulling an image>
+-- in the /Amazon ECR User Guide/.
+imageRepository_imageIdentifier :: Lens.Lens' ImageRepository Prelude.Text
+imageRepository_imageIdentifier = Lens.lens (\ImageRepository' {imageIdentifier} -> imageIdentifier) (\s@ImageRepository' {} a -> s {imageIdentifier = a} :: ImageRepository)
+
+-- | The type of the image repository. This reflects the repository provider
+-- and whether the repository is private or public.
+imageRepository_imageRepositoryType :: Lens.Lens' ImageRepository ImageRepositoryType
+imageRepository_imageRepositoryType = Lens.lens (\ImageRepository' {imageRepositoryType} -> imageRepositoryType) (\s@ImageRepository' {} a -> s {imageRepositoryType = a} :: ImageRepository)
+
+instance Data.FromJSON ImageRepository where
+  parseJSON =
+    Data.withObject
+      "ImageRepository"
+      ( \x ->
+          ImageRepository'
+            Prelude.<$> (x Data..:? "ImageConfiguration")
+            Prelude.<*> (x Data..: "ImageIdentifier")
+            Prelude.<*> (x Data..: "ImageRepositoryType")
+      )
+
+instance Prelude.Hashable ImageRepository where
+  hashWithSalt _salt ImageRepository' {..} =
+    _salt
+      `Prelude.hashWithSalt` imageConfiguration
+      `Prelude.hashWithSalt` imageIdentifier
+      `Prelude.hashWithSalt` imageRepositoryType
+
+instance Prelude.NFData ImageRepository where
+  rnf ImageRepository' {..} =
+    Prelude.rnf imageConfiguration
+      `Prelude.seq` Prelude.rnf imageIdentifier
+      `Prelude.seq` Prelude.rnf imageRepositoryType
+
+instance Data.ToJSON ImageRepository where
+  toJSON ImageRepository' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ImageConfiguration" Data..=)
+              Prelude.<$> imageConfiguration,
+            Prelude.Just
+              ("ImageIdentifier" Data..= imageIdentifier),
+            Prelude.Just
+              ("ImageRepositoryType" Data..= imageRepositoryType)
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/ImageRepositoryType.hs b/gen/Amazonka/AppRunner/Types/ImageRepositoryType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/ImageRepositoryType.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.AppRunner.Types.ImageRepositoryType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.ImageRepositoryType
+  ( ImageRepositoryType
+      ( ..,
+        ImageRepositoryType_ECR,
+        ImageRepositoryType_ECR_PUBLIC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImageRepositoryType = ImageRepositoryType'
+  { fromImageRepositoryType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ImageRepositoryType_ECR :: ImageRepositoryType
+pattern ImageRepositoryType_ECR = ImageRepositoryType' "ECR"
+
+pattern ImageRepositoryType_ECR_PUBLIC :: ImageRepositoryType
+pattern ImageRepositoryType_ECR_PUBLIC = ImageRepositoryType' "ECR_PUBLIC"
+
+{-# COMPLETE
+  ImageRepositoryType_ECR,
+  ImageRepositoryType_ECR_PUBLIC,
+  ImageRepositoryType'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/IngressConfiguration.hs b/gen/Amazonka/AppRunner/Types/IngressConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/IngressConfiguration.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.IngressConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.IngressConfiguration 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
+
+-- | Network configuration settings for inbound network traffic.
+--
+-- /See:/ 'newIngressConfiguration' smart constructor.
+data IngressConfiguration = IngressConfiguration'
+  { -- | Specifies whether your App Runner service is publicly accessible. To
+    -- make the service publicly accessible set it to @True@. To make the
+    -- service privately accessible, from only within an Amazon VPC set it to
+    -- @False@.
+    isPubliclyAccessible :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IngressConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'isPubliclyAccessible', 'ingressConfiguration_isPubliclyAccessible' - Specifies whether your App Runner service is publicly accessible. To
+-- make the service publicly accessible set it to @True@. To make the
+-- service privately accessible, from only within an Amazon VPC set it to
+-- @False@.
+newIngressConfiguration ::
+  IngressConfiguration
+newIngressConfiguration =
+  IngressConfiguration'
+    { isPubliclyAccessible =
+        Prelude.Nothing
+    }
+
+-- | Specifies whether your App Runner service is publicly accessible. To
+-- make the service publicly accessible set it to @True@. To make the
+-- service privately accessible, from only within an Amazon VPC set it to
+-- @False@.
+ingressConfiguration_isPubliclyAccessible :: Lens.Lens' IngressConfiguration (Prelude.Maybe Prelude.Bool)
+ingressConfiguration_isPubliclyAccessible = Lens.lens (\IngressConfiguration' {isPubliclyAccessible} -> isPubliclyAccessible) (\s@IngressConfiguration' {} a -> s {isPubliclyAccessible = a} :: IngressConfiguration)
+
+instance Data.FromJSON IngressConfiguration where
+  parseJSON =
+    Data.withObject
+      "IngressConfiguration"
+      ( \x ->
+          IngressConfiguration'
+            Prelude.<$> (x Data..:? "IsPubliclyAccessible")
+      )
+
+instance Prelude.Hashable IngressConfiguration where
+  hashWithSalt _salt IngressConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` isPubliclyAccessible
+
+instance Prelude.NFData IngressConfiguration where
+  rnf IngressConfiguration' {..} =
+    Prelude.rnf isPubliclyAccessible
+
+instance Data.ToJSON IngressConfiguration where
+  toJSON IngressConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("IsPubliclyAccessible" Data..=)
+              Prelude.<$> isPubliclyAccessible
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/IngressVpcConfiguration.hs b/gen/Amazonka/AppRunner/Types/IngressVpcConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/IngressVpcConfiguration.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.IngressVpcConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.IngressVpcConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration of your VPC and the associated VPC endpoint. The VPC
+-- endpoint is an Amazon Web Services PrivateLink resource that allows
+-- access to your App Runner services from within an Amazon VPC.
+--
+-- /See:/ 'newIngressVpcConfiguration' smart constructor.
+data IngressVpcConfiguration = IngressVpcConfiguration'
+  { -- | The ID of the VPC endpoint that your App Runner service connects to.
+    vpcEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC that is used for the VPC endpoint.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IngressVpcConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpcEndpointId', 'ingressVpcConfiguration_vpcEndpointId' - The ID of the VPC endpoint that your App Runner service connects to.
+--
+-- 'vpcId', 'ingressVpcConfiguration_vpcId' - The ID of the VPC that is used for the VPC endpoint.
+newIngressVpcConfiguration ::
+  IngressVpcConfiguration
+newIngressVpcConfiguration =
+  IngressVpcConfiguration'
+    { vpcEndpointId =
+        Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | The ID of the VPC endpoint that your App Runner service connects to.
+ingressVpcConfiguration_vpcEndpointId :: Lens.Lens' IngressVpcConfiguration (Prelude.Maybe Prelude.Text)
+ingressVpcConfiguration_vpcEndpointId = Lens.lens (\IngressVpcConfiguration' {vpcEndpointId} -> vpcEndpointId) (\s@IngressVpcConfiguration' {} a -> s {vpcEndpointId = a} :: IngressVpcConfiguration)
+
+-- | The ID of the VPC that is used for the VPC endpoint.
+ingressVpcConfiguration_vpcId :: Lens.Lens' IngressVpcConfiguration (Prelude.Maybe Prelude.Text)
+ingressVpcConfiguration_vpcId = Lens.lens (\IngressVpcConfiguration' {vpcId} -> vpcId) (\s@IngressVpcConfiguration' {} a -> s {vpcId = a} :: IngressVpcConfiguration)
+
+instance Data.FromJSON IngressVpcConfiguration where
+  parseJSON =
+    Data.withObject
+      "IngressVpcConfiguration"
+      ( \x ->
+          IngressVpcConfiguration'
+            Prelude.<$> (x Data..:? "VpcEndpointId")
+            Prelude.<*> (x Data..:? "VpcId")
+      )
+
+instance Prelude.Hashable IngressVpcConfiguration where
+  hashWithSalt _salt IngressVpcConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` vpcEndpointId
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData IngressVpcConfiguration where
+  rnf IngressVpcConfiguration' {..} =
+    Prelude.rnf vpcEndpointId
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToJSON IngressVpcConfiguration where
+  toJSON IngressVpcConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("VpcEndpointId" Data..=) Prelude.<$> vpcEndpointId,
+            ("VpcId" Data..=) Prelude.<$> vpcId
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/InstanceConfiguration.hs b/gen/Amazonka/AppRunner/Types/InstanceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/InstanceConfiguration.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.InstanceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.InstanceConfiguration 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
+
+-- | Describes the runtime configuration of an App Runner service instance
+-- (scaling unit).
+--
+-- /See:/ 'newInstanceConfiguration' smart constructor.
+data InstanceConfiguration = InstanceConfiguration'
+  { -- | The number of CPU units reserved for each instance of your App Runner
+    -- service.
+    --
+    -- Default: @1 vCPU@
+    cpu :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an IAM role that provides permissions
+    -- to your App Runner service. These are permissions that your code needs
+    -- when it calls any Amazon Web Services APIs.
+    instanceRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The amount of memory, in MB or GB, reserved for each instance of your
+    -- App Runner service.
+    --
+    -- Default: @2 GB@
+    memory :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cpu', 'instanceConfiguration_cpu' - The number of CPU units reserved for each instance of your App Runner
+-- service.
+--
+-- Default: @1 vCPU@
+--
+-- 'instanceRoleArn', 'instanceConfiguration_instanceRoleArn' - The Amazon Resource Name (ARN) of an IAM role that provides permissions
+-- to your App Runner service. These are permissions that your code needs
+-- when it calls any Amazon Web Services APIs.
+--
+-- 'memory', 'instanceConfiguration_memory' - The amount of memory, in MB or GB, reserved for each instance of your
+-- App Runner service.
+--
+-- Default: @2 GB@
+newInstanceConfiguration ::
+  InstanceConfiguration
+newInstanceConfiguration =
+  InstanceConfiguration'
+    { cpu = Prelude.Nothing,
+      instanceRoleArn = Prelude.Nothing,
+      memory = Prelude.Nothing
+    }
+
+-- | The number of CPU units reserved for each instance of your App Runner
+-- service.
+--
+-- Default: @1 vCPU@
+instanceConfiguration_cpu :: Lens.Lens' InstanceConfiguration (Prelude.Maybe Prelude.Text)
+instanceConfiguration_cpu = Lens.lens (\InstanceConfiguration' {cpu} -> cpu) (\s@InstanceConfiguration' {} a -> s {cpu = a} :: InstanceConfiguration)
+
+-- | The Amazon Resource Name (ARN) of an IAM role that provides permissions
+-- to your App Runner service. These are permissions that your code needs
+-- when it calls any Amazon Web Services APIs.
+instanceConfiguration_instanceRoleArn :: Lens.Lens' InstanceConfiguration (Prelude.Maybe Prelude.Text)
+instanceConfiguration_instanceRoleArn = Lens.lens (\InstanceConfiguration' {instanceRoleArn} -> instanceRoleArn) (\s@InstanceConfiguration' {} a -> s {instanceRoleArn = a} :: InstanceConfiguration)
+
+-- | The amount of memory, in MB or GB, reserved for each instance of your
+-- App Runner service.
+--
+-- Default: @2 GB@
+instanceConfiguration_memory :: Lens.Lens' InstanceConfiguration (Prelude.Maybe Prelude.Text)
+instanceConfiguration_memory = Lens.lens (\InstanceConfiguration' {memory} -> memory) (\s@InstanceConfiguration' {} a -> s {memory = a} :: InstanceConfiguration)
+
+instance Data.FromJSON InstanceConfiguration where
+  parseJSON =
+    Data.withObject
+      "InstanceConfiguration"
+      ( \x ->
+          InstanceConfiguration'
+            Prelude.<$> (x Data..:? "Cpu")
+            Prelude.<*> (x Data..:? "InstanceRoleArn")
+            Prelude.<*> (x Data..:? "Memory")
+      )
+
+instance Prelude.Hashable InstanceConfiguration where
+  hashWithSalt _salt InstanceConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` cpu
+      `Prelude.hashWithSalt` instanceRoleArn
+      `Prelude.hashWithSalt` memory
+
+instance Prelude.NFData InstanceConfiguration where
+  rnf InstanceConfiguration' {..} =
+    Prelude.rnf cpu
+      `Prelude.seq` Prelude.rnf instanceRoleArn
+      `Prelude.seq` Prelude.rnf memory
+
+instance Data.ToJSON InstanceConfiguration where
+  toJSON InstanceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Cpu" Data..=) Prelude.<$> cpu,
+            ("InstanceRoleArn" Data..=)
+              Prelude.<$> instanceRoleArn,
+            ("Memory" Data..=) Prelude.<$> memory
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/ListVpcIngressConnectionsFilter.hs b/gen/Amazonka/AppRunner/Types/ListVpcIngressConnectionsFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/ListVpcIngressConnectionsFilter.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.ListVpcIngressConnectionsFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.ListVpcIngressConnectionsFilter 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
+
+-- | Returns a list of VPC Ingress Connections based on the filter provided.
+-- It can return either @ServiceArn@ or @VpcEndpointId@, or both.
+--
+-- /See:/ 'newListVpcIngressConnectionsFilter' smart constructor.
+data ListVpcIngressConnectionsFilter = ListVpcIngressConnectionsFilter'
+  { -- | The Amazon Resource Name (ARN) of a service to filter by.
+    serviceArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a VPC Endpoint to filter by.
+    vpcEndpointId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListVpcIngressConnectionsFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serviceArn', 'listVpcIngressConnectionsFilter_serviceArn' - The Amazon Resource Name (ARN) of a service to filter by.
+--
+-- 'vpcEndpointId', 'listVpcIngressConnectionsFilter_vpcEndpointId' - The ID of a VPC Endpoint to filter by.
+newListVpcIngressConnectionsFilter ::
+  ListVpcIngressConnectionsFilter
+newListVpcIngressConnectionsFilter =
+  ListVpcIngressConnectionsFilter'
+    { serviceArn =
+        Prelude.Nothing,
+      vpcEndpointId = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of a service to filter by.
+listVpcIngressConnectionsFilter_serviceArn :: Lens.Lens' ListVpcIngressConnectionsFilter (Prelude.Maybe Prelude.Text)
+listVpcIngressConnectionsFilter_serviceArn = Lens.lens (\ListVpcIngressConnectionsFilter' {serviceArn} -> serviceArn) (\s@ListVpcIngressConnectionsFilter' {} a -> s {serviceArn = a} :: ListVpcIngressConnectionsFilter)
+
+-- | The ID of a VPC Endpoint to filter by.
+listVpcIngressConnectionsFilter_vpcEndpointId :: Lens.Lens' ListVpcIngressConnectionsFilter (Prelude.Maybe Prelude.Text)
+listVpcIngressConnectionsFilter_vpcEndpointId = Lens.lens (\ListVpcIngressConnectionsFilter' {vpcEndpointId} -> vpcEndpointId) (\s@ListVpcIngressConnectionsFilter' {} a -> s {vpcEndpointId = a} :: ListVpcIngressConnectionsFilter)
+
+instance
+  Prelude.Hashable
+    ListVpcIngressConnectionsFilter
+  where
+  hashWithSalt
+    _salt
+    ListVpcIngressConnectionsFilter' {..} =
+      _salt
+        `Prelude.hashWithSalt` serviceArn
+        `Prelude.hashWithSalt` vpcEndpointId
+
+instance
+  Prelude.NFData
+    ListVpcIngressConnectionsFilter
+  where
+  rnf ListVpcIngressConnectionsFilter' {..} =
+    Prelude.rnf serviceArn
+      `Prelude.seq` Prelude.rnf vpcEndpointId
+
+instance Data.ToJSON ListVpcIngressConnectionsFilter where
+  toJSON ListVpcIngressConnectionsFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ServiceArn" Data..=) Prelude.<$> serviceArn,
+            ("VpcEndpointId" Data..=) Prelude.<$> vpcEndpointId
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/NetworkConfiguration.hs b/gen/Amazonka/AppRunner/Types/NetworkConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/NetworkConfiguration.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.NetworkConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.NetworkConfiguration where
+
+import Amazonka.AppRunner.Types.EgressConfiguration
+import Amazonka.AppRunner.Types.IngressConfiguration
+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
+
+-- | Describes configuration settings related to network traffic of an App
+-- Runner service. Consists of embedded objects for each configurable
+-- network feature.
+--
+-- /See:/ 'newNetworkConfiguration' smart constructor.
+data NetworkConfiguration = NetworkConfiguration'
+  { -- | Network configuration settings for outbound message traffic.
+    egressConfiguration :: Prelude.Maybe EgressConfiguration,
+    -- | Network configuration settings for inbound message traffic.
+    ingressConfiguration :: Prelude.Maybe IngressConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'egressConfiguration', 'networkConfiguration_egressConfiguration' - Network configuration settings for outbound message traffic.
+--
+-- 'ingressConfiguration', 'networkConfiguration_ingressConfiguration' - Network configuration settings for inbound message traffic.
+newNetworkConfiguration ::
+  NetworkConfiguration
+newNetworkConfiguration =
+  NetworkConfiguration'
+    { egressConfiguration =
+        Prelude.Nothing,
+      ingressConfiguration = Prelude.Nothing
+    }
+
+-- | Network configuration settings for outbound message traffic.
+networkConfiguration_egressConfiguration :: Lens.Lens' NetworkConfiguration (Prelude.Maybe EgressConfiguration)
+networkConfiguration_egressConfiguration = Lens.lens (\NetworkConfiguration' {egressConfiguration} -> egressConfiguration) (\s@NetworkConfiguration' {} a -> s {egressConfiguration = a} :: NetworkConfiguration)
+
+-- | Network configuration settings for inbound message traffic.
+networkConfiguration_ingressConfiguration :: Lens.Lens' NetworkConfiguration (Prelude.Maybe IngressConfiguration)
+networkConfiguration_ingressConfiguration = Lens.lens (\NetworkConfiguration' {ingressConfiguration} -> ingressConfiguration) (\s@NetworkConfiguration' {} a -> s {ingressConfiguration = a} :: NetworkConfiguration)
+
+instance Data.FromJSON NetworkConfiguration where
+  parseJSON =
+    Data.withObject
+      "NetworkConfiguration"
+      ( \x ->
+          NetworkConfiguration'
+            Prelude.<$> (x Data..:? "EgressConfiguration")
+            Prelude.<*> (x Data..:? "IngressConfiguration")
+      )
+
+instance Prelude.Hashable NetworkConfiguration where
+  hashWithSalt _salt NetworkConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` egressConfiguration
+      `Prelude.hashWithSalt` ingressConfiguration
+
+instance Prelude.NFData NetworkConfiguration where
+  rnf NetworkConfiguration' {..} =
+    Prelude.rnf egressConfiguration
+      `Prelude.seq` Prelude.rnf ingressConfiguration
+
+instance Data.ToJSON NetworkConfiguration where
+  toJSON NetworkConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EgressConfiguration" Data..=)
+              Prelude.<$> egressConfiguration,
+            ("IngressConfiguration" Data..=)
+              Prelude.<$> ingressConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/ObservabilityConfiguration.hs b/gen/Amazonka/AppRunner/Types/ObservabilityConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/ObservabilityConfiguration.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.AppRunner.Types.ObservabilityConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.ObservabilityConfiguration where
+
+import Amazonka.AppRunner.Types.ObservabilityConfigurationStatus
+import Amazonka.AppRunner.Types.TraceConfiguration
+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
+
+-- | Describes an App Runner observability configuration resource. Multiple
+-- revisions of a configuration have the same
+-- @ObservabilityConfigurationName@ and different
+-- @ObservabilityConfigurationRevision@ values.
+--
+-- The resource is designed to configure multiple features (currently one
+-- feature, tracing). This type contains optional members that describe the
+-- configuration of these features (currently one member,
+-- @TraceConfiguration@). If a feature member isn\'t specified, the feature
+-- isn\'t enabled.
+--
+-- /See:/ 'newObservabilityConfiguration' smart constructor.
+data ObservabilityConfiguration = ObservabilityConfiguration'
+  { -- | The time when the observability configuration was created. It\'s in Unix
+    -- time stamp format.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The time when the observability configuration was deleted. It\'s in Unix
+    -- time stamp format.
+    deletedAt :: Prelude.Maybe Data.POSIX,
+    -- | It\'s set to @true@ for the configuration with the highest @Revision@
+    -- among all configurations that share the same
+    -- @ObservabilityConfigurationName@. It\'s set to @false@ otherwise.
+    latest :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of this observability configuration.
+    observabilityConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The customer-provided observability configuration name. It can be used
+    -- in multiple revisions of a configuration.
+    observabilityConfigurationName :: Prelude.Maybe Prelude.Text,
+    -- | The revision of this observability configuration. It\'s unique among all
+    -- the active configurations (@\"Status\": \"ACTIVE\"@) that share the same
+    -- @ObservabilityConfigurationName@.
+    observabilityConfigurationRevision :: Prelude.Maybe Prelude.Int,
+    -- | The current state of the observability configuration. If the status of a
+    -- configuration revision is @INACTIVE@, it was deleted and can\'t be used.
+    -- Inactive configuration revisions are permanently removed some time after
+    -- they are deleted.
+    status :: Prelude.Maybe ObservabilityConfigurationStatus,
+    -- | The configuration of the tracing feature within this observability
+    -- configuration. If not specified, tracing isn\'t enabled.
+    traceConfiguration :: Prelude.Maybe TraceConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ObservabilityConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'observabilityConfiguration_createdAt' - The time when the observability configuration was created. It\'s in Unix
+-- time stamp format.
+--
+-- 'deletedAt', 'observabilityConfiguration_deletedAt' - The time when the observability configuration was deleted. It\'s in Unix
+-- time stamp format.
+--
+-- 'latest', 'observabilityConfiguration_latest' - It\'s set to @true@ for the configuration with the highest @Revision@
+-- among all configurations that share the same
+-- @ObservabilityConfigurationName@. It\'s set to @false@ otherwise.
+--
+-- 'observabilityConfigurationArn', 'observabilityConfiguration_observabilityConfigurationArn' - The Amazon Resource Name (ARN) of this observability configuration.
+--
+-- 'observabilityConfigurationName', 'observabilityConfiguration_observabilityConfigurationName' - The customer-provided observability configuration name. It can be used
+-- in multiple revisions of a configuration.
+--
+-- 'observabilityConfigurationRevision', 'observabilityConfiguration_observabilityConfigurationRevision' - The revision of this observability configuration. It\'s unique among all
+-- the active configurations (@\"Status\": \"ACTIVE\"@) that share the same
+-- @ObservabilityConfigurationName@.
+--
+-- 'status', 'observabilityConfiguration_status' - The current state of the observability configuration. If the status of a
+-- configuration revision is @INACTIVE@, it was deleted and can\'t be used.
+-- Inactive configuration revisions are permanently removed some time after
+-- they are deleted.
+--
+-- 'traceConfiguration', 'observabilityConfiguration_traceConfiguration' - The configuration of the tracing feature within this observability
+-- configuration. If not specified, tracing isn\'t enabled.
+newObservabilityConfiguration ::
+  ObservabilityConfiguration
+newObservabilityConfiguration =
+  ObservabilityConfiguration'
+    { createdAt =
+        Prelude.Nothing,
+      deletedAt = Prelude.Nothing,
+      latest = Prelude.Nothing,
+      observabilityConfigurationArn = Prelude.Nothing,
+      observabilityConfigurationName =
+        Prelude.Nothing,
+      observabilityConfigurationRevision =
+        Prelude.Nothing,
+      status = Prelude.Nothing,
+      traceConfiguration = Prelude.Nothing
+    }
+
+-- | The time when the observability configuration was created. It\'s in Unix
+-- time stamp format.
+observabilityConfiguration_createdAt :: Lens.Lens' ObservabilityConfiguration (Prelude.Maybe Prelude.UTCTime)
+observabilityConfiguration_createdAt = Lens.lens (\ObservabilityConfiguration' {createdAt} -> createdAt) (\s@ObservabilityConfiguration' {} a -> s {createdAt = a} :: ObservabilityConfiguration) Prelude.. Lens.mapping Data._Time
+
+-- | The time when the observability configuration was deleted. It\'s in Unix
+-- time stamp format.
+observabilityConfiguration_deletedAt :: Lens.Lens' ObservabilityConfiguration (Prelude.Maybe Prelude.UTCTime)
+observabilityConfiguration_deletedAt = Lens.lens (\ObservabilityConfiguration' {deletedAt} -> deletedAt) (\s@ObservabilityConfiguration' {} a -> s {deletedAt = a} :: ObservabilityConfiguration) Prelude.. Lens.mapping Data._Time
+
+-- | It\'s set to @true@ for the configuration with the highest @Revision@
+-- among all configurations that share the same
+-- @ObservabilityConfigurationName@. It\'s set to @false@ otherwise.
+observabilityConfiguration_latest :: Lens.Lens' ObservabilityConfiguration (Prelude.Maybe Prelude.Bool)
+observabilityConfiguration_latest = Lens.lens (\ObservabilityConfiguration' {latest} -> latest) (\s@ObservabilityConfiguration' {} a -> s {latest = a} :: ObservabilityConfiguration)
+
+-- | The Amazon Resource Name (ARN) of this observability configuration.
+observabilityConfiguration_observabilityConfigurationArn :: Lens.Lens' ObservabilityConfiguration (Prelude.Maybe Prelude.Text)
+observabilityConfiguration_observabilityConfigurationArn = Lens.lens (\ObservabilityConfiguration' {observabilityConfigurationArn} -> observabilityConfigurationArn) (\s@ObservabilityConfiguration' {} a -> s {observabilityConfigurationArn = a} :: ObservabilityConfiguration)
+
+-- | The customer-provided observability configuration name. It can be used
+-- in multiple revisions of a configuration.
+observabilityConfiguration_observabilityConfigurationName :: Lens.Lens' ObservabilityConfiguration (Prelude.Maybe Prelude.Text)
+observabilityConfiguration_observabilityConfigurationName = Lens.lens (\ObservabilityConfiguration' {observabilityConfigurationName} -> observabilityConfigurationName) (\s@ObservabilityConfiguration' {} a -> s {observabilityConfigurationName = a} :: ObservabilityConfiguration)
+
+-- | The revision of this observability configuration. It\'s unique among all
+-- the active configurations (@\"Status\": \"ACTIVE\"@) that share the same
+-- @ObservabilityConfigurationName@.
+observabilityConfiguration_observabilityConfigurationRevision :: Lens.Lens' ObservabilityConfiguration (Prelude.Maybe Prelude.Int)
+observabilityConfiguration_observabilityConfigurationRevision = Lens.lens (\ObservabilityConfiguration' {observabilityConfigurationRevision} -> observabilityConfigurationRevision) (\s@ObservabilityConfiguration' {} a -> s {observabilityConfigurationRevision = a} :: ObservabilityConfiguration)
+
+-- | The current state of the observability configuration. If the status of a
+-- configuration revision is @INACTIVE@, it was deleted and can\'t be used.
+-- Inactive configuration revisions are permanently removed some time after
+-- they are deleted.
+observabilityConfiguration_status :: Lens.Lens' ObservabilityConfiguration (Prelude.Maybe ObservabilityConfigurationStatus)
+observabilityConfiguration_status = Lens.lens (\ObservabilityConfiguration' {status} -> status) (\s@ObservabilityConfiguration' {} a -> s {status = a} :: ObservabilityConfiguration)
+
+-- | The configuration of the tracing feature within this observability
+-- configuration. If not specified, tracing isn\'t enabled.
+observabilityConfiguration_traceConfiguration :: Lens.Lens' ObservabilityConfiguration (Prelude.Maybe TraceConfiguration)
+observabilityConfiguration_traceConfiguration = Lens.lens (\ObservabilityConfiguration' {traceConfiguration} -> traceConfiguration) (\s@ObservabilityConfiguration' {} a -> s {traceConfiguration = a} :: ObservabilityConfiguration)
+
+instance Data.FromJSON ObservabilityConfiguration where
+  parseJSON =
+    Data.withObject
+      "ObservabilityConfiguration"
+      ( \x ->
+          ObservabilityConfiguration'
+            Prelude.<$> (x Data..:? "CreatedAt")
+            Prelude.<*> (x Data..:? "DeletedAt")
+            Prelude.<*> (x Data..:? "Latest")
+            Prelude.<*> (x Data..:? "ObservabilityConfigurationArn")
+            Prelude.<*> (x Data..:? "ObservabilityConfigurationName")
+            Prelude.<*> (x Data..:? "ObservabilityConfigurationRevision")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "TraceConfiguration")
+      )
+
+instance Prelude.Hashable ObservabilityConfiguration where
+  hashWithSalt _salt ObservabilityConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` deletedAt
+      `Prelude.hashWithSalt` latest
+      `Prelude.hashWithSalt` observabilityConfigurationArn
+      `Prelude.hashWithSalt` observabilityConfigurationName
+      `Prelude.hashWithSalt` observabilityConfigurationRevision
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` traceConfiguration
+
+instance Prelude.NFData ObservabilityConfiguration where
+  rnf ObservabilityConfiguration' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf deletedAt
+      `Prelude.seq` Prelude.rnf latest
+      `Prelude.seq` Prelude.rnf observabilityConfigurationArn
+      `Prelude.seq` Prelude.rnf observabilityConfigurationName
+      `Prelude.seq` Prelude.rnf observabilityConfigurationRevision
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf traceConfiguration
diff --git a/gen/Amazonka/AppRunner/Types/ObservabilityConfigurationStatus.hs b/gen/Amazonka/AppRunner/Types/ObservabilityConfigurationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/ObservabilityConfigurationStatus.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.AppRunner.Types.ObservabilityConfigurationStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.ObservabilityConfigurationStatus
+  ( ObservabilityConfigurationStatus
+      ( ..,
+        ObservabilityConfigurationStatus_ACTIVE,
+        ObservabilityConfigurationStatus_INACTIVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ObservabilityConfigurationStatus = ObservabilityConfigurationStatus'
+  { fromObservabilityConfigurationStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ObservabilityConfigurationStatus_ACTIVE :: ObservabilityConfigurationStatus
+pattern ObservabilityConfigurationStatus_ACTIVE = ObservabilityConfigurationStatus' "ACTIVE"
+
+pattern ObservabilityConfigurationStatus_INACTIVE :: ObservabilityConfigurationStatus
+pattern ObservabilityConfigurationStatus_INACTIVE = ObservabilityConfigurationStatus' "INACTIVE"
+
+{-# COMPLETE
+  ObservabilityConfigurationStatus_ACTIVE,
+  ObservabilityConfigurationStatus_INACTIVE,
+  ObservabilityConfigurationStatus'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/ObservabilityConfigurationSummary.hs b/gen/Amazonka/AppRunner/Types/ObservabilityConfigurationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/ObservabilityConfigurationSummary.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.ObservabilityConfigurationSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.ObservabilityConfigurationSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides summary information about an App Runner observability
+-- configuration resource.
+--
+-- This type contains limited information about an observability
+-- configuration. It includes only identification information, without
+-- configuration details. It\'s returned by the
+-- ListObservabilityConfigurations action. Complete configuration
+-- information is returned by the CreateObservabilityConfiguration,
+-- DescribeObservabilityConfiguration, and DeleteObservabilityConfiguration
+-- actions using the ObservabilityConfiguration type.
+--
+-- /See:/ 'newObservabilityConfigurationSummary' smart constructor.
+data ObservabilityConfigurationSummary = ObservabilityConfigurationSummary'
+  { -- | The Amazon Resource Name (ARN) of this observability configuration.
+    observabilityConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The customer-provided observability configuration name. It can be used
+    -- in multiple revisions of a configuration.
+    observabilityConfigurationName :: Prelude.Maybe Prelude.Text,
+    -- | The revision of this observability configuration. It\'s unique among all
+    -- the active configurations (@\"Status\": \"ACTIVE\"@) that share the same
+    -- @ObservabilityConfigurationName@.
+    observabilityConfigurationRevision :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ObservabilityConfigurationSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'observabilityConfigurationArn', 'observabilityConfigurationSummary_observabilityConfigurationArn' - The Amazon Resource Name (ARN) of this observability configuration.
+--
+-- 'observabilityConfigurationName', 'observabilityConfigurationSummary_observabilityConfigurationName' - The customer-provided observability configuration name. It can be used
+-- in multiple revisions of a configuration.
+--
+-- 'observabilityConfigurationRevision', 'observabilityConfigurationSummary_observabilityConfigurationRevision' - The revision of this observability configuration. It\'s unique among all
+-- the active configurations (@\"Status\": \"ACTIVE\"@) that share the same
+-- @ObservabilityConfigurationName@.
+newObservabilityConfigurationSummary ::
+  ObservabilityConfigurationSummary
+newObservabilityConfigurationSummary =
+  ObservabilityConfigurationSummary'
+    { observabilityConfigurationArn =
+        Prelude.Nothing,
+      observabilityConfigurationName =
+        Prelude.Nothing,
+      observabilityConfigurationRevision =
+        Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of this observability configuration.
+observabilityConfigurationSummary_observabilityConfigurationArn :: Lens.Lens' ObservabilityConfigurationSummary (Prelude.Maybe Prelude.Text)
+observabilityConfigurationSummary_observabilityConfigurationArn = Lens.lens (\ObservabilityConfigurationSummary' {observabilityConfigurationArn} -> observabilityConfigurationArn) (\s@ObservabilityConfigurationSummary' {} a -> s {observabilityConfigurationArn = a} :: ObservabilityConfigurationSummary)
+
+-- | The customer-provided observability configuration name. It can be used
+-- in multiple revisions of a configuration.
+observabilityConfigurationSummary_observabilityConfigurationName :: Lens.Lens' ObservabilityConfigurationSummary (Prelude.Maybe Prelude.Text)
+observabilityConfigurationSummary_observabilityConfigurationName = Lens.lens (\ObservabilityConfigurationSummary' {observabilityConfigurationName} -> observabilityConfigurationName) (\s@ObservabilityConfigurationSummary' {} a -> s {observabilityConfigurationName = a} :: ObservabilityConfigurationSummary)
+
+-- | The revision of this observability configuration. It\'s unique among all
+-- the active configurations (@\"Status\": \"ACTIVE\"@) that share the same
+-- @ObservabilityConfigurationName@.
+observabilityConfigurationSummary_observabilityConfigurationRevision :: Lens.Lens' ObservabilityConfigurationSummary (Prelude.Maybe Prelude.Int)
+observabilityConfigurationSummary_observabilityConfigurationRevision = Lens.lens (\ObservabilityConfigurationSummary' {observabilityConfigurationRevision} -> observabilityConfigurationRevision) (\s@ObservabilityConfigurationSummary' {} a -> s {observabilityConfigurationRevision = a} :: ObservabilityConfigurationSummary)
+
+instance
+  Data.FromJSON
+    ObservabilityConfigurationSummary
+  where
+  parseJSON =
+    Data.withObject
+      "ObservabilityConfigurationSummary"
+      ( \x ->
+          ObservabilityConfigurationSummary'
+            Prelude.<$> (x Data..:? "ObservabilityConfigurationArn")
+            Prelude.<*> (x Data..:? "ObservabilityConfigurationName")
+            Prelude.<*> (x Data..:? "ObservabilityConfigurationRevision")
+      )
+
+instance
+  Prelude.Hashable
+    ObservabilityConfigurationSummary
+  where
+  hashWithSalt
+    _salt
+    ObservabilityConfigurationSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` observabilityConfigurationArn
+        `Prelude.hashWithSalt` observabilityConfigurationName
+        `Prelude.hashWithSalt` observabilityConfigurationRevision
+
+instance
+  Prelude.NFData
+    ObservabilityConfigurationSummary
+  where
+  rnf ObservabilityConfigurationSummary' {..} =
+    Prelude.rnf observabilityConfigurationArn
+      `Prelude.seq` Prelude.rnf observabilityConfigurationName
+      `Prelude.seq` Prelude.rnf observabilityConfigurationRevision
diff --git a/gen/Amazonka/AppRunner/Types/OperationStatus.hs b/gen/Amazonka/AppRunner/Types/OperationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/OperationStatus.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.AppRunner.Types.OperationStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.OperationStatus
+  ( OperationStatus
+      ( ..,
+        OperationStatus_FAILED,
+        OperationStatus_IN_PROGRESS,
+        OperationStatus_PENDING,
+        OperationStatus_ROLLBACK_FAILED,
+        OperationStatus_ROLLBACK_IN_PROGRESS,
+        OperationStatus_ROLLBACK_SUCCEEDED,
+        OperationStatus_SUCCEEDED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype OperationStatus = OperationStatus'
+  { fromOperationStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern OperationStatus_FAILED :: OperationStatus
+pattern OperationStatus_FAILED = OperationStatus' "FAILED"
+
+pattern OperationStatus_IN_PROGRESS :: OperationStatus
+pattern OperationStatus_IN_PROGRESS = OperationStatus' "IN_PROGRESS"
+
+pattern OperationStatus_PENDING :: OperationStatus
+pattern OperationStatus_PENDING = OperationStatus' "PENDING"
+
+pattern OperationStatus_ROLLBACK_FAILED :: OperationStatus
+pattern OperationStatus_ROLLBACK_FAILED = OperationStatus' "ROLLBACK_FAILED"
+
+pattern OperationStatus_ROLLBACK_IN_PROGRESS :: OperationStatus
+pattern OperationStatus_ROLLBACK_IN_PROGRESS = OperationStatus' "ROLLBACK_IN_PROGRESS"
+
+pattern OperationStatus_ROLLBACK_SUCCEEDED :: OperationStatus
+pattern OperationStatus_ROLLBACK_SUCCEEDED = OperationStatus' "ROLLBACK_SUCCEEDED"
+
+pattern OperationStatus_SUCCEEDED :: OperationStatus
+pattern OperationStatus_SUCCEEDED = OperationStatus' "SUCCEEDED"
+
+{-# COMPLETE
+  OperationStatus_FAILED,
+  OperationStatus_IN_PROGRESS,
+  OperationStatus_PENDING,
+  OperationStatus_ROLLBACK_FAILED,
+  OperationStatus_ROLLBACK_IN_PROGRESS,
+  OperationStatus_ROLLBACK_SUCCEEDED,
+  OperationStatus_SUCCEEDED,
+  OperationStatus'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/OperationSummary.hs b/gen/Amazonka/AppRunner/Types/OperationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/OperationSummary.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.AppRunner.Types.OperationSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.OperationSummary where
+
+import Amazonka.AppRunner.Types.OperationStatus
+import Amazonka.AppRunner.Types.OperationType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides summary information for an operation that occurred on an App
+-- Runner service.
+--
+-- /See:/ 'newOperationSummary' smart constructor.
+data OperationSummary = OperationSummary'
+  { -- | The time when the operation ended. It\'s in the Unix time stamp format.
+    endedAt :: Prelude.Maybe Data.POSIX,
+    -- | A unique ID of this operation. It\'s unique in the scope of the App
+    -- Runner service.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The time when the operation started. It\'s in the Unix time stamp
+    -- format.
+    startedAt :: Prelude.Maybe Data.POSIX,
+    -- | The current state of the operation.
+    status :: Prelude.Maybe OperationStatus,
+    -- | The Amazon Resource Name (ARN) of the resource that the operation acted
+    -- on (for example, an App Runner service).
+    targetArn :: Prelude.Maybe Prelude.Text,
+    -- | The type of operation. It indicates a specific action that occured.
+    type' :: Prelude.Maybe OperationType,
+    -- | The time when the operation was last updated. It\'s in the Unix time
+    -- stamp format.
+    updatedAt :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OperationSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endedAt', 'operationSummary_endedAt' - The time when the operation ended. It\'s in the Unix time stamp format.
+--
+-- 'id', 'operationSummary_id' - A unique ID of this operation. It\'s unique in the scope of the App
+-- Runner service.
+--
+-- 'startedAt', 'operationSummary_startedAt' - The time when the operation started. It\'s in the Unix time stamp
+-- format.
+--
+-- 'status', 'operationSummary_status' - The current state of the operation.
+--
+-- 'targetArn', 'operationSummary_targetArn' - The Amazon Resource Name (ARN) of the resource that the operation acted
+-- on (for example, an App Runner service).
+--
+-- 'type'', 'operationSummary_type' - The type of operation. It indicates a specific action that occured.
+--
+-- 'updatedAt', 'operationSummary_updatedAt' - The time when the operation was last updated. It\'s in the Unix time
+-- stamp format.
+newOperationSummary ::
+  OperationSummary
+newOperationSummary =
+  OperationSummary'
+    { endedAt = Prelude.Nothing,
+      id = Prelude.Nothing,
+      startedAt = Prelude.Nothing,
+      status = Prelude.Nothing,
+      targetArn = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      updatedAt = Prelude.Nothing
+    }
+
+-- | The time when the operation ended. It\'s in the Unix time stamp format.
+operationSummary_endedAt :: Lens.Lens' OperationSummary (Prelude.Maybe Prelude.UTCTime)
+operationSummary_endedAt = Lens.lens (\OperationSummary' {endedAt} -> endedAt) (\s@OperationSummary' {} a -> s {endedAt = a} :: OperationSummary) Prelude.. Lens.mapping Data._Time
+
+-- | A unique ID of this operation. It\'s unique in the scope of the App
+-- Runner service.
+operationSummary_id :: Lens.Lens' OperationSummary (Prelude.Maybe Prelude.Text)
+operationSummary_id = Lens.lens (\OperationSummary' {id} -> id) (\s@OperationSummary' {} a -> s {id = a} :: OperationSummary)
+
+-- | The time when the operation started. It\'s in the Unix time stamp
+-- format.
+operationSummary_startedAt :: Lens.Lens' OperationSummary (Prelude.Maybe Prelude.UTCTime)
+operationSummary_startedAt = Lens.lens (\OperationSummary' {startedAt} -> startedAt) (\s@OperationSummary' {} a -> s {startedAt = a} :: OperationSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The current state of the operation.
+operationSummary_status :: Lens.Lens' OperationSummary (Prelude.Maybe OperationStatus)
+operationSummary_status = Lens.lens (\OperationSummary' {status} -> status) (\s@OperationSummary' {} a -> s {status = a} :: OperationSummary)
+
+-- | The Amazon Resource Name (ARN) of the resource that the operation acted
+-- on (for example, an App Runner service).
+operationSummary_targetArn :: Lens.Lens' OperationSummary (Prelude.Maybe Prelude.Text)
+operationSummary_targetArn = Lens.lens (\OperationSummary' {targetArn} -> targetArn) (\s@OperationSummary' {} a -> s {targetArn = a} :: OperationSummary)
+
+-- | The type of operation. It indicates a specific action that occured.
+operationSummary_type :: Lens.Lens' OperationSummary (Prelude.Maybe OperationType)
+operationSummary_type = Lens.lens (\OperationSummary' {type'} -> type') (\s@OperationSummary' {} a -> s {type' = a} :: OperationSummary)
+
+-- | The time when the operation was last updated. It\'s in the Unix time
+-- stamp format.
+operationSummary_updatedAt :: Lens.Lens' OperationSummary (Prelude.Maybe Prelude.UTCTime)
+operationSummary_updatedAt = Lens.lens (\OperationSummary' {updatedAt} -> updatedAt) (\s@OperationSummary' {} a -> s {updatedAt = a} :: OperationSummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON OperationSummary where
+  parseJSON =
+    Data.withObject
+      "OperationSummary"
+      ( \x ->
+          OperationSummary'
+            Prelude.<$> (x Data..:? "EndedAt")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "StartedAt")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "TargetArn")
+            Prelude.<*> (x Data..:? "Type")
+            Prelude.<*> (x Data..:? "UpdatedAt")
+      )
+
+instance Prelude.Hashable OperationSummary where
+  hashWithSalt _salt OperationSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` endedAt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` startedAt
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` targetArn
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData OperationSummary where
+  rnf OperationSummary' {..} =
+    Prelude.rnf endedAt
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf startedAt
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf targetArn
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/AppRunner/Types/OperationType.hs b/gen/Amazonka/AppRunner/Types/OperationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/OperationType.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.OperationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.OperationType
+  ( OperationType
+      ( ..,
+        OperationType_CREATE_SERVICE,
+        OperationType_DELETE_SERVICE,
+        OperationType_PAUSE_SERVICE,
+        OperationType_RESUME_SERVICE,
+        OperationType_START_DEPLOYMENT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype OperationType = OperationType'
+  { fromOperationType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern OperationType_CREATE_SERVICE :: OperationType
+pattern OperationType_CREATE_SERVICE = OperationType' "CREATE_SERVICE"
+
+pattern OperationType_DELETE_SERVICE :: OperationType
+pattern OperationType_DELETE_SERVICE = OperationType' "DELETE_SERVICE"
+
+pattern OperationType_PAUSE_SERVICE :: OperationType
+pattern OperationType_PAUSE_SERVICE = OperationType' "PAUSE_SERVICE"
+
+pattern OperationType_RESUME_SERVICE :: OperationType
+pattern OperationType_RESUME_SERVICE = OperationType' "RESUME_SERVICE"
+
+pattern OperationType_START_DEPLOYMENT :: OperationType
+pattern OperationType_START_DEPLOYMENT = OperationType' "START_DEPLOYMENT"
+
+{-# COMPLETE
+  OperationType_CREATE_SERVICE,
+  OperationType_DELETE_SERVICE,
+  OperationType_PAUSE_SERVICE,
+  OperationType_RESUME_SERVICE,
+  OperationType_START_DEPLOYMENT,
+  OperationType'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/ProviderType.hs b/gen/Amazonka/AppRunner/Types/ProviderType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/ProviderType.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.ProviderType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.ProviderType
+  ( ProviderType
+      ( ..,
+        ProviderType_GITHUB
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ProviderType = ProviderType'
+  { fromProviderType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ProviderType_GITHUB :: ProviderType
+pattern ProviderType_GITHUB = ProviderType' "GITHUB"
+
+{-# COMPLETE
+  ProviderType_GITHUB,
+  ProviderType'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/Runtime.hs b/gen/Amazonka/AppRunner/Types/Runtime.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/Runtime.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.Runtime
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.Runtime
+  ( Runtime
+      ( ..,
+        Runtime_CORRETTO_11,
+        Runtime_CORRETTO_8,
+        Runtime_DOTNET_6,
+        Runtime_GO_1,
+        Runtime_NODEJS_12,
+        Runtime_NODEJS_14,
+        Runtime_NODEJS_16,
+        Runtime_PHP_81,
+        Runtime_PYTHON_3,
+        Runtime_RUBY_31
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Runtime = Runtime' {fromRuntime :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Runtime_CORRETTO_11 :: Runtime
+pattern Runtime_CORRETTO_11 = Runtime' "CORRETTO_11"
+
+pattern Runtime_CORRETTO_8 :: Runtime
+pattern Runtime_CORRETTO_8 = Runtime' "CORRETTO_8"
+
+pattern Runtime_DOTNET_6 :: Runtime
+pattern Runtime_DOTNET_6 = Runtime' "DOTNET_6"
+
+pattern Runtime_GO_1 :: Runtime
+pattern Runtime_GO_1 = Runtime' "GO_1"
+
+pattern Runtime_NODEJS_12 :: Runtime
+pattern Runtime_NODEJS_12 = Runtime' "NODEJS_12"
+
+pattern Runtime_NODEJS_14 :: Runtime
+pattern Runtime_NODEJS_14 = Runtime' "NODEJS_14"
+
+pattern Runtime_NODEJS_16 :: Runtime
+pattern Runtime_NODEJS_16 = Runtime' "NODEJS_16"
+
+pattern Runtime_PHP_81 :: Runtime
+pattern Runtime_PHP_81 = Runtime' "PHP_81"
+
+pattern Runtime_PYTHON_3 :: Runtime
+pattern Runtime_PYTHON_3 = Runtime' "PYTHON_3"
+
+pattern Runtime_RUBY_31 :: Runtime
+pattern Runtime_RUBY_31 = Runtime' "RUBY_31"
+
+{-# COMPLETE
+  Runtime_CORRETTO_11,
+  Runtime_CORRETTO_8,
+  Runtime_DOTNET_6,
+  Runtime_GO_1,
+  Runtime_NODEJS_12,
+  Runtime_NODEJS_14,
+  Runtime_NODEJS_16,
+  Runtime_PHP_81,
+  Runtime_PYTHON_3,
+  Runtime_RUBY_31,
+  Runtime'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/Service.hs b/gen/Amazonka/AppRunner/Types/Service.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/Service.hs
@@ -0,0 +1,368 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.Service
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.Service where
+
+import Amazonka.AppRunner.Types.AutoScalingConfigurationSummary
+import Amazonka.AppRunner.Types.EncryptionConfiguration
+import Amazonka.AppRunner.Types.HealthCheckConfiguration
+import Amazonka.AppRunner.Types.InstanceConfiguration
+import Amazonka.AppRunner.Types.NetworkConfiguration
+import Amazonka.AppRunner.Types.ServiceObservabilityConfiguration
+import Amazonka.AppRunner.Types.ServiceStatus
+import Amazonka.AppRunner.Types.SourceConfiguration
+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
+
+-- | Describes an App Runner service. It can describe a service in any state,
+-- including deleted services.
+--
+-- This type contains the full information about a service, including
+-- configuration details. It\'s returned by the
+-- <https://docs.aws.amazon.com/apprunner/latest/api/API_CreateService.html CreateService>,
+-- <https://docs.aws.amazon.com/apprunner/latest/api/API_DescribeService.html DescribeService>,
+-- and
+-- <https://docs.aws.amazon.com/apprunner/latest/api/API_DeleteService.html DeleteService>
+-- actions. A subset of this information is returned by the
+-- <https://docs.aws.amazon.com/apprunner/latest/api/API_ListServices.html ListServices>
+-- action using the
+-- <https://docs.aws.amazon.com/apprunner/latest/api/API_ServiceSummary.html ServiceSummary>
+-- type.
+--
+-- /See:/ 'newService' smart constructor.
+data Service = Service'
+  { -- | The time when the App Runner service was deleted. It\'s in the Unix time
+    -- stamp format.
+    deletedAt :: Prelude.Maybe Data.POSIX,
+    -- | The encryption key that App Runner uses to encrypt the service logs and
+    -- the copy of the source repository that App Runner maintains for the
+    -- service. It can be either a customer-provided encryption key or an
+    -- Amazon Web Services managed key.
+    encryptionConfiguration :: Prelude.Maybe EncryptionConfiguration,
+    -- | The settings for the health check that App Runner performs to monitor
+    -- the health of this service.
+    healthCheckConfiguration :: Prelude.Maybe HealthCheckConfiguration,
+    -- | The observability configuration of this service.
+    observabilityConfiguration :: Prelude.Maybe ServiceObservabilityConfiguration,
+    -- | A subdomain URL that App Runner generated for this service. You can use
+    -- this URL to access your service web application.
+    serviceUrl :: Prelude.Maybe Prelude.Text,
+    -- | The customer-provided service name.
+    serviceName :: Prelude.Text,
+    -- | An ID that App Runner generated for this service. It\'s unique within
+    -- the Amazon Web Services Region.
+    serviceId :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of this service.
+    serviceArn :: Prelude.Text,
+    -- | The time when the App Runner service was created. It\'s in the Unix time
+    -- stamp format.
+    createdAt :: Data.POSIX,
+    -- | The time when the App Runner service was last updated at. It\'s in the
+    -- Unix time stamp format.
+    updatedAt :: Data.POSIX,
+    -- | The current state of the App Runner service. These particular values
+    -- mean the following.
+    --
+    -- -   @CREATE_FAILED@ – The service failed to create. To troubleshoot this
+    --     failure, read the failure events and logs, change any parameters
+    --     that need to be fixed, and retry the call to create the service.
+    --
+    --     The failed service isn\'t usable, and still counts towards your
+    --     service quota. When you\'re done analyzing the failure, delete the
+    --     service.
+    --
+    -- -   @DELETE_FAILED@ – The service failed to delete and can\'t be
+    --     successfully recovered. Retry the service deletion call to ensure
+    --     that all related resources are removed.
+    status :: ServiceStatus,
+    -- | The source deployed to the App Runner service. It can be a code or an
+    -- image repository.
+    sourceConfiguration :: SourceConfiguration,
+    -- | The runtime configuration of instances (scaling units) of this service.
+    instanceConfiguration :: InstanceConfiguration,
+    -- | Summary information for the App Runner automatic scaling configuration
+    -- resource that\'s associated with this service.
+    autoScalingConfigurationSummary :: AutoScalingConfigurationSummary,
+    -- | Configuration settings related to network traffic of the web application
+    -- that this service runs.
+    networkConfiguration :: NetworkConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Service' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deletedAt', 'service_deletedAt' - The time when the App Runner service was deleted. It\'s in the Unix time
+-- stamp format.
+--
+-- 'encryptionConfiguration', 'service_encryptionConfiguration' - The encryption key that App Runner uses to encrypt the service logs and
+-- the copy of the source repository that App Runner maintains for the
+-- service. It can be either a customer-provided encryption key or an
+-- Amazon Web Services managed key.
+--
+-- 'healthCheckConfiguration', 'service_healthCheckConfiguration' - The settings for the health check that App Runner performs to monitor
+-- the health of this service.
+--
+-- 'observabilityConfiguration', 'service_observabilityConfiguration' - The observability configuration of this service.
+--
+-- 'serviceUrl', 'service_serviceUrl' - A subdomain URL that App Runner generated for this service. You can use
+-- this URL to access your service web application.
+--
+-- 'serviceName', 'service_serviceName' - The customer-provided service name.
+--
+-- 'serviceId', 'service_serviceId' - An ID that App Runner generated for this service. It\'s unique within
+-- the Amazon Web Services Region.
+--
+-- 'serviceArn', 'service_serviceArn' - The Amazon Resource Name (ARN) of this service.
+--
+-- 'createdAt', 'service_createdAt' - The time when the App Runner service was created. It\'s in the Unix time
+-- stamp format.
+--
+-- 'updatedAt', 'service_updatedAt' - The time when the App Runner service was last updated at. It\'s in the
+-- Unix time stamp format.
+--
+-- 'status', 'service_status' - The current state of the App Runner service. These particular values
+-- mean the following.
+--
+-- -   @CREATE_FAILED@ – The service failed to create. To troubleshoot this
+--     failure, read the failure events and logs, change any parameters
+--     that need to be fixed, and retry the call to create the service.
+--
+--     The failed service isn\'t usable, and still counts towards your
+--     service quota. When you\'re done analyzing the failure, delete the
+--     service.
+--
+-- -   @DELETE_FAILED@ – The service failed to delete and can\'t be
+--     successfully recovered. Retry the service deletion call to ensure
+--     that all related resources are removed.
+--
+-- 'sourceConfiguration', 'service_sourceConfiguration' - The source deployed to the App Runner service. It can be a code or an
+-- image repository.
+--
+-- 'instanceConfiguration', 'service_instanceConfiguration' - The runtime configuration of instances (scaling units) of this service.
+--
+-- 'autoScalingConfigurationSummary', 'service_autoScalingConfigurationSummary' - Summary information for the App Runner automatic scaling configuration
+-- resource that\'s associated with this service.
+--
+-- 'networkConfiguration', 'service_networkConfiguration' - Configuration settings related to network traffic of the web application
+-- that this service runs.
+newService ::
+  -- | 'serviceName'
+  Prelude.Text ->
+  -- | 'serviceId'
+  Prelude.Text ->
+  -- | 'serviceArn'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  -- | 'status'
+  ServiceStatus ->
+  -- | 'sourceConfiguration'
+  SourceConfiguration ->
+  -- | 'instanceConfiguration'
+  InstanceConfiguration ->
+  -- | 'autoScalingConfigurationSummary'
+  AutoScalingConfigurationSummary ->
+  -- | 'networkConfiguration'
+  NetworkConfiguration ->
+  Service
+newService
+  pServiceName_
+  pServiceId_
+  pServiceArn_
+  pCreatedAt_
+  pUpdatedAt_
+  pStatus_
+  pSourceConfiguration_
+  pInstanceConfiguration_
+  pAutoScalingConfigurationSummary_
+  pNetworkConfiguration_ =
+    Service'
+      { deletedAt = Prelude.Nothing,
+        encryptionConfiguration = Prelude.Nothing,
+        healthCheckConfiguration = Prelude.Nothing,
+        observabilityConfiguration = Prelude.Nothing,
+        serviceUrl = Prelude.Nothing,
+        serviceName = pServiceName_,
+        serviceId = pServiceId_,
+        serviceArn = pServiceArn_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_,
+        status = pStatus_,
+        sourceConfiguration = pSourceConfiguration_,
+        instanceConfiguration = pInstanceConfiguration_,
+        autoScalingConfigurationSummary =
+          pAutoScalingConfigurationSummary_,
+        networkConfiguration = pNetworkConfiguration_
+      }
+
+-- | The time when the App Runner service was deleted. It\'s in the Unix time
+-- stamp format.
+service_deletedAt :: Lens.Lens' Service (Prelude.Maybe Prelude.UTCTime)
+service_deletedAt = Lens.lens (\Service' {deletedAt} -> deletedAt) (\s@Service' {} a -> s {deletedAt = a} :: Service) Prelude.. Lens.mapping Data._Time
+
+-- | The encryption key that App Runner uses to encrypt the service logs and
+-- the copy of the source repository that App Runner maintains for the
+-- service. It can be either a customer-provided encryption key or an
+-- Amazon Web Services managed key.
+service_encryptionConfiguration :: Lens.Lens' Service (Prelude.Maybe EncryptionConfiguration)
+service_encryptionConfiguration = Lens.lens (\Service' {encryptionConfiguration} -> encryptionConfiguration) (\s@Service' {} a -> s {encryptionConfiguration = a} :: Service)
+
+-- | The settings for the health check that App Runner performs to monitor
+-- the health of this service.
+service_healthCheckConfiguration :: Lens.Lens' Service (Prelude.Maybe HealthCheckConfiguration)
+service_healthCheckConfiguration = Lens.lens (\Service' {healthCheckConfiguration} -> healthCheckConfiguration) (\s@Service' {} a -> s {healthCheckConfiguration = a} :: Service)
+
+-- | The observability configuration of this service.
+service_observabilityConfiguration :: Lens.Lens' Service (Prelude.Maybe ServiceObservabilityConfiguration)
+service_observabilityConfiguration = Lens.lens (\Service' {observabilityConfiguration} -> observabilityConfiguration) (\s@Service' {} a -> s {observabilityConfiguration = a} :: Service)
+
+-- | A subdomain URL that App Runner generated for this service. You can use
+-- this URL to access your service web application.
+service_serviceUrl :: Lens.Lens' Service (Prelude.Maybe Prelude.Text)
+service_serviceUrl = Lens.lens (\Service' {serviceUrl} -> serviceUrl) (\s@Service' {} a -> s {serviceUrl = a} :: Service)
+
+-- | The customer-provided service name.
+service_serviceName :: Lens.Lens' Service Prelude.Text
+service_serviceName = Lens.lens (\Service' {serviceName} -> serviceName) (\s@Service' {} a -> s {serviceName = a} :: Service)
+
+-- | An ID that App Runner generated for this service. It\'s unique within
+-- the Amazon Web Services Region.
+service_serviceId :: Lens.Lens' Service Prelude.Text
+service_serviceId = Lens.lens (\Service' {serviceId} -> serviceId) (\s@Service' {} a -> s {serviceId = a} :: Service)
+
+-- | The Amazon Resource Name (ARN) of this service.
+service_serviceArn :: Lens.Lens' Service Prelude.Text
+service_serviceArn = Lens.lens (\Service' {serviceArn} -> serviceArn) (\s@Service' {} a -> s {serviceArn = a} :: Service)
+
+-- | The time when the App Runner service was created. It\'s in the Unix time
+-- stamp format.
+service_createdAt :: Lens.Lens' Service Prelude.UTCTime
+service_createdAt = Lens.lens (\Service' {createdAt} -> createdAt) (\s@Service' {} a -> s {createdAt = a} :: Service) Prelude.. Data._Time
+
+-- | The time when the App Runner service was last updated at. It\'s in the
+-- Unix time stamp format.
+service_updatedAt :: Lens.Lens' Service Prelude.UTCTime
+service_updatedAt = Lens.lens (\Service' {updatedAt} -> updatedAt) (\s@Service' {} a -> s {updatedAt = a} :: Service) Prelude.. Data._Time
+
+-- | The current state of the App Runner service. These particular values
+-- mean the following.
+--
+-- -   @CREATE_FAILED@ – The service failed to create. To troubleshoot this
+--     failure, read the failure events and logs, change any parameters
+--     that need to be fixed, and retry the call to create the service.
+--
+--     The failed service isn\'t usable, and still counts towards your
+--     service quota. When you\'re done analyzing the failure, delete the
+--     service.
+--
+-- -   @DELETE_FAILED@ – The service failed to delete and can\'t be
+--     successfully recovered. Retry the service deletion call to ensure
+--     that all related resources are removed.
+service_status :: Lens.Lens' Service ServiceStatus
+service_status = Lens.lens (\Service' {status} -> status) (\s@Service' {} a -> s {status = a} :: Service)
+
+-- | The source deployed to the App Runner service. It can be a code or an
+-- image repository.
+service_sourceConfiguration :: Lens.Lens' Service SourceConfiguration
+service_sourceConfiguration = Lens.lens (\Service' {sourceConfiguration} -> sourceConfiguration) (\s@Service' {} a -> s {sourceConfiguration = a} :: Service)
+
+-- | The runtime configuration of instances (scaling units) of this service.
+service_instanceConfiguration :: Lens.Lens' Service InstanceConfiguration
+service_instanceConfiguration = Lens.lens (\Service' {instanceConfiguration} -> instanceConfiguration) (\s@Service' {} a -> s {instanceConfiguration = a} :: Service)
+
+-- | Summary information for the App Runner automatic scaling configuration
+-- resource that\'s associated with this service.
+service_autoScalingConfigurationSummary :: Lens.Lens' Service AutoScalingConfigurationSummary
+service_autoScalingConfigurationSummary = Lens.lens (\Service' {autoScalingConfigurationSummary} -> autoScalingConfigurationSummary) (\s@Service' {} a -> s {autoScalingConfigurationSummary = a} :: Service)
+
+-- | Configuration settings related to network traffic of the web application
+-- that this service runs.
+service_networkConfiguration :: Lens.Lens' Service NetworkConfiguration
+service_networkConfiguration = Lens.lens (\Service' {networkConfiguration} -> networkConfiguration) (\s@Service' {} a -> s {networkConfiguration = a} :: Service)
+
+instance Data.FromJSON Service where
+  parseJSON =
+    Data.withObject
+      "Service"
+      ( \x ->
+          Service'
+            Prelude.<$> (x Data..:? "DeletedAt")
+            Prelude.<*> (x Data..:? "EncryptionConfiguration")
+            Prelude.<*> (x Data..:? "HealthCheckConfiguration")
+            Prelude.<*> (x Data..:? "ObservabilityConfiguration")
+            Prelude.<*> (x Data..:? "ServiceUrl")
+            Prelude.<*> (x Data..: "ServiceName")
+            Prelude.<*> (x Data..: "ServiceId")
+            Prelude.<*> (x Data..: "ServiceArn")
+            Prelude.<*> (x Data..: "CreatedAt")
+            Prelude.<*> (x Data..: "UpdatedAt")
+            Prelude.<*> (x Data..: "Status")
+            Prelude.<*> (x Data..: "SourceConfiguration")
+            Prelude.<*> (x Data..: "InstanceConfiguration")
+            Prelude.<*> (x Data..: "AutoScalingConfigurationSummary")
+            Prelude.<*> (x Data..: "NetworkConfiguration")
+      )
+
+instance Prelude.Hashable Service where
+  hashWithSalt _salt Service' {..} =
+    _salt
+      `Prelude.hashWithSalt` deletedAt
+      `Prelude.hashWithSalt` encryptionConfiguration
+      `Prelude.hashWithSalt` healthCheckConfiguration
+      `Prelude.hashWithSalt` observabilityConfiguration
+      `Prelude.hashWithSalt` serviceUrl
+      `Prelude.hashWithSalt` serviceName
+      `Prelude.hashWithSalt` serviceId
+      `Prelude.hashWithSalt` serviceArn
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` updatedAt
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` sourceConfiguration
+      `Prelude.hashWithSalt` instanceConfiguration
+      `Prelude.hashWithSalt` autoScalingConfigurationSummary
+      `Prelude.hashWithSalt` networkConfiguration
+
+instance Prelude.NFData Service where
+  rnf Service' {..} =
+    Prelude.rnf deletedAt
+      `Prelude.seq` Prelude.rnf encryptionConfiguration
+      `Prelude.seq` Prelude.rnf healthCheckConfiguration
+      `Prelude.seq` Prelude.rnf observabilityConfiguration
+      `Prelude.seq` Prelude.rnf serviceUrl
+      `Prelude.seq` Prelude.rnf serviceName
+      `Prelude.seq` Prelude.rnf serviceId
+      `Prelude.seq` Prelude.rnf serviceArn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf sourceConfiguration
+      `Prelude.seq` Prelude.rnf instanceConfiguration
+      `Prelude.seq` Prelude.rnf
+        autoScalingConfigurationSummary
+      `Prelude.seq` Prelude.rnf networkConfiguration
diff --git a/gen/Amazonka/AppRunner/Types/ServiceObservabilityConfiguration.hs b/gen/Amazonka/AppRunner/Types/ServiceObservabilityConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/ServiceObservabilityConfiguration.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.ServiceObservabilityConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.ServiceObservabilityConfiguration 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
+
+-- | Describes the observability configuration of an App Runner service.
+-- These are additional observability features, like tracing, that you
+-- choose to enable. They\'re configured in a separate resource that you
+-- associate with your service.
+--
+-- /See:/ 'newServiceObservabilityConfiguration' smart constructor.
+data ServiceObservabilityConfiguration = ServiceObservabilityConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the observability configuration that
+    -- is associated with the service. Specified only when
+    -- @ObservabilityEnabled@ is @true@.
+    --
+    -- Specify an ARN with a name and a revision number to associate that
+    -- revision. For example:
+    -- @arn:aws:apprunner:us-east-1:123456789012:observabilityconfiguration\/xray-tracing\/3@
+    --
+    -- Specify just the name to associate the latest revision. For example:
+    -- @arn:aws:apprunner:us-east-1:123456789012:observabilityconfiguration\/xray-tracing@
+    observabilityConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | When @true@, an observability configuration resource is associated with
+    -- the service, and an @ObservabilityConfigurationArn@ is specified.
+    observabilityEnabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceObservabilityConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'observabilityConfigurationArn', 'serviceObservabilityConfiguration_observabilityConfigurationArn' - The Amazon Resource Name (ARN) of the observability configuration that
+-- is associated with the service. Specified only when
+-- @ObservabilityEnabled@ is @true@.
+--
+-- Specify an ARN with a name and a revision number to associate that
+-- revision. For example:
+-- @arn:aws:apprunner:us-east-1:123456789012:observabilityconfiguration\/xray-tracing\/3@
+--
+-- Specify just the name to associate the latest revision. For example:
+-- @arn:aws:apprunner:us-east-1:123456789012:observabilityconfiguration\/xray-tracing@
+--
+-- 'observabilityEnabled', 'serviceObservabilityConfiguration_observabilityEnabled' - When @true@, an observability configuration resource is associated with
+-- the service, and an @ObservabilityConfigurationArn@ is specified.
+newServiceObservabilityConfiguration ::
+  -- | 'observabilityEnabled'
+  Prelude.Bool ->
+  ServiceObservabilityConfiguration
+newServiceObservabilityConfiguration
+  pObservabilityEnabled_ =
+    ServiceObservabilityConfiguration'
+      { observabilityConfigurationArn =
+          Prelude.Nothing,
+        observabilityEnabled =
+          pObservabilityEnabled_
+      }
+
+-- | The Amazon Resource Name (ARN) of the observability configuration that
+-- is associated with the service. Specified only when
+-- @ObservabilityEnabled@ is @true@.
+--
+-- Specify an ARN with a name and a revision number to associate that
+-- revision. For example:
+-- @arn:aws:apprunner:us-east-1:123456789012:observabilityconfiguration\/xray-tracing\/3@
+--
+-- Specify just the name to associate the latest revision. For example:
+-- @arn:aws:apprunner:us-east-1:123456789012:observabilityconfiguration\/xray-tracing@
+serviceObservabilityConfiguration_observabilityConfigurationArn :: Lens.Lens' ServiceObservabilityConfiguration (Prelude.Maybe Prelude.Text)
+serviceObservabilityConfiguration_observabilityConfigurationArn = Lens.lens (\ServiceObservabilityConfiguration' {observabilityConfigurationArn} -> observabilityConfigurationArn) (\s@ServiceObservabilityConfiguration' {} a -> s {observabilityConfigurationArn = a} :: ServiceObservabilityConfiguration)
+
+-- | When @true@, an observability configuration resource is associated with
+-- the service, and an @ObservabilityConfigurationArn@ is specified.
+serviceObservabilityConfiguration_observabilityEnabled :: Lens.Lens' ServiceObservabilityConfiguration Prelude.Bool
+serviceObservabilityConfiguration_observabilityEnabled = Lens.lens (\ServiceObservabilityConfiguration' {observabilityEnabled} -> observabilityEnabled) (\s@ServiceObservabilityConfiguration' {} a -> s {observabilityEnabled = a} :: ServiceObservabilityConfiguration)
+
+instance
+  Data.FromJSON
+    ServiceObservabilityConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "ServiceObservabilityConfiguration"
+      ( \x ->
+          ServiceObservabilityConfiguration'
+            Prelude.<$> (x Data..:? "ObservabilityConfigurationArn")
+            Prelude.<*> (x Data..: "ObservabilityEnabled")
+      )
+
+instance
+  Prelude.Hashable
+    ServiceObservabilityConfiguration
+  where
+  hashWithSalt
+    _salt
+    ServiceObservabilityConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` observabilityConfigurationArn
+        `Prelude.hashWithSalt` observabilityEnabled
+
+instance
+  Prelude.NFData
+    ServiceObservabilityConfiguration
+  where
+  rnf ServiceObservabilityConfiguration' {..} =
+    Prelude.rnf observabilityConfigurationArn
+      `Prelude.seq` Prelude.rnf observabilityEnabled
+
+instance
+  Data.ToJSON
+    ServiceObservabilityConfiguration
+  where
+  toJSON ServiceObservabilityConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ObservabilityConfigurationArn" Data..=)
+              Prelude.<$> observabilityConfigurationArn,
+            Prelude.Just
+              ( "ObservabilityEnabled"
+                  Data..= observabilityEnabled
+              )
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/ServiceStatus.hs b/gen/Amazonka/AppRunner/Types/ServiceStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/ServiceStatus.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.AppRunner.Types.ServiceStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.ServiceStatus
+  ( ServiceStatus
+      ( ..,
+        ServiceStatus_CREATE_FAILED,
+        ServiceStatus_DELETED,
+        ServiceStatus_DELETE_FAILED,
+        ServiceStatus_OPERATION_IN_PROGRESS,
+        ServiceStatus_PAUSED,
+        ServiceStatus_RUNNING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ServiceStatus = ServiceStatus'
+  { fromServiceStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ServiceStatus_CREATE_FAILED :: ServiceStatus
+pattern ServiceStatus_CREATE_FAILED = ServiceStatus' "CREATE_FAILED"
+
+pattern ServiceStatus_DELETED :: ServiceStatus
+pattern ServiceStatus_DELETED = ServiceStatus' "DELETED"
+
+pattern ServiceStatus_DELETE_FAILED :: ServiceStatus
+pattern ServiceStatus_DELETE_FAILED = ServiceStatus' "DELETE_FAILED"
+
+pattern ServiceStatus_OPERATION_IN_PROGRESS :: ServiceStatus
+pattern ServiceStatus_OPERATION_IN_PROGRESS = ServiceStatus' "OPERATION_IN_PROGRESS"
+
+pattern ServiceStatus_PAUSED :: ServiceStatus
+pattern ServiceStatus_PAUSED = ServiceStatus' "PAUSED"
+
+pattern ServiceStatus_RUNNING :: ServiceStatus
+pattern ServiceStatus_RUNNING = ServiceStatus' "RUNNING"
+
+{-# COMPLETE
+  ServiceStatus_CREATE_FAILED,
+  ServiceStatus_DELETED,
+  ServiceStatus_DELETE_FAILED,
+  ServiceStatus_OPERATION_IN_PROGRESS,
+  ServiceStatus_PAUSED,
+  ServiceStatus_RUNNING,
+  ServiceStatus'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/ServiceSummary.hs b/gen/Amazonka/AppRunner/Types/ServiceSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/ServiceSummary.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.ServiceSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.ServiceSummary where
+
+import Amazonka.AppRunner.Types.ServiceStatus
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides summary information for an App Runner service.
+--
+-- This type contains limited information about a service. It doesn\'t
+-- include configuration details. It\'s returned by the
+-- <https://docs.aws.amazon.com/apprunner/latest/api/API_ListServices.html ListServices>
+-- action. Complete service information is returned by the
+-- <https://docs.aws.amazon.com/apprunner/latest/api/API_CreateService.html CreateService>,
+-- <https://docs.aws.amazon.com/apprunner/latest/api/API_DescribeService.html DescribeService>,
+-- and
+-- <https://docs.aws.amazon.com/apprunner/latest/api/API_DeleteService.html DeleteService>
+-- actions using the
+-- <https://docs.aws.amazon.com/apprunner/latest/api/API_Service.html Service>
+-- type.
+--
+-- /See:/ 'newServiceSummary' smart constructor.
+data ServiceSummary = ServiceSummary'
+  { -- | The time when the App Runner service was created. It\'s in the Unix time
+    -- stamp format.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of this service.
+    serviceArn :: Prelude.Maybe Prelude.Text,
+    -- | An ID that App Runner generated for this service. It\'s unique within
+    -- the Amazon Web Services Region.
+    serviceId :: Prelude.Maybe Prelude.Text,
+    -- | The customer-provided service name.
+    serviceName :: Prelude.Maybe Prelude.Text,
+    -- | A subdomain URL that App Runner generated for this service. You can use
+    -- this URL to access your service web application.
+    serviceUrl :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the App Runner service. These particular values
+    -- mean the following.
+    --
+    -- -   @CREATE_FAILED@ – The service failed to create. Read the failure
+    --     events and logs, change any parameters that need to be fixed, and
+    --     retry the call to create the service.
+    --
+    --     The failed service isn\'t usable, and still counts towards your
+    --     service quota. When you\'re done analyzing the failure, delete the
+    --     service.
+    --
+    -- -   @DELETE_FAILED@ – The service failed to delete and can\'t be
+    --     successfully recovered. Retry the service deletion call to ensure
+    --     that all related resources are removed.
+    status :: Prelude.Maybe ServiceStatus,
+    -- | The time when the App Runner service was last updated. It\'s in theUnix
+    -- time stamp format.
+    updatedAt :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'serviceSummary_createdAt' - The time when the App Runner service was created. It\'s in the Unix time
+-- stamp format.
+--
+-- 'serviceArn', 'serviceSummary_serviceArn' - The Amazon Resource Name (ARN) of this service.
+--
+-- 'serviceId', 'serviceSummary_serviceId' - An ID that App Runner generated for this service. It\'s unique within
+-- the Amazon Web Services Region.
+--
+-- 'serviceName', 'serviceSummary_serviceName' - The customer-provided service name.
+--
+-- 'serviceUrl', 'serviceSummary_serviceUrl' - A subdomain URL that App Runner generated for this service. You can use
+-- this URL to access your service web application.
+--
+-- 'status', 'serviceSummary_status' - The current state of the App Runner service. These particular values
+-- mean the following.
+--
+-- -   @CREATE_FAILED@ – The service failed to create. Read the failure
+--     events and logs, change any parameters that need to be fixed, and
+--     retry the call to create the service.
+--
+--     The failed service isn\'t usable, and still counts towards your
+--     service quota. When you\'re done analyzing the failure, delete the
+--     service.
+--
+-- -   @DELETE_FAILED@ – The service failed to delete and can\'t be
+--     successfully recovered. Retry the service deletion call to ensure
+--     that all related resources are removed.
+--
+-- 'updatedAt', 'serviceSummary_updatedAt' - The time when the App Runner service was last updated. It\'s in theUnix
+-- time stamp format.
+newServiceSummary ::
+  ServiceSummary
+newServiceSummary =
+  ServiceSummary'
+    { createdAt = Prelude.Nothing,
+      serviceArn = Prelude.Nothing,
+      serviceId = Prelude.Nothing,
+      serviceName = Prelude.Nothing,
+      serviceUrl = Prelude.Nothing,
+      status = Prelude.Nothing,
+      updatedAt = Prelude.Nothing
+    }
+
+-- | The time when the App Runner service was created. It\'s in the Unix time
+-- stamp format.
+serviceSummary_createdAt :: Lens.Lens' ServiceSummary (Prelude.Maybe Prelude.UTCTime)
+serviceSummary_createdAt = Lens.lens (\ServiceSummary' {createdAt} -> createdAt) (\s@ServiceSummary' {} a -> s {createdAt = a} :: ServiceSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of this service.
+serviceSummary_serviceArn :: Lens.Lens' ServiceSummary (Prelude.Maybe Prelude.Text)
+serviceSummary_serviceArn = Lens.lens (\ServiceSummary' {serviceArn} -> serviceArn) (\s@ServiceSummary' {} a -> s {serviceArn = a} :: ServiceSummary)
+
+-- | An ID that App Runner generated for this service. It\'s unique within
+-- the Amazon Web Services Region.
+serviceSummary_serviceId :: Lens.Lens' ServiceSummary (Prelude.Maybe Prelude.Text)
+serviceSummary_serviceId = Lens.lens (\ServiceSummary' {serviceId} -> serviceId) (\s@ServiceSummary' {} a -> s {serviceId = a} :: ServiceSummary)
+
+-- | The customer-provided service name.
+serviceSummary_serviceName :: Lens.Lens' ServiceSummary (Prelude.Maybe Prelude.Text)
+serviceSummary_serviceName = Lens.lens (\ServiceSummary' {serviceName} -> serviceName) (\s@ServiceSummary' {} a -> s {serviceName = a} :: ServiceSummary)
+
+-- | A subdomain URL that App Runner generated for this service. You can use
+-- this URL to access your service web application.
+serviceSummary_serviceUrl :: Lens.Lens' ServiceSummary (Prelude.Maybe Prelude.Text)
+serviceSummary_serviceUrl = Lens.lens (\ServiceSummary' {serviceUrl} -> serviceUrl) (\s@ServiceSummary' {} a -> s {serviceUrl = a} :: ServiceSummary)
+
+-- | The current state of the App Runner service. These particular values
+-- mean the following.
+--
+-- -   @CREATE_FAILED@ – The service failed to create. Read the failure
+--     events and logs, change any parameters that need to be fixed, and
+--     retry the call to create the service.
+--
+--     The failed service isn\'t usable, and still counts towards your
+--     service quota. When you\'re done analyzing the failure, delete the
+--     service.
+--
+-- -   @DELETE_FAILED@ – The service failed to delete and can\'t be
+--     successfully recovered. Retry the service deletion call to ensure
+--     that all related resources are removed.
+serviceSummary_status :: Lens.Lens' ServiceSummary (Prelude.Maybe ServiceStatus)
+serviceSummary_status = Lens.lens (\ServiceSummary' {status} -> status) (\s@ServiceSummary' {} a -> s {status = a} :: ServiceSummary)
+
+-- | The time when the App Runner service was last updated. It\'s in theUnix
+-- time stamp format.
+serviceSummary_updatedAt :: Lens.Lens' ServiceSummary (Prelude.Maybe Prelude.UTCTime)
+serviceSummary_updatedAt = Lens.lens (\ServiceSummary' {updatedAt} -> updatedAt) (\s@ServiceSummary' {} a -> s {updatedAt = a} :: ServiceSummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON ServiceSummary where
+  parseJSON =
+    Data.withObject
+      "ServiceSummary"
+      ( \x ->
+          ServiceSummary'
+            Prelude.<$> (x Data..:? "CreatedAt")
+            Prelude.<*> (x Data..:? "ServiceArn")
+            Prelude.<*> (x Data..:? "ServiceId")
+            Prelude.<*> (x Data..:? "ServiceName")
+            Prelude.<*> (x Data..:? "ServiceUrl")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "UpdatedAt")
+      )
+
+instance Prelude.Hashable ServiceSummary where
+  hashWithSalt _salt ServiceSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` serviceArn
+      `Prelude.hashWithSalt` serviceId
+      `Prelude.hashWithSalt` serviceName
+      `Prelude.hashWithSalt` serviceUrl
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData ServiceSummary where
+  rnf ServiceSummary' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf serviceArn
+      `Prelude.seq` Prelude.rnf serviceId
+      `Prelude.seq` Prelude.rnf serviceName
+      `Prelude.seq` Prelude.rnf serviceUrl
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/AppRunner/Types/SourceCodeVersion.hs b/gen/Amazonka/AppRunner/Types/SourceCodeVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/SourceCodeVersion.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.SourceCodeVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.SourceCodeVersion where
+
+import Amazonka.AppRunner.Types.SourceCodeVersionType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Identifies a version of code that App Runner refers to within a source
+-- code repository.
+--
+-- /See:/ 'newSourceCodeVersion' smart constructor.
+data SourceCodeVersion = SourceCodeVersion'
+  { -- | The type of version identifier.
+    --
+    -- For a git-based repository, branches represent versions.
+    type' :: SourceCodeVersionType,
+    -- | A source code version.
+    --
+    -- For a git-based repository, a branch name maps to a specific version.
+    -- App Runner uses the most recent commit to the branch.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SourceCodeVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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'', 'sourceCodeVersion_type' - The type of version identifier.
+--
+-- For a git-based repository, branches represent versions.
+--
+-- 'value', 'sourceCodeVersion_value' - A source code version.
+--
+-- For a git-based repository, a branch name maps to a specific version.
+-- App Runner uses the most recent commit to the branch.
+newSourceCodeVersion ::
+  -- | 'type''
+  SourceCodeVersionType ->
+  -- | 'value'
+  Prelude.Text ->
+  SourceCodeVersion
+newSourceCodeVersion pType_ pValue_ =
+  SourceCodeVersion' {type' = pType_, value = pValue_}
+
+-- | The type of version identifier.
+--
+-- For a git-based repository, branches represent versions.
+sourceCodeVersion_type :: Lens.Lens' SourceCodeVersion SourceCodeVersionType
+sourceCodeVersion_type = Lens.lens (\SourceCodeVersion' {type'} -> type') (\s@SourceCodeVersion' {} a -> s {type' = a} :: SourceCodeVersion)
+
+-- | A source code version.
+--
+-- For a git-based repository, a branch name maps to a specific version.
+-- App Runner uses the most recent commit to the branch.
+sourceCodeVersion_value :: Lens.Lens' SourceCodeVersion Prelude.Text
+sourceCodeVersion_value = Lens.lens (\SourceCodeVersion' {value} -> value) (\s@SourceCodeVersion' {} a -> s {value = a} :: SourceCodeVersion)
+
+instance Data.FromJSON SourceCodeVersion where
+  parseJSON =
+    Data.withObject
+      "SourceCodeVersion"
+      ( \x ->
+          SourceCodeVersion'
+            Prelude.<$> (x Data..: "Type")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable SourceCodeVersion where
+  hashWithSalt _salt SourceCodeVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData SourceCodeVersion where
+  rnf SourceCodeVersion' {..} =
+    Prelude.rnf type' `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON SourceCodeVersion where
+  toJSON SourceCodeVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Type" Data..= type'),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/SourceCodeVersionType.hs b/gen/Amazonka/AppRunner/Types/SourceCodeVersionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/SourceCodeVersionType.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.SourceCodeVersionType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.SourceCodeVersionType
+  ( SourceCodeVersionType
+      ( ..,
+        SourceCodeVersionType_BRANCH
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SourceCodeVersionType = SourceCodeVersionType'
+  { fromSourceCodeVersionType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SourceCodeVersionType_BRANCH :: SourceCodeVersionType
+pattern SourceCodeVersionType_BRANCH = SourceCodeVersionType' "BRANCH"
+
+{-# COMPLETE
+  SourceCodeVersionType_BRANCH,
+  SourceCodeVersionType'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/SourceConfiguration.hs b/gen/Amazonka/AppRunner/Types/SourceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/SourceConfiguration.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.SourceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.SourceConfiguration where
+
+import Amazonka.AppRunner.Types.AuthenticationConfiguration
+import Amazonka.AppRunner.Types.CodeRepository
+import Amazonka.AppRunner.Types.ImageRepository
+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
+
+-- | Describes the source deployed to an App Runner service. It can be a code
+-- or an image repository.
+--
+-- /See:/ 'newSourceConfiguration' smart constructor.
+data SourceConfiguration = SourceConfiguration'
+  { -- | Describes the resources that are needed to authenticate access to some
+    -- source repositories.
+    authenticationConfiguration :: Prelude.Maybe AuthenticationConfiguration,
+    -- | If @true@, continuous integration from the source repository is enabled
+    -- for the App Runner service. Each repository change (including any source
+    -- code commit or new image version) starts a deployment.
+    --
+    -- Default: App Runner sets to @false@ for a source image that uses an ECR
+    -- Public repository or an ECR repository that\'s in an Amazon Web Services
+    -- account other than the one that the service is in. App Runner sets to
+    -- @true@ in all other cases (which currently include a source code
+    -- repository or a source image using a same-account ECR repository).
+    autoDeploymentsEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The description of a source code repository.
+    --
+    -- You must provide either this member or @ImageRepository@ (but not both).
+    codeRepository :: Prelude.Maybe CodeRepository,
+    -- | The description of a source image repository.
+    --
+    -- You must provide either this member or @CodeRepository@ (but not both).
+    imageRepository :: Prelude.Maybe ImageRepository
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SourceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authenticationConfiguration', 'sourceConfiguration_authenticationConfiguration' - Describes the resources that are needed to authenticate access to some
+-- source repositories.
+--
+-- 'autoDeploymentsEnabled', 'sourceConfiguration_autoDeploymentsEnabled' - If @true@, continuous integration from the source repository is enabled
+-- for the App Runner service. Each repository change (including any source
+-- code commit or new image version) starts a deployment.
+--
+-- Default: App Runner sets to @false@ for a source image that uses an ECR
+-- Public repository or an ECR repository that\'s in an Amazon Web Services
+-- account other than the one that the service is in. App Runner sets to
+-- @true@ in all other cases (which currently include a source code
+-- repository or a source image using a same-account ECR repository).
+--
+-- 'codeRepository', 'sourceConfiguration_codeRepository' - The description of a source code repository.
+--
+-- You must provide either this member or @ImageRepository@ (but not both).
+--
+-- 'imageRepository', 'sourceConfiguration_imageRepository' - The description of a source image repository.
+--
+-- You must provide either this member or @CodeRepository@ (but not both).
+newSourceConfiguration ::
+  SourceConfiguration
+newSourceConfiguration =
+  SourceConfiguration'
+    { authenticationConfiguration =
+        Prelude.Nothing,
+      autoDeploymentsEnabled = Prelude.Nothing,
+      codeRepository = Prelude.Nothing,
+      imageRepository = Prelude.Nothing
+    }
+
+-- | Describes the resources that are needed to authenticate access to some
+-- source repositories.
+sourceConfiguration_authenticationConfiguration :: Lens.Lens' SourceConfiguration (Prelude.Maybe AuthenticationConfiguration)
+sourceConfiguration_authenticationConfiguration = Lens.lens (\SourceConfiguration' {authenticationConfiguration} -> authenticationConfiguration) (\s@SourceConfiguration' {} a -> s {authenticationConfiguration = a} :: SourceConfiguration)
+
+-- | If @true@, continuous integration from the source repository is enabled
+-- for the App Runner service. Each repository change (including any source
+-- code commit or new image version) starts a deployment.
+--
+-- Default: App Runner sets to @false@ for a source image that uses an ECR
+-- Public repository or an ECR repository that\'s in an Amazon Web Services
+-- account other than the one that the service is in. App Runner sets to
+-- @true@ in all other cases (which currently include a source code
+-- repository or a source image using a same-account ECR repository).
+sourceConfiguration_autoDeploymentsEnabled :: Lens.Lens' SourceConfiguration (Prelude.Maybe Prelude.Bool)
+sourceConfiguration_autoDeploymentsEnabled = Lens.lens (\SourceConfiguration' {autoDeploymentsEnabled} -> autoDeploymentsEnabled) (\s@SourceConfiguration' {} a -> s {autoDeploymentsEnabled = a} :: SourceConfiguration)
+
+-- | The description of a source code repository.
+--
+-- You must provide either this member or @ImageRepository@ (but not both).
+sourceConfiguration_codeRepository :: Lens.Lens' SourceConfiguration (Prelude.Maybe CodeRepository)
+sourceConfiguration_codeRepository = Lens.lens (\SourceConfiguration' {codeRepository} -> codeRepository) (\s@SourceConfiguration' {} a -> s {codeRepository = a} :: SourceConfiguration)
+
+-- | The description of a source image repository.
+--
+-- You must provide either this member or @CodeRepository@ (but not both).
+sourceConfiguration_imageRepository :: Lens.Lens' SourceConfiguration (Prelude.Maybe ImageRepository)
+sourceConfiguration_imageRepository = Lens.lens (\SourceConfiguration' {imageRepository} -> imageRepository) (\s@SourceConfiguration' {} a -> s {imageRepository = a} :: SourceConfiguration)
+
+instance Data.FromJSON SourceConfiguration where
+  parseJSON =
+    Data.withObject
+      "SourceConfiguration"
+      ( \x ->
+          SourceConfiguration'
+            Prelude.<$> (x Data..:? "AuthenticationConfiguration")
+            Prelude.<*> (x Data..:? "AutoDeploymentsEnabled")
+            Prelude.<*> (x Data..:? "CodeRepository")
+            Prelude.<*> (x Data..:? "ImageRepository")
+      )
+
+instance Prelude.Hashable SourceConfiguration where
+  hashWithSalt _salt SourceConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` authenticationConfiguration
+      `Prelude.hashWithSalt` autoDeploymentsEnabled
+      `Prelude.hashWithSalt` codeRepository
+      `Prelude.hashWithSalt` imageRepository
+
+instance Prelude.NFData SourceConfiguration where
+  rnf SourceConfiguration' {..} =
+    Prelude.rnf authenticationConfiguration
+      `Prelude.seq` Prelude.rnf autoDeploymentsEnabled
+      `Prelude.seq` Prelude.rnf codeRepository
+      `Prelude.seq` Prelude.rnf imageRepository
+
+instance Data.ToJSON SourceConfiguration where
+  toJSON SourceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AuthenticationConfiguration" Data..=)
+              Prelude.<$> authenticationConfiguration,
+            ("AutoDeploymentsEnabled" Data..=)
+              Prelude.<$> autoDeploymentsEnabled,
+            ("CodeRepository" Data..=)
+              Prelude.<$> codeRepository,
+            ("ImageRepository" Data..=)
+              Prelude.<$> imageRepository
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/Tag.hs b/gen/Amazonka/AppRunner/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/Tag.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.Tag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.Tag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a tag that is applied to an App Runner resource. A tag is a
+-- metadata item consisting of a key-value pair.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | The key of the tag.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The value of the tag.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tag_key' - The key of the tag.
+--
+-- 'value', 'tag_value' - The value of the tag.
+newTag ::
+  Tag
+newTag =
+  Tag'
+    { key = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The key of the tag.
+tag_key :: Lens.Lens' Tag (Prelude.Maybe Prelude.Text)
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+-- | The value of the tag.
+tag_value :: Lens.Lens' Tag (Prelude.Maybe Prelude.Text)
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag)
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \x ->
+          Tag'
+            Prelude.<$> (x Data..:? "Key")
+            Prelude.<*> (x Data..:? "Value")
+      )
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Key" Data..=) Prelude.<$> key,
+            ("Value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/TraceConfiguration.hs b/gen/Amazonka/AppRunner/Types/TraceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/TraceConfiguration.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.TraceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.TraceConfiguration where
+
+import Amazonka.AppRunner.Types.TracingVendor
+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
+
+-- | Describes the configuration of the tracing feature within an App Runner
+-- observability configuration.
+--
+-- /See:/ 'newTraceConfiguration' smart constructor.
+data TraceConfiguration = TraceConfiguration'
+  { -- | The implementation provider chosen for tracing App Runner services.
+    vendor :: TracingVendor
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TraceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vendor', 'traceConfiguration_vendor' - The implementation provider chosen for tracing App Runner services.
+newTraceConfiguration ::
+  -- | 'vendor'
+  TracingVendor ->
+  TraceConfiguration
+newTraceConfiguration pVendor_ =
+  TraceConfiguration' {vendor = pVendor_}
+
+-- | The implementation provider chosen for tracing App Runner services.
+traceConfiguration_vendor :: Lens.Lens' TraceConfiguration TracingVendor
+traceConfiguration_vendor = Lens.lens (\TraceConfiguration' {vendor} -> vendor) (\s@TraceConfiguration' {} a -> s {vendor = a} :: TraceConfiguration)
+
+instance Data.FromJSON TraceConfiguration where
+  parseJSON =
+    Data.withObject
+      "TraceConfiguration"
+      ( \x ->
+          TraceConfiguration' Prelude.<$> (x Data..: "Vendor")
+      )
+
+instance Prelude.Hashable TraceConfiguration where
+  hashWithSalt _salt TraceConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` vendor
+
+instance Prelude.NFData TraceConfiguration where
+  rnf TraceConfiguration' {..} = Prelude.rnf vendor
+
+instance Data.ToJSON TraceConfiguration where
+  toJSON TraceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Vendor" Data..= vendor)]
+      )
diff --git a/gen/Amazonka/AppRunner/Types/TracingVendor.hs b/gen/Amazonka/AppRunner/Types/TracingVendor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/TracingVendor.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.TracingVendor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.TracingVendor
+  ( TracingVendor
+      ( ..,
+        TracingVendor_AWSXRAY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TracingVendor = TracingVendor'
+  { fromTracingVendor ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TracingVendor_AWSXRAY :: TracingVendor
+pattern TracingVendor_AWSXRAY = TracingVendor' "AWSXRAY"
+
+{-# COMPLETE
+  TracingVendor_AWSXRAY,
+  TracingVendor'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/VpcConnector.hs b/gen/Amazonka/AppRunner/Types/VpcConnector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/VpcConnector.hs
@@ -0,0 +1,201 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.VpcConnector
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.VpcConnector where
+
+import Amazonka.AppRunner.Types.VpcConnectorStatus
+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
+
+-- | Describes an App Runner VPC connector resource. A VPC connector
+-- describes the Amazon Virtual Private Cloud (Amazon VPC) that an App
+-- Runner service is associated with, and the subnets and security group
+-- that are used.
+--
+-- Multiple revisions of a connector might have the same @Name@ and
+-- different @Revision@ values.
+--
+-- At this time, App Runner supports only one revision per name.
+--
+-- /See:/ 'newVpcConnector' smart constructor.
+data VpcConnector = VpcConnector'
+  { -- | The time when the VPC connector was created. It\'s in Unix time stamp
+    -- format.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The time when the VPC connector was deleted. It\'s in Unix time stamp
+    -- format.
+    deletedAt :: Prelude.Maybe Data.POSIX,
+    -- | A list of IDs of security groups that App Runner uses for access to
+    -- Amazon Web Services resources under the specified subnets. If not
+    -- specified, App Runner uses the default security group of the Amazon VPC.
+    -- The default security group allows all outbound traffic.
+    securityGroups :: Prelude.Maybe [Prelude.Text],
+    -- | The current state of the VPC connector. If the status of a connector
+    -- revision is @INACTIVE@, it was deleted and can\'t be used. Inactive
+    -- connector revisions are permanently removed some time after they are
+    -- deleted.
+    status :: Prelude.Maybe VpcConnectorStatus,
+    -- | A list of IDs of subnets that App Runner uses for your service. All IDs
+    -- are of subnets of a single Amazon VPC.
+    subnets :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) of this VPC connector.
+    vpcConnectorArn :: Prelude.Maybe Prelude.Text,
+    -- | The customer-provided VPC connector name.
+    vpcConnectorName :: Prelude.Maybe Prelude.Text,
+    -- | The revision of this VPC connector. It\'s unique among all the active
+    -- connectors (@\"Status\": \"ACTIVE\"@) that share the same @Name@.
+    --
+    -- At this time, App Runner supports only one revision per name.
+    vpcConnectorRevision :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcConnector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'vpcConnector_createdAt' - The time when the VPC connector was created. It\'s in Unix time stamp
+-- format.
+--
+-- 'deletedAt', 'vpcConnector_deletedAt' - The time when the VPC connector was deleted. It\'s in Unix time stamp
+-- format.
+--
+-- 'securityGroups', 'vpcConnector_securityGroups' - A list of IDs of security groups that App Runner uses for access to
+-- Amazon Web Services resources under the specified subnets. If not
+-- specified, App Runner uses the default security group of the Amazon VPC.
+-- The default security group allows all outbound traffic.
+--
+-- 'status', 'vpcConnector_status' - The current state of the VPC connector. If the status of a connector
+-- revision is @INACTIVE@, it was deleted and can\'t be used. Inactive
+-- connector revisions are permanently removed some time after they are
+-- deleted.
+--
+-- 'subnets', 'vpcConnector_subnets' - A list of IDs of subnets that App Runner uses for your service. All IDs
+-- are of subnets of a single Amazon VPC.
+--
+-- 'vpcConnectorArn', 'vpcConnector_vpcConnectorArn' - The Amazon Resource Name (ARN) of this VPC connector.
+--
+-- 'vpcConnectorName', 'vpcConnector_vpcConnectorName' - The customer-provided VPC connector name.
+--
+-- 'vpcConnectorRevision', 'vpcConnector_vpcConnectorRevision' - The revision of this VPC connector. It\'s unique among all the active
+-- connectors (@\"Status\": \"ACTIVE\"@) that share the same @Name@.
+--
+-- At this time, App Runner supports only one revision per name.
+newVpcConnector ::
+  VpcConnector
+newVpcConnector =
+  VpcConnector'
+    { createdAt = Prelude.Nothing,
+      deletedAt = Prelude.Nothing,
+      securityGroups = Prelude.Nothing,
+      status = Prelude.Nothing,
+      subnets = Prelude.Nothing,
+      vpcConnectorArn = Prelude.Nothing,
+      vpcConnectorName = Prelude.Nothing,
+      vpcConnectorRevision = Prelude.Nothing
+    }
+
+-- | The time when the VPC connector was created. It\'s in Unix time stamp
+-- format.
+vpcConnector_createdAt :: Lens.Lens' VpcConnector (Prelude.Maybe Prelude.UTCTime)
+vpcConnector_createdAt = Lens.lens (\VpcConnector' {createdAt} -> createdAt) (\s@VpcConnector' {} a -> s {createdAt = a} :: VpcConnector) Prelude.. Lens.mapping Data._Time
+
+-- | The time when the VPC connector was deleted. It\'s in Unix time stamp
+-- format.
+vpcConnector_deletedAt :: Lens.Lens' VpcConnector (Prelude.Maybe Prelude.UTCTime)
+vpcConnector_deletedAt = Lens.lens (\VpcConnector' {deletedAt} -> deletedAt) (\s@VpcConnector' {} a -> s {deletedAt = a} :: VpcConnector) Prelude.. Lens.mapping Data._Time
+
+-- | A list of IDs of security groups that App Runner uses for access to
+-- Amazon Web Services resources under the specified subnets. If not
+-- specified, App Runner uses the default security group of the Amazon VPC.
+-- The default security group allows all outbound traffic.
+vpcConnector_securityGroups :: Lens.Lens' VpcConnector (Prelude.Maybe [Prelude.Text])
+vpcConnector_securityGroups = Lens.lens (\VpcConnector' {securityGroups} -> securityGroups) (\s@VpcConnector' {} a -> s {securityGroups = a} :: VpcConnector) Prelude.. Lens.mapping Lens.coerced
+
+-- | The current state of the VPC connector. If the status of a connector
+-- revision is @INACTIVE@, it was deleted and can\'t be used. Inactive
+-- connector revisions are permanently removed some time after they are
+-- deleted.
+vpcConnector_status :: Lens.Lens' VpcConnector (Prelude.Maybe VpcConnectorStatus)
+vpcConnector_status = Lens.lens (\VpcConnector' {status} -> status) (\s@VpcConnector' {} a -> s {status = a} :: VpcConnector)
+
+-- | A list of IDs of subnets that App Runner uses for your service. All IDs
+-- are of subnets of a single Amazon VPC.
+vpcConnector_subnets :: Lens.Lens' VpcConnector (Prelude.Maybe [Prelude.Text])
+vpcConnector_subnets = Lens.lens (\VpcConnector' {subnets} -> subnets) (\s@VpcConnector' {} a -> s {subnets = a} :: VpcConnector) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of this VPC connector.
+vpcConnector_vpcConnectorArn :: Lens.Lens' VpcConnector (Prelude.Maybe Prelude.Text)
+vpcConnector_vpcConnectorArn = Lens.lens (\VpcConnector' {vpcConnectorArn} -> vpcConnectorArn) (\s@VpcConnector' {} a -> s {vpcConnectorArn = a} :: VpcConnector)
+
+-- | The customer-provided VPC connector name.
+vpcConnector_vpcConnectorName :: Lens.Lens' VpcConnector (Prelude.Maybe Prelude.Text)
+vpcConnector_vpcConnectorName = Lens.lens (\VpcConnector' {vpcConnectorName} -> vpcConnectorName) (\s@VpcConnector' {} a -> s {vpcConnectorName = a} :: VpcConnector)
+
+-- | The revision of this VPC connector. It\'s unique among all the active
+-- connectors (@\"Status\": \"ACTIVE\"@) that share the same @Name@.
+--
+-- At this time, App Runner supports only one revision per name.
+vpcConnector_vpcConnectorRevision :: Lens.Lens' VpcConnector (Prelude.Maybe Prelude.Int)
+vpcConnector_vpcConnectorRevision = Lens.lens (\VpcConnector' {vpcConnectorRevision} -> vpcConnectorRevision) (\s@VpcConnector' {} a -> s {vpcConnectorRevision = a} :: VpcConnector)
+
+instance Data.FromJSON VpcConnector where
+  parseJSON =
+    Data.withObject
+      "VpcConnector"
+      ( \x ->
+          VpcConnector'
+            Prelude.<$> (x Data..:? "CreatedAt")
+            Prelude.<*> (x Data..:? "DeletedAt")
+            Prelude.<*> (x Data..:? "SecurityGroups" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Subnets" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "VpcConnectorArn")
+            Prelude.<*> (x Data..:? "VpcConnectorName")
+            Prelude.<*> (x Data..:? "VpcConnectorRevision")
+      )
+
+instance Prelude.Hashable VpcConnector where
+  hashWithSalt _salt VpcConnector' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` deletedAt
+      `Prelude.hashWithSalt` securityGroups
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` subnets
+      `Prelude.hashWithSalt` vpcConnectorArn
+      `Prelude.hashWithSalt` vpcConnectorName
+      `Prelude.hashWithSalt` vpcConnectorRevision
+
+instance Prelude.NFData VpcConnector where
+  rnf VpcConnector' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf deletedAt
+      `Prelude.seq` Prelude.rnf securityGroups
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf subnets
+      `Prelude.seq` Prelude.rnf vpcConnectorArn
+      `Prelude.seq` Prelude.rnf vpcConnectorName
+      `Prelude.seq` Prelude.rnf vpcConnectorRevision
diff --git a/gen/Amazonka/AppRunner/Types/VpcConnectorStatus.hs b/gen/Amazonka/AppRunner/Types/VpcConnectorStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/VpcConnectorStatus.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.AppRunner.Types.VpcConnectorStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.VpcConnectorStatus
+  ( VpcConnectorStatus
+      ( ..,
+        VpcConnectorStatus_ACTIVE,
+        VpcConnectorStatus_INACTIVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype VpcConnectorStatus = VpcConnectorStatus'
+  { fromVpcConnectorStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VpcConnectorStatus_ACTIVE :: VpcConnectorStatus
+pattern VpcConnectorStatus_ACTIVE = VpcConnectorStatus' "ACTIVE"
+
+pattern VpcConnectorStatus_INACTIVE :: VpcConnectorStatus
+pattern VpcConnectorStatus_INACTIVE = VpcConnectorStatus' "INACTIVE"
+
+{-# COMPLETE
+  VpcConnectorStatus_ACTIVE,
+  VpcConnectorStatus_INACTIVE,
+  VpcConnectorStatus'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/VpcDNSTarget.hs b/gen/Amazonka/AppRunner/Types/VpcDNSTarget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/VpcDNSTarget.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.AppRunner.Types.VpcDNSTarget
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.VpcDNSTarget 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
+
+-- | DNS Target record for a custom domain of this Amazon VPC.
+--
+-- /See:/ 'newVpcDNSTarget' smart constructor.
+data VpcDNSTarget = VpcDNSTarget'
+  { -- | The domain name of your target DNS that is associated with the Amazon
+    -- VPC.
+    domainName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon VPC that is associated with the custom domain name
+    -- of the target DNS.
+    vpcId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the VPC Ingress Connection that is
+    -- associated with your service.
+    vpcIngressConnectionArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcDNSTarget' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'vpcDNSTarget_domainName' - The domain name of your target DNS that is associated with the Amazon
+-- VPC.
+--
+-- 'vpcId', 'vpcDNSTarget_vpcId' - The ID of the Amazon VPC that is associated with the custom domain name
+-- of the target DNS.
+--
+-- 'vpcIngressConnectionArn', 'vpcDNSTarget_vpcIngressConnectionArn' - The Amazon Resource Name (ARN) of the VPC Ingress Connection that is
+-- associated with your service.
+newVpcDNSTarget ::
+  VpcDNSTarget
+newVpcDNSTarget =
+  VpcDNSTarget'
+    { domainName = Prelude.Nothing,
+      vpcId = Prelude.Nothing,
+      vpcIngressConnectionArn = Prelude.Nothing
+    }
+
+-- | The domain name of your target DNS that is associated with the Amazon
+-- VPC.
+vpcDNSTarget_domainName :: Lens.Lens' VpcDNSTarget (Prelude.Maybe Prelude.Text)
+vpcDNSTarget_domainName = Lens.lens (\VpcDNSTarget' {domainName} -> domainName) (\s@VpcDNSTarget' {} a -> s {domainName = a} :: VpcDNSTarget)
+
+-- | The ID of the Amazon VPC that is associated with the custom domain name
+-- of the target DNS.
+vpcDNSTarget_vpcId :: Lens.Lens' VpcDNSTarget (Prelude.Maybe Prelude.Text)
+vpcDNSTarget_vpcId = Lens.lens (\VpcDNSTarget' {vpcId} -> vpcId) (\s@VpcDNSTarget' {} a -> s {vpcId = a} :: VpcDNSTarget)
+
+-- | The Amazon Resource Name (ARN) of the VPC Ingress Connection that is
+-- associated with your service.
+vpcDNSTarget_vpcIngressConnectionArn :: Lens.Lens' VpcDNSTarget (Prelude.Maybe Prelude.Text)
+vpcDNSTarget_vpcIngressConnectionArn = Lens.lens (\VpcDNSTarget' {vpcIngressConnectionArn} -> vpcIngressConnectionArn) (\s@VpcDNSTarget' {} a -> s {vpcIngressConnectionArn = a} :: VpcDNSTarget)
+
+instance Data.FromJSON VpcDNSTarget where
+  parseJSON =
+    Data.withObject
+      "VpcDNSTarget"
+      ( \x ->
+          VpcDNSTarget'
+            Prelude.<$> (x Data..:? "DomainName")
+            Prelude.<*> (x Data..:? "VpcId")
+            Prelude.<*> (x Data..:? "VpcIngressConnectionArn")
+      )
+
+instance Prelude.Hashable VpcDNSTarget where
+  hashWithSalt _salt VpcDNSTarget' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` vpcId
+      `Prelude.hashWithSalt` vpcIngressConnectionArn
+
+instance Prelude.NFData VpcDNSTarget where
+  rnf VpcDNSTarget' {..} =
+    Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf vpcIngressConnectionArn
diff --git a/gen/Amazonka/AppRunner/Types/VpcIngressConnection.hs b/gen/Amazonka/AppRunner/Types/VpcIngressConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/VpcIngressConnection.hs
@@ -0,0 +1,224 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.VpcIngressConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.VpcIngressConnection where
+
+import Amazonka.AppRunner.Types.IngressVpcConfiguration
+import Amazonka.AppRunner.Types.VpcIngressConnectionStatus
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The App Runner resource that specifies an App Runner endpoint for
+-- incoming traffic. It establishes a connection between a VPC interface
+-- endpoint and a App Runner service, to make your App Runner service
+-- accessible from only within an Amazon VPC.
+--
+-- /See:/ 'newVpcIngressConnection' smart constructor.
+data VpcIngressConnection = VpcIngressConnection'
+  { -- | The Account Id you use to create the VPC Ingress Connection resource.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The time when the VPC Ingress Connection was created. It\'s in the Unix
+    -- time stamp format.
+    --
+    -- -   Type: Timestamp
+    --
+    -- -   Required: Yes
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The time when the App Runner service was deleted. It\'s in the Unix time
+    -- stamp format.
+    --
+    -- -   Type: Timestamp
+    --
+    -- -   Required: No
+    deletedAt :: Prelude.Maybe Data.POSIX,
+    -- | The domain name associated with the VPC Ingress Connection resource.
+    domainName :: Prelude.Maybe Prelude.Text,
+    -- | Specifications for the customer’s VPC and related PrivateLink VPC
+    -- endpoint that are used to associate with the VPC Ingress Connection
+    -- resource.
+    ingressVpcConfiguration :: Prelude.Maybe IngressVpcConfiguration,
+    -- | The Amazon Resource Name (ARN) of the service associated with the VPC
+    -- Ingress Connection.
+    serviceArn :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the VPC Ingress Connection. The VPC Ingress
+    -- Connection displays one of the following statuses: @AVAILABLE@,
+    -- @PENDING_CREATION@, @PENDING_UPDATE@,
+    -- @PENDING_DELETION@,@FAILED_CREATION@, @FAILED_UPDATE@,
+    -- @FAILED_DELETION@, and @DELETED@..
+    status :: Prelude.Maybe VpcIngressConnectionStatus,
+    -- | The Amazon Resource Name (ARN) of the VPC Ingress Connection.
+    vpcIngressConnectionArn :: Prelude.Maybe Prelude.Text,
+    -- | The customer-provided VPC Ingress Connection name.
+    vpcIngressConnectionName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcIngressConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'vpcIngressConnection_accountId' - The Account Id you use to create the VPC Ingress Connection resource.
+--
+-- 'createdAt', 'vpcIngressConnection_createdAt' - The time when the VPC Ingress Connection was created. It\'s in the Unix
+-- time stamp format.
+--
+-- -   Type: Timestamp
+--
+-- -   Required: Yes
+--
+-- 'deletedAt', 'vpcIngressConnection_deletedAt' - The time when the App Runner service was deleted. It\'s in the Unix time
+-- stamp format.
+--
+-- -   Type: Timestamp
+--
+-- -   Required: No
+--
+-- 'domainName', 'vpcIngressConnection_domainName' - The domain name associated with the VPC Ingress Connection resource.
+--
+-- 'ingressVpcConfiguration', 'vpcIngressConnection_ingressVpcConfiguration' - Specifications for the customer’s VPC and related PrivateLink VPC
+-- endpoint that are used to associate with the VPC Ingress Connection
+-- resource.
+--
+-- 'serviceArn', 'vpcIngressConnection_serviceArn' - The Amazon Resource Name (ARN) of the service associated with the VPC
+-- Ingress Connection.
+--
+-- 'status', 'vpcIngressConnection_status' - The current status of the VPC Ingress Connection. The VPC Ingress
+-- Connection displays one of the following statuses: @AVAILABLE@,
+-- @PENDING_CREATION@, @PENDING_UPDATE@,
+-- @PENDING_DELETION@,@FAILED_CREATION@, @FAILED_UPDATE@,
+-- @FAILED_DELETION@, and @DELETED@..
+--
+-- 'vpcIngressConnectionArn', 'vpcIngressConnection_vpcIngressConnectionArn' - The Amazon Resource Name (ARN) of the VPC Ingress Connection.
+--
+-- 'vpcIngressConnectionName', 'vpcIngressConnection_vpcIngressConnectionName' - The customer-provided VPC Ingress Connection name.
+newVpcIngressConnection ::
+  VpcIngressConnection
+newVpcIngressConnection =
+  VpcIngressConnection'
+    { accountId = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      deletedAt = Prelude.Nothing,
+      domainName = Prelude.Nothing,
+      ingressVpcConfiguration = Prelude.Nothing,
+      serviceArn = Prelude.Nothing,
+      status = Prelude.Nothing,
+      vpcIngressConnectionArn = Prelude.Nothing,
+      vpcIngressConnectionName = Prelude.Nothing
+    }
+
+-- | The Account Id you use to create the VPC Ingress Connection resource.
+vpcIngressConnection_accountId :: Lens.Lens' VpcIngressConnection (Prelude.Maybe Prelude.Text)
+vpcIngressConnection_accountId = Lens.lens (\VpcIngressConnection' {accountId} -> accountId) (\s@VpcIngressConnection' {} a -> s {accountId = a} :: VpcIngressConnection)
+
+-- | The time when the VPC Ingress Connection was created. It\'s in the Unix
+-- time stamp format.
+--
+-- -   Type: Timestamp
+--
+-- -   Required: Yes
+vpcIngressConnection_createdAt :: Lens.Lens' VpcIngressConnection (Prelude.Maybe Prelude.UTCTime)
+vpcIngressConnection_createdAt = Lens.lens (\VpcIngressConnection' {createdAt} -> createdAt) (\s@VpcIngressConnection' {} a -> s {createdAt = a} :: VpcIngressConnection) Prelude.. Lens.mapping Data._Time
+
+-- | The time when the App Runner service was deleted. It\'s in the Unix time
+-- stamp format.
+--
+-- -   Type: Timestamp
+--
+-- -   Required: No
+vpcIngressConnection_deletedAt :: Lens.Lens' VpcIngressConnection (Prelude.Maybe Prelude.UTCTime)
+vpcIngressConnection_deletedAt = Lens.lens (\VpcIngressConnection' {deletedAt} -> deletedAt) (\s@VpcIngressConnection' {} a -> s {deletedAt = a} :: VpcIngressConnection) Prelude.. Lens.mapping Data._Time
+
+-- | The domain name associated with the VPC Ingress Connection resource.
+vpcIngressConnection_domainName :: Lens.Lens' VpcIngressConnection (Prelude.Maybe Prelude.Text)
+vpcIngressConnection_domainName = Lens.lens (\VpcIngressConnection' {domainName} -> domainName) (\s@VpcIngressConnection' {} a -> s {domainName = a} :: VpcIngressConnection)
+
+-- | Specifications for the customer’s VPC and related PrivateLink VPC
+-- endpoint that are used to associate with the VPC Ingress Connection
+-- resource.
+vpcIngressConnection_ingressVpcConfiguration :: Lens.Lens' VpcIngressConnection (Prelude.Maybe IngressVpcConfiguration)
+vpcIngressConnection_ingressVpcConfiguration = Lens.lens (\VpcIngressConnection' {ingressVpcConfiguration} -> ingressVpcConfiguration) (\s@VpcIngressConnection' {} a -> s {ingressVpcConfiguration = a} :: VpcIngressConnection)
+
+-- | The Amazon Resource Name (ARN) of the service associated with the VPC
+-- Ingress Connection.
+vpcIngressConnection_serviceArn :: Lens.Lens' VpcIngressConnection (Prelude.Maybe Prelude.Text)
+vpcIngressConnection_serviceArn = Lens.lens (\VpcIngressConnection' {serviceArn} -> serviceArn) (\s@VpcIngressConnection' {} a -> s {serviceArn = a} :: VpcIngressConnection)
+
+-- | The current status of the VPC Ingress Connection. The VPC Ingress
+-- Connection displays one of the following statuses: @AVAILABLE@,
+-- @PENDING_CREATION@, @PENDING_UPDATE@,
+-- @PENDING_DELETION@,@FAILED_CREATION@, @FAILED_UPDATE@,
+-- @FAILED_DELETION@, and @DELETED@..
+vpcIngressConnection_status :: Lens.Lens' VpcIngressConnection (Prelude.Maybe VpcIngressConnectionStatus)
+vpcIngressConnection_status = Lens.lens (\VpcIngressConnection' {status} -> status) (\s@VpcIngressConnection' {} a -> s {status = a} :: VpcIngressConnection)
+
+-- | The Amazon Resource Name (ARN) of the VPC Ingress Connection.
+vpcIngressConnection_vpcIngressConnectionArn :: Lens.Lens' VpcIngressConnection (Prelude.Maybe Prelude.Text)
+vpcIngressConnection_vpcIngressConnectionArn = Lens.lens (\VpcIngressConnection' {vpcIngressConnectionArn} -> vpcIngressConnectionArn) (\s@VpcIngressConnection' {} a -> s {vpcIngressConnectionArn = a} :: VpcIngressConnection)
+
+-- | The customer-provided VPC Ingress Connection name.
+vpcIngressConnection_vpcIngressConnectionName :: Lens.Lens' VpcIngressConnection (Prelude.Maybe Prelude.Text)
+vpcIngressConnection_vpcIngressConnectionName = Lens.lens (\VpcIngressConnection' {vpcIngressConnectionName} -> vpcIngressConnectionName) (\s@VpcIngressConnection' {} a -> s {vpcIngressConnectionName = a} :: VpcIngressConnection)
+
+instance Data.FromJSON VpcIngressConnection where
+  parseJSON =
+    Data.withObject
+      "VpcIngressConnection"
+      ( \x ->
+          VpcIngressConnection'
+            Prelude.<$> (x Data..:? "AccountId")
+            Prelude.<*> (x Data..:? "CreatedAt")
+            Prelude.<*> (x Data..:? "DeletedAt")
+            Prelude.<*> (x Data..:? "DomainName")
+            Prelude.<*> (x Data..:? "IngressVpcConfiguration")
+            Prelude.<*> (x Data..:? "ServiceArn")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "VpcIngressConnectionArn")
+            Prelude.<*> (x Data..:? "VpcIngressConnectionName")
+      )
+
+instance Prelude.Hashable VpcIngressConnection where
+  hashWithSalt _salt VpcIngressConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` deletedAt
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` ingressVpcConfiguration
+      `Prelude.hashWithSalt` serviceArn
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` vpcIngressConnectionArn
+      `Prelude.hashWithSalt` vpcIngressConnectionName
+
+instance Prelude.NFData VpcIngressConnection where
+  rnf VpcIngressConnection' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf deletedAt
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf ingressVpcConfiguration
+      `Prelude.seq` Prelude.rnf serviceArn
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf vpcIngressConnectionArn
+      `Prelude.seq` Prelude.rnf vpcIngressConnectionName
diff --git a/gen/Amazonka/AppRunner/Types/VpcIngressConnectionStatus.hs b/gen/Amazonka/AppRunner/Types/VpcIngressConnectionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/VpcIngressConnectionStatus.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.VpcIngressConnectionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.VpcIngressConnectionStatus
+  ( VpcIngressConnectionStatus
+      ( ..,
+        VpcIngressConnectionStatus_AVAILABLE,
+        VpcIngressConnectionStatus_DELETED,
+        VpcIngressConnectionStatus_FAILED_CREATION,
+        VpcIngressConnectionStatus_FAILED_DELETION,
+        VpcIngressConnectionStatus_FAILED_UPDATE,
+        VpcIngressConnectionStatus_PENDING_CREATION,
+        VpcIngressConnectionStatus_PENDING_DELETION,
+        VpcIngressConnectionStatus_PENDING_UPDATE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype VpcIngressConnectionStatus = VpcIngressConnectionStatus'
+  { fromVpcIngressConnectionStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VpcIngressConnectionStatus_AVAILABLE :: VpcIngressConnectionStatus
+pattern VpcIngressConnectionStatus_AVAILABLE = VpcIngressConnectionStatus' "AVAILABLE"
+
+pattern VpcIngressConnectionStatus_DELETED :: VpcIngressConnectionStatus
+pattern VpcIngressConnectionStatus_DELETED = VpcIngressConnectionStatus' "DELETED"
+
+pattern VpcIngressConnectionStatus_FAILED_CREATION :: VpcIngressConnectionStatus
+pattern VpcIngressConnectionStatus_FAILED_CREATION = VpcIngressConnectionStatus' "FAILED_CREATION"
+
+pattern VpcIngressConnectionStatus_FAILED_DELETION :: VpcIngressConnectionStatus
+pattern VpcIngressConnectionStatus_FAILED_DELETION = VpcIngressConnectionStatus' "FAILED_DELETION"
+
+pattern VpcIngressConnectionStatus_FAILED_UPDATE :: VpcIngressConnectionStatus
+pattern VpcIngressConnectionStatus_FAILED_UPDATE = VpcIngressConnectionStatus' "FAILED_UPDATE"
+
+pattern VpcIngressConnectionStatus_PENDING_CREATION :: VpcIngressConnectionStatus
+pattern VpcIngressConnectionStatus_PENDING_CREATION = VpcIngressConnectionStatus' "PENDING_CREATION"
+
+pattern VpcIngressConnectionStatus_PENDING_DELETION :: VpcIngressConnectionStatus
+pattern VpcIngressConnectionStatus_PENDING_DELETION = VpcIngressConnectionStatus' "PENDING_DELETION"
+
+pattern VpcIngressConnectionStatus_PENDING_UPDATE :: VpcIngressConnectionStatus
+pattern VpcIngressConnectionStatus_PENDING_UPDATE = VpcIngressConnectionStatus' "PENDING_UPDATE"
+
+{-# COMPLETE
+  VpcIngressConnectionStatus_AVAILABLE,
+  VpcIngressConnectionStatus_DELETED,
+  VpcIngressConnectionStatus_FAILED_CREATION,
+  VpcIngressConnectionStatus_FAILED_DELETION,
+  VpcIngressConnectionStatus_FAILED_UPDATE,
+  VpcIngressConnectionStatus_PENDING_CREATION,
+  VpcIngressConnectionStatus_PENDING_DELETION,
+  VpcIngressConnectionStatus_PENDING_UPDATE,
+  VpcIngressConnectionStatus'
+  #-}
diff --git a/gen/Amazonka/AppRunner/Types/VpcIngressConnectionSummary.hs b/gen/Amazonka/AppRunner/Types/VpcIngressConnectionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/Types/VpcIngressConnectionSummary.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.Types.VpcIngressConnectionSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppRunner.Types.VpcIngressConnectionSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides summary information about an VPC Ingress Connection, which
+-- includes its VPC Ingress Connection ARN and its associated Service ARN.
+--
+-- /See:/ 'newVpcIngressConnectionSummary' smart constructor.
+data VpcIngressConnectionSummary = VpcIngressConnectionSummary'
+  { -- | The Amazon Resource Name (ARN) of the service associated with the VPC
+    -- Ingress Connection.
+    serviceArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the VPC Ingress Connection.
+    vpcIngressConnectionArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcIngressConnectionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serviceArn', 'vpcIngressConnectionSummary_serviceArn' - The Amazon Resource Name (ARN) of the service associated with the VPC
+-- Ingress Connection.
+--
+-- 'vpcIngressConnectionArn', 'vpcIngressConnectionSummary_vpcIngressConnectionArn' - The Amazon Resource Name (ARN) of the VPC Ingress Connection.
+newVpcIngressConnectionSummary ::
+  VpcIngressConnectionSummary
+newVpcIngressConnectionSummary =
+  VpcIngressConnectionSummary'
+    { serviceArn =
+        Prelude.Nothing,
+      vpcIngressConnectionArn = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the service associated with the VPC
+-- Ingress Connection.
+vpcIngressConnectionSummary_serviceArn :: Lens.Lens' VpcIngressConnectionSummary (Prelude.Maybe Prelude.Text)
+vpcIngressConnectionSummary_serviceArn = Lens.lens (\VpcIngressConnectionSummary' {serviceArn} -> serviceArn) (\s@VpcIngressConnectionSummary' {} a -> s {serviceArn = a} :: VpcIngressConnectionSummary)
+
+-- | The Amazon Resource Name (ARN) of the VPC Ingress Connection.
+vpcIngressConnectionSummary_vpcIngressConnectionArn :: Lens.Lens' VpcIngressConnectionSummary (Prelude.Maybe Prelude.Text)
+vpcIngressConnectionSummary_vpcIngressConnectionArn = Lens.lens (\VpcIngressConnectionSummary' {vpcIngressConnectionArn} -> vpcIngressConnectionArn) (\s@VpcIngressConnectionSummary' {} a -> s {vpcIngressConnectionArn = a} :: VpcIngressConnectionSummary)
+
+instance Data.FromJSON VpcIngressConnectionSummary where
+  parseJSON =
+    Data.withObject
+      "VpcIngressConnectionSummary"
+      ( \x ->
+          VpcIngressConnectionSummary'
+            Prelude.<$> (x Data..:? "ServiceArn")
+            Prelude.<*> (x Data..:? "VpcIngressConnectionArn")
+      )
+
+instance Prelude.Hashable VpcIngressConnectionSummary where
+  hashWithSalt _salt VpcIngressConnectionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` serviceArn
+      `Prelude.hashWithSalt` vpcIngressConnectionArn
+
+instance Prelude.NFData VpcIngressConnectionSummary where
+  rnf VpcIngressConnectionSummary' {..} =
+    Prelude.rnf serviceArn
+      `Prelude.seq` Prelude.rnf vpcIngressConnectionArn
diff --git a/gen/Amazonka/AppRunner/UntagResource.hs b/gen/Amazonka/AppRunner/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/UntagResource.hs
@@ -0,0 +1,178 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Remove tags from an App Runner resource.
+module Amazonka.AppRunner.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppRunner.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 Amazon Resource Name (ARN) of the resource that you want to remove
+    -- tags from.
+    --
+    -- It must be the ARN of an App Runner resource.
+    resourceArn :: Prelude.Text,
+    -- | A list of tag keys that you want to remove.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource that you want to remove
+-- tags from.
+--
+-- It must be the ARN of an App Runner resource.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - A list of tag keys that you want to remove.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource that you want to remove
+-- tags from.
+--
+-- It must be the ARN of an App Runner resource.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | A list of tag keys that you want to remove.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AppRunner.UntagResource" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UntagResource where
+  toJSON UntagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceArn" Data..= resourceArn),
+            Prelude.Just ("TagKeys" Data..= tagKeys)
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UntagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppRunner/UpdateService.hs b/gen/Amazonka/AppRunner/UpdateService.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/UpdateService.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.AppRunner.UpdateService
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update an App Runner service. You can update the source configuration
+-- and instance configuration of the service. You can also update the ARN
+-- of the auto scaling configuration resource that\'s associated with the
+-- service. However, you can\'t change the name or the encryption
+-- configuration of the service. These can be set only when you create the
+-- service.
+--
+-- To update the tags applied to your service, use the separate actions
+-- TagResource and UntagResource.
+--
+-- This is an asynchronous operation. On a successful call, you can use the
+-- returned @OperationId@ and the ListOperations call to track the
+-- operation\'s progress.
+module Amazonka.AppRunner.UpdateService
+  ( -- * Creating a Request
+    UpdateService (..),
+    newUpdateService,
+
+    -- * Request Lenses
+    updateService_autoScalingConfigurationArn,
+    updateService_healthCheckConfiguration,
+    updateService_instanceConfiguration,
+    updateService_networkConfiguration,
+    updateService_observabilityConfiguration,
+    updateService_sourceConfiguration,
+    updateService_serviceArn,
+
+    -- * Destructuring the Response
+    UpdateServiceResponse (..),
+    newUpdateServiceResponse,
+
+    -- * Response Lenses
+    updateServiceResponse_httpStatus,
+    updateServiceResponse_service,
+    updateServiceResponse_operationId,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newUpdateService' smart constructor.
+data UpdateService = UpdateService'
+  { -- | The Amazon Resource Name (ARN) of an App Runner automatic scaling
+    -- configuration resource that you want to associate with the App Runner
+    -- service.
+    autoScalingConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The settings for the health check that App Runner performs to monitor
+    -- the health of the App Runner service.
+    healthCheckConfiguration :: Prelude.Maybe HealthCheckConfiguration,
+    -- | The runtime configuration to apply to instances (scaling units) of your
+    -- service.
+    instanceConfiguration :: Prelude.Maybe InstanceConfiguration,
+    -- | Configuration settings related to network traffic of the web application
+    -- that the App Runner service runs.
+    networkConfiguration :: Prelude.Maybe NetworkConfiguration,
+    -- | The observability configuration of your service.
+    observabilityConfiguration :: Prelude.Maybe ServiceObservabilityConfiguration,
+    -- | The source configuration to apply to the App Runner service.
+    --
+    -- You can change the configuration of the code or image repository that
+    -- the service uses. However, you can\'t switch from code to image or the
+    -- other way around. This means that you must provide the same structure
+    -- member of @SourceConfiguration@ that you originally included when you
+    -- created the service. Specifically, you can include either
+    -- @CodeRepository@ or @ImageRepository@. To update the source
+    -- configuration, set the values to members of the structure that you
+    -- include.
+    sourceConfiguration :: Prelude.Maybe SourceConfiguration,
+    -- | The Amazon Resource Name (ARN) of the App Runner service that you want
+    -- to update.
+    serviceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateService' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoScalingConfigurationArn', 'updateService_autoScalingConfigurationArn' - The Amazon Resource Name (ARN) of an App Runner automatic scaling
+-- configuration resource that you want to associate with the App Runner
+-- service.
+--
+-- 'healthCheckConfiguration', 'updateService_healthCheckConfiguration' - The settings for the health check that App Runner performs to monitor
+-- the health of the App Runner service.
+--
+-- 'instanceConfiguration', 'updateService_instanceConfiguration' - The runtime configuration to apply to instances (scaling units) of your
+-- service.
+--
+-- 'networkConfiguration', 'updateService_networkConfiguration' - Configuration settings related to network traffic of the web application
+-- that the App Runner service runs.
+--
+-- 'observabilityConfiguration', 'updateService_observabilityConfiguration' - The observability configuration of your service.
+--
+-- 'sourceConfiguration', 'updateService_sourceConfiguration' - The source configuration to apply to the App Runner service.
+--
+-- You can change the configuration of the code or image repository that
+-- the service uses. However, you can\'t switch from code to image or the
+-- other way around. This means that you must provide the same structure
+-- member of @SourceConfiguration@ that you originally included when you
+-- created the service. Specifically, you can include either
+-- @CodeRepository@ or @ImageRepository@. To update the source
+-- configuration, set the values to members of the structure that you
+-- include.
+--
+-- 'serviceArn', 'updateService_serviceArn' - The Amazon Resource Name (ARN) of the App Runner service that you want
+-- to update.
+newUpdateService ::
+  -- | 'serviceArn'
+  Prelude.Text ->
+  UpdateService
+newUpdateService pServiceArn_ =
+  UpdateService'
+    { autoScalingConfigurationArn =
+        Prelude.Nothing,
+      healthCheckConfiguration = Prelude.Nothing,
+      instanceConfiguration = Prelude.Nothing,
+      networkConfiguration = Prelude.Nothing,
+      observabilityConfiguration = Prelude.Nothing,
+      sourceConfiguration = Prelude.Nothing,
+      serviceArn = pServiceArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of an App Runner automatic scaling
+-- configuration resource that you want to associate with the App Runner
+-- service.
+updateService_autoScalingConfigurationArn :: Lens.Lens' UpdateService (Prelude.Maybe Prelude.Text)
+updateService_autoScalingConfigurationArn = Lens.lens (\UpdateService' {autoScalingConfigurationArn} -> autoScalingConfigurationArn) (\s@UpdateService' {} a -> s {autoScalingConfigurationArn = a} :: UpdateService)
+
+-- | The settings for the health check that App Runner performs to monitor
+-- the health of the App Runner service.
+updateService_healthCheckConfiguration :: Lens.Lens' UpdateService (Prelude.Maybe HealthCheckConfiguration)
+updateService_healthCheckConfiguration = Lens.lens (\UpdateService' {healthCheckConfiguration} -> healthCheckConfiguration) (\s@UpdateService' {} a -> s {healthCheckConfiguration = a} :: UpdateService)
+
+-- | The runtime configuration to apply to instances (scaling units) of your
+-- service.
+updateService_instanceConfiguration :: Lens.Lens' UpdateService (Prelude.Maybe InstanceConfiguration)
+updateService_instanceConfiguration = Lens.lens (\UpdateService' {instanceConfiguration} -> instanceConfiguration) (\s@UpdateService' {} a -> s {instanceConfiguration = a} :: UpdateService)
+
+-- | Configuration settings related to network traffic of the web application
+-- that the App Runner service runs.
+updateService_networkConfiguration :: Lens.Lens' UpdateService (Prelude.Maybe NetworkConfiguration)
+updateService_networkConfiguration = Lens.lens (\UpdateService' {networkConfiguration} -> networkConfiguration) (\s@UpdateService' {} a -> s {networkConfiguration = a} :: UpdateService)
+
+-- | The observability configuration of your service.
+updateService_observabilityConfiguration :: Lens.Lens' UpdateService (Prelude.Maybe ServiceObservabilityConfiguration)
+updateService_observabilityConfiguration = Lens.lens (\UpdateService' {observabilityConfiguration} -> observabilityConfiguration) (\s@UpdateService' {} a -> s {observabilityConfiguration = a} :: UpdateService)
+
+-- | The source configuration to apply to the App Runner service.
+--
+-- You can change the configuration of the code or image repository that
+-- the service uses. However, you can\'t switch from code to image or the
+-- other way around. This means that you must provide the same structure
+-- member of @SourceConfiguration@ that you originally included when you
+-- created the service. Specifically, you can include either
+-- @CodeRepository@ or @ImageRepository@. To update the source
+-- configuration, set the values to members of the structure that you
+-- include.
+updateService_sourceConfiguration :: Lens.Lens' UpdateService (Prelude.Maybe SourceConfiguration)
+updateService_sourceConfiguration = Lens.lens (\UpdateService' {sourceConfiguration} -> sourceConfiguration) (\s@UpdateService' {} a -> s {sourceConfiguration = a} :: UpdateService)
+
+-- | The Amazon Resource Name (ARN) of the App Runner service that you want
+-- to update.
+updateService_serviceArn :: Lens.Lens' UpdateService Prelude.Text
+updateService_serviceArn = Lens.lens (\UpdateService' {serviceArn} -> serviceArn) (\s@UpdateService' {} a -> s {serviceArn = a} :: UpdateService)
+
+instance Core.AWSRequest UpdateService where
+  type
+    AWSResponse UpdateService =
+      UpdateServiceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateServiceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Service")
+            Prelude.<*> (x Data..:> "OperationId")
+      )
+
+instance Prelude.Hashable UpdateService where
+  hashWithSalt _salt UpdateService' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoScalingConfigurationArn
+      `Prelude.hashWithSalt` healthCheckConfiguration
+      `Prelude.hashWithSalt` instanceConfiguration
+      `Prelude.hashWithSalt` networkConfiguration
+      `Prelude.hashWithSalt` observabilityConfiguration
+      `Prelude.hashWithSalt` sourceConfiguration
+      `Prelude.hashWithSalt` serviceArn
+
+instance Prelude.NFData UpdateService where
+  rnf UpdateService' {..} =
+    Prelude.rnf autoScalingConfigurationArn
+      `Prelude.seq` Prelude.rnf healthCheckConfiguration
+      `Prelude.seq` Prelude.rnf instanceConfiguration
+      `Prelude.seq` Prelude.rnf networkConfiguration
+      `Prelude.seq` Prelude.rnf observabilityConfiguration
+      `Prelude.seq` Prelude.rnf sourceConfiguration
+      `Prelude.seq` Prelude.rnf serviceArn
+
+instance Data.ToHeaders UpdateService where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AppRunner.UpdateService" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateService where
+  toJSON UpdateService' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AutoScalingConfigurationArn" Data..=)
+              Prelude.<$> autoScalingConfigurationArn,
+            ("HealthCheckConfiguration" Data..=)
+              Prelude.<$> healthCheckConfiguration,
+            ("InstanceConfiguration" Data..=)
+              Prelude.<$> instanceConfiguration,
+            ("NetworkConfiguration" Data..=)
+              Prelude.<$> networkConfiguration,
+            ("ObservabilityConfiguration" Data..=)
+              Prelude.<$> observabilityConfiguration,
+            ("SourceConfiguration" Data..=)
+              Prelude.<$> sourceConfiguration,
+            Prelude.Just ("ServiceArn" Data..= serviceArn)
+          ]
+      )
+
+instance Data.ToPath UpdateService where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateService where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateServiceResponse' smart constructor.
+data UpdateServiceResponse = UpdateServiceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner service updated by this request. All
+    -- configuration values in the returned @Service@ structure reflect
+    -- configuration changes that are being applied by this request.
+    service :: Service,
+    -- | The unique ID of the asynchronous operation that this request started.
+    -- You can use it combined with the ListOperations call to track the
+    -- operation\'s progress.
+    operationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateServiceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateServiceResponse_httpStatus' - The response's http status code.
+--
+-- 'service', 'updateServiceResponse_service' - A description of the App Runner service updated by this request. All
+-- configuration values in the returned @Service@ structure reflect
+-- configuration changes that are being applied by this request.
+--
+-- 'operationId', 'updateServiceResponse_operationId' - The unique ID of the asynchronous operation that this request started.
+-- You can use it combined with the ListOperations call to track the
+-- operation\'s progress.
+newUpdateServiceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'service'
+  Service ->
+  -- | 'operationId'
+  Prelude.Text ->
+  UpdateServiceResponse
+newUpdateServiceResponse
+  pHttpStatus_
+  pService_
+  pOperationId_ =
+    UpdateServiceResponse'
+      { httpStatus = pHttpStatus_,
+        service = pService_,
+        operationId = pOperationId_
+      }
+
+-- | The response's http status code.
+updateServiceResponse_httpStatus :: Lens.Lens' UpdateServiceResponse Prelude.Int
+updateServiceResponse_httpStatus = Lens.lens (\UpdateServiceResponse' {httpStatus} -> httpStatus) (\s@UpdateServiceResponse' {} a -> s {httpStatus = a} :: UpdateServiceResponse)
+
+-- | A description of the App Runner service updated by this request. All
+-- configuration values in the returned @Service@ structure reflect
+-- configuration changes that are being applied by this request.
+updateServiceResponse_service :: Lens.Lens' UpdateServiceResponse Service
+updateServiceResponse_service = Lens.lens (\UpdateServiceResponse' {service} -> service) (\s@UpdateServiceResponse' {} a -> s {service = a} :: UpdateServiceResponse)
+
+-- | The unique ID of the asynchronous operation that this request started.
+-- You can use it combined with the ListOperations call to track the
+-- operation\'s progress.
+updateServiceResponse_operationId :: Lens.Lens' UpdateServiceResponse Prelude.Text
+updateServiceResponse_operationId = Lens.lens (\UpdateServiceResponse' {operationId} -> operationId) (\s@UpdateServiceResponse' {} a -> s {operationId = a} :: UpdateServiceResponse)
+
+instance Prelude.NFData UpdateServiceResponse where
+  rnf UpdateServiceResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf service
+      `Prelude.seq` Prelude.rnf operationId
diff --git a/gen/Amazonka/AppRunner/UpdateVpcIngressConnection.hs b/gen/Amazonka/AppRunner/UpdateVpcIngressConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/UpdateVpcIngressConnection.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppRunner.UpdateVpcIngressConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update an existing App Runner VPC Ingress Connection resource. The VPC
+-- Ingress Connection must be in one of the following states to be updated:
+--
+-- -   AVAILABLE
+--
+-- -   FAILED_CREATION
+--
+-- -   FAILED_UPDATE
+module Amazonka.AppRunner.UpdateVpcIngressConnection
+  ( -- * Creating a Request
+    UpdateVpcIngressConnection (..),
+    newUpdateVpcIngressConnection,
+
+    -- * Request Lenses
+    updateVpcIngressConnection_vpcIngressConnectionArn,
+    updateVpcIngressConnection_ingressVpcConfiguration,
+
+    -- * Destructuring the Response
+    UpdateVpcIngressConnectionResponse (..),
+    newUpdateVpcIngressConnectionResponse,
+
+    -- * Response Lenses
+    updateVpcIngressConnectionResponse_httpStatus,
+    updateVpcIngressConnectionResponse_vpcIngressConnection,
+  )
+where
+
+import Amazonka.AppRunner.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:/ 'newUpdateVpcIngressConnection' smart constructor.
+data UpdateVpcIngressConnection = UpdateVpcIngressConnection'
+  { -- | The Amazon Resource Name (Arn) for the App Runner VPC Ingress Connection
+    -- resource that you want to update.
+    vpcIngressConnectionArn :: Prelude.Text,
+    -- | Specifications for the customer’s Amazon VPC and the related Amazon Web
+    -- Services PrivateLink VPC endpoint that are used to update the VPC
+    -- Ingress Connection resource.
+    ingressVpcConfiguration :: IngressVpcConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateVpcIngressConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpcIngressConnectionArn', 'updateVpcIngressConnection_vpcIngressConnectionArn' - The Amazon Resource Name (Arn) for the App Runner VPC Ingress Connection
+-- resource that you want to update.
+--
+-- 'ingressVpcConfiguration', 'updateVpcIngressConnection_ingressVpcConfiguration' - Specifications for the customer’s Amazon VPC and the related Amazon Web
+-- Services PrivateLink VPC endpoint that are used to update the VPC
+-- Ingress Connection resource.
+newUpdateVpcIngressConnection ::
+  -- | 'vpcIngressConnectionArn'
+  Prelude.Text ->
+  -- | 'ingressVpcConfiguration'
+  IngressVpcConfiguration ->
+  UpdateVpcIngressConnection
+newUpdateVpcIngressConnection
+  pVpcIngressConnectionArn_
+  pIngressVpcConfiguration_ =
+    UpdateVpcIngressConnection'
+      { vpcIngressConnectionArn =
+          pVpcIngressConnectionArn_,
+        ingressVpcConfiguration =
+          pIngressVpcConfiguration_
+      }
+
+-- | The Amazon Resource Name (Arn) for the App Runner VPC Ingress Connection
+-- resource that you want to update.
+updateVpcIngressConnection_vpcIngressConnectionArn :: Lens.Lens' UpdateVpcIngressConnection Prelude.Text
+updateVpcIngressConnection_vpcIngressConnectionArn = Lens.lens (\UpdateVpcIngressConnection' {vpcIngressConnectionArn} -> vpcIngressConnectionArn) (\s@UpdateVpcIngressConnection' {} a -> s {vpcIngressConnectionArn = a} :: UpdateVpcIngressConnection)
+
+-- | Specifications for the customer’s Amazon VPC and the related Amazon Web
+-- Services PrivateLink VPC endpoint that are used to update the VPC
+-- Ingress Connection resource.
+updateVpcIngressConnection_ingressVpcConfiguration :: Lens.Lens' UpdateVpcIngressConnection IngressVpcConfiguration
+updateVpcIngressConnection_ingressVpcConfiguration = Lens.lens (\UpdateVpcIngressConnection' {ingressVpcConfiguration} -> ingressVpcConfiguration) (\s@UpdateVpcIngressConnection' {} a -> s {ingressVpcConfiguration = a} :: UpdateVpcIngressConnection)
+
+instance Core.AWSRequest UpdateVpcIngressConnection where
+  type
+    AWSResponse UpdateVpcIngressConnection =
+      UpdateVpcIngressConnectionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateVpcIngressConnectionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "VpcIngressConnection")
+      )
+
+instance Prelude.Hashable UpdateVpcIngressConnection where
+  hashWithSalt _salt UpdateVpcIngressConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` vpcIngressConnectionArn
+      `Prelude.hashWithSalt` ingressVpcConfiguration
+
+instance Prelude.NFData UpdateVpcIngressConnection where
+  rnf UpdateVpcIngressConnection' {..} =
+    Prelude.rnf vpcIngressConnectionArn
+      `Prelude.seq` Prelude.rnf ingressVpcConfiguration
+
+instance Data.ToHeaders UpdateVpcIngressConnection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AppRunner.UpdateVpcIngressConnection" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateVpcIngressConnection where
+  toJSON UpdateVpcIngressConnection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "VpcIngressConnectionArn"
+                  Data..= vpcIngressConnectionArn
+              ),
+            Prelude.Just
+              ( "IngressVpcConfiguration"
+                  Data..= ingressVpcConfiguration
+              )
+          ]
+      )
+
+instance Data.ToPath UpdateVpcIngressConnection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateVpcIngressConnection where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateVpcIngressConnectionResponse' smart constructor.
+data UpdateVpcIngressConnectionResponse = UpdateVpcIngressConnectionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A description of the App Runner VPC Ingress Connection resource that\'s
+    -- updated by this request.
+    vpcIngressConnection :: VpcIngressConnection
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateVpcIngressConnectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateVpcIngressConnectionResponse_httpStatus' - The response's http status code.
+--
+-- 'vpcIngressConnection', 'updateVpcIngressConnectionResponse_vpcIngressConnection' - A description of the App Runner VPC Ingress Connection resource that\'s
+-- updated by this request.
+newUpdateVpcIngressConnectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'vpcIngressConnection'
+  VpcIngressConnection ->
+  UpdateVpcIngressConnectionResponse
+newUpdateVpcIngressConnectionResponse
+  pHttpStatus_
+  pVpcIngressConnection_ =
+    UpdateVpcIngressConnectionResponse'
+      { httpStatus =
+          pHttpStatus_,
+        vpcIngressConnection =
+          pVpcIngressConnection_
+      }
+
+-- | The response's http status code.
+updateVpcIngressConnectionResponse_httpStatus :: Lens.Lens' UpdateVpcIngressConnectionResponse Prelude.Int
+updateVpcIngressConnectionResponse_httpStatus = Lens.lens (\UpdateVpcIngressConnectionResponse' {httpStatus} -> httpStatus) (\s@UpdateVpcIngressConnectionResponse' {} a -> s {httpStatus = a} :: UpdateVpcIngressConnectionResponse)
+
+-- | A description of the App Runner VPC Ingress Connection resource that\'s
+-- updated by this request.
+updateVpcIngressConnectionResponse_vpcIngressConnection :: Lens.Lens' UpdateVpcIngressConnectionResponse VpcIngressConnection
+updateVpcIngressConnectionResponse_vpcIngressConnection = Lens.lens (\UpdateVpcIngressConnectionResponse' {vpcIngressConnection} -> vpcIngressConnection) (\s@UpdateVpcIngressConnectionResponse' {} a -> s {vpcIngressConnection = a} :: UpdateVpcIngressConnectionResponse)
+
+instance
+  Prelude.NFData
+    UpdateVpcIngressConnectionResponse
+  where
+  rnf UpdateVpcIngressConnectionResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf vpcIngressConnection
diff --git a/gen/Amazonka/AppRunner/Waiters.hs b/gen/Amazonka/AppRunner/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppRunner/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.AppRunner.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.AppRunner.Waiters where
+
+import Amazonka.AppRunner.Lens
+import Amazonka.AppRunner.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.AppRunner
+import Test.Amazonka.AppRunner.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "AppRunner"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/AppRunner.hs b/test/Test/Amazonka/AppRunner.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/AppRunner.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.AppRunner
+-- Copyright   : (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.AppRunner
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/AppRunner/Internal.hs b/test/Test/Amazonka/AppRunner/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/AppRunner/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.AppRunner.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.AppRunner.Internal where
diff --git a/test/Test/Amazonka/Gen/AppRunner.hs b/test/Test/Amazonka/Gen/AppRunner.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/AppRunner.hs
@@ -0,0 +1,738 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.Amazonka.Gen.AppRunner
+-- Copyright   : (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.AppRunner where
+
+import Amazonka.AppRunner
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.AppRunner.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"
+--         [ requestAssociateCustomDomain $
+--             newAssociateCustomDomain
+--
+--         , requestCreateAutoScalingConfiguration $
+--             newCreateAutoScalingConfiguration
+--
+--         , requestCreateConnection $
+--             newCreateConnection
+--
+--         , requestCreateObservabilityConfiguration $
+--             newCreateObservabilityConfiguration
+--
+--         , requestCreateService $
+--             newCreateService
+--
+--         , requestCreateVpcConnector $
+--             newCreateVpcConnector
+--
+--         , requestCreateVpcIngressConnection $
+--             newCreateVpcIngressConnection
+--
+--         , requestDeleteAutoScalingConfiguration $
+--             newDeleteAutoScalingConfiguration
+--
+--         , requestDeleteConnection $
+--             newDeleteConnection
+--
+--         , requestDeleteObservabilityConfiguration $
+--             newDeleteObservabilityConfiguration
+--
+--         , requestDeleteService $
+--             newDeleteService
+--
+--         , requestDeleteVpcConnector $
+--             newDeleteVpcConnector
+--
+--         , requestDeleteVpcIngressConnection $
+--             newDeleteVpcIngressConnection
+--
+--         , requestDescribeAutoScalingConfiguration $
+--             newDescribeAutoScalingConfiguration
+--
+--         , requestDescribeCustomDomains $
+--             newDescribeCustomDomains
+--
+--         , requestDescribeObservabilityConfiguration $
+--             newDescribeObservabilityConfiguration
+--
+--         , requestDescribeService $
+--             newDescribeService
+--
+--         , requestDescribeVpcConnector $
+--             newDescribeVpcConnector
+--
+--         , requestDescribeVpcIngressConnection $
+--             newDescribeVpcIngressConnection
+--
+--         , requestDisassociateCustomDomain $
+--             newDisassociateCustomDomain
+--
+--         , requestListAutoScalingConfigurations $
+--             newListAutoScalingConfigurations
+--
+--         , requestListConnections $
+--             newListConnections
+--
+--         , requestListObservabilityConfigurations $
+--             newListObservabilityConfigurations
+--
+--         , requestListOperations $
+--             newListOperations
+--
+--         , requestListServices $
+--             newListServices
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListVpcConnectors $
+--             newListVpcConnectors
+--
+--         , requestListVpcIngressConnections $
+--             newListVpcIngressConnections
+--
+--         , requestPauseService $
+--             newPauseService
+--
+--         , requestResumeService $
+--             newResumeService
+--
+--         , requestStartDeployment $
+--             newStartDeployment
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateService $
+--             newUpdateService
+--
+--         , requestUpdateVpcIngressConnection $
+--             newUpdateVpcIngressConnection
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAssociateCustomDomain $
+--             newAssociateCustomDomainResponse
+--
+--         , responseCreateAutoScalingConfiguration $
+--             newCreateAutoScalingConfigurationResponse
+--
+--         , responseCreateConnection $
+--             newCreateConnectionResponse
+--
+--         , responseCreateObservabilityConfiguration $
+--             newCreateObservabilityConfigurationResponse
+--
+--         , responseCreateService $
+--             newCreateServiceResponse
+--
+--         , responseCreateVpcConnector $
+--             newCreateVpcConnectorResponse
+--
+--         , responseCreateVpcIngressConnection $
+--             newCreateVpcIngressConnectionResponse
+--
+--         , responseDeleteAutoScalingConfiguration $
+--             newDeleteAutoScalingConfigurationResponse
+--
+--         , responseDeleteConnection $
+--             newDeleteConnectionResponse
+--
+--         , responseDeleteObservabilityConfiguration $
+--             newDeleteObservabilityConfigurationResponse
+--
+--         , responseDeleteService $
+--             newDeleteServiceResponse
+--
+--         , responseDeleteVpcConnector $
+--             newDeleteVpcConnectorResponse
+--
+--         , responseDeleteVpcIngressConnection $
+--             newDeleteVpcIngressConnectionResponse
+--
+--         , responseDescribeAutoScalingConfiguration $
+--             newDescribeAutoScalingConfigurationResponse
+--
+--         , responseDescribeCustomDomains $
+--             newDescribeCustomDomainsResponse
+--
+--         , responseDescribeObservabilityConfiguration $
+--             newDescribeObservabilityConfigurationResponse
+--
+--         , responseDescribeService $
+--             newDescribeServiceResponse
+--
+--         , responseDescribeVpcConnector $
+--             newDescribeVpcConnectorResponse
+--
+--         , responseDescribeVpcIngressConnection $
+--             newDescribeVpcIngressConnectionResponse
+--
+--         , responseDisassociateCustomDomain $
+--             newDisassociateCustomDomainResponse
+--
+--         , responseListAutoScalingConfigurations $
+--             newListAutoScalingConfigurationsResponse
+--
+--         , responseListConnections $
+--             newListConnectionsResponse
+--
+--         , responseListObservabilityConfigurations $
+--             newListObservabilityConfigurationsResponse
+--
+--         , responseListOperations $
+--             newListOperationsResponse
+--
+--         , responseListServices $
+--             newListServicesResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListVpcConnectors $
+--             newListVpcConnectorsResponse
+--
+--         , responseListVpcIngressConnections $
+--             newListVpcIngressConnectionsResponse
+--
+--         , responsePauseService $
+--             newPauseServiceResponse
+--
+--         , responseResumeService $
+--             newResumeServiceResponse
+--
+--         , responseStartDeployment $
+--             newStartDeploymentResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateService $
+--             newUpdateServiceResponse
+--
+--         , responseUpdateVpcIngressConnection $
+--             newUpdateVpcIngressConnectionResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAssociateCustomDomain :: AssociateCustomDomain -> TestTree
+requestAssociateCustomDomain =
+  req
+    "AssociateCustomDomain"
+    "fixture/AssociateCustomDomain.yaml"
+
+requestCreateAutoScalingConfiguration :: CreateAutoScalingConfiguration -> TestTree
+requestCreateAutoScalingConfiguration =
+  req
+    "CreateAutoScalingConfiguration"
+    "fixture/CreateAutoScalingConfiguration.yaml"
+
+requestCreateConnection :: CreateConnection -> TestTree
+requestCreateConnection =
+  req
+    "CreateConnection"
+    "fixture/CreateConnection.yaml"
+
+requestCreateObservabilityConfiguration :: CreateObservabilityConfiguration -> TestTree
+requestCreateObservabilityConfiguration =
+  req
+    "CreateObservabilityConfiguration"
+    "fixture/CreateObservabilityConfiguration.yaml"
+
+requestCreateService :: CreateService -> TestTree
+requestCreateService =
+  req
+    "CreateService"
+    "fixture/CreateService.yaml"
+
+requestCreateVpcConnector :: CreateVpcConnector -> TestTree
+requestCreateVpcConnector =
+  req
+    "CreateVpcConnector"
+    "fixture/CreateVpcConnector.yaml"
+
+requestCreateVpcIngressConnection :: CreateVpcIngressConnection -> TestTree
+requestCreateVpcIngressConnection =
+  req
+    "CreateVpcIngressConnection"
+    "fixture/CreateVpcIngressConnection.yaml"
+
+requestDeleteAutoScalingConfiguration :: DeleteAutoScalingConfiguration -> TestTree
+requestDeleteAutoScalingConfiguration =
+  req
+    "DeleteAutoScalingConfiguration"
+    "fixture/DeleteAutoScalingConfiguration.yaml"
+
+requestDeleteConnection :: DeleteConnection -> TestTree
+requestDeleteConnection =
+  req
+    "DeleteConnection"
+    "fixture/DeleteConnection.yaml"
+
+requestDeleteObservabilityConfiguration :: DeleteObservabilityConfiguration -> TestTree
+requestDeleteObservabilityConfiguration =
+  req
+    "DeleteObservabilityConfiguration"
+    "fixture/DeleteObservabilityConfiguration.yaml"
+
+requestDeleteService :: DeleteService -> TestTree
+requestDeleteService =
+  req
+    "DeleteService"
+    "fixture/DeleteService.yaml"
+
+requestDeleteVpcConnector :: DeleteVpcConnector -> TestTree
+requestDeleteVpcConnector =
+  req
+    "DeleteVpcConnector"
+    "fixture/DeleteVpcConnector.yaml"
+
+requestDeleteVpcIngressConnection :: DeleteVpcIngressConnection -> TestTree
+requestDeleteVpcIngressConnection =
+  req
+    "DeleteVpcIngressConnection"
+    "fixture/DeleteVpcIngressConnection.yaml"
+
+requestDescribeAutoScalingConfiguration :: DescribeAutoScalingConfiguration -> TestTree
+requestDescribeAutoScalingConfiguration =
+  req
+    "DescribeAutoScalingConfiguration"
+    "fixture/DescribeAutoScalingConfiguration.yaml"
+
+requestDescribeCustomDomains :: DescribeCustomDomains -> TestTree
+requestDescribeCustomDomains =
+  req
+    "DescribeCustomDomains"
+    "fixture/DescribeCustomDomains.yaml"
+
+requestDescribeObservabilityConfiguration :: DescribeObservabilityConfiguration -> TestTree
+requestDescribeObservabilityConfiguration =
+  req
+    "DescribeObservabilityConfiguration"
+    "fixture/DescribeObservabilityConfiguration.yaml"
+
+requestDescribeService :: DescribeService -> TestTree
+requestDescribeService =
+  req
+    "DescribeService"
+    "fixture/DescribeService.yaml"
+
+requestDescribeVpcConnector :: DescribeVpcConnector -> TestTree
+requestDescribeVpcConnector =
+  req
+    "DescribeVpcConnector"
+    "fixture/DescribeVpcConnector.yaml"
+
+requestDescribeVpcIngressConnection :: DescribeVpcIngressConnection -> TestTree
+requestDescribeVpcIngressConnection =
+  req
+    "DescribeVpcIngressConnection"
+    "fixture/DescribeVpcIngressConnection.yaml"
+
+requestDisassociateCustomDomain :: DisassociateCustomDomain -> TestTree
+requestDisassociateCustomDomain =
+  req
+    "DisassociateCustomDomain"
+    "fixture/DisassociateCustomDomain.yaml"
+
+requestListAutoScalingConfigurations :: ListAutoScalingConfigurations -> TestTree
+requestListAutoScalingConfigurations =
+  req
+    "ListAutoScalingConfigurations"
+    "fixture/ListAutoScalingConfigurations.yaml"
+
+requestListConnections :: ListConnections -> TestTree
+requestListConnections =
+  req
+    "ListConnections"
+    "fixture/ListConnections.yaml"
+
+requestListObservabilityConfigurations :: ListObservabilityConfigurations -> TestTree
+requestListObservabilityConfigurations =
+  req
+    "ListObservabilityConfigurations"
+    "fixture/ListObservabilityConfigurations.yaml"
+
+requestListOperations :: ListOperations -> TestTree
+requestListOperations =
+  req
+    "ListOperations"
+    "fixture/ListOperations.yaml"
+
+requestListServices :: ListServices -> TestTree
+requestListServices =
+  req
+    "ListServices"
+    "fixture/ListServices.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListVpcConnectors :: ListVpcConnectors -> TestTree
+requestListVpcConnectors =
+  req
+    "ListVpcConnectors"
+    "fixture/ListVpcConnectors.yaml"
+
+requestListVpcIngressConnections :: ListVpcIngressConnections -> TestTree
+requestListVpcIngressConnections =
+  req
+    "ListVpcIngressConnections"
+    "fixture/ListVpcIngressConnections.yaml"
+
+requestPauseService :: PauseService -> TestTree
+requestPauseService =
+  req
+    "PauseService"
+    "fixture/PauseService.yaml"
+
+requestResumeService :: ResumeService -> TestTree
+requestResumeService =
+  req
+    "ResumeService"
+    "fixture/ResumeService.yaml"
+
+requestStartDeployment :: StartDeployment -> TestTree
+requestStartDeployment =
+  req
+    "StartDeployment"
+    "fixture/StartDeployment.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateService :: UpdateService -> TestTree
+requestUpdateService =
+  req
+    "UpdateService"
+    "fixture/UpdateService.yaml"
+
+requestUpdateVpcIngressConnection :: UpdateVpcIngressConnection -> TestTree
+requestUpdateVpcIngressConnection =
+  req
+    "UpdateVpcIngressConnection"
+    "fixture/UpdateVpcIngressConnection.yaml"
+
+-- Responses
+
+responseAssociateCustomDomain :: AssociateCustomDomainResponse -> TestTree
+responseAssociateCustomDomain =
+  res
+    "AssociateCustomDomainResponse"
+    "fixture/AssociateCustomDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateCustomDomain)
+
+responseCreateAutoScalingConfiguration :: CreateAutoScalingConfigurationResponse -> TestTree
+responseCreateAutoScalingConfiguration =
+  res
+    "CreateAutoScalingConfigurationResponse"
+    "fixture/CreateAutoScalingConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAutoScalingConfiguration)
+
+responseCreateConnection :: CreateConnectionResponse -> TestTree
+responseCreateConnection =
+  res
+    "CreateConnectionResponse"
+    "fixture/CreateConnectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateConnection)
+
+responseCreateObservabilityConfiguration :: CreateObservabilityConfigurationResponse -> TestTree
+responseCreateObservabilityConfiguration =
+  res
+    "CreateObservabilityConfigurationResponse"
+    "fixture/CreateObservabilityConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateObservabilityConfiguration)
+
+responseCreateService :: CreateServiceResponse -> TestTree
+responseCreateService =
+  res
+    "CreateServiceResponse"
+    "fixture/CreateServiceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateService)
+
+responseCreateVpcConnector :: CreateVpcConnectorResponse -> TestTree
+responseCreateVpcConnector =
+  res
+    "CreateVpcConnectorResponse"
+    "fixture/CreateVpcConnectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVpcConnector)
+
+responseCreateVpcIngressConnection :: CreateVpcIngressConnectionResponse -> TestTree
+responseCreateVpcIngressConnection =
+  res
+    "CreateVpcIngressConnectionResponse"
+    "fixture/CreateVpcIngressConnectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVpcIngressConnection)
+
+responseDeleteAutoScalingConfiguration :: DeleteAutoScalingConfigurationResponse -> TestTree
+responseDeleteAutoScalingConfiguration =
+  res
+    "DeleteAutoScalingConfigurationResponse"
+    "fixture/DeleteAutoScalingConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAutoScalingConfiguration)
+
+responseDeleteConnection :: DeleteConnectionResponse -> TestTree
+responseDeleteConnection =
+  res
+    "DeleteConnectionResponse"
+    "fixture/DeleteConnectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteConnection)
+
+responseDeleteObservabilityConfiguration :: DeleteObservabilityConfigurationResponse -> TestTree
+responseDeleteObservabilityConfiguration =
+  res
+    "DeleteObservabilityConfigurationResponse"
+    "fixture/DeleteObservabilityConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteObservabilityConfiguration)
+
+responseDeleteService :: DeleteServiceResponse -> TestTree
+responseDeleteService =
+  res
+    "DeleteServiceResponse"
+    "fixture/DeleteServiceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteService)
+
+responseDeleteVpcConnector :: DeleteVpcConnectorResponse -> TestTree
+responseDeleteVpcConnector =
+  res
+    "DeleteVpcConnectorResponse"
+    "fixture/DeleteVpcConnectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVpcConnector)
+
+responseDeleteVpcIngressConnection :: DeleteVpcIngressConnectionResponse -> TestTree
+responseDeleteVpcIngressConnection =
+  res
+    "DeleteVpcIngressConnectionResponse"
+    "fixture/DeleteVpcIngressConnectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVpcIngressConnection)
+
+responseDescribeAutoScalingConfiguration :: DescribeAutoScalingConfigurationResponse -> TestTree
+responseDescribeAutoScalingConfiguration =
+  res
+    "DescribeAutoScalingConfigurationResponse"
+    "fixture/DescribeAutoScalingConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAutoScalingConfiguration)
+
+responseDescribeCustomDomains :: DescribeCustomDomainsResponse -> TestTree
+responseDescribeCustomDomains =
+  res
+    "DescribeCustomDomainsResponse"
+    "fixture/DescribeCustomDomainsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeCustomDomains)
+
+responseDescribeObservabilityConfiguration :: DescribeObservabilityConfigurationResponse -> TestTree
+responseDescribeObservabilityConfiguration =
+  res
+    "DescribeObservabilityConfigurationResponse"
+    "fixture/DescribeObservabilityConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeObservabilityConfiguration)
+
+responseDescribeService :: DescribeServiceResponse -> TestTree
+responseDescribeService =
+  res
+    "DescribeServiceResponse"
+    "fixture/DescribeServiceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeService)
+
+responseDescribeVpcConnector :: DescribeVpcConnectorResponse -> TestTree
+responseDescribeVpcConnector =
+  res
+    "DescribeVpcConnectorResponse"
+    "fixture/DescribeVpcConnectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVpcConnector)
+
+responseDescribeVpcIngressConnection :: DescribeVpcIngressConnectionResponse -> TestTree
+responseDescribeVpcIngressConnection =
+  res
+    "DescribeVpcIngressConnectionResponse"
+    "fixture/DescribeVpcIngressConnectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVpcIngressConnection)
+
+responseDisassociateCustomDomain :: DisassociateCustomDomainResponse -> TestTree
+responseDisassociateCustomDomain =
+  res
+    "DisassociateCustomDomainResponse"
+    "fixture/DisassociateCustomDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateCustomDomain)
+
+responseListAutoScalingConfigurations :: ListAutoScalingConfigurationsResponse -> TestTree
+responseListAutoScalingConfigurations =
+  res
+    "ListAutoScalingConfigurationsResponse"
+    "fixture/ListAutoScalingConfigurationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAutoScalingConfigurations)
+
+responseListConnections :: ListConnectionsResponse -> TestTree
+responseListConnections =
+  res
+    "ListConnectionsResponse"
+    "fixture/ListConnectionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListConnections)
+
+responseListObservabilityConfigurations :: ListObservabilityConfigurationsResponse -> TestTree
+responseListObservabilityConfigurations =
+  res
+    "ListObservabilityConfigurationsResponse"
+    "fixture/ListObservabilityConfigurationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListObservabilityConfigurations)
+
+responseListOperations :: ListOperationsResponse -> TestTree
+responseListOperations =
+  res
+    "ListOperationsResponse"
+    "fixture/ListOperationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListOperations)
+
+responseListServices :: ListServicesResponse -> TestTree
+responseListServices =
+  res
+    "ListServicesResponse"
+    "fixture/ListServicesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListServices)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListVpcConnectors :: ListVpcConnectorsResponse -> TestTree
+responseListVpcConnectors =
+  res
+    "ListVpcConnectorsResponse"
+    "fixture/ListVpcConnectorsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListVpcConnectors)
+
+responseListVpcIngressConnections :: ListVpcIngressConnectionsResponse -> TestTree
+responseListVpcIngressConnections =
+  res
+    "ListVpcIngressConnectionsResponse"
+    "fixture/ListVpcIngressConnectionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListVpcIngressConnections)
+
+responsePauseService :: PauseServiceResponse -> TestTree
+responsePauseService =
+  res
+    "PauseServiceResponse"
+    "fixture/PauseServiceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PauseService)
+
+responseResumeService :: ResumeServiceResponse -> TestTree
+responseResumeService =
+  res
+    "ResumeServiceResponse"
+    "fixture/ResumeServiceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResumeService)
+
+responseStartDeployment :: StartDeploymentResponse -> TestTree
+responseStartDeployment =
+  res
+    "StartDeploymentResponse"
+    "fixture/StartDeploymentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartDeployment)
+
+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)
+
+responseUpdateService :: UpdateServiceResponse -> TestTree
+responseUpdateService =
+  res
+    "UpdateServiceResponse"
+    "fixture/UpdateServiceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateService)
+
+responseUpdateVpcIngressConnection :: UpdateVpcIngressConnectionResponse -> TestTree
+responseUpdateVpcIngressConnection =
+  res
+    "UpdateVpcIngressConnectionResponse"
+    "fixture/UpdateVpcIngressConnectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateVpcIngressConnection)
