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 EC2 Image Builder SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2019-12-02@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-imagebuilder)
+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.ImageBuilder](http://hackage.haskell.org/package/amazonka-imagebuilder/docs/Amazonka-ImageBuilder.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-imagebuilder` 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-imagebuilder.cabal b/amazonka-imagebuilder.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-imagebuilder.cabal
@@ -0,0 +1,192 @@
+cabal-version:      2.2
+name:               amazonka-imagebuilder
+version:            2.0
+synopsis:           Amazon EC2 Image Builder SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2019-12-02@ 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.ImageBuilder.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.ImageBuilder" 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-imagebuilder
+
+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.ImageBuilder
+    Amazonka.ImageBuilder.CancelImageCreation
+    Amazonka.ImageBuilder.CreateComponent
+    Amazonka.ImageBuilder.CreateContainerRecipe
+    Amazonka.ImageBuilder.CreateDistributionConfiguration
+    Amazonka.ImageBuilder.CreateImage
+    Amazonka.ImageBuilder.CreateImagePipeline
+    Amazonka.ImageBuilder.CreateImageRecipe
+    Amazonka.ImageBuilder.CreateInfrastructureConfiguration
+    Amazonka.ImageBuilder.DeleteComponent
+    Amazonka.ImageBuilder.DeleteContainerRecipe
+    Amazonka.ImageBuilder.DeleteDistributionConfiguration
+    Amazonka.ImageBuilder.DeleteImage
+    Amazonka.ImageBuilder.DeleteImagePipeline
+    Amazonka.ImageBuilder.DeleteImageRecipe
+    Amazonka.ImageBuilder.DeleteInfrastructureConfiguration
+    Amazonka.ImageBuilder.GetComponent
+    Amazonka.ImageBuilder.GetComponentPolicy
+    Amazonka.ImageBuilder.GetContainerRecipe
+    Amazonka.ImageBuilder.GetContainerRecipePolicy
+    Amazonka.ImageBuilder.GetDistributionConfiguration
+    Amazonka.ImageBuilder.GetImage
+    Amazonka.ImageBuilder.GetImagePipeline
+    Amazonka.ImageBuilder.GetImagePolicy
+    Amazonka.ImageBuilder.GetImageRecipe
+    Amazonka.ImageBuilder.GetImageRecipePolicy
+    Amazonka.ImageBuilder.GetInfrastructureConfiguration
+    Amazonka.ImageBuilder.ImportComponent
+    Amazonka.ImageBuilder.ImportVmImage
+    Amazonka.ImageBuilder.Lens
+    Amazonka.ImageBuilder.ListComponentBuildVersions
+    Amazonka.ImageBuilder.ListComponents
+    Amazonka.ImageBuilder.ListContainerRecipes
+    Amazonka.ImageBuilder.ListDistributionConfigurations
+    Amazonka.ImageBuilder.ListImageBuildVersions
+    Amazonka.ImageBuilder.ListImagePackages
+    Amazonka.ImageBuilder.ListImagePipelineImages
+    Amazonka.ImageBuilder.ListImagePipelines
+    Amazonka.ImageBuilder.ListImageRecipes
+    Amazonka.ImageBuilder.ListImages
+    Amazonka.ImageBuilder.ListInfrastructureConfigurations
+    Amazonka.ImageBuilder.ListTagsForResource
+    Amazonka.ImageBuilder.PutComponentPolicy
+    Amazonka.ImageBuilder.PutContainerRecipePolicy
+    Amazonka.ImageBuilder.PutImagePolicy
+    Amazonka.ImageBuilder.PutImageRecipePolicy
+    Amazonka.ImageBuilder.StartImagePipelineExecution
+    Amazonka.ImageBuilder.TagResource
+    Amazonka.ImageBuilder.Types
+    Amazonka.ImageBuilder.Types.AdditionalInstanceConfiguration
+    Amazonka.ImageBuilder.Types.Ami
+    Amazonka.ImageBuilder.Types.AmiDistributionConfiguration
+    Amazonka.ImageBuilder.Types.BuildType
+    Amazonka.ImageBuilder.Types.Component
+    Amazonka.ImageBuilder.Types.ComponentConfiguration
+    Amazonka.ImageBuilder.Types.ComponentFormat
+    Amazonka.ImageBuilder.Types.ComponentParameter
+    Amazonka.ImageBuilder.Types.ComponentParameterDetail
+    Amazonka.ImageBuilder.Types.ComponentState
+    Amazonka.ImageBuilder.Types.ComponentStatus
+    Amazonka.ImageBuilder.Types.ComponentSummary
+    Amazonka.ImageBuilder.Types.ComponentType
+    Amazonka.ImageBuilder.Types.ComponentVersion
+    Amazonka.ImageBuilder.Types.Container
+    Amazonka.ImageBuilder.Types.ContainerDistributionConfiguration
+    Amazonka.ImageBuilder.Types.ContainerRecipe
+    Amazonka.ImageBuilder.Types.ContainerRecipeSummary
+    Amazonka.ImageBuilder.Types.ContainerRepositoryService
+    Amazonka.ImageBuilder.Types.ContainerType
+    Amazonka.ImageBuilder.Types.DiskImageFormat
+    Amazonka.ImageBuilder.Types.Distribution
+    Amazonka.ImageBuilder.Types.DistributionConfiguration
+    Amazonka.ImageBuilder.Types.DistributionConfigurationSummary
+    Amazonka.ImageBuilder.Types.EbsInstanceBlockDeviceSpecification
+    Amazonka.ImageBuilder.Types.EbsVolumeType
+    Amazonka.ImageBuilder.Types.FastLaunchConfiguration
+    Amazonka.ImageBuilder.Types.FastLaunchLaunchTemplateSpecification
+    Amazonka.ImageBuilder.Types.FastLaunchSnapshotConfiguration
+    Amazonka.ImageBuilder.Types.Filter
+    Amazonka.ImageBuilder.Types.Image
+    Amazonka.ImageBuilder.Types.ImagePackage
+    Amazonka.ImageBuilder.Types.ImagePipeline
+    Amazonka.ImageBuilder.Types.ImageRecipe
+    Amazonka.ImageBuilder.Types.ImageRecipeSummary
+    Amazonka.ImageBuilder.Types.ImageState
+    Amazonka.ImageBuilder.Types.ImageStatus
+    Amazonka.ImageBuilder.Types.ImageSummary
+    Amazonka.ImageBuilder.Types.ImageTestsConfiguration
+    Amazonka.ImageBuilder.Types.ImageType
+    Amazonka.ImageBuilder.Types.ImageVersion
+    Amazonka.ImageBuilder.Types.InfrastructureConfiguration
+    Amazonka.ImageBuilder.Types.InfrastructureConfigurationSummary
+    Amazonka.ImageBuilder.Types.InstanceBlockDeviceMapping
+    Amazonka.ImageBuilder.Types.InstanceConfiguration
+    Amazonka.ImageBuilder.Types.InstanceMetadataOptions
+    Amazonka.ImageBuilder.Types.LaunchPermissionConfiguration
+    Amazonka.ImageBuilder.Types.LaunchTemplateConfiguration
+    Amazonka.ImageBuilder.Types.Logging
+    Amazonka.ImageBuilder.Types.OutputResources
+    Amazonka.ImageBuilder.Types.Ownership
+    Amazonka.ImageBuilder.Types.PipelineExecutionStartCondition
+    Amazonka.ImageBuilder.Types.PipelineStatus
+    Amazonka.ImageBuilder.Types.Platform
+    Amazonka.ImageBuilder.Types.S3ExportConfiguration
+    Amazonka.ImageBuilder.Types.S3Logs
+    Amazonka.ImageBuilder.Types.Schedule
+    Amazonka.ImageBuilder.Types.SystemsManagerAgent
+    Amazonka.ImageBuilder.Types.TargetContainerRepository
+    Amazonka.ImageBuilder.UntagResource
+    Amazonka.ImageBuilder.UpdateDistributionConfiguration
+    Amazonka.ImageBuilder.UpdateImagePipeline
+    Amazonka.ImageBuilder.UpdateInfrastructureConfiguration
+    Amazonka.ImageBuilder.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-imagebuilder-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.Gen.ImageBuilder
+    Test.Amazonka.ImageBuilder
+    Test.Amazonka.ImageBuilder.Internal
+
+  build-depends:
+    , amazonka-core          >=2.0 && <2.1
+    , amazonka-imagebuilder
+    , amazonka-test          >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CancelImageCreation.yaml b/fixture/CancelImageCreation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelImageCreation.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CancelImageCreationResponse.proto b/fixture/CancelImageCreationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelImageCreationResponse.proto
diff --git a/fixture/CreateComponent.yaml b/fixture/CreateComponent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateComponent.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateComponentResponse.proto b/fixture/CreateComponentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateComponentResponse.proto
diff --git a/fixture/CreateContainerRecipe.yaml b/fixture/CreateContainerRecipe.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateContainerRecipe.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateContainerRecipeResponse.proto b/fixture/CreateContainerRecipeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateContainerRecipeResponse.proto
diff --git a/fixture/CreateDistributionConfiguration.yaml b/fixture/CreateDistributionConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDistributionConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDistributionConfigurationResponse.proto b/fixture/CreateDistributionConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDistributionConfigurationResponse.proto
diff --git a/fixture/CreateImage.yaml b/fixture/CreateImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateImage.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateImagePipeline.yaml b/fixture/CreateImagePipeline.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateImagePipeline.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateImagePipelineResponse.proto b/fixture/CreateImagePipelineResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateImagePipelineResponse.proto
diff --git a/fixture/CreateImageRecipe.yaml b/fixture/CreateImageRecipe.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateImageRecipe.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateImageRecipeResponse.proto b/fixture/CreateImageRecipeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateImageRecipeResponse.proto
diff --git a/fixture/CreateImageResponse.proto b/fixture/CreateImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateImageResponse.proto
diff --git a/fixture/CreateInfrastructureConfiguration.yaml b/fixture/CreateInfrastructureConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateInfrastructureConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateInfrastructureConfigurationResponse.proto b/fixture/CreateInfrastructureConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateInfrastructureConfigurationResponse.proto
diff --git a/fixture/DeleteComponent.yaml b/fixture/DeleteComponent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteComponent.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteComponentResponse.proto b/fixture/DeleteComponentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteComponentResponse.proto
diff --git a/fixture/DeleteContainerRecipe.yaml b/fixture/DeleteContainerRecipe.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteContainerRecipe.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteContainerRecipeResponse.proto b/fixture/DeleteContainerRecipeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteContainerRecipeResponse.proto
diff --git a/fixture/DeleteDistributionConfiguration.yaml b/fixture/DeleteDistributionConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDistributionConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDistributionConfigurationResponse.proto b/fixture/DeleteDistributionConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDistributionConfigurationResponse.proto
diff --git a/fixture/DeleteImage.yaml b/fixture/DeleteImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteImage.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteImagePipeline.yaml b/fixture/DeleteImagePipeline.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteImagePipeline.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteImagePipelineResponse.proto b/fixture/DeleteImagePipelineResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteImagePipelineResponse.proto
diff --git a/fixture/DeleteImageRecipe.yaml b/fixture/DeleteImageRecipe.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteImageRecipe.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteImageRecipeResponse.proto b/fixture/DeleteImageRecipeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteImageRecipeResponse.proto
diff --git a/fixture/DeleteImageResponse.proto b/fixture/DeleteImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteImageResponse.proto
diff --git a/fixture/DeleteInfrastructureConfiguration.yaml b/fixture/DeleteInfrastructureConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteInfrastructureConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteInfrastructureConfigurationResponse.proto b/fixture/DeleteInfrastructureConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteInfrastructureConfigurationResponse.proto
diff --git a/fixture/GetComponent.yaml b/fixture/GetComponent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetComponent.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetComponentPolicy.yaml b/fixture/GetComponentPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetComponentPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetComponentPolicyResponse.proto b/fixture/GetComponentPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetComponentPolicyResponse.proto
diff --git a/fixture/GetComponentResponse.proto b/fixture/GetComponentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetComponentResponse.proto
diff --git a/fixture/GetContainerRecipe.yaml b/fixture/GetContainerRecipe.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetContainerRecipe.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetContainerRecipePolicy.yaml b/fixture/GetContainerRecipePolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetContainerRecipePolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetContainerRecipePolicyResponse.proto b/fixture/GetContainerRecipePolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetContainerRecipePolicyResponse.proto
diff --git a/fixture/GetContainerRecipeResponse.proto b/fixture/GetContainerRecipeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetContainerRecipeResponse.proto
diff --git a/fixture/GetDistributionConfiguration.yaml b/fixture/GetDistributionConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDistributionConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDistributionConfigurationResponse.proto b/fixture/GetDistributionConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDistributionConfigurationResponse.proto
diff --git a/fixture/GetImage.yaml b/fixture/GetImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetImage.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetImagePipeline.yaml b/fixture/GetImagePipeline.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetImagePipeline.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetImagePipelineResponse.proto b/fixture/GetImagePipelineResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetImagePipelineResponse.proto
diff --git a/fixture/GetImagePolicy.yaml b/fixture/GetImagePolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetImagePolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetImagePolicyResponse.proto b/fixture/GetImagePolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetImagePolicyResponse.proto
diff --git a/fixture/GetImageRecipe.yaml b/fixture/GetImageRecipe.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetImageRecipe.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetImageRecipePolicy.yaml b/fixture/GetImageRecipePolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetImageRecipePolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetImageRecipePolicyResponse.proto b/fixture/GetImageRecipePolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetImageRecipePolicyResponse.proto
diff --git a/fixture/GetImageRecipeResponse.proto b/fixture/GetImageRecipeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetImageRecipeResponse.proto
diff --git a/fixture/GetImageResponse.proto b/fixture/GetImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetImageResponse.proto
diff --git a/fixture/GetInfrastructureConfiguration.yaml b/fixture/GetInfrastructureConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetInfrastructureConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetInfrastructureConfigurationResponse.proto b/fixture/GetInfrastructureConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetInfrastructureConfigurationResponse.proto
diff --git a/fixture/ImportComponent.yaml b/fixture/ImportComponent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ImportComponent.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ImportComponentResponse.proto b/fixture/ImportComponentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ImportComponentResponse.proto
diff --git a/fixture/ImportVmImage.yaml b/fixture/ImportVmImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ImportVmImage.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ImportVmImageResponse.proto b/fixture/ImportVmImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ImportVmImageResponse.proto
diff --git a/fixture/ListComponentBuildVersions.yaml b/fixture/ListComponentBuildVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListComponentBuildVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListComponentBuildVersionsResponse.proto b/fixture/ListComponentBuildVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListComponentBuildVersionsResponse.proto
diff --git a/fixture/ListComponents.yaml b/fixture/ListComponents.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListComponents.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListComponentsResponse.proto b/fixture/ListComponentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListComponentsResponse.proto
diff --git a/fixture/ListContainerRecipes.yaml b/fixture/ListContainerRecipes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListContainerRecipes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListContainerRecipesResponse.proto b/fixture/ListContainerRecipesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListContainerRecipesResponse.proto
diff --git a/fixture/ListDistributionConfigurations.yaml b/fixture/ListDistributionConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDistributionConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListDistributionConfigurationsResponse.proto b/fixture/ListDistributionConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDistributionConfigurationsResponse.proto
diff --git a/fixture/ListImageBuildVersions.yaml b/fixture/ListImageBuildVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListImageBuildVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListImageBuildVersionsResponse.proto b/fixture/ListImageBuildVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListImageBuildVersionsResponse.proto
diff --git a/fixture/ListImagePackages.yaml b/fixture/ListImagePackages.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListImagePackages.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListImagePackagesResponse.proto b/fixture/ListImagePackagesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListImagePackagesResponse.proto
diff --git a/fixture/ListImagePipelineImages.yaml b/fixture/ListImagePipelineImages.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListImagePipelineImages.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListImagePipelineImagesResponse.proto b/fixture/ListImagePipelineImagesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListImagePipelineImagesResponse.proto
diff --git a/fixture/ListImagePipelines.yaml b/fixture/ListImagePipelines.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListImagePipelines.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListImagePipelinesResponse.proto b/fixture/ListImagePipelinesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListImagePipelinesResponse.proto
diff --git a/fixture/ListImageRecipes.yaml b/fixture/ListImageRecipes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListImageRecipes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListImageRecipesResponse.proto b/fixture/ListImageRecipesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListImageRecipesResponse.proto
diff --git a/fixture/ListImages.yaml b/fixture/ListImages.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListImages.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListImagesResponse.proto b/fixture/ListImagesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListImagesResponse.proto
diff --git a/fixture/ListInfrastructureConfigurations.yaml b/fixture/ListInfrastructureConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListInfrastructureConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListInfrastructureConfigurationsResponse.proto b/fixture/ListInfrastructureConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListInfrastructureConfigurationsResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  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/PutComponentPolicy.yaml b/fixture/PutComponentPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutComponentPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutComponentPolicyResponse.proto b/fixture/PutComponentPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutComponentPolicyResponse.proto
diff --git a/fixture/PutContainerRecipePolicy.yaml b/fixture/PutContainerRecipePolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutContainerRecipePolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutContainerRecipePolicyResponse.proto b/fixture/PutContainerRecipePolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutContainerRecipePolicyResponse.proto
diff --git a/fixture/PutImagePolicy.yaml b/fixture/PutImagePolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutImagePolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutImagePolicyResponse.proto b/fixture/PutImagePolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutImagePolicyResponse.proto
diff --git a/fixture/PutImageRecipePolicy.yaml b/fixture/PutImageRecipePolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutImageRecipePolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutImageRecipePolicyResponse.proto b/fixture/PutImageRecipePolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutImageRecipePolicyResponse.proto
diff --git a/fixture/StartImagePipelineExecution.yaml b/fixture/StartImagePipelineExecution.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartImagePipelineExecution.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartImagePipelineExecutionResponse.proto b/fixture/StartImagePipelineExecutionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartImagePipelineExecutionResponse.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/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  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/UpdateDistributionConfiguration.yaml b/fixture/UpdateDistributionConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDistributionConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateDistributionConfigurationResponse.proto b/fixture/UpdateDistributionConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDistributionConfigurationResponse.proto
diff --git a/fixture/UpdateImagePipeline.yaml b/fixture/UpdateImagePipeline.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateImagePipeline.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateImagePipelineResponse.proto b/fixture/UpdateImagePipelineResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateImagePipelineResponse.proto
diff --git a/fixture/UpdateInfrastructureConfiguration.yaml b/fixture/UpdateInfrastructureConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateInfrastructureConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/imagebuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  imagebuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateInfrastructureConfigurationResponse.proto b/fixture/UpdateInfrastructureConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateInfrastructureConfigurationResponse.proto
diff --git a/gen/Amazonka/ImageBuilder.hs b/gen/Amazonka/ImageBuilder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder.hs
@@ -0,0 +1,688 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.ImageBuilder
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2019-12-02@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- EC2 Image Builder is a fully managed Amazon Web Services service that
+-- makes it easier to automate the creation, management, and deployment of
+-- customized, secure, and up-to-date \"golden\" server images that are
+-- pre-installed and pre-configured with software and settings to meet
+-- specific IT standards.
+module Amazonka.ImageBuilder
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** CallRateLimitExceededException
+    _CallRateLimitExceededException,
+
+    -- ** ClientException
+    _ClientException,
+
+    -- ** ForbiddenException
+    _ForbiddenException,
+
+    -- ** IdempotentParameterMismatchException
+    _IdempotentParameterMismatchException,
+
+    -- ** InvalidPaginationTokenException
+    _InvalidPaginationTokenException,
+
+    -- ** InvalidParameterCombinationException
+    _InvalidParameterCombinationException,
+
+    -- ** InvalidParameterException
+    _InvalidParameterException,
+
+    -- ** InvalidParameterValueException
+    _InvalidParameterValueException,
+
+    -- ** InvalidRequestException
+    _InvalidRequestException,
+
+    -- ** InvalidVersionNumberException
+    _InvalidVersionNumberException,
+
+    -- ** ResourceAlreadyExistsException
+    _ResourceAlreadyExistsException,
+
+    -- ** ResourceDependencyException
+    _ResourceDependencyException,
+
+    -- ** ResourceInUseException
+    _ResourceInUseException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceException
+    _ServiceException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ServiceUnavailableException
+    _ServiceUnavailableException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CancelImageCreation
+    CancelImageCreation (CancelImageCreation'),
+    newCancelImageCreation,
+    CancelImageCreationResponse (CancelImageCreationResponse'),
+    newCancelImageCreationResponse,
+
+    -- ** CreateComponent
+    CreateComponent (CreateComponent'),
+    newCreateComponent,
+    CreateComponentResponse (CreateComponentResponse'),
+    newCreateComponentResponse,
+
+    -- ** CreateContainerRecipe
+    CreateContainerRecipe (CreateContainerRecipe'),
+    newCreateContainerRecipe,
+    CreateContainerRecipeResponse (CreateContainerRecipeResponse'),
+    newCreateContainerRecipeResponse,
+
+    -- ** CreateDistributionConfiguration
+    CreateDistributionConfiguration (CreateDistributionConfiguration'),
+    newCreateDistributionConfiguration,
+    CreateDistributionConfigurationResponse (CreateDistributionConfigurationResponse'),
+    newCreateDistributionConfigurationResponse,
+
+    -- ** CreateImage
+    CreateImage (CreateImage'),
+    newCreateImage,
+    CreateImageResponse (CreateImageResponse'),
+    newCreateImageResponse,
+
+    -- ** CreateImagePipeline
+    CreateImagePipeline (CreateImagePipeline'),
+    newCreateImagePipeline,
+    CreateImagePipelineResponse (CreateImagePipelineResponse'),
+    newCreateImagePipelineResponse,
+
+    -- ** CreateImageRecipe
+    CreateImageRecipe (CreateImageRecipe'),
+    newCreateImageRecipe,
+    CreateImageRecipeResponse (CreateImageRecipeResponse'),
+    newCreateImageRecipeResponse,
+
+    -- ** CreateInfrastructureConfiguration
+    CreateInfrastructureConfiguration (CreateInfrastructureConfiguration'),
+    newCreateInfrastructureConfiguration,
+    CreateInfrastructureConfigurationResponse (CreateInfrastructureConfigurationResponse'),
+    newCreateInfrastructureConfigurationResponse,
+
+    -- ** DeleteComponent
+    DeleteComponent (DeleteComponent'),
+    newDeleteComponent,
+    DeleteComponentResponse (DeleteComponentResponse'),
+    newDeleteComponentResponse,
+
+    -- ** DeleteContainerRecipe
+    DeleteContainerRecipe (DeleteContainerRecipe'),
+    newDeleteContainerRecipe,
+    DeleteContainerRecipeResponse (DeleteContainerRecipeResponse'),
+    newDeleteContainerRecipeResponse,
+
+    -- ** DeleteDistributionConfiguration
+    DeleteDistributionConfiguration (DeleteDistributionConfiguration'),
+    newDeleteDistributionConfiguration,
+    DeleteDistributionConfigurationResponse (DeleteDistributionConfigurationResponse'),
+    newDeleteDistributionConfigurationResponse,
+
+    -- ** DeleteImage
+    DeleteImage (DeleteImage'),
+    newDeleteImage,
+    DeleteImageResponse (DeleteImageResponse'),
+    newDeleteImageResponse,
+
+    -- ** DeleteImagePipeline
+    DeleteImagePipeline (DeleteImagePipeline'),
+    newDeleteImagePipeline,
+    DeleteImagePipelineResponse (DeleteImagePipelineResponse'),
+    newDeleteImagePipelineResponse,
+
+    -- ** DeleteImageRecipe
+    DeleteImageRecipe (DeleteImageRecipe'),
+    newDeleteImageRecipe,
+    DeleteImageRecipeResponse (DeleteImageRecipeResponse'),
+    newDeleteImageRecipeResponse,
+
+    -- ** DeleteInfrastructureConfiguration
+    DeleteInfrastructureConfiguration (DeleteInfrastructureConfiguration'),
+    newDeleteInfrastructureConfiguration,
+    DeleteInfrastructureConfigurationResponse (DeleteInfrastructureConfigurationResponse'),
+    newDeleteInfrastructureConfigurationResponse,
+
+    -- ** GetComponent
+    GetComponent (GetComponent'),
+    newGetComponent,
+    GetComponentResponse (GetComponentResponse'),
+    newGetComponentResponse,
+
+    -- ** GetComponentPolicy
+    GetComponentPolicy (GetComponentPolicy'),
+    newGetComponentPolicy,
+    GetComponentPolicyResponse (GetComponentPolicyResponse'),
+    newGetComponentPolicyResponse,
+
+    -- ** GetContainerRecipe
+    GetContainerRecipe (GetContainerRecipe'),
+    newGetContainerRecipe,
+    GetContainerRecipeResponse (GetContainerRecipeResponse'),
+    newGetContainerRecipeResponse,
+
+    -- ** GetContainerRecipePolicy
+    GetContainerRecipePolicy (GetContainerRecipePolicy'),
+    newGetContainerRecipePolicy,
+    GetContainerRecipePolicyResponse (GetContainerRecipePolicyResponse'),
+    newGetContainerRecipePolicyResponse,
+
+    -- ** GetDistributionConfiguration
+    GetDistributionConfiguration (GetDistributionConfiguration'),
+    newGetDistributionConfiguration,
+    GetDistributionConfigurationResponse (GetDistributionConfigurationResponse'),
+    newGetDistributionConfigurationResponse,
+
+    -- ** GetImage
+    GetImage (GetImage'),
+    newGetImage,
+    GetImageResponse (GetImageResponse'),
+    newGetImageResponse,
+
+    -- ** GetImagePipeline
+    GetImagePipeline (GetImagePipeline'),
+    newGetImagePipeline,
+    GetImagePipelineResponse (GetImagePipelineResponse'),
+    newGetImagePipelineResponse,
+
+    -- ** GetImagePolicy
+    GetImagePolicy (GetImagePolicy'),
+    newGetImagePolicy,
+    GetImagePolicyResponse (GetImagePolicyResponse'),
+    newGetImagePolicyResponse,
+
+    -- ** GetImageRecipe
+    GetImageRecipe (GetImageRecipe'),
+    newGetImageRecipe,
+    GetImageRecipeResponse (GetImageRecipeResponse'),
+    newGetImageRecipeResponse,
+
+    -- ** GetImageRecipePolicy
+    GetImageRecipePolicy (GetImageRecipePolicy'),
+    newGetImageRecipePolicy,
+    GetImageRecipePolicyResponse (GetImageRecipePolicyResponse'),
+    newGetImageRecipePolicyResponse,
+
+    -- ** GetInfrastructureConfiguration
+    GetInfrastructureConfiguration (GetInfrastructureConfiguration'),
+    newGetInfrastructureConfiguration,
+    GetInfrastructureConfigurationResponse (GetInfrastructureConfigurationResponse'),
+    newGetInfrastructureConfigurationResponse,
+
+    -- ** ImportComponent
+    ImportComponent (ImportComponent'),
+    newImportComponent,
+    ImportComponentResponse (ImportComponentResponse'),
+    newImportComponentResponse,
+
+    -- ** ImportVmImage
+    ImportVmImage (ImportVmImage'),
+    newImportVmImage,
+    ImportVmImageResponse (ImportVmImageResponse'),
+    newImportVmImageResponse,
+
+    -- ** ListComponentBuildVersions
+    ListComponentBuildVersions (ListComponentBuildVersions'),
+    newListComponentBuildVersions,
+    ListComponentBuildVersionsResponse (ListComponentBuildVersionsResponse'),
+    newListComponentBuildVersionsResponse,
+
+    -- ** ListComponents
+    ListComponents (ListComponents'),
+    newListComponents,
+    ListComponentsResponse (ListComponentsResponse'),
+    newListComponentsResponse,
+
+    -- ** ListContainerRecipes
+    ListContainerRecipes (ListContainerRecipes'),
+    newListContainerRecipes,
+    ListContainerRecipesResponse (ListContainerRecipesResponse'),
+    newListContainerRecipesResponse,
+
+    -- ** ListDistributionConfigurations
+    ListDistributionConfigurations (ListDistributionConfigurations'),
+    newListDistributionConfigurations,
+    ListDistributionConfigurationsResponse (ListDistributionConfigurationsResponse'),
+    newListDistributionConfigurationsResponse,
+
+    -- ** ListImageBuildVersions
+    ListImageBuildVersions (ListImageBuildVersions'),
+    newListImageBuildVersions,
+    ListImageBuildVersionsResponse (ListImageBuildVersionsResponse'),
+    newListImageBuildVersionsResponse,
+
+    -- ** ListImagePackages
+    ListImagePackages (ListImagePackages'),
+    newListImagePackages,
+    ListImagePackagesResponse (ListImagePackagesResponse'),
+    newListImagePackagesResponse,
+
+    -- ** ListImagePipelineImages
+    ListImagePipelineImages (ListImagePipelineImages'),
+    newListImagePipelineImages,
+    ListImagePipelineImagesResponse (ListImagePipelineImagesResponse'),
+    newListImagePipelineImagesResponse,
+
+    -- ** ListImagePipelines
+    ListImagePipelines (ListImagePipelines'),
+    newListImagePipelines,
+    ListImagePipelinesResponse (ListImagePipelinesResponse'),
+    newListImagePipelinesResponse,
+
+    -- ** ListImageRecipes
+    ListImageRecipes (ListImageRecipes'),
+    newListImageRecipes,
+    ListImageRecipesResponse (ListImageRecipesResponse'),
+    newListImageRecipesResponse,
+
+    -- ** ListImages
+    ListImages (ListImages'),
+    newListImages,
+    ListImagesResponse (ListImagesResponse'),
+    newListImagesResponse,
+
+    -- ** ListInfrastructureConfigurations
+    ListInfrastructureConfigurations (ListInfrastructureConfigurations'),
+    newListInfrastructureConfigurations,
+    ListInfrastructureConfigurationsResponse (ListInfrastructureConfigurationsResponse'),
+    newListInfrastructureConfigurationsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PutComponentPolicy
+    PutComponentPolicy (PutComponentPolicy'),
+    newPutComponentPolicy,
+    PutComponentPolicyResponse (PutComponentPolicyResponse'),
+    newPutComponentPolicyResponse,
+
+    -- ** PutContainerRecipePolicy
+    PutContainerRecipePolicy (PutContainerRecipePolicy'),
+    newPutContainerRecipePolicy,
+    PutContainerRecipePolicyResponse (PutContainerRecipePolicyResponse'),
+    newPutContainerRecipePolicyResponse,
+
+    -- ** PutImagePolicy
+    PutImagePolicy (PutImagePolicy'),
+    newPutImagePolicy,
+    PutImagePolicyResponse (PutImagePolicyResponse'),
+    newPutImagePolicyResponse,
+
+    -- ** PutImageRecipePolicy
+    PutImageRecipePolicy (PutImageRecipePolicy'),
+    newPutImageRecipePolicy,
+    PutImageRecipePolicyResponse (PutImageRecipePolicyResponse'),
+    newPutImageRecipePolicyResponse,
+
+    -- ** StartImagePipelineExecution
+    StartImagePipelineExecution (StartImagePipelineExecution'),
+    newStartImagePipelineExecution,
+    StartImagePipelineExecutionResponse (StartImagePipelineExecutionResponse'),
+    newStartImagePipelineExecutionResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateDistributionConfiguration
+    UpdateDistributionConfiguration (UpdateDistributionConfiguration'),
+    newUpdateDistributionConfiguration,
+    UpdateDistributionConfigurationResponse (UpdateDistributionConfigurationResponse'),
+    newUpdateDistributionConfigurationResponse,
+
+    -- ** UpdateImagePipeline
+    UpdateImagePipeline (UpdateImagePipeline'),
+    newUpdateImagePipeline,
+    UpdateImagePipelineResponse (UpdateImagePipelineResponse'),
+    newUpdateImagePipelineResponse,
+
+    -- ** UpdateInfrastructureConfiguration
+    UpdateInfrastructureConfiguration (UpdateInfrastructureConfiguration'),
+    newUpdateInfrastructureConfiguration,
+    UpdateInfrastructureConfigurationResponse (UpdateInfrastructureConfigurationResponse'),
+    newUpdateInfrastructureConfigurationResponse,
+
+    -- * Types
+
+    -- ** BuildType
+    BuildType (..),
+
+    -- ** ComponentFormat
+    ComponentFormat (..),
+
+    -- ** ComponentStatus
+    ComponentStatus (..),
+
+    -- ** ComponentType
+    ComponentType (..),
+
+    -- ** ContainerRepositoryService
+    ContainerRepositoryService (..),
+
+    -- ** ContainerType
+    ContainerType (..),
+
+    -- ** DiskImageFormat
+    DiskImageFormat (..),
+
+    -- ** EbsVolumeType
+    EbsVolumeType (..),
+
+    -- ** ImageStatus
+    ImageStatus (..),
+
+    -- ** ImageType
+    ImageType (..),
+
+    -- ** Ownership
+    Ownership (..),
+
+    -- ** PipelineExecutionStartCondition
+    PipelineExecutionStartCondition (..),
+
+    -- ** PipelineStatus
+    PipelineStatus (..),
+
+    -- ** Platform
+    Platform (..),
+
+    -- ** AdditionalInstanceConfiguration
+    AdditionalInstanceConfiguration (AdditionalInstanceConfiguration'),
+    newAdditionalInstanceConfiguration,
+
+    -- ** Ami
+    Ami (Ami'),
+    newAmi,
+
+    -- ** AmiDistributionConfiguration
+    AmiDistributionConfiguration (AmiDistributionConfiguration'),
+    newAmiDistributionConfiguration,
+
+    -- ** Component
+    Component (Component'),
+    newComponent,
+
+    -- ** ComponentConfiguration
+    ComponentConfiguration (ComponentConfiguration'),
+    newComponentConfiguration,
+
+    -- ** ComponentParameter
+    ComponentParameter (ComponentParameter'),
+    newComponentParameter,
+
+    -- ** ComponentParameterDetail
+    ComponentParameterDetail (ComponentParameterDetail'),
+    newComponentParameterDetail,
+
+    -- ** ComponentState
+    ComponentState (ComponentState'),
+    newComponentState,
+
+    -- ** ComponentSummary
+    ComponentSummary (ComponentSummary'),
+    newComponentSummary,
+
+    -- ** ComponentVersion
+    ComponentVersion (ComponentVersion'),
+    newComponentVersion,
+
+    -- ** Container
+    Container (Container'),
+    newContainer,
+
+    -- ** ContainerDistributionConfiguration
+    ContainerDistributionConfiguration (ContainerDistributionConfiguration'),
+    newContainerDistributionConfiguration,
+
+    -- ** ContainerRecipe
+    ContainerRecipe (ContainerRecipe'),
+    newContainerRecipe,
+
+    -- ** ContainerRecipeSummary
+    ContainerRecipeSummary (ContainerRecipeSummary'),
+    newContainerRecipeSummary,
+
+    -- ** Distribution
+    Distribution (Distribution'),
+    newDistribution,
+
+    -- ** DistributionConfiguration
+    DistributionConfiguration (DistributionConfiguration'),
+    newDistributionConfiguration,
+
+    -- ** DistributionConfigurationSummary
+    DistributionConfigurationSummary (DistributionConfigurationSummary'),
+    newDistributionConfigurationSummary,
+
+    -- ** EbsInstanceBlockDeviceSpecification
+    EbsInstanceBlockDeviceSpecification (EbsInstanceBlockDeviceSpecification'),
+    newEbsInstanceBlockDeviceSpecification,
+
+    -- ** FastLaunchConfiguration
+    FastLaunchConfiguration (FastLaunchConfiguration'),
+    newFastLaunchConfiguration,
+
+    -- ** FastLaunchLaunchTemplateSpecification
+    FastLaunchLaunchTemplateSpecification (FastLaunchLaunchTemplateSpecification'),
+    newFastLaunchLaunchTemplateSpecification,
+
+    -- ** FastLaunchSnapshotConfiguration
+    FastLaunchSnapshotConfiguration (FastLaunchSnapshotConfiguration'),
+    newFastLaunchSnapshotConfiguration,
+
+    -- ** Filter
+    Filter (Filter'),
+    newFilter,
+
+    -- ** Image
+    Image (Image'),
+    newImage,
+
+    -- ** ImagePackage
+    ImagePackage (ImagePackage'),
+    newImagePackage,
+
+    -- ** ImagePipeline
+    ImagePipeline (ImagePipeline'),
+    newImagePipeline,
+
+    -- ** ImageRecipe
+    ImageRecipe (ImageRecipe'),
+    newImageRecipe,
+
+    -- ** ImageRecipeSummary
+    ImageRecipeSummary (ImageRecipeSummary'),
+    newImageRecipeSummary,
+
+    -- ** ImageState
+    ImageState (ImageState'),
+    newImageState,
+
+    -- ** ImageSummary
+    ImageSummary (ImageSummary'),
+    newImageSummary,
+
+    -- ** ImageTestsConfiguration
+    ImageTestsConfiguration (ImageTestsConfiguration'),
+    newImageTestsConfiguration,
+
+    -- ** ImageVersion
+    ImageVersion (ImageVersion'),
+    newImageVersion,
+
+    -- ** InfrastructureConfiguration
+    InfrastructureConfiguration (InfrastructureConfiguration'),
+    newInfrastructureConfiguration,
+
+    -- ** InfrastructureConfigurationSummary
+    InfrastructureConfigurationSummary (InfrastructureConfigurationSummary'),
+    newInfrastructureConfigurationSummary,
+
+    -- ** InstanceBlockDeviceMapping
+    InstanceBlockDeviceMapping (InstanceBlockDeviceMapping'),
+    newInstanceBlockDeviceMapping,
+
+    -- ** InstanceConfiguration
+    InstanceConfiguration (InstanceConfiguration'),
+    newInstanceConfiguration,
+
+    -- ** InstanceMetadataOptions
+    InstanceMetadataOptions (InstanceMetadataOptions'),
+    newInstanceMetadataOptions,
+
+    -- ** LaunchPermissionConfiguration
+    LaunchPermissionConfiguration (LaunchPermissionConfiguration'),
+    newLaunchPermissionConfiguration,
+
+    -- ** LaunchTemplateConfiguration
+    LaunchTemplateConfiguration (LaunchTemplateConfiguration'),
+    newLaunchTemplateConfiguration,
+
+    -- ** Logging
+    Logging (Logging'),
+    newLogging,
+
+    -- ** OutputResources
+    OutputResources (OutputResources'),
+    newOutputResources,
+
+    -- ** S3ExportConfiguration
+    S3ExportConfiguration (S3ExportConfiguration'),
+    newS3ExportConfiguration,
+
+    -- ** S3Logs
+    S3Logs (S3Logs'),
+    newS3Logs,
+
+    -- ** Schedule
+    Schedule (Schedule'),
+    newSchedule,
+
+    -- ** SystemsManagerAgent
+    SystemsManagerAgent (SystemsManagerAgent'),
+    newSystemsManagerAgent,
+
+    -- ** TargetContainerRepository
+    TargetContainerRepository (TargetContainerRepository'),
+    newTargetContainerRepository,
+  )
+where
+
+import Amazonka.ImageBuilder.CancelImageCreation
+import Amazonka.ImageBuilder.CreateComponent
+import Amazonka.ImageBuilder.CreateContainerRecipe
+import Amazonka.ImageBuilder.CreateDistributionConfiguration
+import Amazonka.ImageBuilder.CreateImage
+import Amazonka.ImageBuilder.CreateImagePipeline
+import Amazonka.ImageBuilder.CreateImageRecipe
+import Amazonka.ImageBuilder.CreateInfrastructureConfiguration
+import Amazonka.ImageBuilder.DeleteComponent
+import Amazonka.ImageBuilder.DeleteContainerRecipe
+import Amazonka.ImageBuilder.DeleteDistributionConfiguration
+import Amazonka.ImageBuilder.DeleteImage
+import Amazonka.ImageBuilder.DeleteImagePipeline
+import Amazonka.ImageBuilder.DeleteImageRecipe
+import Amazonka.ImageBuilder.DeleteInfrastructureConfiguration
+import Amazonka.ImageBuilder.GetComponent
+import Amazonka.ImageBuilder.GetComponentPolicy
+import Amazonka.ImageBuilder.GetContainerRecipe
+import Amazonka.ImageBuilder.GetContainerRecipePolicy
+import Amazonka.ImageBuilder.GetDistributionConfiguration
+import Amazonka.ImageBuilder.GetImage
+import Amazonka.ImageBuilder.GetImagePipeline
+import Amazonka.ImageBuilder.GetImagePolicy
+import Amazonka.ImageBuilder.GetImageRecipe
+import Amazonka.ImageBuilder.GetImageRecipePolicy
+import Amazonka.ImageBuilder.GetInfrastructureConfiguration
+import Amazonka.ImageBuilder.ImportComponent
+import Amazonka.ImageBuilder.ImportVmImage
+import Amazonka.ImageBuilder.Lens
+import Amazonka.ImageBuilder.ListComponentBuildVersions
+import Amazonka.ImageBuilder.ListComponents
+import Amazonka.ImageBuilder.ListContainerRecipes
+import Amazonka.ImageBuilder.ListDistributionConfigurations
+import Amazonka.ImageBuilder.ListImageBuildVersions
+import Amazonka.ImageBuilder.ListImagePackages
+import Amazonka.ImageBuilder.ListImagePipelineImages
+import Amazonka.ImageBuilder.ListImagePipelines
+import Amazonka.ImageBuilder.ListImageRecipes
+import Amazonka.ImageBuilder.ListImages
+import Amazonka.ImageBuilder.ListInfrastructureConfigurations
+import Amazonka.ImageBuilder.ListTagsForResource
+import Amazonka.ImageBuilder.PutComponentPolicy
+import Amazonka.ImageBuilder.PutContainerRecipePolicy
+import Amazonka.ImageBuilder.PutImagePolicy
+import Amazonka.ImageBuilder.PutImageRecipePolicy
+import Amazonka.ImageBuilder.StartImagePipelineExecution
+import Amazonka.ImageBuilder.TagResource
+import Amazonka.ImageBuilder.Types
+import Amazonka.ImageBuilder.UntagResource
+import Amazonka.ImageBuilder.UpdateDistributionConfiguration
+import Amazonka.ImageBuilder.UpdateImagePipeline
+import Amazonka.ImageBuilder.UpdateInfrastructureConfiguration
+import Amazonka.ImageBuilder.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 'ImageBuilder'.
+
+-- $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/ImageBuilder/CancelImageCreation.hs b/gen/Amazonka/ImageBuilder/CancelImageCreation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/CancelImageCreation.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.ImageBuilder.CancelImageCreation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- CancelImageCreation cancels the creation of Image. This operation can
+-- only be used on images in a non-terminal state.
+module Amazonka.ImageBuilder.CancelImageCreation
+  ( -- * Creating a Request
+    CancelImageCreation (..),
+    newCancelImageCreation,
+
+    -- * Request Lenses
+    cancelImageCreation_imageBuildVersionArn,
+    cancelImageCreation_clientToken,
+
+    -- * Destructuring the Response
+    CancelImageCreationResponse (..),
+    newCancelImageCreationResponse,
+
+    -- * Response Lenses
+    cancelImageCreationResponse_clientToken,
+    cancelImageCreationResponse_imageBuildVersionArn,
+    cancelImageCreationResponse_requestId,
+    cancelImageCreationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCancelImageCreation' smart constructor.
+data CancelImageCreation = CancelImageCreation'
+  { -- | The Amazon Resource Name (ARN) of the image whose creation you want to
+    -- cancel.
+    imageBuildVersionArn :: Prelude.Text,
+    -- | Unique, case-sensitive identifier you provide to ensure idempotency of
+    -- the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>
+    -- in the /Amazon EC2 API Reference/.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelImageCreation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageBuildVersionArn', 'cancelImageCreation_imageBuildVersionArn' - The Amazon Resource Name (ARN) of the image whose creation you want to
+-- cancel.
+--
+-- 'clientToken', 'cancelImageCreation_clientToken' - Unique, case-sensitive identifier you provide to ensure idempotency of
+-- the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>
+-- in the /Amazon EC2 API Reference/.
+newCancelImageCreation ::
+  -- | 'imageBuildVersionArn'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  CancelImageCreation
+newCancelImageCreation
+  pImageBuildVersionArn_
+  pClientToken_ =
+    CancelImageCreation'
+      { imageBuildVersionArn =
+          pImageBuildVersionArn_,
+        clientToken = pClientToken_
+      }
+
+-- | The Amazon Resource Name (ARN) of the image whose creation you want to
+-- cancel.
+cancelImageCreation_imageBuildVersionArn :: Lens.Lens' CancelImageCreation Prelude.Text
+cancelImageCreation_imageBuildVersionArn = Lens.lens (\CancelImageCreation' {imageBuildVersionArn} -> imageBuildVersionArn) (\s@CancelImageCreation' {} a -> s {imageBuildVersionArn = a} :: CancelImageCreation)
+
+-- | Unique, case-sensitive identifier you provide to ensure idempotency of
+-- the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>
+-- in the /Amazon EC2 API Reference/.
+cancelImageCreation_clientToken :: Lens.Lens' CancelImageCreation Prelude.Text
+cancelImageCreation_clientToken = Lens.lens (\CancelImageCreation' {clientToken} -> clientToken) (\s@CancelImageCreation' {} a -> s {clientToken = a} :: CancelImageCreation)
+
+instance Core.AWSRequest CancelImageCreation where
+  type
+    AWSResponse CancelImageCreation =
+      CancelImageCreationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CancelImageCreationResponse'
+            Prelude.<$> (x Data..?> "clientToken")
+            Prelude.<*> (x Data..?> "imageBuildVersionArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelImageCreation where
+  hashWithSalt _salt CancelImageCreation' {..} =
+    _salt
+      `Prelude.hashWithSalt` imageBuildVersionArn
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData CancelImageCreation where
+  rnf CancelImageCreation' {..} =
+    Prelude.rnf imageBuildVersionArn
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance Data.ToHeaders CancelImageCreation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CancelImageCreation where
+  toJSON CancelImageCreation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "imageBuildVersionArn"
+                  Data..= imageBuildVersionArn
+              ),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance Data.ToPath CancelImageCreation where
+  toPath = Prelude.const "/CancelImageCreation"
+
+instance Data.ToQuery CancelImageCreation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelImageCreationResponse' smart constructor.
+data CancelImageCreationResponse = CancelImageCreationResponse'
+  { -- | The idempotency token that was used for this request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the image whose creation has been
+    -- cancelled.
+    imageBuildVersionArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelImageCreationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'cancelImageCreationResponse_clientToken' - The idempotency token that was used for this request.
+--
+-- 'imageBuildVersionArn', 'cancelImageCreationResponse_imageBuildVersionArn' - The Amazon Resource Name (ARN) of the image whose creation has been
+-- cancelled.
+--
+-- 'requestId', 'cancelImageCreationResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'cancelImageCreationResponse_httpStatus' - The response's http status code.
+newCancelImageCreationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelImageCreationResponse
+newCancelImageCreationResponse pHttpStatus_ =
+  CancelImageCreationResponse'
+    { clientToken =
+        Prelude.Nothing,
+      imageBuildVersionArn = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The idempotency token that was used for this request.
+cancelImageCreationResponse_clientToken :: Lens.Lens' CancelImageCreationResponse (Prelude.Maybe Prelude.Text)
+cancelImageCreationResponse_clientToken = Lens.lens (\CancelImageCreationResponse' {clientToken} -> clientToken) (\s@CancelImageCreationResponse' {} a -> s {clientToken = a} :: CancelImageCreationResponse)
+
+-- | The Amazon Resource Name (ARN) of the image whose creation has been
+-- cancelled.
+cancelImageCreationResponse_imageBuildVersionArn :: Lens.Lens' CancelImageCreationResponse (Prelude.Maybe Prelude.Text)
+cancelImageCreationResponse_imageBuildVersionArn = Lens.lens (\CancelImageCreationResponse' {imageBuildVersionArn} -> imageBuildVersionArn) (\s@CancelImageCreationResponse' {} a -> s {imageBuildVersionArn = a} :: CancelImageCreationResponse)
+
+-- | The request ID that uniquely identifies this request.
+cancelImageCreationResponse_requestId :: Lens.Lens' CancelImageCreationResponse (Prelude.Maybe Prelude.Text)
+cancelImageCreationResponse_requestId = Lens.lens (\CancelImageCreationResponse' {requestId} -> requestId) (\s@CancelImageCreationResponse' {} a -> s {requestId = a} :: CancelImageCreationResponse)
+
+-- | The response's http status code.
+cancelImageCreationResponse_httpStatus :: Lens.Lens' CancelImageCreationResponse Prelude.Int
+cancelImageCreationResponse_httpStatus = Lens.lens (\CancelImageCreationResponse' {httpStatus} -> httpStatus) (\s@CancelImageCreationResponse' {} a -> s {httpStatus = a} :: CancelImageCreationResponse)
+
+instance Prelude.NFData CancelImageCreationResponse where
+  rnf CancelImageCreationResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf imageBuildVersionArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/CreateComponent.hs b/gen/Amazonka/ImageBuilder/CreateComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/CreateComponent.hs
@@ -0,0 +1,431 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.CreateComponent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new component that can be used to build, validate, test, and
+-- assess your image. The component is based on a YAML document that you
+-- specify using exactly one of the following methods:
+--
+-- -   Inline, using the @data@ property in the request body.
+--
+-- -   A URL that points to a YAML document file stored in Amazon S3, using
+--     the @uri@ property in the request body.
+module Amazonka.ImageBuilder.CreateComponent
+  ( -- * Creating a Request
+    CreateComponent (..),
+    newCreateComponent,
+
+    -- * Request Lenses
+    createComponent_changeDescription,
+    createComponent_data,
+    createComponent_description,
+    createComponent_kmsKeyId,
+    createComponent_supportedOsVersions,
+    createComponent_tags,
+    createComponent_uri,
+    createComponent_name,
+    createComponent_semanticVersion,
+    createComponent_platform,
+    createComponent_clientToken,
+
+    -- * Destructuring the Response
+    CreateComponentResponse (..),
+    newCreateComponentResponse,
+
+    -- * Response Lenses
+    createComponentResponse_clientToken,
+    createComponentResponse_componentBuildVersionArn,
+    createComponentResponse_requestId,
+    createComponentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateComponent' smart constructor.
+data CreateComponent = CreateComponent'
+  { -- | The change description of the component. Describes what change has been
+    -- made in this version, or what makes this version different from other
+    -- versions of this component.
+    changeDescription :: Prelude.Maybe Prelude.Text,
+    -- | Component @data@ contains inline YAML document content for the
+    -- component. Alternatively, you can specify the @uri@ of a YAML document
+    -- file stored in Amazon S3. However, you cannot specify both properties.
+    data' :: Prelude.Maybe Prelude.Text,
+    -- | The description of the component. Describes the contents of the
+    -- component.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the KMS key that should be used to encrypt this component.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The operating system (OS) version supported by the component. If the OS
+    -- information is available, a prefix match is performed against the base
+    -- image OS version during image recipe creation.
+    supportedOsVersions :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The tags of the component.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The @uri@ of a YAML component document file. This must be an S3 URL
+    -- (@s3:\/\/bucket\/key@), and the requester must have permission to access
+    -- the S3 bucket it points to. If you use Amazon S3, you can specify
+    -- component content up to your service quota.
+    --
+    -- Alternatively, you can specify the YAML document inline, using the
+    -- component @data@ property. You cannot specify both properties.
+    uri :: Prelude.Maybe Prelude.Text,
+    -- | The name of the component.
+    name :: Prelude.Text,
+    -- | The semantic version of the component. This version follows the semantic
+    -- version syntax.
+    --
+    -- The semantic version has four nodes:
+    -- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+    -- first three, and can filter on all of them.
+    --
+    -- __Assignment:__ For the first three nodes you can assign any positive
+    -- integer value, including zero, with an upper limit of 2^30-1, or
+    -- 1073741823 for each node. Image Builder automatically assigns the build
+    -- number to the fourth node.
+    --
+    -- __Patterns:__ You can use any numeric pattern that adheres to the
+    -- assignment requirements for the nodes that you can assign. For example,
+    -- you might choose a software version pattern, such as 1.0.0, or a date,
+    -- such as 2021.01.01.
+    semanticVersion :: Prelude.Text,
+    -- | The platform of the component.
+    platform :: Platform,
+    -- | The idempotency token of the component.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateComponent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'changeDescription', 'createComponent_changeDescription' - The change description of the component. Describes what change has been
+-- made in this version, or what makes this version different from other
+-- versions of this component.
+--
+-- 'data'', 'createComponent_data' - Component @data@ contains inline YAML document content for the
+-- component. Alternatively, you can specify the @uri@ of a YAML document
+-- file stored in Amazon S3. However, you cannot specify both properties.
+--
+-- 'description', 'createComponent_description' - The description of the component. Describes the contents of the
+-- component.
+--
+-- 'kmsKeyId', 'createComponent_kmsKeyId' - The ID of the KMS key that should be used to encrypt this component.
+--
+-- 'supportedOsVersions', 'createComponent_supportedOsVersions' - The operating system (OS) version supported by the component. If the OS
+-- information is available, a prefix match is performed against the base
+-- image OS version during image recipe creation.
+--
+-- 'tags', 'createComponent_tags' - The tags of the component.
+--
+-- 'uri', 'createComponent_uri' - The @uri@ of a YAML component document file. This must be an S3 URL
+-- (@s3:\/\/bucket\/key@), and the requester must have permission to access
+-- the S3 bucket it points to. If you use Amazon S3, you can specify
+-- component content up to your service quota.
+--
+-- Alternatively, you can specify the YAML document inline, using the
+-- component @data@ property. You cannot specify both properties.
+--
+-- 'name', 'createComponent_name' - The name of the component.
+--
+-- 'semanticVersion', 'createComponent_semanticVersion' - The semantic version of the component. This version follows the semantic
+-- version syntax.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+--
+-- 'platform', 'createComponent_platform' - The platform of the component.
+--
+-- 'clientToken', 'createComponent_clientToken' - The idempotency token of the component.
+newCreateComponent ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'semanticVersion'
+  Prelude.Text ->
+  -- | 'platform'
+  Platform ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  CreateComponent
+newCreateComponent
+  pName_
+  pSemanticVersion_
+  pPlatform_
+  pClientToken_ =
+    CreateComponent'
+      { changeDescription =
+          Prelude.Nothing,
+        data' = Prelude.Nothing,
+        description = Prelude.Nothing,
+        kmsKeyId = Prelude.Nothing,
+        supportedOsVersions = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        uri = Prelude.Nothing,
+        name = pName_,
+        semanticVersion = pSemanticVersion_,
+        platform = pPlatform_,
+        clientToken = pClientToken_
+      }
+
+-- | The change description of the component. Describes what change has been
+-- made in this version, or what makes this version different from other
+-- versions of this component.
+createComponent_changeDescription :: Lens.Lens' CreateComponent (Prelude.Maybe Prelude.Text)
+createComponent_changeDescription = Lens.lens (\CreateComponent' {changeDescription} -> changeDescription) (\s@CreateComponent' {} a -> s {changeDescription = a} :: CreateComponent)
+
+-- | Component @data@ contains inline YAML document content for the
+-- component. Alternatively, you can specify the @uri@ of a YAML document
+-- file stored in Amazon S3. However, you cannot specify both properties.
+createComponent_data :: Lens.Lens' CreateComponent (Prelude.Maybe Prelude.Text)
+createComponent_data = Lens.lens (\CreateComponent' {data'} -> data') (\s@CreateComponent' {} a -> s {data' = a} :: CreateComponent)
+
+-- | The description of the component. Describes the contents of the
+-- component.
+createComponent_description :: Lens.Lens' CreateComponent (Prelude.Maybe Prelude.Text)
+createComponent_description = Lens.lens (\CreateComponent' {description} -> description) (\s@CreateComponent' {} a -> s {description = a} :: CreateComponent)
+
+-- | The ID of the KMS key that should be used to encrypt this component.
+createComponent_kmsKeyId :: Lens.Lens' CreateComponent (Prelude.Maybe Prelude.Text)
+createComponent_kmsKeyId = Lens.lens (\CreateComponent' {kmsKeyId} -> kmsKeyId) (\s@CreateComponent' {} a -> s {kmsKeyId = a} :: CreateComponent)
+
+-- | The operating system (OS) version supported by the component. If the OS
+-- information is available, a prefix match is performed against the base
+-- image OS version during image recipe creation.
+createComponent_supportedOsVersions :: Lens.Lens' CreateComponent (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+createComponent_supportedOsVersions = Lens.lens (\CreateComponent' {supportedOsVersions} -> supportedOsVersions) (\s@CreateComponent' {} a -> s {supportedOsVersions = a} :: CreateComponent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags of the component.
+createComponent_tags :: Lens.Lens' CreateComponent (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createComponent_tags = Lens.lens (\CreateComponent' {tags} -> tags) (\s@CreateComponent' {} a -> s {tags = a} :: CreateComponent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The @uri@ of a YAML component document file. This must be an S3 URL
+-- (@s3:\/\/bucket\/key@), and the requester must have permission to access
+-- the S3 bucket it points to. If you use Amazon S3, you can specify
+-- component content up to your service quota.
+--
+-- Alternatively, you can specify the YAML document inline, using the
+-- component @data@ property. You cannot specify both properties.
+createComponent_uri :: Lens.Lens' CreateComponent (Prelude.Maybe Prelude.Text)
+createComponent_uri = Lens.lens (\CreateComponent' {uri} -> uri) (\s@CreateComponent' {} a -> s {uri = a} :: CreateComponent)
+
+-- | The name of the component.
+createComponent_name :: Lens.Lens' CreateComponent Prelude.Text
+createComponent_name = Lens.lens (\CreateComponent' {name} -> name) (\s@CreateComponent' {} a -> s {name = a} :: CreateComponent)
+
+-- | The semantic version of the component. This version follows the semantic
+-- version syntax.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+createComponent_semanticVersion :: Lens.Lens' CreateComponent Prelude.Text
+createComponent_semanticVersion = Lens.lens (\CreateComponent' {semanticVersion} -> semanticVersion) (\s@CreateComponent' {} a -> s {semanticVersion = a} :: CreateComponent)
+
+-- | The platform of the component.
+createComponent_platform :: Lens.Lens' CreateComponent Platform
+createComponent_platform = Lens.lens (\CreateComponent' {platform} -> platform) (\s@CreateComponent' {} a -> s {platform = a} :: CreateComponent)
+
+-- | The idempotency token of the component.
+createComponent_clientToken :: Lens.Lens' CreateComponent Prelude.Text
+createComponent_clientToken = Lens.lens (\CreateComponent' {clientToken} -> clientToken) (\s@CreateComponent' {} a -> s {clientToken = a} :: CreateComponent)
+
+instance Core.AWSRequest CreateComponent where
+  type
+    AWSResponse CreateComponent =
+      CreateComponentResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateComponentResponse'
+            Prelude.<$> (x Data..?> "clientToken")
+            Prelude.<*> (x Data..?> "componentBuildVersionArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateComponent where
+  hashWithSalt _salt CreateComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` changeDescription
+      `Prelude.hashWithSalt` data'
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` supportedOsVersions
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` uri
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` semanticVersion
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData CreateComponent where
+  rnf CreateComponent' {..} =
+    Prelude.rnf changeDescription
+      `Prelude.seq` Prelude.rnf data'
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf supportedOsVersions
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf uri
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf semanticVersion
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance Data.ToHeaders CreateComponent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateComponent where
+  toJSON CreateComponent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("changeDescription" Data..=)
+              Prelude.<$> changeDescription,
+            ("data" Data..=) Prelude.<$> data',
+            ("description" Data..=) Prelude.<$> description,
+            ("kmsKeyId" Data..=) Prelude.<$> kmsKeyId,
+            ("supportedOsVersions" Data..=)
+              Prelude.<$> supportedOsVersions,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("uri" Data..=) Prelude.<$> uri,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ("semanticVersion" Data..= semanticVersion),
+            Prelude.Just ("platform" Data..= platform),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance Data.ToPath CreateComponent where
+  toPath = Prelude.const "/CreateComponent"
+
+instance Data.ToQuery CreateComponent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateComponentResponse' smart constructor.
+data CreateComponentResponse = CreateComponentResponse'
+  { -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the component that was created by this
+    -- request.
+    componentBuildVersionArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateComponentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createComponentResponse_clientToken' - The idempotency token used to make this request idempotent.
+--
+-- 'componentBuildVersionArn', 'createComponentResponse_componentBuildVersionArn' - The Amazon Resource Name (ARN) of the component that was created by this
+-- request.
+--
+-- 'requestId', 'createComponentResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'createComponentResponse_httpStatus' - The response's http status code.
+newCreateComponentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateComponentResponse
+newCreateComponentResponse pHttpStatus_ =
+  CreateComponentResponse'
+    { clientToken =
+        Prelude.Nothing,
+      componentBuildVersionArn = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The idempotency token used to make this request idempotent.
+createComponentResponse_clientToken :: Lens.Lens' CreateComponentResponse (Prelude.Maybe Prelude.Text)
+createComponentResponse_clientToken = Lens.lens (\CreateComponentResponse' {clientToken} -> clientToken) (\s@CreateComponentResponse' {} a -> s {clientToken = a} :: CreateComponentResponse)
+
+-- | The Amazon Resource Name (ARN) of the component that was created by this
+-- request.
+createComponentResponse_componentBuildVersionArn :: Lens.Lens' CreateComponentResponse (Prelude.Maybe Prelude.Text)
+createComponentResponse_componentBuildVersionArn = Lens.lens (\CreateComponentResponse' {componentBuildVersionArn} -> componentBuildVersionArn) (\s@CreateComponentResponse' {} a -> s {componentBuildVersionArn = a} :: CreateComponentResponse)
+
+-- | The request ID that uniquely identifies this request.
+createComponentResponse_requestId :: Lens.Lens' CreateComponentResponse (Prelude.Maybe Prelude.Text)
+createComponentResponse_requestId = Lens.lens (\CreateComponentResponse' {requestId} -> requestId) (\s@CreateComponentResponse' {} a -> s {requestId = a} :: CreateComponentResponse)
+
+-- | The response's http status code.
+createComponentResponse_httpStatus :: Lens.Lens' CreateComponentResponse Prelude.Int
+createComponentResponse_httpStatus = Lens.lens (\CreateComponentResponse' {httpStatus} -> httpStatus) (\s@CreateComponentResponse' {} a -> s {httpStatus = a} :: CreateComponentResponse)
+
+instance Prelude.NFData CreateComponentResponse where
+  rnf CreateComponentResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf componentBuildVersionArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/CreateContainerRecipe.hs b/gen/Amazonka/ImageBuilder/CreateContainerRecipe.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/CreateContainerRecipe.hs
@@ -0,0 +1,474 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.CreateContainerRecipe
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new container recipe. Container recipes define how images are
+-- configured, tested, and assessed.
+module Amazonka.ImageBuilder.CreateContainerRecipe
+  ( -- * Creating a Request
+    CreateContainerRecipe (..),
+    newCreateContainerRecipe,
+
+    -- * Request Lenses
+    createContainerRecipe_description,
+    createContainerRecipe_dockerfileTemplateData,
+    createContainerRecipe_dockerfileTemplateUri,
+    createContainerRecipe_imageOsVersionOverride,
+    createContainerRecipe_instanceConfiguration,
+    createContainerRecipe_kmsKeyId,
+    createContainerRecipe_platformOverride,
+    createContainerRecipe_tags,
+    createContainerRecipe_workingDirectory,
+    createContainerRecipe_containerType,
+    createContainerRecipe_name,
+    createContainerRecipe_semanticVersion,
+    createContainerRecipe_components,
+    createContainerRecipe_parentImage,
+    createContainerRecipe_targetRepository,
+    createContainerRecipe_clientToken,
+
+    -- * Destructuring the Response
+    CreateContainerRecipeResponse (..),
+    newCreateContainerRecipeResponse,
+
+    -- * Response Lenses
+    createContainerRecipeResponse_clientToken,
+    createContainerRecipeResponse_containerRecipeArn,
+    createContainerRecipeResponse_requestId,
+    createContainerRecipeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateContainerRecipe' smart constructor.
+data CreateContainerRecipe = CreateContainerRecipe'
+  { -- | The description of the container recipe.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Dockerfile template used to build your image as an inline data blob.
+    dockerfileTemplateData :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 URI for the Dockerfile that will be used to build your
+    -- container image.
+    dockerfileTemplateUri :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the operating system version for the base image.
+    imageOsVersionOverride :: Prelude.Maybe Prelude.Text,
+    -- | A group of options that can be used to configure an instance for
+    -- building and testing container images.
+    instanceConfiguration :: Prelude.Maybe InstanceConfiguration,
+    -- | Identifies which KMS key is used to encrypt the container image.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the operating system platform when you use a custom base
+    -- image.
+    platformOverride :: Prelude.Maybe Platform,
+    -- | Tags that are attached to the container recipe.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The working directory for use during build and test workflows.
+    workingDirectory :: Prelude.Maybe Prelude.Text,
+    -- | The type of container to create.
+    containerType :: ContainerType,
+    -- | The name of the container recipe.
+    name :: Prelude.Text,
+    -- | The semantic version of the container recipe. This version follows the
+    -- semantic version syntax.
+    --
+    -- The semantic version has four nodes:
+    -- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+    -- first three, and can filter on all of them.
+    --
+    -- __Assignment:__ For the first three nodes you can assign any positive
+    -- integer value, including zero, with an upper limit of 2^30-1, or
+    -- 1073741823 for each node. Image Builder automatically assigns the build
+    -- number to the fourth node.
+    --
+    -- __Patterns:__ You can use any numeric pattern that adheres to the
+    -- assignment requirements for the nodes that you can assign. For example,
+    -- you might choose a software version pattern, such as 1.0.0, or a date,
+    -- such as 2021.01.01.
+    semanticVersion :: Prelude.Text,
+    -- | Components for build and test that are included in the container recipe.
+    components :: Prelude.NonEmpty ComponentConfiguration,
+    -- | The base image for the container recipe.
+    parentImage :: Prelude.Text,
+    -- | The destination repository for the container image.
+    targetRepository :: TargetContainerRepository,
+    -- | The client token used to make this request idempotent.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateContainerRecipe' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createContainerRecipe_description' - The description of the container recipe.
+--
+-- 'dockerfileTemplateData', 'createContainerRecipe_dockerfileTemplateData' - The Dockerfile template used to build your image as an inline data blob.
+--
+-- 'dockerfileTemplateUri', 'createContainerRecipe_dockerfileTemplateUri' - The Amazon S3 URI for the Dockerfile that will be used to build your
+-- container image.
+--
+-- 'imageOsVersionOverride', 'createContainerRecipe_imageOsVersionOverride' - Specifies the operating system version for the base image.
+--
+-- 'instanceConfiguration', 'createContainerRecipe_instanceConfiguration' - A group of options that can be used to configure an instance for
+-- building and testing container images.
+--
+-- 'kmsKeyId', 'createContainerRecipe_kmsKeyId' - Identifies which KMS key is used to encrypt the container image.
+--
+-- 'platformOverride', 'createContainerRecipe_platformOverride' - Specifies the operating system platform when you use a custom base
+-- image.
+--
+-- 'tags', 'createContainerRecipe_tags' - Tags that are attached to the container recipe.
+--
+-- 'workingDirectory', 'createContainerRecipe_workingDirectory' - The working directory for use during build and test workflows.
+--
+-- 'containerType', 'createContainerRecipe_containerType' - The type of container to create.
+--
+-- 'name', 'createContainerRecipe_name' - The name of the container recipe.
+--
+-- 'semanticVersion', 'createContainerRecipe_semanticVersion' - The semantic version of the container recipe. This version follows the
+-- semantic version syntax.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+--
+-- 'components', 'createContainerRecipe_components' - Components for build and test that are included in the container recipe.
+--
+-- 'parentImage', 'createContainerRecipe_parentImage' - The base image for the container recipe.
+--
+-- 'targetRepository', 'createContainerRecipe_targetRepository' - The destination repository for the container image.
+--
+-- 'clientToken', 'createContainerRecipe_clientToken' - The client token used to make this request idempotent.
+newCreateContainerRecipe ::
+  -- | 'containerType'
+  ContainerType ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'semanticVersion'
+  Prelude.Text ->
+  -- | 'components'
+  Prelude.NonEmpty ComponentConfiguration ->
+  -- | 'parentImage'
+  Prelude.Text ->
+  -- | 'targetRepository'
+  TargetContainerRepository ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  CreateContainerRecipe
+newCreateContainerRecipe
+  pContainerType_
+  pName_
+  pSemanticVersion_
+  pComponents_
+  pParentImage_
+  pTargetRepository_
+  pClientToken_ =
+    CreateContainerRecipe'
+      { description =
+          Prelude.Nothing,
+        dockerfileTemplateData = Prelude.Nothing,
+        dockerfileTemplateUri = Prelude.Nothing,
+        imageOsVersionOverride = Prelude.Nothing,
+        instanceConfiguration = Prelude.Nothing,
+        kmsKeyId = Prelude.Nothing,
+        platformOverride = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        workingDirectory = Prelude.Nothing,
+        containerType = pContainerType_,
+        name = pName_,
+        semanticVersion = pSemanticVersion_,
+        components = Lens.coerced Lens.# pComponents_,
+        parentImage = pParentImage_,
+        targetRepository = pTargetRepository_,
+        clientToken = pClientToken_
+      }
+
+-- | The description of the container recipe.
+createContainerRecipe_description :: Lens.Lens' CreateContainerRecipe (Prelude.Maybe Prelude.Text)
+createContainerRecipe_description = Lens.lens (\CreateContainerRecipe' {description} -> description) (\s@CreateContainerRecipe' {} a -> s {description = a} :: CreateContainerRecipe)
+
+-- | The Dockerfile template used to build your image as an inline data blob.
+createContainerRecipe_dockerfileTemplateData :: Lens.Lens' CreateContainerRecipe (Prelude.Maybe Prelude.Text)
+createContainerRecipe_dockerfileTemplateData = Lens.lens (\CreateContainerRecipe' {dockerfileTemplateData} -> dockerfileTemplateData) (\s@CreateContainerRecipe' {} a -> s {dockerfileTemplateData = a} :: CreateContainerRecipe)
+
+-- | The Amazon S3 URI for the Dockerfile that will be used to build your
+-- container image.
+createContainerRecipe_dockerfileTemplateUri :: Lens.Lens' CreateContainerRecipe (Prelude.Maybe Prelude.Text)
+createContainerRecipe_dockerfileTemplateUri = Lens.lens (\CreateContainerRecipe' {dockerfileTemplateUri} -> dockerfileTemplateUri) (\s@CreateContainerRecipe' {} a -> s {dockerfileTemplateUri = a} :: CreateContainerRecipe)
+
+-- | Specifies the operating system version for the base image.
+createContainerRecipe_imageOsVersionOverride :: Lens.Lens' CreateContainerRecipe (Prelude.Maybe Prelude.Text)
+createContainerRecipe_imageOsVersionOverride = Lens.lens (\CreateContainerRecipe' {imageOsVersionOverride} -> imageOsVersionOverride) (\s@CreateContainerRecipe' {} a -> s {imageOsVersionOverride = a} :: CreateContainerRecipe)
+
+-- | A group of options that can be used to configure an instance for
+-- building and testing container images.
+createContainerRecipe_instanceConfiguration :: Lens.Lens' CreateContainerRecipe (Prelude.Maybe InstanceConfiguration)
+createContainerRecipe_instanceConfiguration = Lens.lens (\CreateContainerRecipe' {instanceConfiguration} -> instanceConfiguration) (\s@CreateContainerRecipe' {} a -> s {instanceConfiguration = a} :: CreateContainerRecipe)
+
+-- | Identifies which KMS key is used to encrypt the container image.
+createContainerRecipe_kmsKeyId :: Lens.Lens' CreateContainerRecipe (Prelude.Maybe Prelude.Text)
+createContainerRecipe_kmsKeyId = Lens.lens (\CreateContainerRecipe' {kmsKeyId} -> kmsKeyId) (\s@CreateContainerRecipe' {} a -> s {kmsKeyId = a} :: CreateContainerRecipe)
+
+-- | Specifies the operating system platform when you use a custom base
+-- image.
+createContainerRecipe_platformOverride :: Lens.Lens' CreateContainerRecipe (Prelude.Maybe Platform)
+createContainerRecipe_platformOverride = Lens.lens (\CreateContainerRecipe' {platformOverride} -> platformOverride) (\s@CreateContainerRecipe' {} a -> s {platformOverride = a} :: CreateContainerRecipe)
+
+-- | Tags that are attached to the container recipe.
+createContainerRecipe_tags :: Lens.Lens' CreateContainerRecipe (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createContainerRecipe_tags = Lens.lens (\CreateContainerRecipe' {tags} -> tags) (\s@CreateContainerRecipe' {} a -> s {tags = a} :: CreateContainerRecipe) Prelude.. Lens.mapping Lens.coerced
+
+-- | The working directory for use during build and test workflows.
+createContainerRecipe_workingDirectory :: Lens.Lens' CreateContainerRecipe (Prelude.Maybe Prelude.Text)
+createContainerRecipe_workingDirectory = Lens.lens (\CreateContainerRecipe' {workingDirectory} -> workingDirectory) (\s@CreateContainerRecipe' {} a -> s {workingDirectory = a} :: CreateContainerRecipe)
+
+-- | The type of container to create.
+createContainerRecipe_containerType :: Lens.Lens' CreateContainerRecipe ContainerType
+createContainerRecipe_containerType = Lens.lens (\CreateContainerRecipe' {containerType} -> containerType) (\s@CreateContainerRecipe' {} a -> s {containerType = a} :: CreateContainerRecipe)
+
+-- | The name of the container recipe.
+createContainerRecipe_name :: Lens.Lens' CreateContainerRecipe Prelude.Text
+createContainerRecipe_name = Lens.lens (\CreateContainerRecipe' {name} -> name) (\s@CreateContainerRecipe' {} a -> s {name = a} :: CreateContainerRecipe)
+
+-- | The semantic version of the container recipe. This version follows the
+-- semantic version syntax.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+createContainerRecipe_semanticVersion :: Lens.Lens' CreateContainerRecipe Prelude.Text
+createContainerRecipe_semanticVersion = Lens.lens (\CreateContainerRecipe' {semanticVersion} -> semanticVersion) (\s@CreateContainerRecipe' {} a -> s {semanticVersion = a} :: CreateContainerRecipe)
+
+-- | Components for build and test that are included in the container recipe.
+createContainerRecipe_components :: Lens.Lens' CreateContainerRecipe (Prelude.NonEmpty ComponentConfiguration)
+createContainerRecipe_components = Lens.lens (\CreateContainerRecipe' {components} -> components) (\s@CreateContainerRecipe' {} a -> s {components = a} :: CreateContainerRecipe) Prelude.. Lens.coerced
+
+-- | The base image for the container recipe.
+createContainerRecipe_parentImage :: Lens.Lens' CreateContainerRecipe Prelude.Text
+createContainerRecipe_parentImage = Lens.lens (\CreateContainerRecipe' {parentImage} -> parentImage) (\s@CreateContainerRecipe' {} a -> s {parentImage = a} :: CreateContainerRecipe)
+
+-- | The destination repository for the container image.
+createContainerRecipe_targetRepository :: Lens.Lens' CreateContainerRecipe TargetContainerRepository
+createContainerRecipe_targetRepository = Lens.lens (\CreateContainerRecipe' {targetRepository} -> targetRepository) (\s@CreateContainerRecipe' {} a -> s {targetRepository = a} :: CreateContainerRecipe)
+
+-- | The client token used to make this request idempotent.
+createContainerRecipe_clientToken :: Lens.Lens' CreateContainerRecipe Prelude.Text
+createContainerRecipe_clientToken = Lens.lens (\CreateContainerRecipe' {clientToken} -> clientToken) (\s@CreateContainerRecipe' {} a -> s {clientToken = a} :: CreateContainerRecipe)
+
+instance Core.AWSRequest CreateContainerRecipe where
+  type
+    AWSResponse CreateContainerRecipe =
+      CreateContainerRecipeResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateContainerRecipeResponse'
+            Prelude.<$> (x Data..?> "clientToken")
+            Prelude.<*> (x Data..?> "containerRecipeArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateContainerRecipe where
+  hashWithSalt _salt CreateContainerRecipe' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dockerfileTemplateData
+      `Prelude.hashWithSalt` dockerfileTemplateUri
+      `Prelude.hashWithSalt` imageOsVersionOverride
+      `Prelude.hashWithSalt` instanceConfiguration
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` platformOverride
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` workingDirectory
+      `Prelude.hashWithSalt` containerType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` semanticVersion
+      `Prelude.hashWithSalt` components
+      `Prelude.hashWithSalt` parentImage
+      `Prelude.hashWithSalt` targetRepository
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData CreateContainerRecipe where
+  rnf CreateContainerRecipe' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dockerfileTemplateData
+      `Prelude.seq` Prelude.rnf dockerfileTemplateUri
+      `Prelude.seq` Prelude.rnf imageOsVersionOverride
+      `Prelude.seq` Prelude.rnf instanceConfiguration
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf platformOverride
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf workingDirectory
+      `Prelude.seq` Prelude.rnf containerType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf semanticVersion
+      `Prelude.seq` Prelude.rnf components
+      `Prelude.seq` Prelude.rnf parentImage
+      `Prelude.seq` Prelude.rnf targetRepository
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance Data.ToHeaders CreateContainerRecipe where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateContainerRecipe where
+  toJSON CreateContainerRecipe' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("dockerfileTemplateData" Data..=)
+              Prelude.<$> dockerfileTemplateData,
+            ("dockerfileTemplateUri" Data..=)
+              Prelude.<$> dockerfileTemplateUri,
+            ("imageOsVersionOverride" Data..=)
+              Prelude.<$> imageOsVersionOverride,
+            ("instanceConfiguration" Data..=)
+              Prelude.<$> instanceConfiguration,
+            ("kmsKeyId" Data..=) Prelude.<$> kmsKeyId,
+            ("platformOverride" Data..=)
+              Prelude.<$> platformOverride,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("workingDirectory" Data..=)
+              Prelude.<$> workingDirectory,
+            Prelude.Just ("containerType" Data..= containerType),
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ("semanticVersion" Data..= semanticVersion),
+            Prelude.Just ("components" Data..= components),
+            Prelude.Just ("parentImage" Data..= parentImage),
+            Prelude.Just
+              ("targetRepository" Data..= targetRepository),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance Data.ToPath CreateContainerRecipe where
+  toPath = Prelude.const "/CreateContainerRecipe"
+
+instance Data.ToQuery CreateContainerRecipe where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateContainerRecipeResponse' smart constructor.
+data CreateContainerRecipeResponse = CreateContainerRecipeResponse'
+  { -- | The client token used to make this request idempotent.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Returns the Amazon Resource Name (ARN) of the container recipe that the
+    -- request created.
+    containerRecipeArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateContainerRecipeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createContainerRecipeResponse_clientToken' - The client token used to make this request idempotent.
+--
+-- 'containerRecipeArn', 'createContainerRecipeResponse_containerRecipeArn' - Returns the Amazon Resource Name (ARN) of the container recipe that the
+-- request created.
+--
+-- 'requestId', 'createContainerRecipeResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'createContainerRecipeResponse_httpStatus' - The response's http status code.
+newCreateContainerRecipeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateContainerRecipeResponse
+newCreateContainerRecipeResponse pHttpStatus_ =
+  CreateContainerRecipeResponse'
+    { clientToken =
+        Prelude.Nothing,
+      containerRecipeArn = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The client token used to make this request idempotent.
+createContainerRecipeResponse_clientToken :: Lens.Lens' CreateContainerRecipeResponse (Prelude.Maybe Prelude.Text)
+createContainerRecipeResponse_clientToken = Lens.lens (\CreateContainerRecipeResponse' {clientToken} -> clientToken) (\s@CreateContainerRecipeResponse' {} a -> s {clientToken = a} :: CreateContainerRecipeResponse)
+
+-- | Returns the Amazon Resource Name (ARN) of the container recipe that the
+-- request created.
+createContainerRecipeResponse_containerRecipeArn :: Lens.Lens' CreateContainerRecipeResponse (Prelude.Maybe Prelude.Text)
+createContainerRecipeResponse_containerRecipeArn = Lens.lens (\CreateContainerRecipeResponse' {containerRecipeArn} -> containerRecipeArn) (\s@CreateContainerRecipeResponse' {} a -> s {containerRecipeArn = a} :: CreateContainerRecipeResponse)
+
+-- | The request ID that uniquely identifies this request.
+createContainerRecipeResponse_requestId :: Lens.Lens' CreateContainerRecipeResponse (Prelude.Maybe Prelude.Text)
+createContainerRecipeResponse_requestId = Lens.lens (\CreateContainerRecipeResponse' {requestId} -> requestId) (\s@CreateContainerRecipeResponse' {} a -> s {requestId = a} :: CreateContainerRecipeResponse)
+
+-- | The response's http status code.
+createContainerRecipeResponse_httpStatus :: Lens.Lens' CreateContainerRecipeResponse Prelude.Int
+createContainerRecipeResponse_httpStatus = Lens.lens (\CreateContainerRecipeResponse' {httpStatus} -> httpStatus) (\s@CreateContainerRecipeResponse' {} a -> s {httpStatus = a} :: CreateContainerRecipeResponse)
+
+instance Prelude.NFData CreateContainerRecipeResponse where
+  rnf CreateContainerRecipeResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf containerRecipeArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/CreateDistributionConfiguration.hs b/gen/Amazonka/ImageBuilder/CreateDistributionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/CreateDistributionConfiguration.hs
@@ -0,0 +1,274 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.CreateDistributionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new distribution configuration. Distribution configurations
+-- define and configure the outputs of your pipeline.
+module Amazonka.ImageBuilder.CreateDistributionConfiguration
+  ( -- * Creating a Request
+    CreateDistributionConfiguration (..),
+    newCreateDistributionConfiguration,
+
+    -- * Request Lenses
+    createDistributionConfiguration_description,
+    createDistributionConfiguration_tags,
+    createDistributionConfiguration_name,
+    createDistributionConfiguration_distributions,
+    createDistributionConfiguration_clientToken,
+
+    -- * Destructuring the Response
+    CreateDistributionConfigurationResponse (..),
+    newCreateDistributionConfigurationResponse,
+
+    -- * Response Lenses
+    createDistributionConfigurationResponse_clientToken,
+    createDistributionConfigurationResponse_distributionConfigurationArn,
+    createDistributionConfigurationResponse_requestId,
+    createDistributionConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDistributionConfiguration' smart constructor.
+data CreateDistributionConfiguration = CreateDistributionConfiguration'
+  { -- | The description of the distribution configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The tags of the distribution configuration.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the distribution configuration.
+    name :: Prelude.Text,
+    -- | The distributions of the distribution configuration.
+    distributions :: [Distribution],
+    -- | The idempotency token of the distribution configuration.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDistributionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createDistributionConfiguration_description' - The description of the distribution configuration.
+--
+-- 'tags', 'createDistributionConfiguration_tags' - The tags of the distribution configuration.
+--
+-- 'name', 'createDistributionConfiguration_name' - The name of the distribution configuration.
+--
+-- 'distributions', 'createDistributionConfiguration_distributions' - The distributions of the distribution configuration.
+--
+-- 'clientToken', 'createDistributionConfiguration_clientToken' - The idempotency token of the distribution configuration.
+newCreateDistributionConfiguration ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  CreateDistributionConfiguration
+newCreateDistributionConfiguration
+  pName_
+  pClientToken_ =
+    CreateDistributionConfiguration'
+      { description =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        name = pName_,
+        distributions = Prelude.mempty,
+        clientToken = pClientToken_
+      }
+
+-- | The description of the distribution configuration.
+createDistributionConfiguration_description :: Lens.Lens' CreateDistributionConfiguration (Prelude.Maybe Prelude.Text)
+createDistributionConfiguration_description = Lens.lens (\CreateDistributionConfiguration' {description} -> description) (\s@CreateDistributionConfiguration' {} a -> s {description = a} :: CreateDistributionConfiguration)
+
+-- | The tags of the distribution configuration.
+createDistributionConfiguration_tags :: Lens.Lens' CreateDistributionConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createDistributionConfiguration_tags = Lens.lens (\CreateDistributionConfiguration' {tags} -> tags) (\s@CreateDistributionConfiguration' {} a -> s {tags = a} :: CreateDistributionConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the distribution configuration.
+createDistributionConfiguration_name :: Lens.Lens' CreateDistributionConfiguration Prelude.Text
+createDistributionConfiguration_name = Lens.lens (\CreateDistributionConfiguration' {name} -> name) (\s@CreateDistributionConfiguration' {} a -> s {name = a} :: CreateDistributionConfiguration)
+
+-- | The distributions of the distribution configuration.
+createDistributionConfiguration_distributions :: Lens.Lens' CreateDistributionConfiguration [Distribution]
+createDistributionConfiguration_distributions = Lens.lens (\CreateDistributionConfiguration' {distributions} -> distributions) (\s@CreateDistributionConfiguration' {} a -> s {distributions = a} :: CreateDistributionConfiguration) Prelude.. Lens.coerced
+
+-- | The idempotency token of the distribution configuration.
+createDistributionConfiguration_clientToken :: Lens.Lens' CreateDistributionConfiguration Prelude.Text
+createDistributionConfiguration_clientToken = Lens.lens (\CreateDistributionConfiguration' {clientToken} -> clientToken) (\s@CreateDistributionConfiguration' {} a -> s {clientToken = a} :: CreateDistributionConfiguration)
+
+instance
+  Core.AWSRequest
+    CreateDistributionConfiguration
+  where
+  type
+    AWSResponse CreateDistributionConfiguration =
+      CreateDistributionConfigurationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDistributionConfigurationResponse'
+            Prelude.<$> (x Data..?> "clientToken")
+            Prelude.<*> (x Data..?> "distributionConfigurationArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateDistributionConfiguration
+  where
+  hashWithSalt
+    _salt
+    CreateDistributionConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` distributions
+        `Prelude.hashWithSalt` clientToken
+
+instance
+  Prelude.NFData
+    CreateDistributionConfiguration
+  where
+  rnf CreateDistributionConfiguration' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf distributions
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance
+  Data.ToHeaders
+    CreateDistributionConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDistributionConfiguration where
+  toJSON CreateDistributionConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("distributions" Data..= distributions),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance Data.ToPath CreateDistributionConfiguration where
+  toPath =
+    Prelude.const "/CreateDistributionConfiguration"
+
+instance Data.ToQuery CreateDistributionConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDistributionConfigurationResponse' smart constructor.
+data CreateDistributionConfigurationResponse = CreateDistributionConfigurationResponse'
+  { -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the distribution configuration that
+    -- was created by this request.
+    distributionConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDistributionConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createDistributionConfigurationResponse_clientToken' - The idempotency token used to make this request idempotent.
+--
+-- 'distributionConfigurationArn', 'createDistributionConfigurationResponse_distributionConfigurationArn' - The Amazon Resource Name (ARN) of the distribution configuration that
+-- was created by this request.
+--
+-- 'requestId', 'createDistributionConfigurationResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'createDistributionConfigurationResponse_httpStatus' - The response's http status code.
+newCreateDistributionConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDistributionConfigurationResponse
+newCreateDistributionConfigurationResponse
+  pHttpStatus_ =
+    CreateDistributionConfigurationResponse'
+      { clientToken =
+          Prelude.Nothing,
+        distributionConfigurationArn =
+          Prelude.Nothing,
+        requestId = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The idempotency token used to make this request idempotent.
+createDistributionConfigurationResponse_clientToken :: Lens.Lens' CreateDistributionConfigurationResponse (Prelude.Maybe Prelude.Text)
+createDistributionConfigurationResponse_clientToken = Lens.lens (\CreateDistributionConfigurationResponse' {clientToken} -> clientToken) (\s@CreateDistributionConfigurationResponse' {} a -> s {clientToken = a} :: CreateDistributionConfigurationResponse)
+
+-- | The Amazon Resource Name (ARN) of the distribution configuration that
+-- was created by this request.
+createDistributionConfigurationResponse_distributionConfigurationArn :: Lens.Lens' CreateDistributionConfigurationResponse (Prelude.Maybe Prelude.Text)
+createDistributionConfigurationResponse_distributionConfigurationArn = Lens.lens (\CreateDistributionConfigurationResponse' {distributionConfigurationArn} -> distributionConfigurationArn) (\s@CreateDistributionConfigurationResponse' {} a -> s {distributionConfigurationArn = a} :: CreateDistributionConfigurationResponse)
+
+-- | The request ID that uniquely identifies this request.
+createDistributionConfigurationResponse_requestId :: Lens.Lens' CreateDistributionConfigurationResponse (Prelude.Maybe Prelude.Text)
+createDistributionConfigurationResponse_requestId = Lens.lens (\CreateDistributionConfigurationResponse' {requestId} -> requestId) (\s@CreateDistributionConfigurationResponse' {} a -> s {requestId = a} :: CreateDistributionConfigurationResponse)
+
+-- | The response's http status code.
+createDistributionConfigurationResponse_httpStatus :: Lens.Lens' CreateDistributionConfigurationResponse Prelude.Int
+createDistributionConfigurationResponse_httpStatus = Lens.lens (\CreateDistributionConfigurationResponse' {httpStatus} -> httpStatus) (\s@CreateDistributionConfigurationResponse' {} a -> s {httpStatus = a} :: CreateDistributionConfigurationResponse)
+
+instance
+  Prelude.NFData
+    CreateDistributionConfigurationResponse
+  where
+  rnf CreateDistributionConfigurationResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf distributionConfigurationArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/CreateImage.hs b/gen/Amazonka/ImageBuilder/CreateImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/CreateImage.hs
@@ -0,0 +1,321 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.CreateImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new image. This request will create a new image along with all
+-- of the configured output resources defined in the distribution
+-- configuration. You must specify exactly one recipe for your image, using
+-- either a ContainerRecipeArn or an ImageRecipeArn.
+module Amazonka.ImageBuilder.CreateImage
+  ( -- * Creating a Request
+    CreateImage (..),
+    newCreateImage,
+
+    -- * Request Lenses
+    createImage_containerRecipeArn,
+    createImage_distributionConfigurationArn,
+    createImage_enhancedImageMetadataEnabled,
+    createImage_imageRecipeArn,
+    createImage_imageTestsConfiguration,
+    createImage_tags,
+    createImage_infrastructureConfigurationArn,
+    createImage_clientToken,
+
+    -- * Destructuring the Response
+    CreateImageResponse (..),
+    newCreateImageResponse,
+
+    -- * Response Lenses
+    createImageResponse_clientToken,
+    createImageResponse_imageBuildVersionArn,
+    createImageResponse_requestId,
+    createImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateImage' smart constructor.
+data CreateImage = CreateImage'
+  { -- | The Amazon Resource Name (ARN) of the container recipe that defines how
+    -- images are configured and tested.
+    containerRecipeArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the distribution configuration that
+    -- defines and configures the outputs of your pipeline.
+    distributionConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | Collects additional information about the image being created, including
+    -- the operating system (OS) version and package list. This information is
+    -- used to enhance the overall experience of using EC2 Image Builder.
+    -- Enabled by default.
+    enhancedImageMetadataEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the image recipe that defines how
+    -- images are configured, tested, and assessed.
+    imageRecipeArn :: Prelude.Maybe Prelude.Text,
+    -- | The image tests configuration of the image.
+    imageTestsConfiguration :: Prelude.Maybe ImageTestsConfiguration,
+    -- | The tags of the image.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+    -- defines the environment in which your image will be built and tested.
+    infrastructureConfigurationArn :: Prelude.Text,
+    -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'containerRecipeArn', 'createImage_containerRecipeArn' - The Amazon Resource Name (ARN) of the container recipe that defines how
+-- images are configured and tested.
+--
+-- 'distributionConfigurationArn', 'createImage_distributionConfigurationArn' - The Amazon Resource Name (ARN) of the distribution configuration that
+-- defines and configures the outputs of your pipeline.
+--
+-- 'enhancedImageMetadataEnabled', 'createImage_enhancedImageMetadataEnabled' - Collects additional information about the image being created, including
+-- the operating system (OS) version and package list. This information is
+-- used to enhance the overall experience of using EC2 Image Builder.
+-- Enabled by default.
+--
+-- 'imageRecipeArn', 'createImage_imageRecipeArn' - The Amazon Resource Name (ARN) of the image recipe that defines how
+-- images are configured, tested, and assessed.
+--
+-- 'imageTestsConfiguration', 'createImage_imageTestsConfiguration' - The image tests configuration of the image.
+--
+-- 'tags', 'createImage_tags' - The tags of the image.
+--
+-- 'infrastructureConfigurationArn', 'createImage_infrastructureConfigurationArn' - The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- defines the environment in which your image will be built and tested.
+--
+-- 'clientToken', 'createImage_clientToken' - The idempotency token used to make this request idempotent.
+newCreateImage ::
+  -- | 'infrastructureConfigurationArn'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  CreateImage
+newCreateImage
+  pInfrastructureConfigurationArn_
+  pClientToken_ =
+    CreateImage'
+      { containerRecipeArn = Prelude.Nothing,
+        distributionConfigurationArn = Prelude.Nothing,
+        enhancedImageMetadataEnabled = Prelude.Nothing,
+        imageRecipeArn = Prelude.Nothing,
+        imageTestsConfiguration = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        infrastructureConfigurationArn =
+          pInfrastructureConfigurationArn_,
+        clientToken = pClientToken_
+      }
+
+-- | The Amazon Resource Name (ARN) of the container recipe that defines how
+-- images are configured and tested.
+createImage_containerRecipeArn :: Lens.Lens' CreateImage (Prelude.Maybe Prelude.Text)
+createImage_containerRecipeArn = Lens.lens (\CreateImage' {containerRecipeArn} -> containerRecipeArn) (\s@CreateImage' {} a -> s {containerRecipeArn = a} :: CreateImage)
+
+-- | The Amazon Resource Name (ARN) of the distribution configuration that
+-- defines and configures the outputs of your pipeline.
+createImage_distributionConfigurationArn :: Lens.Lens' CreateImage (Prelude.Maybe Prelude.Text)
+createImage_distributionConfigurationArn = Lens.lens (\CreateImage' {distributionConfigurationArn} -> distributionConfigurationArn) (\s@CreateImage' {} a -> s {distributionConfigurationArn = a} :: CreateImage)
+
+-- | Collects additional information about the image being created, including
+-- the operating system (OS) version and package list. This information is
+-- used to enhance the overall experience of using EC2 Image Builder.
+-- Enabled by default.
+createImage_enhancedImageMetadataEnabled :: Lens.Lens' CreateImage (Prelude.Maybe Prelude.Bool)
+createImage_enhancedImageMetadataEnabled = Lens.lens (\CreateImage' {enhancedImageMetadataEnabled} -> enhancedImageMetadataEnabled) (\s@CreateImage' {} a -> s {enhancedImageMetadataEnabled = a} :: CreateImage)
+
+-- | The Amazon Resource Name (ARN) of the image recipe that defines how
+-- images are configured, tested, and assessed.
+createImage_imageRecipeArn :: Lens.Lens' CreateImage (Prelude.Maybe Prelude.Text)
+createImage_imageRecipeArn = Lens.lens (\CreateImage' {imageRecipeArn} -> imageRecipeArn) (\s@CreateImage' {} a -> s {imageRecipeArn = a} :: CreateImage)
+
+-- | The image tests configuration of the image.
+createImage_imageTestsConfiguration :: Lens.Lens' CreateImage (Prelude.Maybe ImageTestsConfiguration)
+createImage_imageTestsConfiguration = Lens.lens (\CreateImage' {imageTestsConfiguration} -> imageTestsConfiguration) (\s@CreateImage' {} a -> s {imageTestsConfiguration = a} :: CreateImage)
+
+-- | The tags of the image.
+createImage_tags :: Lens.Lens' CreateImage (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createImage_tags = Lens.lens (\CreateImage' {tags} -> tags) (\s@CreateImage' {} a -> s {tags = a} :: CreateImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- defines the environment in which your image will be built and tested.
+createImage_infrastructureConfigurationArn :: Lens.Lens' CreateImage Prelude.Text
+createImage_infrastructureConfigurationArn = Lens.lens (\CreateImage' {infrastructureConfigurationArn} -> infrastructureConfigurationArn) (\s@CreateImage' {} a -> s {infrastructureConfigurationArn = a} :: CreateImage)
+
+-- | The idempotency token used to make this request idempotent.
+createImage_clientToken :: Lens.Lens' CreateImage Prelude.Text
+createImage_clientToken = Lens.lens (\CreateImage' {clientToken} -> clientToken) (\s@CreateImage' {} a -> s {clientToken = a} :: CreateImage)
+
+instance Core.AWSRequest CreateImage where
+  type AWSResponse CreateImage = CreateImageResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateImageResponse'
+            Prelude.<$> (x Data..?> "clientToken")
+            Prelude.<*> (x Data..?> "imageBuildVersionArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateImage where
+  hashWithSalt _salt CreateImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` containerRecipeArn
+      `Prelude.hashWithSalt` distributionConfigurationArn
+      `Prelude.hashWithSalt` enhancedImageMetadataEnabled
+      `Prelude.hashWithSalt` imageRecipeArn
+      `Prelude.hashWithSalt` imageTestsConfiguration
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` infrastructureConfigurationArn
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData CreateImage where
+  rnf CreateImage' {..} =
+    Prelude.rnf containerRecipeArn
+      `Prelude.seq` Prelude.rnf distributionConfigurationArn
+      `Prelude.seq` Prelude.rnf enhancedImageMetadataEnabled
+      `Prelude.seq` Prelude.rnf imageRecipeArn
+      `Prelude.seq` Prelude.rnf imageTestsConfiguration
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf infrastructureConfigurationArn
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance Data.ToHeaders CreateImage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateImage where
+  toJSON CreateImage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("containerRecipeArn" Data..=)
+              Prelude.<$> containerRecipeArn,
+            ("distributionConfigurationArn" Data..=)
+              Prelude.<$> distributionConfigurationArn,
+            ("enhancedImageMetadataEnabled" Data..=)
+              Prelude.<$> enhancedImageMetadataEnabled,
+            ("imageRecipeArn" Data..=)
+              Prelude.<$> imageRecipeArn,
+            ("imageTestsConfiguration" Data..=)
+              Prelude.<$> imageTestsConfiguration,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ( "infrastructureConfigurationArn"
+                  Data..= infrastructureConfigurationArn
+              ),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance Data.ToPath CreateImage where
+  toPath = Prelude.const "/CreateImage"
+
+instance Data.ToQuery CreateImage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateImageResponse' smart constructor.
+data CreateImageResponse = CreateImageResponse'
+  { -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the image that was created by this
+    -- request.
+    imageBuildVersionArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createImageResponse_clientToken' - The idempotency token used to make this request idempotent.
+--
+-- 'imageBuildVersionArn', 'createImageResponse_imageBuildVersionArn' - The Amazon Resource Name (ARN) of the image that was created by this
+-- request.
+--
+-- 'requestId', 'createImageResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'createImageResponse_httpStatus' - The response's http status code.
+newCreateImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateImageResponse
+newCreateImageResponse pHttpStatus_ =
+  CreateImageResponse'
+    { clientToken = Prelude.Nothing,
+      imageBuildVersionArn = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The idempotency token used to make this request idempotent.
+createImageResponse_clientToken :: Lens.Lens' CreateImageResponse (Prelude.Maybe Prelude.Text)
+createImageResponse_clientToken = Lens.lens (\CreateImageResponse' {clientToken} -> clientToken) (\s@CreateImageResponse' {} a -> s {clientToken = a} :: CreateImageResponse)
+
+-- | The Amazon Resource Name (ARN) of the image that was created by this
+-- request.
+createImageResponse_imageBuildVersionArn :: Lens.Lens' CreateImageResponse (Prelude.Maybe Prelude.Text)
+createImageResponse_imageBuildVersionArn = Lens.lens (\CreateImageResponse' {imageBuildVersionArn} -> imageBuildVersionArn) (\s@CreateImageResponse' {} a -> s {imageBuildVersionArn = a} :: CreateImageResponse)
+
+-- | The request ID that uniquely identifies this request.
+createImageResponse_requestId :: Lens.Lens' CreateImageResponse (Prelude.Maybe Prelude.Text)
+createImageResponse_requestId = Lens.lens (\CreateImageResponse' {requestId} -> requestId) (\s@CreateImageResponse' {} a -> s {requestId = a} :: CreateImageResponse)
+
+-- | The response's http status code.
+createImageResponse_httpStatus :: Lens.Lens' CreateImageResponse Prelude.Int
+createImageResponse_httpStatus = Lens.lens (\CreateImageResponse' {httpStatus} -> httpStatus) (\s@CreateImageResponse' {} a -> s {httpStatus = a} :: CreateImageResponse)
+
+instance Prelude.NFData CreateImageResponse where
+  rnf CreateImageResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf imageBuildVersionArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/CreateImagePipeline.hs b/gen/Amazonka/ImageBuilder/CreateImagePipeline.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/CreateImagePipeline.hs
@@ -0,0 +1,381 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.CreateImagePipeline
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new image pipeline. Image pipelines enable you to automate the
+-- creation and distribution of images.
+module Amazonka.ImageBuilder.CreateImagePipeline
+  ( -- * Creating a Request
+    CreateImagePipeline (..),
+    newCreateImagePipeline,
+
+    -- * Request Lenses
+    createImagePipeline_containerRecipeArn,
+    createImagePipeline_description,
+    createImagePipeline_distributionConfigurationArn,
+    createImagePipeline_enhancedImageMetadataEnabled,
+    createImagePipeline_imageRecipeArn,
+    createImagePipeline_imageTestsConfiguration,
+    createImagePipeline_schedule,
+    createImagePipeline_status,
+    createImagePipeline_tags,
+    createImagePipeline_name,
+    createImagePipeline_infrastructureConfigurationArn,
+    createImagePipeline_clientToken,
+
+    -- * Destructuring the Response
+    CreateImagePipelineResponse (..),
+    newCreateImagePipelineResponse,
+
+    -- * Response Lenses
+    createImagePipelineResponse_clientToken,
+    createImagePipelineResponse_imagePipelineArn,
+    createImagePipelineResponse_requestId,
+    createImagePipelineResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateImagePipeline' smart constructor.
+data CreateImagePipeline = CreateImagePipeline'
+  { -- | The Amazon Resource Name (ARN) of the container recipe that is used to
+    -- configure images created by this container pipeline.
+    containerRecipeArn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the image pipeline.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the distribution configuration that
+    -- will be used to configure and distribute images created by this image
+    -- pipeline.
+    distributionConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | Collects additional information about the image being created, including
+    -- the operating system (OS) version and package list. This information is
+    -- used to enhance the overall experience of using EC2 Image Builder.
+    -- Enabled by default.
+    enhancedImageMetadataEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the image recipe that will be used to
+    -- configure images created by this image pipeline.
+    imageRecipeArn :: Prelude.Maybe Prelude.Text,
+    -- | The image test configuration of the image pipeline.
+    imageTestsConfiguration :: Prelude.Maybe ImageTestsConfiguration,
+    -- | The schedule of the image pipeline.
+    schedule :: Prelude.Maybe Schedule,
+    -- | The status of the image pipeline.
+    status :: Prelude.Maybe PipelineStatus,
+    -- | The tags of the image pipeline.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the image pipeline.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+    -- will be used to build images created by this image pipeline.
+    infrastructureConfigurationArn :: Prelude.Text,
+    -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateImagePipeline' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'containerRecipeArn', 'createImagePipeline_containerRecipeArn' - The Amazon Resource Name (ARN) of the container recipe that is used to
+-- configure images created by this container pipeline.
+--
+-- 'description', 'createImagePipeline_description' - The description of the image pipeline.
+--
+-- 'distributionConfigurationArn', 'createImagePipeline_distributionConfigurationArn' - The Amazon Resource Name (ARN) of the distribution configuration that
+-- will be used to configure and distribute images created by this image
+-- pipeline.
+--
+-- 'enhancedImageMetadataEnabled', 'createImagePipeline_enhancedImageMetadataEnabled' - Collects additional information about the image being created, including
+-- the operating system (OS) version and package list. This information is
+-- used to enhance the overall experience of using EC2 Image Builder.
+-- Enabled by default.
+--
+-- 'imageRecipeArn', 'createImagePipeline_imageRecipeArn' - The Amazon Resource Name (ARN) of the image recipe that will be used to
+-- configure images created by this image pipeline.
+--
+-- 'imageTestsConfiguration', 'createImagePipeline_imageTestsConfiguration' - The image test configuration of the image pipeline.
+--
+-- 'schedule', 'createImagePipeline_schedule' - The schedule of the image pipeline.
+--
+-- 'status', 'createImagePipeline_status' - The status of the image pipeline.
+--
+-- 'tags', 'createImagePipeline_tags' - The tags of the image pipeline.
+--
+-- 'name', 'createImagePipeline_name' - The name of the image pipeline.
+--
+-- 'infrastructureConfigurationArn', 'createImagePipeline_infrastructureConfigurationArn' - The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- will be used to build images created by this image pipeline.
+--
+-- 'clientToken', 'createImagePipeline_clientToken' - The idempotency token used to make this request idempotent.
+newCreateImagePipeline ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'infrastructureConfigurationArn'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  CreateImagePipeline
+newCreateImagePipeline
+  pName_
+  pInfrastructureConfigurationArn_
+  pClientToken_ =
+    CreateImagePipeline'
+      { containerRecipeArn =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        distributionConfigurationArn = Prelude.Nothing,
+        enhancedImageMetadataEnabled = Prelude.Nothing,
+        imageRecipeArn = Prelude.Nothing,
+        imageTestsConfiguration = Prelude.Nothing,
+        schedule = Prelude.Nothing,
+        status = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        name = pName_,
+        infrastructureConfigurationArn =
+          pInfrastructureConfigurationArn_,
+        clientToken = pClientToken_
+      }
+
+-- | The Amazon Resource Name (ARN) of the container recipe that is used to
+-- configure images created by this container pipeline.
+createImagePipeline_containerRecipeArn :: Lens.Lens' CreateImagePipeline (Prelude.Maybe Prelude.Text)
+createImagePipeline_containerRecipeArn = Lens.lens (\CreateImagePipeline' {containerRecipeArn} -> containerRecipeArn) (\s@CreateImagePipeline' {} a -> s {containerRecipeArn = a} :: CreateImagePipeline)
+
+-- | The description of the image pipeline.
+createImagePipeline_description :: Lens.Lens' CreateImagePipeline (Prelude.Maybe Prelude.Text)
+createImagePipeline_description = Lens.lens (\CreateImagePipeline' {description} -> description) (\s@CreateImagePipeline' {} a -> s {description = a} :: CreateImagePipeline)
+
+-- | The Amazon Resource Name (ARN) of the distribution configuration that
+-- will be used to configure and distribute images created by this image
+-- pipeline.
+createImagePipeline_distributionConfigurationArn :: Lens.Lens' CreateImagePipeline (Prelude.Maybe Prelude.Text)
+createImagePipeline_distributionConfigurationArn = Lens.lens (\CreateImagePipeline' {distributionConfigurationArn} -> distributionConfigurationArn) (\s@CreateImagePipeline' {} a -> s {distributionConfigurationArn = a} :: CreateImagePipeline)
+
+-- | Collects additional information about the image being created, including
+-- the operating system (OS) version and package list. This information is
+-- used to enhance the overall experience of using EC2 Image Builder.
+-- Enabled by default.
+createImagePipeline_enhancedImageMetadataEnabled :: Lens.Lens' CreateImagePipeline (Prelude.Maybe Prelude.Bool)
+createImagePipeline_enhancedImageMetadataEnabled = Lens.lens (\CreateImagePipeline' {enhancedImageMetadataEnabled} -> enhancedImageMetadataEnabled) (\s@CreateImagePipeline' {} a -> s {enhancedImageMetadataEnabled = a} :: CreateImagePipeline)
+
+-- | The Amazon Resource Name (ARN) of the image recipe that will be used to
+-- configure images created by this image pipeline.
+createImagePipeline_imageRecipeArn :: Lens.Lens' CreateImagePipeline (Prelude.Maybe Prelude.Text)
+createImagePipeline_imageRecipeArn = Lens.lens (\CreateImagePipeline' {imageRecipeArn} -> imageRecipeArn) (\s@CreateImagePipeline' {} a -> s {imageRecipeArn = a} :: CreateImagePipeline)
+
+-- | The image test configuration of the image pipeline.
+createImagePipeline_imageTestsConfiguration :: Lens.Lens' CreateImagePipeline (Prelude.Maybe ImageTestsConfiguration)
+createImagePipeline_imageTestsConfiguration = Lens.lens (\CreateImagePipeline' {imageTestsConfiguration} -> imageTestsConfiguration) (\s@CreateImagePipeline' {} a -> s {imageTestsConfiguration = a} :: CreateImagePipeline)
+
+-- | The schedule of the image pipeline.
+createImagePipeline_schedule :: Lens.Lens' CreateImagePipeline (Prelude.Maybe Schedule)
+createImagePipeline_schedule = Lens.lens (\CreateImagePipeline' {schedule} -> schedule) (\s@CreateImagePipeline' {} a -> s {schedule = a} :: CreateImagePipeline)
+
+-- | The status of the image pipeline.
+createImagePipeline_status :: Lens.Lens' CreateImagePipeline (Prelude.Maybe PipelineStatus)
+createImagePipeline_status = Lens.lens (\CreateImagePipeline' {status} -> status) (\s@CreateImagePipeline' {} a -> s {status = a} :: CreateImagePipeline)
+
+-- | The tags of the image pipeline.
+createImagePipeline_tags :: Lens.Lens' CreateImagePipeline (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createImagePipeline_tags = Lens.lens (\CreateImagePipeline' {tags} -> tags) (\s@CreateImagePipeline' {} a -> s {tags = a} :: CreateImagePipeline) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the image pipeline.
+createImagePipeline_name :: Lens.Lens' CreateImagePipeline Prelude.Text
+createImagePipeline_name = Lens.lens (\CreateImagePipeline' {name} -> name) (\s@CreateImagePipeline' {} a -> s {name = a} :: CreateImagePipeline)
+
+-- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- will be used to build images created by this image pipeline.
+createImagePipeline_infrastructureConfigurationArn :: Lens.Lens' CreateImagePipeline Prelude.Text
+createImagePipeline_infrastructureConfigurationArn = Lens.lens (\CreateImagePipeline' {infrastructureConfigurationArn} -> infrastructureConfigurationArn) (\s@CreateImagePipeline' {} a -> s {infrastructureConfigurationArn = a} :: CreateImagePipeline)
+
+-- | The idempotency token used to make this request idempotent.
+createImagePipeline_clientToken :: Lens.Lens' CreateImagePipeline Prelude.Text
+createImagePipeline_clientToken = Lens.lens (\CreateImagePipeline' {clientToken} -> clientToken) (\s@CreateImagePipeline' {} a -> s {clientToken = a} :: CreateImagePipeline)
+
+instance Core.AWSRequest CreateImagePipeline where
+  type
+    AWSResponse CreateImagePipeline =
+      CreateImagePipelineResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateImagePipelineResponse'
+            Prelude.<$> (x Data..?> "clientToken")
+            Prelude.<*> (x Data..?> "imagePipelineArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateImagePipeline where
+  hashWithSalt _salt CreateImagePipeline' {..} =
+    _salt
+      `Prelude.hashWithSalt` containerRecipeArn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` distributionConfigurationArn
+      `Prelude.hashWithSalt` enhancedImageMetadataEnabled
+      `Prelude.hashWithSalt` imageRecipeArn
+      `Prelude.hashWithSalt` imageTestsConfiguration
+      `Prelude.hashWithSalt` schedule
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` infrastructureConfigurationArn
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData CreateImagePipeline where
+  rnf CreateImagePipeline' {..} =
+    Prelude.rnf containerRecipeArn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf distributionConfigurationArn
+      `Prelude.seq` Prelude.rnf enhancedImageMetadataEnabled
+      `Prelude.seq` Prelude.rnf imageRecipeArn
+      `Prelude.seq` Prelude.rnf imageTestsConfiguration
+      `Prelude.seq` Prelude.rnf schedule
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf infrastructureConfigurationArn
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance Data.ToHeaders CreateImagePipeline where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateImagePipeline where
+  toJSON CreateImagePipeline' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("containerRecipeArn" Data..=)
+              Prelude.<$> containerRecipeArn,
+            ("description" Data..=) Prelude.<$> description,
+            ("distributionConfigurationArn" Data..=)
+              Prelude.<$> distributionConfigurationArn,
+            ("enhancedImageMetadataEnabled" Data..=)
+              Prelude.<$> enhancedImageMetadataEnabled,
+            ("imageRecipeArn" Data..=)
+              Prelude.<$> imageRecipeArn,
+            ("imageTestsConfiguration" Data..=)
+              Prelude.<$> imageTestsConfiguration,
+            ("schedule" Data..=) Prelude.<$> schedule,
+            ("status" Data..=) Prelude.<$> status,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ( "infrastructureConfigurationArn"
+                  Data..= infrastructureConfigurationArn
+              ),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance Data.ToPath CreateImagePipeline where
+  toPath = Prelude.const "/CreateImagePipeline"
+
+instance Data.ToQuery CreateImagePipeline where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateImagePipelineResponse' smart constructor.
+data CreateImagePipelineResponse = CreateImagePipelineResponse'
+  { -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the image pipeline that was created by
+    -- this request.
+    imagePipelineArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateImagePipelineResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createImagePipelineResponse_clientToken' - The idempotency token used to make this request idempotent.
+--
+-- 'imagePipelineArn', 'createImagePipelineResponse_imagePipelineArn' - The Amazon Resource Name (ARN) of the image pipeline that was created by
+-- this request.
+--
+-- 'requestId', 'createImagePipelineResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'createImagePipelineResponse_httpStatus' - The response's http status code.
+newCreateImagePipelineResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateImagePipelineResponse
+newCreateImagePipelineResponse pHttpStatus_ =
+  CreateImagePipelineResponse'
+    { clientToken =
+        Prelude.Nothing,
+      imagePipelineArn = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The idempotency token used to make this request idempotent.
+createImagePipelineResponse_clientToken :: Lens.Lens' CreateImagePipelineResponse (Prelude.Maybe Prelude.Text)
+createImagePipelineResponse_clientToken = Lens.lens (\CreateImagePipelineResponse' {clientToken} -> clientToken) (\s@CreateImagePipelineResponse' {} a -> s {clientToken = a} :: CreateImagePipelineResponse)
+
+-- | The Amazon Resource Name (ARN) of the image pipeline that was created by
+-- this request.
+createImagePipelineResponse_imagePipelineArn :: Lens.Lens' CreateImagePipelineResponse (Prelude.Maybe Prelude.Text)
+createImagePipelineResponse_imagePipelineArn = Lens.lens (\CreateImagePipelineResponse' {imagePipelineArn} -> imagePipelineArn) (\s@CreateImagePipelineResponse' {} a -> s {imagePipelineArn = a} :: CreateImagePipelineResponse)
+
+-- | The request ID that uniquely identifies this request.
+createImagePipelineResponse_requestId :: Lens.Lens' CreateImagePipelineResponse (Prelude.Maybe Prelude.Text)
+createImagePipelineResponse_requestId = Lens.lens (\CreateImagePipelineResponse' {requestId} -> requestId) (\s@CreateImagePipelineResponse' {} a -> s {requestId = a} :: CreateImagePipelineResponse)
+
+-- | The response's http status code.
+createImagePipelineResponse_httpStatus :: Lens.Lens' CreateImagePipelineResponse Prelude.Int
+createImagePipelineResponse_httpStatus = Lens.lens (\CreateImagePipelineResponse' {httpStatus} -> httpStatus) (\s@CreateImagePipelineResponse' {} a -> s {httpStatus = a} :: CreateImagePipelineResponse)
+
+instance Prelude.NFData CreateImagePipelineResponse where
+  rnf CreateImagePipelineResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf imagePipelineArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/CreateImageRecipe.hs b/gen/Amazonka/ImageBuilder/CreateImageRecipe.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/CreateImageRecipe.hs
@@ -0,0 +1,398 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.CreateImageRecipe
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new image recipe. Image recipes define how images are
+-- configured, tested, and assessed.
+module Amazonka.ImageBuilder.CreateImageRecipe
+  ( -- * Creating a Request
+    CreateImageRecipe (..),
+    newCreateImageRecipe,
+
+    -- * Request Lenses
+    createImageRecipe_additionalInstanceConfiguration,
+    createImageRecipe_blockDeviceMappings,
+    createImageRecipe_description,
+    createImageRecipe_tags,
+    createImageRecipe_workingDirectory,
+    createImageRecipe_name,
+    createImageRecipe_semanticVersion,
+    createImageRecipe_components,
+    createImageRecipe_parentImage,
+    createImageRecipe_clientToken,
+
+    -- * Destructuring the Response
+    CreateImageRecipeResponse (..),
+    newCreateImageRecipeResponse,
+
+    -- * Response Lenses
+    createImageRecipeResponse_clientToken,
+    createImageRecipeResponse_imageRecipeArn,
+    createImageRecipeResponse_requestId,
+    createImageRecipeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateImageRecipe' smart constructor.
+data CreateImageRecipe = CreateImageRecipe'
+  { -- | Specify additional settings and launch scripts for your build instances.
+    additionalInstanceConfiguration :: Prelude.Maybe AdditionalInstanceConfiguration,
+    -- | The block device mappings of the image recipe.
+    blockDeviceMappings :: Prelude.Maybe [InstanceBlockDeviceMapping],
+    -- | The description of the image recipe.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The tags of the image recipe.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The working directory used during build and test workflows.
+    workingDirectory :: Prelude.Maybe Prelude.Text,
+    -- | The name of the image recipe.
+    name :: Prelude.Text,
+    -- | The semantic version of the image recipe. This version follows the
+    -- semantic version syntax.
+    --
+    -- The semantic version has four nodes:
+    -- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+    -- first three, and can filter on all of them.
+    --
+    -- __Assignment:__ For the first three nodes you can assign any positive
+    -- integer value, including zero, with an upper limit of 2^30-1, or
+    -- 1073741823 for each node. Image Builder automatically assigns the build
+    -- number to the fourth node.
+    --
+    -- __Patterns:__ You can use any numeric pattern that adheres to the
+    -- assignment requirements for the nodes that you can assign. For example,
+    -- you might choose a software version pattern, such as 1.0.0, or a date,
+    -- such as 2021.01.01.
+    semanticVersion :: Prelude.Text,
+    -- | The components of the image recipe.
+    components :: Prelude.NonEmpty ComponentConfiguration,
+    -- | The base image of the image recipe. The value of the string can be the
+    -- ARN of the base image or an AMI ID. The format for the ARN follows this
+    -- example:
+    -- @arn:aws:imagebuilder:us-west-2:aws:image\/windows-server-2016-english-full-base-x86\/x.x.x@.
+    -- You can provide the specific version that you want to use, or you can
+    -- use a wildcard in all of the fields. If you enter an AMI ID for the
+    -- string value, you must have access to the AMI, and the AMI must be in
+    -- the same Region in which you are using Image Builder.
+    parentImage :: Prelude.Text,
+    -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateImageRecipe' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalInstanceConfiguration', 'createImageRecipe_additionalInstanceConfiguration' - Specify additional settings and launch scripts for your build instances.
+--
+-- 'blockDeviceMappings', 'createImageRecipe_blockDeviceMappings' - The block device mappings of the image recipe.
+--
+-- 'description', 'createImageRecipe_description' - The description of the image recipe.
+--
+-- 'tags', 'createImageRecipe_tags' - The tags of the image recipe.
+--
+-- 'workingDirectory', 'createImageRecipe_workingDirectory' - The working directory used during build and test workflows.
+--
+-- 'name', 'createImageRecipe_name' - The name of the image recipe.
+--
+-- 'semanticVersion', 'createImageRecipe_semanticVersion' - The semantic version of the image recipe. This version follows the
+-- semantic version syntax.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+--
+-- 'components', 'createImageRecipe_components' - The components of the image recipe.
+--
+-- 'parentImage', 'createImageRecipe_parentImage' - The base image of the image recipe. The value of the string can be the
+-- ARN of the base image or an AMI ID. The format for the ARN follows this
+-- example:
+-- @arn:aws:imagebuilder:us-west-2:aws:image\/windows-server-2016-english-full-base-x86\/x.x.x@.
+-- You can provide the specific version that you want to use, or you can
+-- use a wildcard in all of the fields. If you enter an AMI ID for the
+-- string value, you must have access to the AMI, and the AMI must be in
+-- the same Region in which you are using Image Builder.
+--
+-- 'clientToken', 'createImageRecipe_clientToken' - The idempotency token used to make this request idempotent.
+newCreateImageRecipe ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'semanticVersion'
+  Prelude.Text ->
+  -- | 'components'
+  Prelude.NonEmpty ComponentConfiguration ->
+  -- | 'parentImage'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  CreateImageRecipe
+newCreateImageRecipe
+  pName_
+  pSemanticVersion_
+  pComponents_
+  pParentImage_
+  pClientToken_ =
+    CreateImageRecipe'
+      { additionalInstanceConfiguration =
+          Prelude.Nothing,
+        blockDeviceMappings = Prelude.Nothing,
+        description = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        workingDirectory = Prelude.Nothing,
+        name = pName_,
+        semanticVersion = pSemanticVersion_,
+        components = Lens.coerced Lens.# pComponents_,
+        parentImage = pParentImage_,
+        clientToken = pClientToken_
+      }
+
+-- | Specify additional settings and launch scripts for your build instances.
+createImageRecipe_additionalInstanceConfiguration :: Lens.Lens' CreateImageRecipe (Prelude.Maybe AdditionalInstanceConfiguration)
+createImageRecipe_additionalInstanceConfiguration = Lens.lens (\CreateImageRecipe' {additionalInstanceConfiguration} -> additionalInstanceConfiguration) (\s@CreateImageRecipe' {} a -> s {additionalInstanceConfiguration = a} :: CreateImageRecipe)
+
+-- | The block device mappings of the image recipe.
+createImageRecipe_blockDeviceMappings :: Lens.Lens' CreateImageRecipe (Prelude.Maybe [InstanceBlockDeviceMapping])
+createImageRecipe_blockDeviceMappings = Lens.lens (\CreateImageRecipe' {blockDeviceMappings} -> blockDeviceMappings) (\s@CreateImageRecipe' {} a -> s {blockDeviceMappings = a} :: CreateImageRecipe) Prelude.. Lens.mapping Lens.coerced
+
+-- | The description of the image recipe.
+createImageRecipe_description :: Lens.Lens' CreateImageRecipe (Prelude.Maybe Prelude.Text)
+createImageRecipe_description = Lens.lens (\CreateImageRecipe' {description} -> description) (\s@CreateImageRecipe' {} a -> s {description = a} :: CreateImageRecipe)
+
+-- | The tags of the image recipe.
+createImageRecipe_tags :: Lens.Lens' CreateImageRecipe (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createImageRecipe_tags = Lens.lens (\CreateImageRecipe' {tags} -> tags) (\s@CreateImageRecipe' {} a -> s {tags = a} :: CreateImageRecipe) Prelude.. Lens.mapping Lens.coerced
+
+-- | The working directory used during build and test workflows.
+createImageRecipe_workingDirectory :: Lens.Lens' CreateImageRecipe (Prelude.Maybe Prelude.Text)
+createImageRecipe_workingDirectory = Lens.lens (\CreateImageRecipe' {workingDirectory} -> workingDirectory) (\s@CreateImageRecipe' {} a -> s {workingDirectory = a} :: CreateImageRecipe)
+
+-- | The name of the image recipe.
+createImageRecipe_name :: Lens.Lens' CreateImageRecipe Prelude.Text
+createImageRecipe_name = Lens.lens (\CreateImageRecipe' {name} -> name) (\s@CreateImageRecipe' {} a -> s {name = a} :: CreateImageRecipe)
+
+-- | The semantic version of the image recipe. This version follows the
+-- semantic version syntax.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+createImageRecipe_semanticVersion :: Lens.Lens' CreateImageRecipe Prelude.Text
+createImageRecipe_semanticVersion = Lens.lens (\CreateImageRecipe' {semanticVersion} -> semanticVersion) (\s@CreateImageRecipe' {} a -> s {semanticVersion = a} :: CreateImageRecipe)
+
+-- | The components of the image recipe.
+createImageRecipe_components :: Lens.Lens' CreateImageRecipe (Prelude.NonEmpty ComponentConfiguration)
+createImageRecipe_components = Lens.lens (\CreateImageRecipe' {components} -> components) (\s@CreateImageRecipe' {} a -> s {components = a} :: CreateImageRecipe) Prelude.. Lens.coerced
+
+-- | The base image of the image recipe. The value of the string can be the
+-- ARN of the base image or an AMI ID. The format for the ARN follows this
+-- example:
+-- @arn:aws:imagebuilder:us-west-2:aws:image\/windows-server-2016-english-full-base-x86\/x.x.x@.
+-- You can provide the specific version that you want to use, or you can
+-- use a wildcard in all of the fields. If you enter an AMI ID for the
+-- string value, you must have access to the AMI, and the AMI must be in
+-- the same Region in which you are using Image Builder.
+createImageRecipe_parentImage :: Lens.Lens' CreateImageRecipe Prelude.Text
+createImageRecipe_parentImage = Lens.lens (\CreateImageRecipe' {parentImage} -> parentImage) (\s@CreateImageRecipe' {} a -> s {parentImage = a} :: CreateImageRecipe)
+
+-- | The idempotency token used to make this request idempotent.
+createImageRecipe_clientToken :: Lens.Lens' CreateImageRecipe Prelude.Text
+createImageRecipe_clientToken = Lens.lens (\CreateImageRecipe' {clientToken} -> clientToken) (\s@CreateImageRecipe' {} a -> s {clientToken = a} :: CreateImageRecipe)
+
+instance Core.AWSRequest CreateImageRecipe where
+  type
+    AWSResponse CreateImageRecipe =
+      CreateImageRecipeResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateImageRecipeResponse'
+            Prelude.<$> (x Data..?> "clientToken")
+            Prelude.<*> (x Data..?> "imageRecipeArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateImageRecipe where
+  hashWithSalt _salt CreateImageRecipe' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalInstanceConfiguration
+      `Prelude.hashWithSalt` blockDeviceMappings
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` workingDirectory
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` semanticVersion
+      `Prelude.hashWithSalt` components
+      `Prelude.hashWithSalt` parentImage
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData CreateImageRecipe where
+  rnf CreateImageRecipe' {..} =
+    Prelude.rnf additionalInstanceConfiguration
+      `Prelude.seq` Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf workingDirectory
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf semanticVersion
+      `Prelude.seq` Prelude.rnf components
+      `Prelude.seq` Prelude.rnf parentImage
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance Data.ToHeaders CreateImageRecipe where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateImageRecipe where
+  toJSON CreateImageRecipe' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("additionalInstanceConfiguration" Data..=)
+              Prelude.<$> additionalInstanceConfiguration,
+            ("blockDeviceMappings" Data..=)
+              Prelude.<$> blockDeviceMappings,
+            ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("workingDirectory" Data..=)
+              Prelude.<$> workingDirectory,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ("semanticVersion" Data..= semanticVersion),
+            Prelude.Just ("components" Data..= components),
+            Prelude.Just ("parentImage" Data..= parentImage),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance Data.ToPath CreateImageRecipe where
+  toPath = Prelude.const "/CreateImageRecipe"
+
+instance Data.ToQuery CreateImageRecipe where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateImageRecipeResponse' smart constructor.
+data CreateImageRecipeResponse = CreateImageRecipeResponse'
+  { -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the image recipe that was created by
+    -- this request.
+    imageRecipeArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateImageRecipeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createImageRecipeResponse_clientToken' - The idempotency token used to make this request idempotent.
+--
+-- 'imageRecipeArn', 'createImageRecipeResponse_imageRecipeArn' - The Amazon Resource Name (ARN) of the image recipe that was created by
+-- this request.
+--
+-- 'requestId', 'createImageRecipeResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'createImageRecipeResponse_httpStatus' - The response's http status code.
+newCreateImageRecipeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateImageRecipeResponse
+newCreateImageRecipeResponse pHttpStatus_ =
+  CreateImageRecipeResponse'
+    { clientToken =
+        Prelude.Nothing,
+      imageRecipeArn = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The idempotency token used to make this request idempotent.
+createImageRecipeResponse_clientToken :: Lens.Lens' CreateImageRecipeResponse (Prelude.Maybe Prelude.Text)
+createImageRecipeResponse_clientToken = Lens.lens (\CreateImageRecipeResponse' {clientToken} -> clientToken) (\s@CreateImageRecipeResponse' {} a -> s {clientToken = a} :: CreateImageRecipeResponse)
+
+-- | The Amazon Resource Name (ARN) of the image recipe that was created by
+-- this request.
+createImageRecipeResponse_imageRecipeArn :: Lens.Lens' CreateImageRecipeResponse (Prelude.Maybe Prelude.Text)
+createImageRecipeResponse_imageRecipeArn = Lens.lens (\CreateImageRecipeResponse' {imageRecipeArn} -> imageRecipeArn) (\s@CreateImageRecipeResponse' {} a -> s {imageRecipeArn = a} :: CreateImageRecipeResponse)
+
+-- | The request ID that uniquely identifies this request.
+createImageRecipeResponse_requestId :: Lens.Lens' CreateImageRecipeResponse (Prelude.Maybe Prelude.Text)
+createImageRecipeResponse_requestId = Lens.lens (\CreateImageRecipeResponse' {requestId} -> requestId) (\s@CreateImageRecipeResponse' {} a -> s {requestId = a} :: CreateImageRecipeResponse)
+
+-- | The response's http status code.
+createImageRecipeResponse_httpStatus :: Lens.Lens' CreateImageRecipeResponse Prelude.Int
+createImageRecipeResponse_httpStatus = Lens.lens (\CreateImageRecipeResponse' {httpStatus} -> httpStatus) (\s@CreateImageRecipeResponse' {} a -> s {httpStatus = a} :: CreateImageRecipeResponse)
+
+instance Prelude.NFData CreateImageRecipeResponse where
+  rnf CreateImageRecipeResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf imageRecipeArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/CreateInfrastructureConfiguration.hs b/gen/Amazonka/ImageBuilder/CreateInfrastructureConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/CreateInfrastructureConfiguration.hs
@@ -0,0 +1,459 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.CreateInfrastructureConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new infrastructure configuration. An infrastructure
+-- configuration defines the environment in which your image will be built
+-- and tested.
+module Amazonka.ImageBuilder.CreateInfrastructureConfiguration
+  ( -- * Creating a Request
+    CreateInfrastructureConfiguration (..),
+    newCreateInfrastructureConfiguration,
+
+    -- * Request Lenses
+    createInfrastructureConfiguration_description,
+    createInfrastructureConfiguration_instanceMetadataOptions,
+    createInfrastructureConfiguration_instanceTypes,
+    createInfrastructureConfiguration_keyPair,
+    createInfrastructureConfiguration_logging,
+    createInfrastructureConfiguration_resourceTags,
+    createInfrastructureConfiguration_securityGroupIds,
+    createInfrastructureConfiguration_snsTopicArn,
+    createInfrastructureConfiguration_subnetId,
+    createInfrastructureConfiguration_tags,
+    createInfrastructureConfiguration_terminateInstanceOnFailure,
+    createInfrastructureConfiguration_name,
+    createInfrastructureConfiguration_instanceProfileName,
+    createInfrastructureConfiguration_clientToken,
+
+    -- * Destructuring the Response
+    CreateInfrastructureConfigurationResponse (..),
+    newCreateInfrastructureConfigurationResponse,
+
+    -- * Response Lenses
+    createInfrastructureConfigurationResponse_clientToken,
+    createInfrastructureConfigurationResponse_infrastructureConfigurationArn,
+    createInfrastructureConfigurationResponse_requestId,
+    createInfrastructureConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateInfrastructureConfiguration' smart constructor.
+data CreateInfrastructureConfiguration = CreateInfrastructureConfiguration'
+  { -- | The description of the infrastructure configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The instance metadata options that you can set for the HTTP requests
+    -- that pipeline builds use to launch EC2 build and test instances.
+    instanceMetadataOptions :: Prelude.Maybe InstanceMetadataOptions,
+    -- | The instance types of the infrastructure configuration. You can specify
+    -- one or more instance types to use for this build. The service will pick
+    -- one of these instance types based on availability.
+    instanceTypes :: Prelude.Maybe [Prelude.Text],
+    -- | The key pair of the infrastructure configuration. You can use this to
+    -- log on to and debug the instance used to create your image.
+    keyPair :: Prelude.Maybe Prelude.Text,
+    -- | The logging configuration of the infrastructure configuration.
+    logging :: Prelude.Maybe Logging,
+    -- | The tags attached to the resource created by Image Builder.
+    resourceTags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The security group IDs to associate with the instance used to customize
+    -- your Amazon EC2 AMI.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) for the SNS topic to which we send image
+    -- build event notifications.
+    --
+    -- EC2 Image Builder is unable to send notifications to SNS topics that are
+    -- encrypted using keys from other accounts. The key that is used to
+    -- encrypt the SNS topic must reside in the account that the Image Builder
+    -- service runs under.
+    snsTopicArn :: Prelude.Maybe Prelude.Text,
+    -- | The subnet ID in which to place the instance used to customize your
+    -- Amazon EC2 AMI.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The tags of the infrastructure configuration.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The terminate instance on failure setting of the infrastructure
+    -- configuration. Set to false if you want Image Builder to retain the
+    -- instance used to configure your AMI if the build or test phase of your
+    -- workflow fails.
+    terminateInstanceOnFailure :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the infrastructure configuration.
+    name :: Prelude.Text,
+    -- | The instance profile to associate with the instance used to customize
+    -- your Amazon EC2 AMI.
+    instanceProfileName :: Prelude.Text,
+    -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateInfrastructureConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createInfrastructureConfiguration_description' - The description of the infrastructure configuration.
+--
+-- 'instanceMetadataOptions', 'createInfrastructureConfiguration_instanceMetadataOptions' - The instance metadata options that you can set for the HTTP requests
+-- that pipeline builds use to launch EC2 build and test instances.
+--
+-- 'instanceTypes', 'createInfrastructureConfiguration_instanceTypes' - The instance types of the infrastructure configuration. You can specify
+-- one or more instance types to use for this build. The service will pick
+-- one of these instance types based on availability.
+--
+-- 'keyPair', 'createInfrastructureConfiguration_keyPair' - The key pair of the infrastructure configuration. You can use this to
+-- log on to and debug the instance used to create your image.
+--
+-- 'logging', 'createInfrastructureConfiguration_logging' - The logging configuration of the infrastructure configuration.
+--
+-- 'resourceTags', 'createInfrastructureConfiguration_resourceTags' - The tags attached to the resource created by Image Builder.
+--
+-- 'securityGroupIds', 'createInfrastructureConfiguration_securityGroupIds' - The security group IDs to associate with the instance used to customize
+-- your Amazon EC2 AMI.
+--
+-- 'snsTopicArn', 'createInfrastructureConfiguration_snsTopicArn' - The Amazon Resource Name (ARN) for the SNS topic to which we send image
+-- build event notifications.
+--
+-- EC2 Image Builder is unable to send notifications to SNS topics that are
+-- encrypted using keys from other accounts. The key that is used to
+-- encrypt the SNS topic must reside in the account that the Image Builder
+-- service runs under.
+--
+-- 'subnetId', 'createInfrastructureConfiguration_subnetId' - The subnet ID in which to place the instance used to customize your
+-- Amazon EC2 AMI.
+--
+-- 'tags', 'createInfrastructureConfiguration_tags' - The tags of the infrastructure configuration.
+--
+-- 'terminateInstanceOnFailure', 'createInfrastructureConfiguration_terminateInstanceOnFailure' - The terminate instance on failure setting of the infrastructure
+-- configuration. Set to false if you want Image Builder to retain the
+-- instance used to configure your AMI if the build or test phase of your
+-- workflow fails.
+--
+-- 'name', 'createInfrastructureConfiguration_name' - The name of the infrastructure configuration.
+--
+-- 'instanceProfileName', 'createInfrastructureConfiguration_instanceProfileName' - The instance profile to associate with the instance used to customize
+-- your Amazon EC2 AMI.
+--
+-- 'clientToken', 'createInfrastructureConfiguration_clientToken' - The idempotency token used to make this request idempotent.
+newCreateInfrastructureConfiguration ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'instanceProfileName'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  CreateInfrastructureConfiguration
+newCreateInfrastructureConfiguration
+  pName_
+  pInstanceProfileName_
+  pClientToken_ =
+    CreateInfrastructureConfiguration'
+      { description =
+          Prelude.Nothing,
+        instanceMetadataOptions =
+          Prelude.Nothing,
+        instanceTypes = Prelude.Nothing,
+        keyPair = Prelude.Nothing,
+        logging = Prelude.Nothing,
+        resourceTags = Prelude.Nothing,
+        securityGroupIds = Prelude.Nothing,
+        snsTopicArn = Prelude.Nothing,
+        subnetId = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        terminateInstanceOnFailure =
+          Prelude.Nothing,
+        name = pName_,
+        instanceProfileName =
+          pInstanceProfileName_,
+        clientToken = pClientToken_
+      }
+
+-- | The description of the infrastructure configuration.
+createInfrastructureConfiguration_description :: Lens.Lens' CreateInfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+createInfrastructureConfiguration_description = Lens.lens (\CreateInfrastructureConfiguration' {description} -> description) (\s@CreateInfrastructureConfiguration' {} a -> s {description = a} :: CreateInfrastructureConfiguration)
+
+-- | The instance metadata options that you can set for the HTTP requests
+-- that pipeline builds use to launch EC2 build and test instances.
+createInfrastructureConfiguration_instanceMetadataOptions :: Lens.Lens' CreateInfrastructureConfiguration (Prelude.Maybe InstanceMetadataOptions)
+createInfrastructureConfiguration_instanceMetadataOptions = Lens.lens (\CreateInfrastructureConfiguration' {instanceMetadataOptions} -> instanceMetadataOptions) (\s@CreateInfrastructureConfiguration' {} a -> s {instanceMetadataOptions = a} :: CreateInfrastructureConfiguration)
+
+-- | The instance types of the infrastructure configuration. You can specify
+-- one or more instance types to use for this build. The service will pick
+-- one of these instance types based on availability.
+createInfrastructureConfiguration_instanceTypes :: Lens.Lens' CreateInfrastructureConfiguration (Prelude.Maybe [Prelude.Text])
+createInfrastructureConfiguration_instanceTypes = Lens.lens (\CreateInfrastructureConfiguration' {instanceTypes} -> instanceTypes) (\s@CreateInfrastructureConfiguration' {} a -> s {instanceTypes = a} :: CreateInfrastructureConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The key pair of the infrastructure configuration. You can use this to
+-- log on to and debug the instance used to create your image.
+createInfrastructureConfiguration_keyPair :: Lens.Lens' CreateInfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+createInfrastructureConfiguration_keyPair = Lens.lens (\CreateInfrastructureConfiguration' {keyPair} -> keyPair) (\s@CreateInfrastructureConfiguration' {} a -> s {keyPair = a} :: CreateInfrastructureConfiguration)
+
+-- | The logging configuration of the infrastructure configuration.
+createInfrastructureConfiguration_logging :: Lens.Lens' CreateInfrastructureConfiguration (Prelude.Maybe Logging)
+createInfrastructureConfiguration_logging = Lens.lens (\CreateInfrastructureConfiguration' {logging} -> logging) (\s@CreateInfrastructureConfiguration' {} a -> s {logging = a} :: CreateInfrastructureConfiguration)
+
+-- | The tags attached to the resource created by Image Builder.
+createInfrastructureConfiguration_resourceTags :: Lens.Lens' CreateInfrastructureConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createInfrastructureConfiguration_resourceTags = Lens.lens (\CreateInfrastructureConfiguration' {resourceTags} -> resourceTags) (\s@CreateInfrastructureConfiguration' {} a -> s {resourceTags = a} :: CreateInfrastructureConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The security group IDs to associate with the instance used to customize
+-- your Amazon EC2 AMI.
+createInfrastructureConfiguration_securityGroupIds :: Lens.Lens' CreateInfrastructureConfiguration (Prelude.Maybe [Prelude.Text])
+createInfrastructureConfiguration_securityGroupIds = Lens.lens (\CreateInfrastructureConfiguration' {securityGroupIds} -> securityGroupIds) (\s@CreateInfrastructureConfiguration' {} a -> s {securityGroupIds = a} :: CreateInfrastructureConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) for the SNS topic to which we send image
+-- build event notifications.
+--
+-- EC2 Image Builder is unable to send notifications to SNS topics that are
+-- encrypted using keys from other accounts. The key that is used to
+-- encrypt the SNS topic must reside in the account that the Image Builder
+-- service runs under.
+createInfrastructureConfiguration_snsTopicArn :: Lens.Lens' CreateInfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+createInfrastructureConfiguration_snsTopicArn = Lens.lens (\CreateInfrastructureConfiguration' {snsTopicArn} -> snsTopicArn) (\s@CreateInfrastructureConfiguration' {} a -> s {snsTopicArn = a} :: CreateInfrastructureConfiguration)
+
+-- | The subnet ID in which to place the instance used to customize your
+-- Amazon EC2 AMI.
+createInfrastructureConfiguration_subnetId :: Lens.Lens' CreateInfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+createInfrastructureConfiguration_subnetId = Lens.lens (\CreateInfrastructureConfiguration' {subnetId} -> subnetId) (\s@CreateInfrastructureConfiguration' {} a -> s {subnetId = a} :: CreateInfrastructureConfiguration)
+
+-- | The tags of the infrastructure configuration.
+createInfrastructureConfiguration_tags :: Lens.Lens' CreateInfrastructureConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createInfrastructureConfiguration_tags = Lens.lens (\CreateInfrastructureConfiguration' {tags} -> tags) (\s@CreateInfrastructureConfiguration' {} a -> s {tags = a} :: CreateInfrastructureConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The terminate instance on failure setting of the infrastructure
+-- configuration. Set to false if you want Image Builder to retain the
+-- instance used to configure your AMI if the build or test phase of your
+-- workflow fails.
+createInfrastructureConfiguration_terminateInstanceOnFailure :: Lens.Lens' CreateInfrastructureConfiguration (Prelude.Maybe Prelude.Bool)
+createInfrastructureConfiguration_terminateInstanceOnFailure = Lens.lens (\CreateInfrastructureConfiguration' {terminateInstanceOnFailure} -> terminateInstanceOnFailure) (\s@CreateInfrastructureConfiguration' {} a -> s {terminateInstanceOnFailure = a} :: CreateInfrastructureConfiguration)
+
+-- | The name of the infrastructure configuration.
+createInfrastructureConfiguration_name :: Lens.Lens' CreateInfrastructureConfiguration Prelude.Text
+createInfrastructureConfiguration_name = Lens.lens (\CreateInfrastructureConfiguration' {name} -> name) (\s@CreateInfrastructureConfiguration' {} a -> s {name = a} :: CreateInfrastructureConfiguration)
+
+-- | The instance profile to associate with the instance used to customize
+-- your Amazon EC2 AMI.
+createInfrastructureConfiguration_instanceProfileName :: Lens.Lens' CreateInfrastructureConfiguration Prelude.Text
+createInfrastructureConfiguration_instanceProfileName = Lens.lens (\CreateInfrastructureConfiguration' {instanceProfileName} -> instanceProfileName) (\s@CreateInfrastructureConfiguration' {} a -> s {instanceProfileName = a} :: CreateInfrastructureConfiguration)
+
+-- | The idempotency token used to make this request idempotent.
+createInfrastructureConfiguration_clientToken :: Lens.Lens' CreateInfrastructureConfiguration Prelude.Text
+createInfrastructureConfiguration_clientToken = Lens.lens (\CreateInfrastructureConfiguration' {clientToken} -> clientToken) (\s@CreateInfrastructureConfiguration' {} a -> s {clientToken = a} :: CreateInfrastructureConfiguration)
+
+instance
+  Core.AWSRequest
+    CreateInfrastructureConfiguration
+  where
+  type
+    AWSResponse CreateInfrastructureConfiguration =
+      CreateInfrastructureConfigurationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateInfrastructureConfigurationResponse'
+            Prelude.<$> (x Data..?> "clientToken")
+            Prelude.<*> (x Data..?> "infrastructureConfigurationArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateInfrastructureConfiguration
+  where
+  hashWithSalt
+    _salt
+    CreateInfrastructureConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` instanceMetadataOptions
+        `Prelude.hashWithSalt` instanceTypes
+        `Prelude.hashWithSalt` keyPair
+        `Prelude.hashWithSalt` logging
+        `Prelude.hashWithSalt` resourceTags
+        `Prelude.hashWithSalt` securityGroupIds
+        `Prelude.hashWithSalt` snsTopicArn
+        `Prelude.hashWithSalt` subnetId
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` terminateInstanceOnFailure
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` instanceProfileName
+        `Prelude.hashWithSalt` clientToken
+
+instance
+  Prelude.NFData
+    CreateInfrastructureConfiguration
+  where
+  rnf CreateInfrastructureConfiguration' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf instanceMetadataOptions
+      `Prelude.seq` Prelude.rnf instanceTypes
+      `Prelude.seq` Prelude.rnf keyPair
+      `Prelude.seq` Prelude.rnf logging
+      `Prelude.seq` Prelude.rnf resourceTags
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf snsTopicArn
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf terminateInstanceOnFailure
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf instanceProfileName
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance
+  Data.ToHeaders
+    CreateInfrastructureConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    CreateInfrastructureConfiguration
+  where
+  toJSON CreateInfrastructureConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("instanceMetadataOptions" Data..=)
+              Prelude.<$> instanceMetadataOptions,
+            ("instanceTypes" Data..=) Prelude.<$> instanceTypes,
+            ("keyPair" Data..=) Prelude.<$> keyPair,
+            ("logging" Data..=) Prelude.<$> logging,
+            ("resourceTags" Data..=) Prelude.<$> resourceTags,
+            ("securityGroupIds" Data..=)
+              Prelude.<$> securityGroupIds,
+            ("snsTopicArn" Data..=) Prelude.<$> snsTopicArn,
+            ("subnetId" Data..=) Prelude.<$> subnetId,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("terminateInstanceOnFailure" Data..=)
+              Prelude.<$> terminateInstanceOnFailure,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ("instanceProfileName" Data..= instanceProfileName),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance
+  Data.ToPath
+    CreateInfrastructureConfiguration
+  where
+  toPath =
+    Prelude.const "/CreateInfrastructureConfiguration"
+
+instance
+  Data.ToQuery
+    CreateInfrastructureConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateInfrastructureConfigurationResponse' smart constructor.
+data CreateInfrastructureConfigurationResponse = CreateInfrastructureConfigurationResponse'
+  { -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+    -- was created by this request.
+    infrastructureConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateInfrastructureConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createInfrastructureConfigurationResponse_clientToken' - The idempotency token used to make this request idempotent.
+--
+-- 'infrastructureConfigurationArn', 'createInfrastructureConfigurationResponse_infrastructureConfigurationArn' - The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- was created by this request.
+--
+-- 'requestId', 'createInfrastructureConfigurationResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'createInfrastructureConfigurationResponse_httpStatus' - The response's http status code.
+newCreateInfrastructureConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateInfrastructureConfigurationResponse
+newCreateInfrastructureConfigurationResponse
+  pHttpStatus_ =
+    CreateInfrastructureConfigurationResponse'
+      { clientToken =
+          Prelude.Nothing,
+        infrastructureConfigurationArn =
+          Prelude.Nothing,
+        requestId = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The idempotency token used to make this request idempotent.
+createInfrastructureConfigurationResponse_clientToken :: Lens.Lens' CreateInfrastructureConfigurationResponse (Prelude.Maybe Prelude.Text)
+createInfrastructureConfigurationResponse_clientToken = Lens.lens (\CreateInfrastructureConfigurationResponse' {clientToken} -> clientToken) (\s@CreateInfrastructureConfigurationResponse' {} a -> s {clientToken = a} :: CreateInfrastructureConfigurationResponse)
+
+-- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- was created by this request.
+createInfrastructureConfigurationResponse_infrastructureConfigurationArn :: Lens.Lens' CreateInfrastructureConfigurationResponse (Prelude.Maybe Prelude.Text)
+createInfrastructureConfigurationResponse_infrastructureConfigurationArn = Lens.lens (\CreateInfrastructureConfigurationResponse' {infrastructureConfigurationArn} -> infrastructureConfigurationArn) (\s@CreateInfrastructureConfigurationResponse' {} a -> s {infrastructureConfigurationArn = a} :: CreateInfrastructureConfigurationResponse)
+
+-- | The request ID that uniquely identifies this request.
+createInfrastructureConfigurationResponse_requestId :: Lens.Lens' CreateInfrastructureConfigurationResponse (Prelude.Maybe Prelude.Text)
+createInfrastructureConfigurationResponse_requestId = Lens.lens (\CreateInfrastructureConfigurationResponse' {requestId} -> requestId) (\s@CreateInfrastructureConfigurationResponse' {} a -> s {requestId = a} :: CreateInfrastructureConfigurationResponse)
+
+-- | The response's http status code.
+createInfrastructureConfigurationResponse_httpStatus :: Lens.Lens' CreateInfrastructureConfigurationResponse Prelude.Int
+createInfrastructureConfigurationResponse_httpStatus = Lens.lens (\CreateInfrastructureConfigurationResponse' {httpStatus} -> httpStatus) (\s@CreateInfrastructureConfigurationResponse' {} a -> s {httpStatus = a} :: CreateInfrastructureConfigurationResponse)
+
+instance
+  Prelude.NFData
+    CreateInfrastructureConfigurationResponse
+  where
+  rnf CreateInfrastructureConfigurationResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf infrastructureConfigurationArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/DeleteComponent.hs b/gen/Amazonka/ImageBuilder/DeleteComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/DeleteComponent.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.DeleteComponent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a component build version.
+module Amazonka.ImageBuilder.DeleteComponent
+  ( -- * Creating a Request
+    DeleteComponent (..),
+    newDeleteComponent,
+
+    -- * Request Lenses
+    deleteComponent_componentBuildVersionArn,
+
+    -- * Destructuring the Response
+    DeleteComponentResponse (..),
+    newDeleteComponentResponse,
+
+    -- * Response Lenses
+    deleteComponentResponse_componentBuildVersionArn,
+    deleteComponentResponse_requestId,
+    deleteComponentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteComponent' smart constructor.
+data DeleteComponent = DeleteComponent'
+  { -- | The Amazon Resource Name (ARN) of the component build version to delete.
+    componentBuildVersionArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteComponent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'componentBuildVersionArn', 'deleteComponent_componentBuildVersionArn' - The Amazon Resource Name (ARN) of the component build version to delete.
+newDeleteComponent ::
+  -- | 'componentBuildVersionArn'
+  Prelude.Text ->
+  DeleteComponent
+newDeleteComponent pComponentBuildVersionArn_ =
+  DeleteComponent'
+    { componentBuildVersionArn =
+        pComponentBuildVersionArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the component build version to delete.
+deleteComponent_componentBuildVersionArn :: Lens.Lens' DeleteComponent Prelude.Text
+deleteComponent_componentBuildVersionArn = Lens.lens (\DeleteComponent' {componentBuildVersionArn} -> componentBuildVersionArn) (\s@DeleteComponent' {} a -> s {componentBuildVersionArn = a} :: DeleteComponent)
+
+instance Core.AWSRequest DeleteComponent where
+  type
+    AWSResponse DeleteComponent =
+      DeleteComponentResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteComponentResponse'
+            Prelude.<$> (x Data..?> "componentBuildVersionArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteComponent where
+  hashWithSalt _salt DeleteComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` componentBuildVersionArn
+
+instance Prelude.NFData DeleteComponent where
+  rnf DeleteComponent' {..} =
+    Prelude.rnf componentBuildVersionArn
+
+instance Data.ToHeaders DeleteComponent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteComponent where
+  toPath = Prelude.const "/DeleteComponent"
+
+instance Data.ToQuery DeleteComponent where
+  toQuery DeleteComponent' {..} =
+    Prelude.mconcat
+      [ "componentBuildVersionArn"
+          Data.=: componentBuildVersionArn
+      ]
+
+-- | /See:/ 'newDeleteComponentResponse' smart constructor.
+data DeleteComponentResponse = DeleteComponentResponse'
+  { -- | The Amazon Resource Name (ARN) of the component build version that was
+    -- deleted.
+    componentBuildVersionArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteComponentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'componentBuildVersionArn', 'deleteComponentResponse_componentBuildVersionArn' - The Amazon Resource Name (ARN) of the component build version that was
+-- deleted.
+--
+-- 'requestId', 'deleteComponentResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'deleteComponentResponse_httpStatus' - The response's http status code.
+newDeleteComponentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteComponentResponse
+newDeleteComponentResponse pHttpStatus_ =
+  DeleteComponentResponse'
+    { componentBuildVersionArn =
+        Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the component build version that was
+-- deleted.
+deleteComponentResponse_componentBuildVersionArn :: Lens.Lens' DeleteComponentResponse (Prelude.Maybe Prelude.Text)
+deleteComponentResponse_componentBuildVersionArn = Lens.lens (\DeleteComponentResponse' {componentBuildVersionArn} -> componentBuildVersionArn) (\s@DeleteComponentResponse' {} a -> s {componentBuildVersionArn = a} :: DeleteComponentResponse)
+
+-- | The request ID that uniquely identifies this request.
+deleteComponentResponse_requestId :: Lens.Lens' DeleteComponentResponse (Prelude.Maybe Prelude.Text)
+deleteComponentResponse_requestId = Lens.lens (\DeleteComponentResponse' {requestId} -> requestId) (\s@DeleteComponentResponse' {} a -> s {requestId = a} :: DeleteComponentResponse)
+
+-- | The response's http status code.
+deleteComponentResponse_httpStatus :: Lens.Lens' DeleteComponentResponse Prelude.Int
+deleteComponentResponse_httpStatus = Lens.lens (\DeleteComponentResponse' {httpStatus} -> httpStatus) (\s@DeleteComponentResponse' {} a -> s {httpStatus = a} :: DeleteComponentResponse)
+
+instance Prelude.NFData DeleteComponentResponse where
+  rnf DeleteComponentResponse' {..} =
+    Prelude.rnf componentBuildVersionArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/DeleteContainerRecipe.hs b/gen/Amazonka/ImageBuilder/DeleteContainerRecipe.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/DeleteContainerRecipe.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.DeleteContainerRecipe
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a container recipe.
+module Amazonka.ImageBuilder.DeleteContainerRecipe
+  ( -- * Creating a Request
+    DeleteContainerRecipe (..),
+    newDeleteContainerRecipe,
+
+    -- * Request Lenses
+    deleteContainerRecipe_containerRecipeArn,
+
+    -- * Destructuring the Response
+    DeleteContainerRecipeResponse (..),
+    newDeleteContainerRecipeResponse,
+
+    -- * Response Lenses
+    deleteContainerRecipeResponse_containerRecipeArn,
+    deleteContainerRecipeResponse_requestId,
+    deleteContainerRecipeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteContainerRecipe' smart constructor.
+data DeleteContainerRecipe = DeleteContainerRecipe'
+  { -- | The Amazon Resource Name (ARN) of the container recipe to delete.
+    containerRecipeArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteContainerRecipe' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'containerRecipeArn', 'deleteContainerRecipe_containerRecipeArn' - The Amazon Resource Name (ARN) of the container recipe to delete.
+newDeleteContainerRecipe ::
+  -- | 'containerRecipeArn'
+  Prelude.Text ->
+  DeleteContainerRecipe
+newDeleteContainerRecipe pContainerRecipeArn_ =
+  DeleteContainerRecipe'
+    { containerRecipeArn =
+        pContainerRecipeArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the container recipe to delete.
+deleteContainerRecipe_containerRecipeArn :: Lens.Lens' DeleteContainerRecipe Prelude.Text
+deleteContainerRecipe_containerRecipeArn = Lens.lens (\DeleteContainerRecipe' {containerRecipeArn} -> containerRecipeArn) (\s@DeleteContainerRecipe' {} a -> s {containerRecipeArn = a} :: DeleteContainerRecipe)
+
+instance Core.AWSRequest DeleteContainerRecipe where
+  type
+    AWSResponse DeleteContainerRecipe =
+      DeleteContainerRecipeResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteContainerRecipeResponse'
+            Prelude.<$> (x Data..?> "containerRecipeArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteContainerRecipe where
+  hashWithSalt _salt DeleteContainerRecipe' {..} =
+    _salt `Prelude.hashWithSalt` containerRecipeArn
+
+instance Prelude.NFData DeleteContainerRecipe where
+  rnf DeleteContainerRecipe' {..} =
+    Prelude.rnf containerRecipeArn
+
+instance Data.ToHeaders DeleteContainerRecipe where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteContainerRecipe where
+  toPath = Prelude.const "/DeleteContainerRecipe"
+
+instance Data.ToQuery DeleteContainerRecipe where
+  toQuery DeleteContainerRecipe' {..} =
+    Prelude.mconcat
+      ["containerRecipeArn" Data.=: containerRecipeArn]
+
+-- | /See:/ 'newDeleteContainerRecipeResponse' smart constructor.
+data DeleteContainerRecipeResponse = DeleteContainerRecipeResponse'
+  { -- | The Amazon Resource Name (ARN) of the container recipe that was deleted.
+    containerRecipeArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteContainerRecipeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'containerRecipeArn', 'deleteContainerRecipeResponse_containerRecipeArn' - The Amazon Resource Name (ARN) of the container recipe that was deleted.
+--
+-- 'requestId', 'deleteContainerRecipeResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'deleteContainerRecipeResponse_httpStatus' - The response's http status code.
+newDeleteContainerRecipeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteContainerRecipeResponse
+newDeleteContainerRecipeResponse pHttpStatus_ =
+  DeleteContainerRecipeResponse'
+    { containerRecipeArn =
+        Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the container recipe that was deleted.
+deleteContainerRecipeResponse_containerRecipeArn :: Lens.Lens' DeleteContainerRecipeResponse (Prelude.Maybe Prelude.Text)
+deleteContainerRecipeResponse_containerRecipeArn = Lens.lens (\DeleteContainerRecipeResponse' {containerRecipeArn} -> containerRecipeArn) (\s@DeleteContainerRecipeResponse' {} a -> s {containerRecipeArn = a} :: DeleteContainerRecipeResponse)
+
+-- | The request ID that uniquely identifies this request.
+deleteContainerRecipeResponse_requestId :: Lens.Lens' DeleteContainerRecipeResponse (Prelude.Maybe Prelude.Text)
+deleteContainerRecipeResponse_requestId = Lens.lens (\DeleteContainerRecipeResponse' {requestId} -> requestId) (\s@DeleteContainerRecipeResponse' {} a -> s {requestId = a} :: DeleteContainerRecipeResponse)
+
+-- | The response's http status code.
+deleteContainerRecipeResponse_httpStatus :: Lens.Lens' DeleteContainerRecipeResponse Prelude.Int
+deleteContainerRecipeResponse_httpStatus = Lens.lens (\DeleteContainerRecipeResponse' {httpStatus} -> httpStatus) (\s@DeleteContainerRecipeResponse' {} a -> s {httpStatus = a} :: DeleteContainerRecipeResponse)
+
+instance Prelude.NFData DeleteContainerRecipeResponse where
+  rnf DeleteContainerRecipeResponse' {..} =
+    Prelude.rnf containerRecipeArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/DeleteDistributionConfiguration.hs b/gen/Amazonka/ImageBuilder/DeleteDistributionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/DeleteDistributionConfiguration.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.DeleteDistributionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a distribution configuration.
+module Amazonka.ImageBuilder.DeleteDistributionConfiguration
+  ( -- * Creating a Request
+    DeleteDistributionConfiguration (..),
+    newDeleteDistributionConfiguration,
+
+    -- * Request Lenses
+    deleteDistributionConfiguration_distributionConfigurationArn,
+
+    -- * Destructuring the Response
+    DeleteDistributionConfigurationResponse (..),
+    newDeleteDistributionConfigurationResponse,
+
+    -- * Response Lenses
+    deleteDistributionConfigurationResponse_distributionConfigurationArn,
+    deleteDistributionConfigurationResponse_requestId,
+    deleteDistributionConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDistributionConfiguration' smart constructor.
+data DeleteDistributionConfiguration = DeleteDistributionConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the distribution configuration to
+    -- delete.
+    distributionConfigurationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDistributionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'distributionConfigurationArn', 'deleteDistributionConfiguration_distributionConfigurationArn' - The Amazon Resource Name (ARN) of the distribution configuration to
+-- delete.
+newDeleteDistributionConfiguration ::
+  -- | 'distributionConfigurationArn'
+  Prelude.Text ->
+  DeleteDistributionConfiguration
+newDeleteDistributionConfiguration
+  pDistributionConfigurationArn_ =
+    DeleteDistributionConfiguration'
+      { distributionConfigurationArn =
+          pDistributionConfigurationArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the distribution configuration to
+-- delete.
+deleteDistributionConfiguration_distributionConfigurationArn :: Lens.Lens' DeleteDistributionConfiguration Prelude.Text
+deleteDistributionConfiguration_distributionConfigurationArn = Lens.lens (\DeleteDistributionConfiguration' {distributionConfigurationArn} -> distributionConfigurationArn) (\s@DeleteDistributionConfiguration' {} a -> s {distributionConfigurationArn = a} :: DeleteDistributionConfiguration)
+
+instance
+  Core.AWSRequest
+    DeleteDistributionConfiguration
+  where
+  type
+    AWSResponse DeleteDistributionConfiguration =
+      DeleteDistributionConfigurationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteDistributionConfigurationResponse'
+            Prelude.<$> (x Data..?> "distributionConfigurationArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteDistributionConfiguration
+  where
+  hashWithSalt
+    _salt
+    DeleteDistributionConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` distributionConfigurationArn
+
+instance
+  Prelude.NFData
+    DeleteDistributionConfiguration
+  where
+  rnf DeleteDistributionConfiguration' {..} =
+    Prelude.rnf distributionConfigurationArn
+
+instance
+  Data.ToHeaders
+    DeleteDistributionConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteDistributionConfiguration where
+  toPath =
+    Prelude.const "/DeleteDistributionConfiguration"
+
+instance Data.ToQuery DeleteDistributionConfiguration where
+  toQuery DeleteDistributionConfiguration' {..} =
+    Prelude.mconcat
+      [ "distributionConfigurationArn"
+          Data.=: distributionConfigurationArn
+      ]
+
+-- | /See:/ 'newDeleteDistributionConfigurationResponse' smart constructor.
+data DeleteDistributionConfigurationResponse = DeleteDistributionConfigurationResponse'
+  { -- | The Amazon Resource Name (ARN) of the distribution configuration that
+    -- was deleted.
+    distributionConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDistributionConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'distributionConfigurationArn', 'deleteDistributionConfigurationResponse_distributionConfigurationArn' - The Amazon Resource Name (ARN) of the distribution configuration that
+-- was deleted.
+--
+-- 'requestId', 'deleteDistributionConfigurationResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'deleteDistributionConfigurationResponse_httpStatus' - The response's http status code.
+newDeleteDistributionConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteDistributionConfigurationResponse
+newDeleteDistributionConfigurationResponse
+  pHttpStatus_ =
+    DeleteDistributionConfigurationResponse'
+      { distributionConfigurationArn =
+          Prelude.Nothing,
+        requestId = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Amazon Resource Name (ARN) of the distribution configuration that
+-- was deleted.
+deleteDistributionConfigurationResponse_distributionConfigurationArn :: Lens.Lens' DeleteDistributionConfigurationResponse (Prelude.Maybe Prelude.Text)
+deleteDistributionConfigurationResponse_distributionConfigurationArn = Lens.lens (\DeleteDistributionConfigurationResponse' {distributionConfigurationArn} -> distributionConfigurationArn) (\s@DeleteDistributionConfigurationResponse' {} a -> s {distributionConfigurationArn = a} :: DeleteDistributionConfigurationResponse)
+
+-- | The request ID that uniquely identifies this request.
+deleteDistributionConfigurationResponse_requestId :: Lens.Lens' DeleteDistributionConfigurationResponse (Prelude.Maybe Prelude.Text)
+deleteDistributionConfigurationResponse_requestId = Lens.lens (\DeleteDistributionConfigurationResponse' {requestId} -> requestId) (\s@DeleteDistributionConfigurationResponse' {} a -> s {requestId = a} :: DeleteDistributionConfigurationResponse)
+
+-- | The response's http status code.
+deleteDistributionConfigurationResponse_httpStatus :: Lens.Lens' DeleteDistributionConfigurationResponse Prelude.Int
+deleteDistributionConfigurationResponse_httpStatus = Lens.lens (\DeleteDistributionConfigurationResponse' {httpStatus} -> httpStatus) (\s@DeleteDistributionConfigurationResponse' {} a -> s {httpStatus = a} :: DeleteDistributionConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DeleteDistributionConfigurationResponse
+  where
+  rnf DeleteDistributionConfigurationResponse' {..} =
+    Prelude.rnf distributionConfigurationArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/DeleteImage.hs b/gen/Amazonka/ImageBuilder/DeleteImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/DeleteImage.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.ImageBuilder.DeleteImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an Image Builder image resource. This does not delete any EC2
+-- AMIs or ECR container images that are created during the image build
+-- process. You must clean those up separately, using the appropriate
+-- Amazon EC2 or Amazon ECR console actions, or API or CLI commands.
+--
+-- -   To deregister an EC2 Linux AMI, see
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/deregister-ami.html Deregister your Linux AMI>
+--     in the //Amazon EC2 User Guide// .
+--
+-- -   To deregister an EC2 Windows AMI, see
+--     <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/deregister-ami.html Deregister your Windows AMI>
+--     in the //Amazon EC2 Windows Guide// .
+--
+-- -   To delete a container image from Amazon ECR, see
+--     <https://docs.aws.amazon.com/AmazonECR/latest/userguide/delete_image.html Deleting an image>
+--     in the /Amazon ECR User Guide/.
+module Amazonka.ImageBuilder.DeleteImage
+  ( -- * Creating a Request
+    DeleteImage (..),
+    newDeleteImage,
+
+    -- * Request Lenses
+    deleteImage_imageBuildVersionArn,
+
+    -- * Destructuring the Response
+    DeleteImageResponse (..),
+    newDeleteImageResponse,
+
+    -- * Response Lenses
+    deleteImageResponse_imageBuildVersionArn,
+    deleteImageResponse_requestId,
+    deleteImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteImage' smart constructor.
+data DeleteImage = DeleteImage'
+  { -- | The Amazon Resource Name (ARN) of the Image Builder image resource to
+    -- delete.
+    imageBuildVersionArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageBuildVersionArn', 'deleteImage_imageBuildVersionArn' - The Amazon Resource Name (ARN) of the Image Builder image resource to
+-- delete.
+newDeleteImage ::
+  -- | 'imageBuildVersionArn'
+  Prelude.Text ->
+  DeleteImage
+newDeleteImage pImageBuildVersionArn_ =
+  DeleteImage'
+    { imageBuildVersionArn =
+        pImageBuildVersionArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the Image Builder image resource to
+-- delete.
+deleteImage_imageBuildVersionArn :: Lens.Lens' DeleteImage Prelude.Text
+deleteImage_imageBuildVersionArn = Lens.lens (\DeleteImage' {imageBuildVersionArn} -> imageBuildVersionArn) (\s@DeleteImage' {} a -> s {imageBuildVersionArn = a} :: DeleteImage)
+
+instance Core.AWSRequest DeleteImage where
+  type AWSResponse DeleteImage = DeleteImageResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteImageResponse'
+            Prelude.<$> (x Data..?> "imageBuildVersionArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteImage where
+  hashWithSalt _salt DeleteImage' {..} =
+    _salt `Prelude.hashWithSalt` imageBuildVersionArn
+
+instance Prelude.NFData DeleteImage where
+  rnf DeleteImage' {..} =
+    Prelude.rnf imageBuildVersionArn
+
+instance Data.ToHeaders DeleteImage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteImage where
+  toPath = Prelude.const "/DeleteImage"
+
+instance Data.ToQuery DeleteImage where
+  toQuery DeleteImage' {..} =
+    Prelude.mconcat
+      ["imageBuildVersionArn" Data.=: imageBuildVersionArn]
+
+-- | /See:/ 'newDeleteImageResponse' smart constructor.
+data DeleteImageResponse = DeleteImageResponse'
+  { -- | The Amazon Resource Name (ARN) of the Image Builder image resource that
+    -- was deleted.
+    imageBuildVersionArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageBuildVersionArn', 'deleteImageResponse_imageBuildVersionArn' - The Amazon Resource Name (ARN) of the Image Builder image resource that
+-- was deleted.
+--
+-- 'requestId', 'deleteImageResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'deleteImageResponse_httpStatus' - The response's http status code.
+newDeleteImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteImageResponse
+newDeleteImageResponse pHttpStatus_ =
+  DeleteImageResponse'
+    { imageBuildVersionArn =
+        Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the Image Builder image resource that
+-- was deleted.
+deleteImageResponse_imageBuildVersionArn :: Lens.Lens' DeleteImageResponse (Prelude.Maybe Prelude.Text)
+deleteImageResponse_imageBuildVersionArn = Lens.lens (\DeleteImageResponse' {imageBuildVersionArn} -> imageBuildVersionArn) (\s@DeleteImageResponse' {} a -> s {imageBuildVersionArn = a} :: DeleteImageResponse)
+
+-- | The request ID that uniquely identifies this request.
+deleteImageResponse_requestId :: Lens.Lens' DeleteImageResponse (Prelude.Maybe Prelude.Text)
+deleteImageResponse_requestId = Lens.lens (\DeleteImageResponse' {requestId} -> requestId) (\s@DeleteImageResponse' {} a -> s {requestId = a} :: DeleteImageResponse)
+
+-- | The response's http status code.
+deleteImageResponse_httpStatus :: Lens.Lens' DeleteImageResponse Prelude.Int
+deleteImageResponse_httpStatus = Lens.lens (\DeleteImageResponse' {httpStatus} -> httpStatus) (\s@DeleteImageResponse' {} a -> s {httpStatus = a} :: DeleteImageResponse)
+
+instance Prelude.NFData DeleteImageResponse where
+  rnf DeleteImageResponse' {..} =
+    Prelude.rnf imageBuildVersionArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/DeleteImagePipeline.hs b/gen/Amazonka/ImageBuilder/DeleteImagePipeline.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/DeleteImagePipeline.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.DeleteImagePipeline
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an image pipeline.
+module Amazonka.ImageBuilder.DeleteImagePipeline
+  ( -- * Creating a Request
+    DeleteImagePipeline (..),
+    newDeleteImagePipeline,
+
+    -- * Request Lenses
+    deleteImagePipeline_imagePipelineArn,
+
+    -- * Destructuring the Response
+    DeleteImagePipelineResponse (..),
+    newDeleteImagePipelineResponse,
+
+    -- * Response Lenses
+    deleteImagePipelineResponse_imagePipelineArn,
+    deleteImagePipelineResponse_requestId,
+    deleteImagePipelineResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteImagePipeline' smart constructor.
+data DeleteImagePipeline = DeleteImagePipeline'
+  { -- | The Amazon Resource Name (ARN) of the image pipeline to delete.
+    imagePipelineArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteImagePipeline' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imagePipelineArn', 'deleteImagePipeline_imagePipelineArn' - The Amazon Resource Name (ARN) of the image pipeline to delete.
+newDeleteImagePipeline ::
+  -- | 'imagePipelineArn'
+  Prelude.Text ->
+  DeleteImagePipeline
+newDeleteImagePipeline pImagePipelineArn_ =
+  DeleteImagePipeline'
+    { imagePipelineArn =
+        pImagePipelineArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the image pipeline to delete.
+deleteImagePipeline_imagePipelineArn :: Lens.Lens' DeleteImagePipeline Prelude.Text
+deleteImagePipeline_imagePipelineArn = Lens.lens (\DeleteImagePipeline' {imagePipelineArn} -> imagePipelineArn) (\s@DeleteImagePipeline' {} a -> s {imagePipelineArn = a} :: DeleteImagePipeline)
+
+instance Core.AWSRequest DeleteImagePipeline where
+  type
+    AWSResponse DeleteImagePipeline =
+      DeleteImagePipelineResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteImagePipelineResponse'
+            Prelude.<$> (x Data..?> "imagePipelineArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteImagePipeline where
+  hashWithSalt _salt DeleteImagePipeline' {..} =
+    _salt `Prelude.hashWithSalt` imagePipelineArn
+
+instance Prelude.NFData DeleteImagePipeline where
+  rnf DeleteImagePipeline' {..} =
+    Prelude.rnf imagePipelineArn
+
+instance Data.ToHeaders DeleteImagePipeline where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteImagePipeline where
+  toPath = Prelude.const "/DeleteImagePipeline"
+
+instance Data.ToQuery DeleteImagePipeline where
+  toQuery DeleteImagePipeline' {..} =
+    Prelude.mconcat
+      ["imagePipelineArn" Data.=: imagePipelineArn]
+
+-- | /See:/ 'newDeleteImagePipelineResponse' smart constructor.
+data DeleteImagePipelineResponse = DeleteImagePipelineResponse'
+  { -- | The Amazon Resource Name (ARN) of the image pipeline that was deleted.
+    imagePipelineArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteImagePipelineResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imagePipelineArn', 'deleteImagePipelineResponse_imagePipelineArn' - The Amazon Resource Name (ARN) of the image pipeline that was deleted.
+--
+-- 'requestId', 'deleteImagePipelineResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'deleteImagePipelineResponse_httpStatus' - The response's http status code.
+newDeleteImagePipelineResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteImagePipelineResponse
+newDeleteImagePipelineResponse pHttpStatus_ =
+  DeleteImagePipelineResponse'
+    { imagePipelineArn =
+        Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the image pipeline that was deleted.
+deleteImagePipelineResponse_imagePipelineArn :: Lens.Lens' DeleteImagePipelineResponse (Prelude.Maybe Prelude.Text)
+deleteImagePipelineResponse_imagePipelineArn = Lens.lens (\DeleteImagePipelineResponse' {imagePipelineArn} -> imagePipelineArn) (\s@DeleteImagePipelineResponse' {} a -> s {imagePipelineArn = a} :: DeleteImagePipelineResponse)
+
+-- | The request ID that uniquely identifies this request.
+deleteImagePipelineResponse_requestId :: Lens.Lens' DeleteImagePipelineResponse (Prelude.Maybe Prelude.Text)
+deleteImagePipelineResponse_requestId = Lens.lens (\DeleteImagePipelineResponse' {requestId} -> requestId) (\s@DeleteImagePipelineResponse' {} a -> s {requestId = a} :: DeleteImagePipelineResponse)
+
+-- | The response's http status code.
+deleteImagePipelineResponse_httpStatus :: Lens.Lens' DeleteImagePipelineResponse Prelude.Int
+deleteImagePipelineResponse_httpStatus = Lens.lens (\DeleteImagePipelineResponse' {httpStatus} -> httpStatus) (\s@DeleteImagePipelineResponse' {} a -> s {httpStatus = a} :: DeleteImagePipelineResponse)
+
+instance Prelude.NFData DeleteImagePipelineResponse where
+  rnf DeleteImagePipelineResponse' {..} =
+    Prelude.rnf imagePipelineArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/DeleteImageRecipe.hs b/gen/Amazonka/ImageBuilder/DeleteImageRecipe.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/DeleteImageRecipe.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.DeleteImageRecipe
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an image recipe.
+module Amazonka.ImageBuilder.DeleteImageRecipe
+  ( -- * Creating a Request
+    DeleteImageRecipe (..),
+    newDeleteImageRecipe,
+
+    -- * Request Lenses
+    deleteImageRecipe_imageRecipeArn,
+
+    -- * Destructuring the Response
+    DeleteImageRecipeResponse (..),
+    newDeleteImageRecipeResponse,
+
+    -- * Response Lenses
+    deleteImageRecipeResponse_imageRecipeArn,
+    deleteImageRecipeResponse_requestId,
+    deleteImageRecipeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteImageRecipe' smart constructor.
+data DeleteImageRecipe = DeleteImageRecipe'
+  { -- | The Amazon Resource Name (ARN) of the image recipe to delete.
+    imageRecipeArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteImageRecipe' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageRecipeArn', 'deleteImageRecipe_imageRecipeArn' - The Amazon Resource Name (ARN) of the image recipe to delete.
+newDeleteImageRecipe ::
+  -- | 'imageRecipeArn'
+  Prelude.Text ->
+  DeleteImageRecipe
+newDeleteImageRecipe pImageRecipeArn_ =
+  DeleteImageRecipe'
+    { imageRecipeArn =
+        pImageRecipeArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the image recipe to delete.
+deleteImageRecipe_imageRecipeArn :: Lens.Lens' DeleteImageRecipe Prelude.Text
+deleteImageRecipe_imageRecipeArn = Lens.lens (\DeleteImageRecipe' {imageRecipeArn} -> imageRecipeArn) (\s@DeleteImageRecipe' {} a -> s {imageRecipeArn = a} :: DeleteImageRecipe)
+
+instance Core.AWSRequest DeleteImageRecipe where
+  type
+    AWSResponse DeleteImageRecipe =
+      DeleteImageRecipeResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteImageRecipeResponse'
+            Prelude.<$> (x Data..?> "imageRecipeArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteImageRecipe where
+  hashWithSalt _salt DeleteImageRecipe' {..} =
+    _salt `Prelude.hashWithSalt` imageRecipeArn
+
+instance Prelude.NFData DeleteImageRecipe where
+  rnf DeleteImageRecipe' {..} =
+    Prelude.rnf imageRecipeArn
+
+instance Data.ToHeaders DeleteImageRecipe where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteImageRecipe where
+  toPath = Prelude.const "/DeleteImageRecipe"
+
+instance Data.ToQuery DeleteImageRecipe where
+  toQuery DeleteImageRecipe' {..} =
+    Prelude.mconcat
+      ["imageRecipeArn" Data.=: imageRecipeArn]
+
+-- | /See:/ 'newDeleteImageRecipeResponse' smart constructor.
+data DeleteImageRecipeResponse = DeleteImageRecipeResponse'
+  { -- | The Amazon Resource Name (ARN) of the image recipe that was deleted.
+    imageRecipeArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteImageRecipeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageRecipeArn', 'deleteImageRecipeResponse_imageRecipeArn' - The Amazon Resource Name (ARN) of the image recipe that was deleted.
+--
+-- 'requestId', 'deleteImageRecipeResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'deleteImageRecipeResponse_httpStatus' - The response's http status code.
+newDeleteImageRecipeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteImageRecipeResponse
+newDeleteImageRecipeResponse pHttpStatus_ =
+  DeleteImageRecipeResponse'
+    { imageRecipeArn =
+        Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the image recipe that was deleted.
+deleteImageRecipeResponse_imageRecipeArn :: Lens.Lens' DeleteImageRecipeResponse (Prelude.Maybe Prelude.Text)
+deleteImageRecipeResponse_imageRecipeArn = Lens.lens (\DeleteImageRecipeResponse' {imageRecipeArn} -> imageRecipeArn) (\s@DeleteImageRecipeResponse' {} a -> s {imageRecipeArn = a} :: DeleteImageRecipeResponse)
+
+-- | The request ID that uniquely identifies this request.
+deleteImageRecipeResponse_requestId :: Lens.Lens' DeleteImageRecipeResponse (Prelude.Maybe Prelude.Text)
+deleteImageRecipeResponse_requestId = Lens.lens (\DeleteImageRecipeResponse' {requestId} -> requestId) (\s@DeleteImageRecipeResponse' {} a -> s {requestId = a} :: DeleteImageRecipeResponse)
+
+-- | The response's http status code.
+deleteImageRecipeResponse_httpStatus :: Lens.Lens' DeleteImageRecipeResponse Prelude.Int
+deleteImageRecipeResponse_httpStatus = Lens.lens (\DeleteImageRecipeResponse' {httpStatus} -> httpStatus) (\s@DeleteImageRecipeResponse' {} a -> s {httpStatus = a} :: DeleteImageRecipeResponse)
+
+instance Prelude.NFData DeleteImageRecipeResponse where
+  rnf DeleteImageRecipeResponse' {..} =
+    Prelude.rnf imageRecipeArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/DeleteInfrastructureConfiguration.hs b/gen/Amazonka/ImageBuilder/DeleteInfrastructureConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/DeleteInfrastructureConfiguration.hs
@@ -0,0 +1,210 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.DeleteInfrastructureConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an infrastructure configuration.
+module Amazonka.ImageBuilder.DeleteInfrastructureConfiguration
+  ( -- * Creating a Request
+    DeleteInfrastructureConfiguration (..),
+    newDeleteInfrastructureConfiguration,
+
+    -- * Request Lenses
+    deleteInfrastructureConfiguration_infrastructureConfigurationArn,
+
+    -- * Destructuring the Response
+    DeleteInfrastructureConfigurationResponse (..),
+    newDeleteInfrastructureConfigurationResponse,
+
+    -- * Response Lenses
+    deleteInfrastructureConfigurationResponse_infrastructureConfigurationArn,
+    deleteInfrastructureConfigurationResponse_requestId,
+    deleteInfrastructureConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteInfrastructureConfiguration' smart constructor.
+data DeleteInfrastructureConfiguration = DeleteInfrastructureConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the infrastructure configuration to
+    -- delete.
+    infrastructureConfigurationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteInfrastructureConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'infrastructureConfigurationArn', 'deleteInfrastructureConfiguration_infrastructureConfigurationArn' - The Amazon Resource Name (ARN) of the infrastructure configuration to
+-- delete.
+newDeleteInfrastructureConfiguration ::
+  -- | 'infrastructureConfigurationArn'
+  Prelude.Text ->
+  DeleteInfrastructureConfiguration
+newDeleteInfrastructureConfiguration
+  pInfrastructureConfigurationArn_ =
+    DeleteInfrastructureConfiguration'
+      { infrastructureConfigurationArn =
+          pInfrastructureConfigurationArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the infrastructure configuration to
+-- delete.
+deleteInfrastructureConfiguration_infrastructureConfigurationArn :: Lens.Lens' DeleteInfrastructureConfiguration Prelude.Text
+deleteInfrastructureConfiguration_infrastructureConfigurationArn = Lens.lens (\DeleteInfrastructureConfiguration' {infrastructureConfigurationArn} -> infrastructureConfigurationArn) (\s@DeleteInfrastructureConfiguration' {} a -> s {infrastructureConfigurationArn = a} :: DeleteInfrastructureConfiguration)
+
+instance
+  Core.AWSRequest
+    DeleteInfrastructureConfiguration
+  where
+  type
+    AWSResponse DeleteInfrastructureConfiguration =
+      DeleteInfrastructureConfigurationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteInfrastructureConfigurationResponse'
+            Prelude.<$> (x Data..?> "infrastructureConfigurationArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteInfrastructureConfiguration
+  where
+  hashWithSalt
+    _salt
+    DeleteInfrastructureConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` infrastructureConfigurationArn
+
+instance
+  Prelude.NFData
+    DeleteInfrastructureConfiguration
+  where
+  rnf DeleteInfrastructureConfiguration' {..} =
+    Prelude.rnf infrastructureConfigurationArn
+
+instance
+  Data.ToHeaders
+    DeleteInfrastructureConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    DeleteInfrastructureConfiguration
+  where
+  toPath =
+    Prelude.const "/DeleteInfrastructureConfiguration"
+
+instance
+  Data.ToQuery
+    DeleteInfrastructureConfiguration
+  where
+  toQuery DeleteInfrastructureConfiguration' {..} =
+    Prelude.mconcat
+      [ "infrastructureConfigurationArn"
+          Data.=: infrastructureConfigurationArn
+      ]
+
+-- | /See:/ 'newDeleteInfrastructureConfigurationResponse' smart constructor.
+data DeleteInfrastructureConfigurationResponse = DeleteInfrastructureConfigurationResponse'
+  { -- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+    -- was deleted.
+    infrastructureConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteInfrastructureConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'infrastructureConfigurationArn', 'deleteInfrastructureConfigurationResponse_infrastructureConfigurationArn' - The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- was deleted.
+--
+-- 'requestId', 'deleteInfrastructureConfigurationResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'deleteInfrastructureConfigurationResponse_httpStatus' - The response's http status code.
+newDeleteInfrastructureConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteInfrastructureConfigurationResponse
+newDeleteInfrastructureConfigurationResponse
+  pHttpStatus_ =
+    DeleteInfrastructureConfigurationResponse'
+      { infrastructureConfigurationArn =
+          Prelude.Nothing,
+        requestId = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- was deleted.
+deleteInfrastructureConfigurationResponse_infrastructureConfigurationArn :: Lens.Lens' DeleteInfrastructureConfigurationResponse (Prelude.Maybe Prelude.Text)
+deleteInfrastructureConfigurationResponse_infrastructureConfigurationArn = Lens.lens (\DeleteInfrastructureConfigurationResponse' {infrastructureConfigurationArn} -> infrastructureConfigurationArn) (\s@DeleteInfrastructureConfigurationResponse' {} a -> s {infrastructureConfigurationArn = a} :: DeleteInfrastructureConfigurationResponse)
+
+-- | The request ID that uniquely identifies this request.
+deleteInfrastructureConfigurationResponse_requestId :: Lens.Lens' DeleteInfrastructureConfigurationResponse (Prelude.Maybe Prelude.Text)
+deleteInfrastructureConfigurationResponse_requestId = Lens.lens (\DeleteInfrastructureConfigurationResponse' {requestId} -> requestId) (\s@DeleteInfrastructureConfigurationResponse' {} a -> s {requestId = a} :: DeleteInfrastructureConfigurationResponse)
+
+-- | The response's http status code.
+deleteInfrastructureConfigurationResponse_httpStatus :: Lens.Lens' DeleteInfrastructureConfigurationResponse Prelude.Int
+deleteInfrastructureConfigurationResponse_httpStatus = Lens.lens (\DeleteInfrastructureConfigurationResponse' {httpStatus} -> httpStatus) (\s@DeleteInfrastructureConfigurationResponse' {} a -> s {httpStatus = a} :: DeleteInfrastructureConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DeleteInfrastructureConfigurationResponse
+  where
+  rnf DeleteInfrastructureConfigurationResponse' {..} =
+    Prelude.rnf infrastructureConfigurationArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/GetComponent.hs b/gen/Amazonka/ImageBuilder/GetComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/GetComponent.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.ImageBuilder.GetComponent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a component object.
+module Amazonka.ImageBuilder.GetComponent
+  ( -- * Creating a Request
+    GetComponent (..),
+    newGetComponent,
+
+    -- * Request Lenses
+    getComponent_componentBuildVersionArn,
+
+    -- * Destructuring the Response
+    GetComponentResponse (..),
+    newGetComponentResponse,
+
+    -- * Response Lenses
+    getComponentResponse_component,
+    getComponentResponse_requestId,
+    getComponentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetComponent' smart constructor.
+data GetComponent = GetComponent'
+  { -- | The Amazon Resource Name (ARN) of the component that you want to
+    -- retrieve. Regex requires \"\/\\d+$\" suffix.
+    componentBuildVersionArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetComponent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'componentBuildVersionArn', 'getComponent_componentBuildVersionArn' - The Amazon Resource Name (ARN) of the component that you want to
+-- retrieve. Regex requires \"\/\\d+$\" suffix.
+newGetComponent ::
+  -- | 'componentBuildVersionArn'
+  Prelude.Text ->
+  GetComponent
+newGetComponent pComponentBuildVersionArn_ =
+  GetComponent'
+    { componentBuildVersionArn =
+        pComponentBuildVersionArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the component that you want to
+-- retrieve. Regex requires \"\/\\d+$\" suffix.
+getComponent_componentBuildVersionArn :: Lens.Lens' GetComponent Prelude.Text
+getComponent_componentBuildVersionArn = Lens.lens (\GetComponent' {componentBuildVersionArn} -> componentBuildVersionArn) (\s@GetComponent' {} a -> s {componentBuildVersionArn = a} :: GetComponent)
+
+instance Core.AWSRequest GetComponent where
+  type AWSResponse GetComponent = GetComponentResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetComponentResponse'
+            Prelude.<$> (x Data..?> "component")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetComponent where
+  hashWithSalt _salt GetComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` componentBuildVersionArn
+
+instance Prelude.NFData GetComponent where
+  rnf GetComponent' {..} =
+    Prelude.rnf componentBuildVersionArn
+
+instance Data.ToHeaders GetComponent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetComponent where
+  toPath = Prelude.const "/GetComponent"
+
+instance Data.ToQuery GetComponent where
+  toQuery GetComponent' {..} =
+    Prelude.mconcat
+      [ "componentBuildVersionArn"
+          Data.=: componentBuildVersionArn
+      ]
+
+-- | /See:/ 'newGetComponentResponse' smart constructor.
+data GetComponentResponse = GetComponentResponse'
+  { -- | The component object associated with the specified ARN.
+    component :: Prelude.Maybe Component,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetComponentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'component', 'getComponentResponse_component' - The component object associated with the specified ARN.
+--
+-- 'requestId', 'getComponentResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'getComponentResponse_httpStatus' - The response's http status code.
+newGetComponentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetComponentResponse
+newGetComponentResponse pHttpStatus_ =
+  GetComponentResponse'
+    { component = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The component object associated with the specified ARN.
+getComponentResponse_component :: Lens.Lens' GetComponentResponse (Prelude.Maybe Component)
+getComponentResponse_component = Lens.lens (\GetComponentResponse' {component} -> component) (\s@GetComponentResponse' {} a -> s {component = a} :: GetComponentResponse)
+
+-- | The request ID that uniquely identifies this request.
+getComponentResponse_requestId :: Lens.Lens' GetComponentResponse (Prelude.Maybe Prelude.Text)
+getComponentResponse_requestId = Lens.lens (\GetComponentResponse' {requestId} -> requestId) (\s@GetComponentResponse' {} a -> s {requestId = a} :: GetComponentResponse)
+
+-- | The response's http status code.
+getComponentResponse_httpStatus :: Lens.Lens' GetComponentResponse Prelude.Int
+getComponentResponse_httpStatus = Lens.lens (\GetComponentResponse' {httpStatus} -> httpStatus) (\s@GetComponentResponse' {} a -> s {httpStatus = a} :: GetComponentResponse)
+
+instance Prelude.NFData GetComponentResponse where
+  rnf GetComponentResponse' {..} =
+    Prelude.rnf component
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/GetComponentPolicy.hs b/gen/Amazonka/ImageBuilder/GetComponentPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/GetComponentPolicy.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.GetComponentPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a component policy.
+module Amazonka.ImageBuilder.GetComponentPolicy
+  ( -- * Creating a Request
+    GetComponentPolicy (..),
+    newGetComponentPolicy,
+
+    -- * Request Lenses
+    getComponentPolicy_componentArn,
+
+    -- * Destructuring the Response
+    GetComponentPolicyResponse (..),
+    newGetComponentPolicyResponse,
+
+    -- * Response Lenses
+    getComponentPolicyResponse_policy,
+    getComponentPolicyResponse_requestId,
+    getComponentPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetComponentPolicy' smart constructor.
+data GetComponentPolicy = GetComponentPolicy'
+  { -- | The Amazon Resource Name (ARN) of the component whose policy you want to
+    -- retrieve.
+    componentArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetComponentPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'componentArn', 'getComponentPolicy_componentArn' - The Amazon Resource Name (ARN) of the component whose policy you want to
+-- retrieve.
+newGetComponentPolicy ::
+  -- | 'componentArn'
+  Prelude.Text ->
+  GetComponentPolicy
+newGetComponentPolicy pComponentArn_ =
+  GetComponentPolicy' {componentArn = pComponentArn_}
+
+-- | The Amazon Resource Name (ARN) of the component whose policy you want to
+-- retrieve.
+getComponentPolicy_componentArn :: Lens.Lens' GetComponentPolicy Prelude.Text
+getComponentPolicy_componentArn = Lens.lens (\GetComponentPolicy' {componentArn} -> componentArn) (\s@GetComponentPolicy' {} a -> s {componentArn = a} :: GetComponentPolicy)
+
+instance Core.AWSRequest GetComponentPolicy where
+  type
+    AWSResponse GetComponentPolicy =
+      GetComponentPolicyResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetComponentPolicyResponse'
+            Prelude.<$> (x Data..?> "policy")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetComponentPolicy where
+  hashWithSalt _salt GetComponentPolicy' {..} =
+    _salt `Prelude.hashWithSalt` componentArn
+
+instance Prelude.NFData GetComponentPolicy where
+  rnf GetComponentPolicy' {..} =
+    Prelude.rnf componentArn
+
+instance Data.ToHeaders GetComponentPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetComponentPolicy where
+  toPath = Prelude.const "/GetComponentPolicy"
+
+instance Data.ToQuery GetComponentPolicy where
+  toQuery GetComponentPolicy' {..} =
+    Prelude.mconcat
+      ["componentArn" Data.=: componentArn]
+
+-- | /See:/ 'newGetComponentPolicyResponse' smart constructor.
+data GetComponentPolicyResponse = GetComponentPolicyResponse'
+  { -- | The component policy.
+    policy :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetComponentPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policy', 'getComponentPolicyResponse_policy' - The component policy.
+--
+-- 'requestId', 'getComponentPolicyResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'getComponentPolicyResponse_httpStatus' - The response's http status code.
+newGetComponentPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetComponentPolicyResponse
+newGetComponentPolicyResponse pHttpStatus_ =
+  GetComponentPolicyResponse'
+    { policy =
+        Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The component policy.
+getComponentPolicyResponse_policy :: Lens.Lens' GetComponentPolicyResponse (Prelude.Maybe Prelude.Text)
+getComponentPolicyResponse_policy = Lens.lens (\GetComponentPolicyResponse' {policy} -> policy) (\s@GetComponentPolicyResponse' {} a -> s {policy = a} :: GetComponentPolicyResponse)
+
+-- | The request ID that uniquely identifies this request.
+getComponentPolicyResponse_requestId :: Lens.Lens' GetComponentPolicyResponse (Prelude.Maybe Prelude.Text)
+getComponentPolicyResponse_requestId = Lens.lens (\GetComponentPolicyResponse' {requestId} -> requestId) (\s@GetComponentPolicyResponse' {} a -> s {requestId = a} :: GetComponentPolicyResponse)
+
+-- | The response's http status code.
+getComponentPolicyResponse_httpStatus :: Lens.Lens' GetComponentPolicyResponse Prelude.Int
+getComponentPolicyResponse_httpStatus = Lens.lens (\GetComponentPolicyResponse' {httpStatus} -> httpStatus) (\s@GetComponentPolicyResponse' {} a -> s {httpStatus = a} :: GetComponentPolicyResponse)
+
+instance Prelude.NFData GetComponentPolicyResponse where
+  rnf GetComponentPolicyResponse' {..} =
+    Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/GetContainerRecipe.hs b/gen/Amazonka/ImageBuilder/GetContainerRecipe.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/GetContainerRecipe.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.GetContainerRecipe
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a container recipe.
+module Amazonka.ImageBuilder.GetContainerRecipe
+  ( -- * Creating a Request
+    GetContainerRecipe (..),
+    newGetContainerRecipe,
+
+    -- * Request Lenses
+    getContainerRecipe_containerRecipeArn,
+
+    -- * Destructuring the Response
+    GetContainerRecipeResponse (..),
+    newGetContainerRecipeResponse,
+
+    -- * Response Lenses
+    getContainerRecipeResponse_containerRecipe,
+    getContainerRecipeResponse_requestId,
+    getContainerRecipeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetContainerRecipe' smart constructor.
+data GetContainerRecipe = GetContainerRecipe'
+  { -- | The Amazon Resource Name (ARN) of the container recipe to retrieve.
+    containerRecipeArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetContainerRecipe' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'containerRecipeArn', 'getContainerRecipe_containerRecipeArn' - The Amazon Resource Name (ARN) of the container recipe to retrieve.
+newGetContainerRecipe ::
+  -- | 'containerRecipeArn'
+  Prelude.Text ->
+  GetContainerRecipe
+newGetContainerRecipe pContainerRecipeArn_ =
+  GetContainerRecipe'
+    { containerRecipeArn =
+        pContainerRecipeArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the container recipe to retrieve.
+getContainerRecipe_containerRecipeArn :: Lens.Lens' GetContainerRecipe Prelude.Text
+getContainerRecipe_containerRecipeArn = Lens.lens (\GetContainerRecipe' {containerRecipeArn} -> containerRecipeArn) (\s@GetContainerRecipe' {} a -> s {containerRecipeArn = a} :: GetContainerRecipe)
+
+instance Core.AWSRequest GetContainerRecipe where
+  type
+    AWSResponse GetContainerRecipe =
+      GetContainerRecipeResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetContainerRecipeResponse'
+            Prelude.<$> (x Data..?> "containerRecipe")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetContainerRecipe where
+  hashWithSalt _salt GetContainerRecipe' {..} =
+    _salt `Prelude.hashWithSalt` containerRecipeArn
+
+instance Prelude.NFData GetContainerRecipe where
+  rnf GetContainerRecipe' {..} =
+    Prelude.rnf containerRecipeArn
+
+instance Data.ToHeaders GetContainerRecipe where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetContainerRecipe where
+  toPath = Prelude.const "/GetContainerRecipe"
+
+instance Data.ToQuery GetContainerRecipe where
+  toQuery GetContainerRecipe' {..} =
+    Prelude.mconcat
+      ["containerRecipeArn" Data.=: containerRecipeArn]
+
+-- | /See:/ 'newGetContainerRecipeResponse' smart constructor.
+data GetContainerRecipeResponse = GetContainerRecipeResponse'
+  { -- | The container recipe object that is returned.
+    containerRecipe :: Prelude.Maybe ContainerRecipe,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetContainerRecipeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'containerRecipe', 'getContainerRecipeResponse_containerRecipe' - The container recipe object that is returned.
+--
+-- 'requestId', 'getContainerRecipeResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'getContainerRecipeResponse_httpStatus' - The response's http status code.
+newGetContainerRecipeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetContainerRecipeResponse
+newGetContainerRecipeResponse pHttpStatus_ =
+  GetContainerRecipeResponse'
+    { containerRecipe =
+        Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The container recipe object that is returned.
+getContainerRecipeResponse_containerRecipe :: Lens.Lens' GetContainerRecipeResponse (Prelude.Maybe ContainerRecipe)
+getContainerRecipeResponse_containerRecipe = Lens.lens (\GetContainerRecipeResponse' {containerRecipe} -> containerRecipe) (\s@GetContainerRecipeResponse' {} a -> s {containerRecipe = a} :: GetContainerRecipeResponse)
+
+-- | The request ID that uniquely identifies this request.
+getContainerRecipeResponse_requestId :: Lens.Lens' GetContainerRecipeResponse (Prelude.Maybe Prelude.Text)
+getContainerRecipeResponse_requestId = Lens.lens (\GetContainerRecipeResponse' {requestId} -> requestId) (\s@GetContainerRecipeResponse' {} a -> s {requestId = a} :: GetContainerRecipeResponse)
+
+-- | The response's http status code.
+getContainerRecipeResponse_httpStatus :: Lens.Lens' GetContainerRecipeResponse Prelude.Int
+getContainerRecipeResponse_httpStatus = Lens.lens (\GetContainerRecipeResponse' {httpStatus} -> httpStatus) (\s@GetContainerRecipeResponse' {} a -> s {httpStatus = a} :: GetContainerRecipeResponse)
+
+instance Prelude.NFData GetContainerRecipeResponse where
+  rnf GetContainerRecipeResponse' {..} =
+    Prelude.rnf containerRecipe
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/GetContainerRecipePolicy.hs b/gen/Amazonka/ImageBuilder/GetContainerRecipePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/GetContainerRecipePolicy.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.GetContainerRecipePolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the policy for a container recipe.
+module Amazonka.ImageBuilder.GetContainerRecipePolicy
+  ( -- * Creating a Request
+    GetContainerRecipePolicy (..),
+    newGetContainerRecipePolicy,
+
+    -- * Request Lenses
+    getContainerRecipePolicy_containerRecipeArn,
+
+    -- * Destructuring the Response
+    GetContainerRecipePolicyResponse (..),
+    newGetContainerRecipePolicyResponse,
+
+    -- * Response Lenses
+    getContainerRecipePolicyResponse_policy,
+    getContainerRecipePolicyResponse_requestId,
+    getContainerRecipePolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetContainerRecipePolicy' smart constructor.
+data GetContainerRecipePolicy = GetContainerRecipePolicy'
+  { -- | The Amazon Resource Name (ARN) of the container recipe for the policy
+    -- being requested.
+    containerRecipeArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetContainerRecipePolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'containerRecipeArn', 'getContainerRecipePolicy_containerRecipeArn' - The Amazon Resource Name (ARN) of the container recipe for the policy
+-- being requested.
+newGetContainerRecipePolicy ::
+  -- | 'containerRecipeArn'
+  Prelude.Text ->
+  GetContainerRecipePolicy
+newGetContainerRecipePolicy pContainerRecipeArn_ =
+  GetContainerRecipePolicy'
+    { containerRecipeArn =
+        pContainerRecipeArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the container recipe for the policy
+-- being requested.
+getContainerRecipePolicy_containerRecipeArn :: Lens.Lens' GetContainerRecipePolicy Prelude.Text
+getContainerRecipePolicy_containerRecipeArn = Lens.lens (\GetContainerRecipePolicy' {containerRecipeArn} -> containerRecipeArn) (\s@GetContainerRecipePolicy' {} a -> s {containerRecipeArn = a} :: GetContainerRecipePolicy)
+
+instance Core.AWSRequest GetContainerRecipePolicy where
+  type
+    AWSResponse GetContainerRecipePolicy =
+      GetContainerRecipePolicyResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetContainerRecipePolicyResponse'
+            Prelude.<$> (x Data..?> "policy")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetContainerRecipePolicy where
+  hashWithSalt _salt GetContainerRecipePolicy' {..} =
+    _salt `Prelude.hashWithSalt` containerRecipeArn
+
+instance Prelude.NFData GetContainerRecipePolicy where
+  rnf GetContainerRecipePolicy' {..} =
+    Prelude.rnf containerRecipeArn
+
+instance Data.ToHeaders GetContainerRecipePolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetContainerRecipePolicy where
+  toPath = Prelude.const "/GetContainerRecipePolicy"
+
+instance Data.ToQuery GetContainerRecipePolicy where
+  toQuery GetContainerRecipePolicy' {..} =
+    Prelude.mconcat
+      ["containerRecipeArn" Data.=: containerRecipeArn]
+
+-- | /See:/ 'newGetContainerRecipePolicyResponse' smart constructor.
+data GetContainerRecipePolicyResponse = GetContainerRecipePolicyResponse'
+  { -- | The container recipe policy object that is returned.
+    policy :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetContainerRecipePolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policy', 'getContainerRecipePolicyResponse_policy' - The container recipe policy object that is returned.
+--
+-- 'requestId', 'getContainerRecipePolicyResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'getContainerRecipePolicyResponse_httpStatus' - The response's http status code.
+newGetContainerRecipePolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetContainerRecipePolicyResponse
+newGetContainerRecipePolicyResponse pHttpStatus_ =
+  GetContainerRecipePolicyResponse'
+    { policy =
+        Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The container recipe policy object that is returned.
+getContainerRecipePolicyResponse_policy :: Lens.Lens' GetContainerRecipePolicyResponse (Prelude.Maybe Prelude.Text)
+getContainerRecipePolicyResponse_policy = Lens.lens (\GetContainerRecipePolicyResponse' {policy} -> policy) (\s@GetContainerRecipePolicyResponse' {} a -> s {policy = a} :: GetContainerRecipePolicyResponse)
+
+-- | The request ID that uniquely identifies this request.
+getContainerRecipePolicyResponse_requestId :: Lens.Lens' GetContainerRecipePolicyResponse (Prelude.Maybe Prelude.Text)
+getContainerRecipePolicyResponse_requestId = Lens.lens (\GetContainerRecipePolicyResponse' {requestId} -> requestId) (\s@GetContainerRecipePolicyResponse' {} a -> s {requestId = a} :: GetContainerRecipePolicyResponse)
+
+-- | The response's http status code.
+getContainerRecipePolicyResponse_httpStatus :: Lens.Lens' GetContainerRecipePolicyResponse Prelude.Int
+getContainerRecipePolicyResponse_httpStatus = Lens.lens (\GetContainerRecipePolicyResponse' {httpStatus} -> httpStatus) (\s@GetContainerRecipePolicyResponse' {} a -> s {httpStatus = a} :: GetContainerRecipePolicyResponse)
+
+instance
+  Prelude.NFData
+    GetContainerRecipePolicyResponse
+  where
+  rnf GetContainerRecipePolicyResponse' {..} =
+    Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/GetDistributionConfiguration.hs b/gen/Amazonka/ImageBuilder/GetDistributionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/GetDistributionConfiguration.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.GetDistributionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a distribution configuration.
+module Amazonka.ImageBuilder.GetDistributionConfiguration
+  ( -- * Creating a Request
+    GetDistributionConfiguration (..),
+    newGetDistributionConfiguration,
+
+    -- * Request Lenses
+    getDistributionConfiguration_distributionConfigurationArn,
+
+    -- * Destructuring the Response
+    GetDistributionConfigurationResponse (..),
+    newGetDistributionConfigurationResponse,
+
+    -- * Response Lenses
+    getDistributionConfigurationResponse_distributionConfiguration,
+    getDistributionConfigurationResponse_requestId,
+    getDistributionConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDistributionConfiguration' smart constructor.
+data GetDistributionConfiguration = GetDistributionConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the distribution configuration that
+    -- you want to retrieve.
+    distributionConfigurationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDistributionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'distributionConfigurationArn', 'getDistributionConfiguration_distributionConfigurationArn' - The Amazon Resource Name (ARN) of the distribution configuration that
+-- you want to retrieve.
+newGetDistributionConfiguration ::
+  -- | 'distributionConfigurationArn'
+  Prelude.Text ->
+  GetDistributionConfiguration
+newGetDistributionConfiguration
+  pDistributionConfigurationArn_ =
+    GetDistributionConfiguration'
+      { distributionConfigurationArn =
+          pDistributionConfigurationArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the distribution configuration that
+-- you want to retrieve.
+getDistributionConfiguration_distributionConfigurationArn :: Lens.Lens' GetDistributionConfiguration Prelude.Text
+getDistributionConfiguration_distributionConfigurationArn = Lens.lens (\GetDistributionConfiguration' {distributionConfigurationArn} -> distributionConfigurationArn) (\s@GetDistributionConfiguration' {} a -> s {distributionConfigurationArn = a} :: GetDistributionConfiguration)
+
+instance Core.AWSRequest GetDistributionConfiguration where
+  type
+    AWSResponse GetDistributionConfiguration =
+      GetDistributionConfigurationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDistributionConfigurationResponse'
+            Prelude.<$> (x Data..?> "distributionConfiguration")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetDistributionConfiguration
+  where
+  hashWithSalt _salt GetDistributionConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` distributionConfigurationArn
+
+instance Prelude.NFData GetDistributionConfiguration where
+  rnf GetDistributionConfiguration' {..} =
+    Prelude.rnf distributionConfigurationArn
+
+instance Data.ToHeaders GetDistributionConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDistributionConfiguration where
+  toPath =
+    Prelude.const "/GetDistributionConfiguration"
+
+instance Data.ToQuery GetDistributionConfiguration where
+  toQuery GetDistributionConfiguration' {..} =
+    Prelude.mconcat
+      [ "distributionConfigurationArn"
+          Data.=: distributionConfigurationArn
+      ]
+
+-- | /See:/ 'newGetDistributionConfigurationResponse' smart constructor.
+data GetDistributionConfigurationResponse = GetDistributionConfigurationResponse'
+  { -- | The distribution configuration object.
+    distributionConfiguration :: Prelude.Maybe DistributionConfiguration,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDistributionConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'distributionConfiguration', 'getDistributionConfigurationResponse_distributionConfiguration' - The distribution configuration object.
+--
+-- 'requestId', 'getDistributionConfigurationResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'getDistributionConfigurationResponse_httpStatus' - The response's http status code.
+newGetDistributionConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDistributionConfigurationResponse
+newGetDistributionConfigurationResponse pHttpStatus_ =
+  GetDistributionConfigurationResponse'
+    { distributionConfiguration =
+        Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The distribution configuration object.
+getDistributionConfigurationResponse_distributionConfiguration :: Lens.Lens' GetDistributionConfigurationResponse (Prelude.Maybe DistributionConfiguration)
+getDistributionConfigurationResponse_distributionConfiguration = Lens.lens (\GetDistributionConfigurationResponse' {distributionConfiguration} -> distributionConfiguration) (\s@GetDistributionConfigurationResponse' {} a -> s {distributionConfiguration = a} :: GetDistributionConfigurationResponse)
+
+-- | The request ID that uniquely identifies this request.
+getDistributionConfigurationResponse_requestId :: Lens.Lens' GetDistributionConfigurationResponse (Prelude.Maybe Prelude.Text)
+getDistributionConfigurationResponse_requestId = Lens.lens (\GetDistributionConfigurationResponse' {requestId} -> requestId) (\s@GetDistributionConfigurationResponse' {} a -> s {requestId = a} :: GetDistributionConfigurationResponse)
+
+-- | The response's http status code.
+getDistributionConfigurationResponse_httpStatus :: Lens.Lens' GetDistributionConfigurationResponse Prelude.Int
+getDistributionConfigurationResponse_httpStatus = Lens.lens (\GetDistributionConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetDistributionConfigurationResponse' {} a -> s {httpStatus = a} :: GetDistributionConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetDistributionConfigurationResponse
+  where
+  rnf GetDistributionConfigurationResponse' {..} =
+    Prelude.rnf distributionConfiguration
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/GetImage.hs b/gen/Amazonka/ImageBuilder/GetImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/GetImage.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.GetImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets an image.
+module Amazonka.ImageBuilder.GetImage
+  ( -- * Creating a Request
+    GetImage (..),
+    newGetImage,
+
+    -- * Request Lenses
+    getImage_imageBuildVersionArn,
+
+    -- * Destructuring the Response
+    GetImageResponse (..),
+    newGetImageResponse,
+
+    -- * Response Lenses
+    getImageResponse_image,
+    getImageResponse_requestId,
+    getImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetImage' smart constructor.
+data GetImage = GetImage'
+  { -- | The Amazon Resource Name (ARN) of the image that you want to retrieve.
+    imageBuildVersionArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageBuildVersionArn', 'getImage_imageBuildVersionArn' - The Amazon Resource Name (ARN) of the image that you want to retrieve.
+newGetImage ::
+  -- | 'imageBuildVersionArn'
+  Prelude.Text ->
+  GetImage
+newGetImage pImageBuildVersionArn_ =
+  GetImage'
+    { imageBuildVersionArn =
+        pImageBuildVersionArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the image that you want to retrieve.
+getImage_imageBuildVersionArn :: Lens.Lens' GetImage Prelude.Text
+getImage_imageBuildVersionArn = Lens.lens (\GetImage' {imageBuildVersionArn} -> imageBuildVersionArn) (\s@GetImage' {} a -> s {imageBuildVersionArn = a} :: GetImage)
+
+instance Core.AWSRequest GetImage where
+  type AWSResponse GetImage = GetImageResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetImageResponse'
+            Prelude.<$> (x Data..?> "image")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetImage where
+  hashWithSalt _salt GetImage' {..} =
+    _salt `Prelude.hashWithSalt` imageBuildVersionArn
+
+instance Prelude.NFData GetImage where
+  rnf GetImage' {..} = Prelude.rnf imageBuildVersionArn
+
+instance Data.ToHeaders GetImage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetImage where
+  toPath = Prelude.const "/GetImage"
+
+instance Data.ToQuery GetImage where
+  toQuery GetImage' {..} =
+    Prelude.mconcat
+      ["imageBuildVersionArn" Data.=: imageBuildVersionArn]
+
+-- | /See:/ 'newGetImageResponse' smart constructor.
+data GetImageResponse = GetImageResponse'
+  { -- | The image object.
+    image :: Prelude.Maybe Image,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'image', 'getImageResponse_image' - The image object.
+--
+-- 'requestId', 'getImageResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'getImageResponse_httpStatus' - The response's http status code.
+newGetImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetImageResponse
+newGetImageResponse pHttpStatus_ =
+  GetImageResponse'
+    { image = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The image object.
+getImageResponse_image :: Lens.Lens' GetImageResponse (Prelude.Maybe Image)
+getImageResponse_image = Lens.lens (\GetImageResponse' {image} -> image) (\s@GetImageResponse' {} a -> s {image = a} :: GetImageResponse)
+
+-- | The request ID that uniquely identifies this request.
+getImageResponse_requestId :: Lens.Lens' GetImageResponse (Prelude.Maybe Prelude.Text)
+getImageResponse_requestId = Lens.lens (\GetImageResponse' {requestId} -> requestId) (\s@GetImageResponse' {} a -> s {requestId = a} :: GetImageResponse)
+
+-- | The response's http status code.
+getImageResponse_httpStatus :: Lens.Lens' GetImageResponse Prelude.Int
+getImageResponse_httpStatus = Lens.lens (\GetImageResponse' {httpStatus} -> httpStatus) (\s@GetImageResponse' {} a -> s {httpStatus = a} :: GetImageResponse)
+
+instance Prelude.NFData GetImageResponse where
+  rnf GetImageResponse' {..} =
+    Prelude.rnf image
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/GetImagePipeline.hs b/gen/Amazonka/ImageBuilder/GetImagePipeline.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/GetImagePipeline.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.ImageBuilder.GetImagePipeline
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets an image pipeline.
+module Amazonka.ImageBuilder.GetImagePipeline
+  ( -- * Creating a Request
+    GetImagePipeline (..),
+    newGetImagePipeline,
+
+    -- * Request Lenses
+    getImagePipeline_imagePipelineArn,
+
+    -- * Destructuring the Response
+    GetImagePipelineResponse (..),
+    newGetImagePipelineResponse,
+
+    -- * Response Lenses
+    getImagePipelineResponse_imagePipeline,
+    getImagePipelineResponse_requestId,
+    getImagePipelineResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetImagePipeline' smart constructor.
+data GetImagePipeline = GetImagePipeline'
+  { -- | The Amazon Resource Name (ARN) of the image pipeline that you want to
+    -- retrieve.
+    imagePipelineArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetImagePipeline' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imagePipelineArn', 'getImagePipeline_imagePipelineArn' - The Amazon Resource Name (ARN) of the image pipeline that you want to
+-- retrieve.
+newGetImagePipeline ::
+  -- | 'imagePipelineArn'
+  Prelude.Text ->
+  GetImagePipeline
+newGetImagePipeline pImagePipelineArn_ =
+  GetImagePipeline'
+    { imagePipelineArn =
+        pImagePipelineArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the image pipeline that you want to
+-- retrieve.
+getImagePipeline_imagePipelineArn :: Lens.Lens' GetImagePipeline Prelude.Text
+getImagePipeline_imagePipelineArn = Lens.lens (\GetImagePipeline' {imagePipelineArn} -> imagePipelineArn) (\s@GetImagePipeline' {} a -> s {imagePipelineArn = a} :: GetImagePipeline)
+
+instance Core.AWSRequest GetImagePipeline where
+  type
+    AWSResponse GetImagePipeline =
+      GetImagePipelineResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetImagePipelineResponse'
+            Prelude.<$> (x Data..?> "imagePipeline")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetImagePipeline where
+  hashWithSalt _salt GetImagePipeline' {..} =
+    _salt `Prelude.hashWithSalt` imagePipelineArn
+
+instance Prelude.NFData GetImagePipeline where
+  rnf GetImagePipeline' {..} =
+    Prelude.rnf imagePipelineArn
+
+instance Data.ToHeaders GetImagePipeline where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetImagePipeline where
+  toPath = Prelude.const "/GetImagePipeline"
+
+instance Data.ToQuery GetImagePipeline where
+  toQuery GetImagePipeline' {..} =
+    Prelude.mconcat
+      ["imagePipelineArn" Data.=: imagePipelineArn]
+
+-- | /See:/ 'newGetImagePipelineResponse' smart constructor.
+data GetImagePipelineResponse = GetImagePipelineResponse'
+  { -- | The image pipeline object.
+    imagePipeline :: Prelude.Maybe ImagePipeline,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetImagePipelineResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imagePipeline', 'getImagePipelineResponse_imagePipeline' - The image pipeline object.
+--
+-- 'requestId', 'getImagePipelineResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'getImagePipelineResponse_httpStatus' - The response's http status code.
+newGetImagePipelineResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetImagePipelineResponse
+newGetImagePipelineResponse pHttpStatus_ =
+  GetImagePipelineResponse'
+    { imagePipeline =
+        Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The image pipeline object.
+getImagePipelineResponse_imagePipeline :: Lens.Lens' GetImagePipelineResponse (Prelude.Maybe ImagePipeline)
+getImagePipelineResponse_imagePipeline = Lens.lens (\GetImagePipelineResponse' {imagePipeline} -> imagePipeline) (\s@GetImagePipelineResponse' {} a -> s {imagePipeline = a} :: GetImagePipelineResponse)
+
+-- | The request ID that uniquely identifies this request.
+getImagePipelineResponse_requestId :: Lens.Lens' GetImagePipelineResponse (Prelude.Maybe Prelude.Text)
+getImagePipelineResponse_requestId = Lens.lens (\GetImagePipelineResponse' {requestId} -> requestId) (\s@GetImagePipelineResponse' {} a -> s {requestId = a} :: GetImagePipelineResponse)
+
+-- | The response's http status code.
+getImagePipelineResponse_httpStatus :: Lens.Lens' GetImagePipelineResponse Prelude.Int
+getImagePipelineResponse_httpStatus = Lens.lens (\GetImagePipelineResponse' {httpStatus} -> httpStatus) (\s@GetImagePipelineResponse' {} a -> s {httpStatus = a} :: GetImagePipelineResponse)
+
+instance Prelude.NFData GetImagePipelineResponse where
+  rnf GetImagePipelineResponse' {..} =
+    Prelude.rnf imagePipeline
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/GetImagePolicy.hs b/gen/Amazonka/ImageBuilder/GetImagePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/GetImagePolicy.hs
@@ -0,0 +1,172 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.GetImagePolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets an image policy.
+module Amazonka.ImageBuilder.GetImagePolicy
+  ( -- * Creating a Request
+    GetImagePolicy (..),
+    newGetImagePolicy,
+
+    -- * Request Lenses
+    getImagePolicy_imageArn,
+
+    -- * Destructuring the Response
+    GetImagePolicyResponse (..),
+    newGetImagePolicyResponse,
+
+    -- * Response Lenses
+    getImagePolicyResponse_policy,
+    getImagePolicyResponse_requestId,
+    getImagePolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetImagePolicy' smart constructor.
+data GetImagePolicy = GetImagePolicy'
+  { -- | The Amazon Resource Name (ARN) of the image whose policy you want to
+    -- retrieve.
+    imageArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetImagePolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageArn', 'getImagePolicy_imageArn' - The Amazon Resource Name (ARN) of the image whose policy you want to
+-- retrieve.
+newGetImagePolicy ::
+  -- | 'imageArn'
+  Prelude.Text ->
+  GetImagePolicy
+newGetImagePolicy pImageArn_ =
+  GetImagePolicy' {imageArn = pImageArn_}
+
+-- | The Amazon Resource Name (ARN) of the image whose policy you want to
+-- retrieve.
+getImagePolicy_imageArn :: Lens.Lens' GetImagePolicy Prelude.Text
+getImagePolicy_imageArn = Lens.lens (\GetImagePolicy' {imageArn} -> imageArn) (\s@GetImagePolicy' {} a -> s {imageArn = a} :: GetImagePolicy)
+
+instance Core.AWSRequest GetImagePolicy where
+  type
+    AWSResponse GetImagePolicy =
+      GetImagePolicyResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetImagePolicyResponse'
+            Prelude.<$> (x Data..?> "policy")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetImagePolicy where
+  hashWithSalt _salt GetImagePolicy' {..} =
+    _salt `Prelude.hashWithSalt` imageArn
+
+instance Prelude.NFData GetImagePolicy where
+  rnf GetImagePolicy' {..} = Prelude.rnf imageArn
+
+instance Data.ToHeaders GetImagePolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetImagePolicy where
+  toPath = Prelude.const "/GetImagePolicy"
+
+instance Data.ToQuery GetImagePolicy where
+  toQuery GetImagePolicy' {..} =
+    Prelude.mconcat ["imageArn" Data.=: imageArn]
+
+-- | /See:/ 'newGetImagePolicyResponse' smart constructor.
+data GetImagePolicyResponse = GetImagePolicyResponse'
+  { -- | The image policy object.
+    policy :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetImagePolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policy', 'getImagePolicyResponse_policy' - The image policy object.
+--
+-- 'requestId', 'getImagePolicyResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'getImagePolicyResponse_httpStatus' - The response's http status code.
+newGetImagePolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetImagePolicyResponse
+newGetImagePolicyResponse pHttpStatus_ =
+  GetImagePolicyResponse'
+    { policy = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The image policy object.
+getImagePolicyResponse_policy :: Lens.Lens' GetImagePolicyResponse (Prelude.Maybe Prelude.Text)
+getImagePolicyResponse_policy = Lens.lens (\GetImagePolicyResponse' {policy} -> policy) (\s@GetImagePolicyResponse' {} a -> s {policy = a} :: GetImagePolicyResponse)
+
+-- | The request ID that uniquely identifies this request.
+getImagePolicyResponse_requestId :: Lens.Lens' GetImagePolicyResponse (Prelude.Maybe Prelude.Text)
+getImagePolicyResponse_requestId = Lens.lens (\GetImagePolicyResponse' {requestId} -> requestId) (\s@GetImagePolicyResponse' {} a -> s {requestId = a} :: GetImagePolicyResponse)
+
+-- | The response's http status code.
+getImagePolicyResponse_httpStatus :: Lens.Lens' GetImagePolicyResponse Prelude.Int
+getImagePolicyResponse_httpStatus = Lens.lens (\GetImagePolicyResponse' {httpStatus} -> httpStatus) (\s@GetImagePolicyResponse' {} a -> s {httpStatus = a} :: GetImagePolicyResponse)
+
+instance Prelude.NFData GetImagePolicyResponse where
+  rnf GetImagePolicyResponse' {..} =
+    Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/GetImageRecipe.hs b/gen/Amazonka/ImageBuilder/GetImageRecipe.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/GetImageRecipe.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.GetImageRecipe
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets an image recipe.
+module Amazonka.ImageBuilder.GetImageRecipe
+  ( -- * Creating a Request
+    GetImageRecipe (..),
+    newGetImageRecipe,
+
+    -- * Request Lenses
+    getImageRecipe_imageRecipeArn,
+
+    -- * Destructuring the Response
+    GetImageRecipeResponse (..),
+    newGetImageRecipeResponse,
+
+    -- * Response Lenses
+    getImageRecipeResponse_imageRecipe,
+    getImageRecipeResponse_requestId,
+    getImageRecipeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetImageRecipe' smart constructor.
+data GetImageRecipe = GetImageRecipe'
+  { -- | The Amazon Resource Name (ARN) of the image recipe that you want to
+    -- retrieve.
+    imageRecipeArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetImageRecipe' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageRecipeArn', 'getImageRecipe_imageRecipeArn' - The Amazon Resource Name (ARN) of the image recipe that you want to
+-- retrieve.
+newGetImageRecipe ::
+  -- | 'imageRecipeArn'
+  Prelude.Text ->
+  GetImageRecipe
+newGetImageRecipe pImageRecipeArn_ =
+  GetImageRecipe' {imageRecipeArn = pImageRecipeArn_}
+
+-- | The Amazon Resource Name (ARN) of the image recipe that you want to
+-- retrieve.
+getImageRecipe_imageRecipeArn :: Lens.Lens' GetImageRecipe Prelude.Text
+getImageRecipe_imageRecipeArn = Lens.lens (\GetImageRecipe' {imageRecipeArn} -> imageRecipeArn) (\s@GetImageRecipe' {} a -> s {imageRecipeArn = a} :: GetImageRecipe)
+
+instance Core.AWSRequest GetImageRecipe where
+  type
+    AWSResponse GetImageRecipe =
+      GetImageRecipeResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetImageRecipeResponse'
+            Prelude.<$> (x Data..?> "imageRecipe")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetImageRecipe where
+  hashWithSalt _salt GetImageRecipe' {..} =
+    _salt `Prelude.hashWithSalt` imageRecipeArn
+
+instance Prelude.NFData GetImageRecipe where
+  rnf GetImageRecipe' {..} = Prelude.rnf imageRecipeArn
+
+instance Data.ToHeaders GetImageRecipe where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetImageRecipe where
+  toPath = Prelude.const "/GetImageRecipe"
+
+instance Data.ToQuery GetImageRecipe where
+  toQuery GetImageRecipe' {..} =
+    Prelude.mconcat
+      ["imageRecipeArn" Data.=: imageRecipeArn]
+
+-- | /See:/ 'newGetImageRecipeResponse' smart constructor.
+data GetImageRecipeResponse = GetImageRecipeResponse'
+  { -- | The image recipe object.
+    imageRecipe :: Prelude.Maybe ImageRecipe,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetImageRecipeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageRecipe', 'getImageRecipeResponse_imageRecipe' - The image recipe object.
+--
+-- 'requestId', 'getImageRecipeResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'getImageRecipeResponse_httpStatus' - The response's http status code.
+newGetImageRecipeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetImageRecipeResponse
+newGetImageRecipeResponse pHttpStatus_ =
+  GetImageRecipeResponse'
+    { imageRecipe =
+        Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The image recipe object.
+getImageRecipeResponse_imageRecipe :: Lens.Lens' GetImageRecipeResponse (Prelude.Maybe ImageRecipe)
+getImageRecipeResponse_imageRecipe = Lens.lens (\GetImageRecipeResponse' {imageRecipe} -> imageRecipe) (\s@GetImageRecipeResponse' {} a -> s {imageRecipe = a} :: GetImageRecipeResponse)
+
+-- | The request ID that uniquely identifies this request.
+getImageRecipeResponse_requestId :: Lens.Lens' GetImageRecipeResponse (Prelude.Maybe Prelude.Text)
+getImageRecipeResponse_requestId = Lens.lens (\GetImageRecipeResponse' {requestId} -> requestId) (\s@GetImageRecipeResponse' {} a -> s {requestId = a} :: GetImageRecipeResponse)
+
+-- | The response's http status code.
+getImageRecipeResponse_httpStatus :: Lens.Lens' GetImageRecipeResponse Prelude.Int
+getImageRecipeResponse_httpStatus = Lens.lens (\GetImageRecipeResponse' {httpStatus} -> httpStatus) (\s@GetImageRecipeResponse' {} a -> s {httpStatus = a} :: GetImageRecipeResponse)
+
+instance Prelude.NFData GetImageRecipeResponse where
+  rnf GetImageRecipeResponse' {..} =
+    Prelude.rnf imageRecipe
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/GetImageRecipePolicy.hs b/gen/Amazonka/ImageBuilder/GetImageRecipePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/GetImageRecipePolicy.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.ImageBuilder.GetImageRecipePolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets an image recipe policy.
+module Amazonka.ImageBuilder.GetImageRecipePolicy
+  ( -- * Creating a Request
+    GetImageRecipePolicy (..),
+    newGetImageRecipePolicy,
+
+    -- * Request Lenses
+    getImageRecipePolicy_imageRecipeArn,
+
+    -- * Destructuring the Response
+    GetImageRecipePolicyResponse (..),
+    newGetImageRecipePolicyResponse,
+
+    -- * Response Lenses
+    getImageRecipePolicyResponse_policy,
+    getImageRecipePolicyResponse_requestId,
+    getImageRecipePolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetImageRecipePolicy' smart constructor.
+data GetImageRecipePolicy = GetImageRecipePolicy'
+  { -- | The Amazon Resource Name (ARN) of the image recipe whose policy you want
+    -- to retrieve.
+    imageRecipeArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetImageRecipePolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageRecipeArn', 'getImageRecipePolicy_imageRecipeArn' - The Amazon Resource Name (ARN) of the image recipe whose policy you want
+-- to retrieve.
+newGetImageRecipePolicy ::
+  -- | 'imageRecipeArn'
+  Prelude.Text ->
+  GetImageRecipePolicy
+newGetImageRecipePolicy pImageRecipeArn_ =
+  GetImageRecipePolicy'
+    { imageRecipeArn =
+        pImageRecipeArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the image recipe whose policy you want
+-- to retrieve.
+getImageRecipePolicy_imageRecipeArn :: Lens.Lens' GetImageRecipePolicy Prelude.Text
+getImageRecipePolicy_imageRecipeArn = Lens.lens (\GetImageRecipePolicy' {imageRecipeArn} -> imageRecipeArn) (\s@GetImageRecipePolicy' {} a -> s {imageRecipeArn = a} :: GetImageRecipePolicy)
+
+instance Core.AWSRequest GetImageRecipePolicy where
+  type
+    AWSResponse GetImageRecipePolicy =
+      GetImageRecipePolicyResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetImageRecipePolicyResponse'
+            Prelude.<$> (x Data..?> "policy")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetImageRecipePolicy where
+  hashWithSalt _salt GetImageRecipePolicy' {..} =
+    _salt `Prelude.hashWithSalt` imageRecipeArn
+
+instance Prelude.NFData GetImageRecipePolicy where
+  rnf GetImageRecipePolicy' {..} =
+    Prelude.rnf imageRecipeArn
+
+instance Data.ToHeaders GetImageRecipePolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetImageRecipePolicy where
+  toPath = Prelude.const "/GetImageRecipePolicy"
+
+instance Data.ToQuery GetImageRecipePolicy where
+  toQuery GetImageRecipePolicy' {..} =
+    Prelude.mconcat
+      ["imageRecipeArn" Data.=: imageRecipeArn]
+
+-- | /See:/ 'newGetImageRecipePolicyResponse' smart constructor.
+data GetImageRecipePolicyResponse = GetImageRecipePolicyResponse'
+  { -- | The image recipe policy object.
+    policy :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetImageRecipePolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policy', 'getImageRecipePolicyResponse_policy' - The image recipe policy object.
+--
+-- 'requestId', 'getImageRecipePolicyResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'getImageRecipePolicyResponse_httpStatus' - The response's http status code.
+newGetImageRecipePolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetImageRecipePolicyResponse
+newGetImageRecipePolicyResponse pHttpStatus_ =
+  GetImageRecipePolicyResponse'
+    { policy =
+        Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The image recipe policy object.
+getImageRecipePolicyResponse_policy :: Lens.Lens' GetImageRecipePolicyResponse (Prelude.Maybe Prelude.Text)
+getImageRecipePolicyResponse_policy = Lens.lens (\GetImageRecipePolicyResponse' {policy} -> policy) (\s@GetImageRecipePolicyResponse' {} a -> s {policy = a} :: GetImageRecipePolicyResponse)
+
+-- | The request ID that uniquely identifies this request.
+getImageRecipePolicyResponse_requestId :: Lens.Lens' GetImageRecipePolicyResponse (Prelude.Maybe Prelude.Text)
+getImageRecipePolicyResponse_requestId = Lens.lens (\GetImageRecipePolicyResponse' {requestId} -> requestId) (\s@GetImageRecipePolicyResponse' {} a -> s {requestId = a} :: GetImageRecipePolicyResponse)
+
+-- | The response's http status code.
+getImageRecipePolicyResponse_httpStatus :: Lens.Lens' GetImageRecipePolicyResponse Prelude.Int
+getImageRecipePolicyResponse_httpStatus = Lens.lens (\GetImageRecipePolicyResponse' {httpStatus} -> httpStatus) (\s@GetImageRecipePolicyResponse' {} a -> s {httpStatus = a} :: GetImageRecipePolicyResponse)
+
+instance Prelude.NFData GetImageRecipePolicyResponse where
+  rnf GetImageRecipePolicyResponse' {..} =
+    Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/GetInfrastructureConfiguration.hs b/gen/Amazonka/ImageBuilder/GetInfrastructureConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/GetInfrastructureConfiguration.hs
@@ -0,0 +1,205 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.GetInfrastructureConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets an infrastructure configuration.
+module Amazonka.ImageBuilder.GetInfrastructureConfiguration
+  ( -- * Creating a Request
+    GetInfrastructureConfiguration (..),
+    newGetInfrastructureConfiguration,
+
+    -- * Request Lenses
+    getInfrastructureConfiguration_infrastructureConfigurationArn,
+
+    -- * Destructuring the Response
+    GetInfrastructureConfigurationResponse (..),
+    newGetInfrastructureConfigurationResponse,
+
+    -- * Response Lenses
+    getInfrastructureConfigurationResponse_infrastructureConfiguration,
+    getInfrastructureConfigurationResponse_requestId,
+    getInfrastructureConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | GetInfrastructureConfiguration request object.
+--
+-- /See:/ 'newGetInfrastructureConfiguration' smart constructor.
+data GetInfrastructureConfiguration = GetInfrastructureConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+    -- you want to retrieve.
+    infrastructureConfigurationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetInfrastructureConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'infrastructureConfigurationArn', 'getInfrastructureConfiguration_infrastructureConfigurationArn' - The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- you want to retrieve.
+newGetInfrastructureConfiguration ::
+  -- | 'infrastructureConfigurationArn'
+  Prelude.Text ->
+  GetInfrastructureConfiguration
+newGetInfrastructureConfiguration
+  pInfrastructureConfigurationArn_ =
+    GetInfrastructureConfiguration'
+      { infrastructureConfigurationArn =
+          pInfrastructureConfigurationArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- you want to retrieve.
+getInfrastructureConfiguration_infrastructureConfigurationArn :: Lens.Lens' GetInfrastructureConfiguration Prelude.Text
+getInfrastructureConfiguration_infrastructureConfigurationArn = Lens.lens (\GetInfrastructureConfiguration' {infrastructureConfigurationArn} -> infrastructureConfigurationArn) (\s@GetInfrastructureConfiguration' {} a -> s {infrastructureConfigurationArn = a} :: GetInfrastructureConfiguration)
+
+instance
+  Core.AWSRequest
+    GetInfrastructureConfiguration
+  where
+  type
+    AWSResponse GetInfrastructureConfiguration =
+      GetInfrastructureConfigurationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetInfrastructureConfigurationResponse'
+            Prelude.<$> (x Data..?> "infrastructureConfiguration")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetInfrastructureConfiguration
+  where
+  hashWithSalt
+    _salt
+    GetInfrastructureConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` infrastructureConfigurationArn
+
+instance
+  Prelude.NFData
+    GetInfrastructureConfiguration
+  where
+  rnf GetInfrastructureConfiguration' {..} =
+    Prelude.rnf infrastructureConfigurationArn
+
+instance
+  Data.ToHeaders
+    GetInfrastructureConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetInfrastructureConfiguration where
+  toPath =
+    Prelude.const "/GetInfrastructureConfiguration"
+
+instance Data.ToQuery GetInfrastructureConfiguration where
+  toQuery GetInfrastructureConfiguration' {..} =
+    Prelude.mconcat
+      [ "infrastructureConfigurationArn"
+          Data.=: infrastructureConfigurationArn
+      ]
+
+-- | GetInfrastructureConfiguration response object.
+--
+-- /See:/ 'newGetInfrastructureConfigurationResponse' smart constructor.
+data GetInfrastructureConfigurationResponse = GetInfrastructureConfigurationResponse'
+  { -- | The infrastructure configuration object.
+    infrastructureConfiguration :: Prelude.Maybe InfrastructureConfiguration,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetInfrastructureConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'infrastructureConfiguration', 'getInfrastructureConfigurationResponse_infrastructureConfiguration' - The infrastructure configuration object.
+--
+-- 'requestId', 'getInfrastructureConfigurationResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'getInfrastructureConfigurationResponse_httpStatus' - The response's http status code.
+newGetInfrastructureConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetInfrastructureConfigurationResponse
+newGetInfrastructureConfigurationResponse
+  pHttpStatus_ =
+    GetInfrastructureConfigurationResponse'
+      { infrastructureConfiguration =
+          Prelude.Nothing,
+        requestId = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The infrastructure configuration object.
+getInfrastructureConfigurationResponse_infrastructureConfiguration :: Lens.Lens' GetInfrastructureConfigurationResponse (Prelude.Maybe InfrastructureConfiguration)
+getInfrastructureConfigurationResponse_infrastructureConfiguration = Lens.lens (\GetInfrastructureConfigurationResponse' {infrastructureConfiguration} -> infrastructureConfiguration) (\s@GetInfrastructureConfigurationResponse' {} a -> s {infrastructureConfiguration = a} :: GetInfrastructureConfigurationResponse)
+
+-- | The request ID that uniquely identifies this request.
+getInfrastructureConfigurationResponse_requestId :: Lens.Lens' GetInfrastructureConfigurationResponse (Prelude.Maybe Prelude.Text)
+getInfrastructureConfigurationResponse_requestId = Lens.lens (\GetInfrastructureConfigurationResponse' {requestId} -> requestId) (\s@GetInfrastructureConfigurationResponse' {} a -> s {requestId = a} :: GetInfrastructureConfigurationResponse)
+
+-- | The response's http status code.
+getInfrastructureConfigurationResponse_httpStatus :: Lens.Lens' GetInfrastructureConfigurationResponse Prelude.Int
+getInfrastructureConfigurationResponse_httpStatus = Lens.lens (\GetInfrastructureConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetInfrastructureConfigurationResponse' {} a -> s {httpStatus = a} :: GetInfrastructureConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetInfrastructureConfigurationResponse
+  where
+  rnf GetInfrastructureConfigurationResponse' {..} =
+    Prelude.rnf infrastructureConfiguration
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/ImportComponent.hs b/gen/Amazonka/ImageBuilder/ImportComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/ImportComponent.hs
@@ -0,0 +1,412 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.ImportComponent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Imports a component and transforms its data into a component document.
+module Amazonka.ImageBuilder.ImportComponent
+  ( -- * Creating a Request
+    ImportComponent (..),
+    newImportComponent,
+
+    -- * Request Lenses
+    importComponent_changeDescription,
+    importComponent_data,
+    importComponent_description,
+    importComponent_kmsKeyId,
+    importComponent_tags,
+    importComponent_uri,
+    importComponent_name,
+    importComponent_semanticVersion,
+    importComponent_type,
+    importComponent_format,
+    importComponent_platform,
+    importComponent_clientToken,
+
+    -- * Destructuring the Response
+    ImportComponentResponse (..),
+    newImportComponentResponse,
+
+    -- * Response Lenses
+    importComponentResponse_clientToken,
+    importComponentResponse_componentBuildVersionArn,
+    importComponentResponse_requestId,
+    importComponentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newImportComponent' smart constructor.
+data ImportComponent = ImportComponent'
+  { -- | The change description of the component. Describes what change has been
+    -- made in this version, or what makes this version different from other
+    -- versions of this component.
+    changeDescription :: Prelude.Maybe Prelude.Text,
+    -- | The data of the component. Used to specify the data inline. Either
+    -- @data@ or @uri@ can be used to specify the data within the component.
+    data' :: Prelude.Maybe Prelude.Text,
+    -- | The description of the component. Describes the contents of the
+    -- component.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the KMS key that should be used to encrypt this component.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The tags of the component.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The uri of the component. Must be an Amazon S3 URL and the requester
+    -- must have permission to access the Amazon S3 bucket. If you use Amazon
+    -- S3, you can specify component content up to your service quota. Either
+    -- @data@ or @uri@ can be used to specify the data within the component.
+    uri :: Prelude.Maybe Prelude.Text,
+    -- | The name of the component.
+    name :: Prelude.Text,
+    -- | The semantic version of the component. This version follows the semantic
+    -- version syntax.
+    --
+    -- The semantic version has four nodes:
+    -- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+    -- first three, and can filter on all of them.
+    --
+    -- __Filtering:__ With semantic versioning, you have the flexibility to use
+    -- wildcards (x) to specify the most recent versions or nodes when
+    -- selecting the base image or components for your recipe. When you use a
+    -- wildcard in any node, all nodes to the right of the first wildcard must
+    -- also be wildcards.
+    semanticVersion :: Prelude.Text,
+    -- | The type of the component denotes whether the component is used to build
+    -- the image, or only to test it.
+    type' :: ComponentType,
+    -- | The format of the resource that you want to import as a component.
+    format :: ComponentFormat,
+    -- | The platform of the component.
+    platform :: Platform,
+    -- | The idempotency token of the component.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportComponent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'changeDescription', 'importComponent_changeDescription' - The change description of the component. Describes what change has been
+-- made in this version, or what makes this version different from other
+-- versions of this component.
+--
+-- 'data'', 'importComponent_data' - The data of the component. Used to specify the data inline. Either
+-- @data@ or @uri@ can be used to specify the data within the component.
+--
+-- 'description', 'importComponent_description' - The description of the component. Describes the contents of the
+-- component.
+--
+-- 'kmsKeyId', 'importComponent_kmsKeyId' - The ID of the KMS key that should be used to encrypt this component.
+--
+-- 'tags', 'importComponent_tags' - The tags of the component.
+--
+-- 'uri', 'importComponent_uri' - The uri of the component. Must be an Amazon S3 URL and the requester
+-- must have permission to access the Amazon S3 bucket. If you use Amazon
+-- S3, you can specify component content up to your service quota. Either
+-- @data@ or @uri@ can be used to specify the data within the component.
+--
+-- 'name', 'importComponent_name' - The name of the component.
+--
+-- 'semanticVersion', 'importComponent_semanticVersion' - The semantic version of the component. This version follows the semantic
+-- version syntax.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Filtering:__ With semantic versioning, you have the flexibility to use
+-- wildcards (x) to specify the most recent versions or nodes when
+-- selecting the base image or components for your recipe. When you use a
+-- wildcard in any node, all nodes to the right of the first wildcard must
+-- also be wildcards.
+--
+-- 'type'', 'importComponent_type' - The type of the component denotes whether the component is used to build
+-- the image, or only to test it.
+--
+-- 'format', 'importComponent_format' - The format of the resource that you want to import as a component.
+--
+-- 'platform', 'importComponent_platform' - The platform of the component.
+--
+-- 'clientToken', 'importComponent_clientToken' - The idempotency token of the component.
+newImportComponent ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'semanticVersion'
+  Prelude.Text ->
+  -- | 'type''
+  ComponentType ->
+  -- | 'format'
+  ComponentFormat ->
+  -- | 'platform'
+  Platform ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  ImportComponent
+newImportComponent
+  pName_
+  pSemanticVersion_
+  pType_
+  pFormat_
+  pPlatform_
+  pClientToken_ =
+    ImportComponent'
+      { changeDescription =
+          Prelude.Nothing,
+        data' = Prelude.Nothing,
+        description = Prelude.Nothing,
+        kmsKeyId = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        uri = Prelude.Nothing,
+        name = pName_,
+        semanticVersion = pSemanticVersion_,
+        type' = pType_,
+        format = pFormat_,
+        platform = pPlatform_,
+        clientToken = pClientToken_
+      }
+
+-- | The change description of the component. Describes what change has been
+-- made in this version, or what makes this version different from other
+-- versions of this component.
+importComponent_changeDescription :: Lens.Lens' ImportComponent (Prelude.Maybe Prelude.Text)
+importComponent_changeDescription = Lens.lens (\ImportComponent' {changeDescription} -> changeDescription) (\s@ImportComponent' {} a -> s {changeDescription = a} :: ImportComponent)
+
+-- | The data of the component. Used to specify the data inline. Either
+-- @data@ or @uri@ can be used to specify the data within the component.
+importComponent_data :: Lens.Lens' ImportComponent (Prelude.Maybe Prelude.Text)
+importComponent_data = Lens.lens (\ImportComponent' {data'} -> data') (\s@ImportComponent' {} a -> s {data' = a} :: ImportComponent)
+
+-- | The description of the component. Describes the contents of the
+-- component.
+importComponent_description :: Lens.Lens' ImportComponent (Prelude.Maybe Prelude.Text)
+importComponent_description = Lens.lens (\ImportComponent' {description} -> description) (\s@ImportComponent' {} a -> s {description = a} :: ImportComponent)
+
+-- | The ID of the KMS key that should be used to encrypt this component.
+importComponent_kmsKeyId :: Lens.Lens' ImportComponent (Prelude.Maybe Prelude.Text)
+importComponent_kmsKeyId = Lens.lens (\ImportComponent' {kmsKeyId} -> kmsKeyId) (\s@ImportComponent' {} a -> s {kmsKeyId = a} :: ImportComponent)
+
+-- | The tags of the component.
+importComponent_tags :: Lens.Lens' ImportComponent (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+importComponent_tags = Lens.lens (\ImportComponent' {tags} -> tags) (\s@ImportComponent' {} a -> s {tags = a} :: ImportComponent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The uri of the component. Must be an Amazon S3 URL and the requester
+-- must have permission to access the Amazon S3 bucket. If you use Amazon
+-- S3, you can specify component content up to your service quota. Either
+-- @data@ or @uri@ can be used to specify the data within the component.
+importComponent_uri :: Lens.Lens' ImportComponent (Prelude.Maybe Prelude.Text)
+importComponent_uri = Lens.lens (\ImportComponent' {uri} -> uri) (\s@ImportComponent' {} a -> s {uri = a} :: ImportComponent)
+
+-- | The name of the component.
+importComponent_name :: Lens.Lens' ImportComponent Prelude.Text
+importComponent_name = Lens.lens (\ImportComponent' {name} -> name) (\s@ImportComponent' {} a -> s {name = a} :: ImportComponent)
+
+-- | The semantic version of the component. This version follows the semantic
+-- version syntax.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Filtering:__ With semantic versioning, you have the flexibility to use
+-- wildcards (x) to specify the most recent versions or nodes when
+-- selecting the base image or components for your recipe. When you use a
+-- wildcard in any node, all nodes to the right of the first wildcard must
+-- also be wildcards.
+importComponent_semanticVersion :: Lens.Lens' ImportComponent Prelude.Text
+importComponent_semanticVersion = Lens.lens (\ImportComponent' {semanticVersion} -> semanticVersion) (\s@ImportComponent' {} a -> s {semanticVersion = a} :: ImportComponent)
+
+-- | The type of the component denotes whether the component is used to build
+-- the image, or only to test it.
+importComponent_type :: Lens.Lens' ImportComponent ComponentType
+importComponent_type = Lens.lens (\ImportComponent' {type'} -> type') (\s@ImportComponent' {} a -> s {type' = a} :: ImportComponent)
+
+-- | The format of the resource that you want to import as a component.
+importComponent_format :: Lens.Lens' ImportComponent ComponentFormat
+importComponent_format = Lens.lens (\ImportComponent' {format} -> format) (\s@ImportComponent' {} a -> s {format = a} :: ImportComponent)
+
+-- | The platform of the component.
+importComponent_platform :: Lens.Lens' ImportComponent Platform
+importComponent_platform = Lens.lens (\ImportComponent' {platform} -> platform) (\s@ImportComponent' {} a -> s {platform = a} :: ImportComponent)
+
+-- | The idempotency token of the component.
+importComponent_clientToken :: Lens.Lens' ImportComponent Prelude.Text
+importComponent_clientToken = Lens.lens (\ImportComponent' {clientToken} -> clientToken) (\s@ImportComponent' {} a -> s {clientToken = a} :: ImportComponent)
+
+instance Core.AWSRequest ImportComponent where
+  type
+    AWSResponse ImportComponent =
+      ImportComponentResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ImportComponentResponse'
+            Prelude.<$> (x Data..?> "clientToken")
+            Prelude.<*> (x Data..?> "componentBuildVersionArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ImportComponent where
+  hashWithSalt _salt ImportComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` changeDescription
+      `Prelude.hashWithSalt` data'
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` uri
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` semanticVersion
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData ImportComponent where
+  rnf ImportComponent' {..} =
+    Prelude.rnf changeDescription
+      `Prelude.seq` Prelude.rnf data'
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf uri
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf semanticVersion
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance Data.ToHeaders ImportComponent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ImportComponent where
+  toJSON ImportComponent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("changeDescription" Data..=)
+              Prelude.<$> changeDescription,
+            ("data" Data..=) Prelude.<$> data',
+            ("description" Data..=) Prelude.<$> description,
+            ("kmsKeyId" Data..=) Prelude.<$> kmsKeyId,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("uri" Data..=) Prelude.<$> uri,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ("semanticVersion" Data..= semanticVersion),
+            Prelude.Just ("type" Data..= type'),
+            Prelude.Just ("format" Data..= format),
+            Prelude.Just ("platform" Data..= platform),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance Data.ToPath ImportComponent where
+  toPath = Prelude.const "/ImportComponent"
+
+instance Data.ToQuery ImportComponent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newImportComponentResponse' smart constructor.
+data ImportComponentResponse = ImportComponentResponse'
+  { -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the imported component.
+    componentBuildVersionArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportComponentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'importComponentResponse_clientToken' - The idempotency token used to make this request idempotent.
+--
+-- 'componentBuildVersionArn', 'importComponentResponse_componentBuildVersionArn' - The Amazon Resource Name (ARN) of the imported component.
+--
+-- 'requestId', 'importComponentResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'importComponentResponse_httpStatus' - The response's http status code.
+newImportComponentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ImportComponentResponse
+newImportComponentResponse pHttpStatus_ =
+  ImportComponentResponse'
+    { clientToken =
+        Prelude.Nothing,
+      componentBuildVersionArn = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The idempotency token used to make this request idempotent.
+importComponentResponse_clientToken :: Lens.Lens' ImportComponentResponse (Prelude.Maybe Prelude.Text)
+importComponentResponse_clientToken = Lens.lens (\ImportComponentResponse' {clientToken} -> clientToken) (\s@ImportComponentResponse' {} a -> s {clientToken = a} :: ImportComponentResponse)
+
+-- | The Amazon Resource Name (ARN) of the imported component.
+importComponentResponse_componentBuildVersionArn :: Lens.Lens' ImportComponentResponse (Prelude.Maybe Prelude.Text)
+importComponentResponse_componentBuildVersionArn = Lens.lens (\ImportComponentResponse' {componentBuildVersionArn} -> componentBuildVersionArn) (\s@ImportComponentResponse' {} a -> s {componentBuildVersionArn = a} :: ImportComponentResponse)
+
+-- | The request ID that uniquely identifies this request.
+importComponentResponse_requestId :: Lens.Lens' ImportComponentResponse (Prelude.Maybe Prelude.Text)
+importComponentResponse_requestId = Lens.lens (\ImportComponentResponse' {requestId} -> requestId) (\s@ImportComponentResponse' {} a -> s {requestId = a} :: ImportComponentResponse)
+
+-- | The response's http status code.
+importComponentResponse_httpStatus :: Lens.Lens' ImportComponentResponse Prelude.Int
+importComponentResponse_httpStatus = Lens.lens (\ImportComponentResponse' {httpStatus} -> httpStatus) (\s@ImportComponentResponse' {} a -> s {httpStatus = a} :: ImportComponentResponse)
+
+instance Prelude.NFData ImportComponentResponse where
+  rnf ImportComponentResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf componentBuildVersionArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/ImportVmImage.hs b/gen/Amazonka/ImageBuilder/ImportVmImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/ImportVmImage.hs
@@ -0,0 +1,381 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.ImportVmImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- When you export your virtual machine (VM) from its virtualization
+-- environment, that process creates a set of one or more disk container
+-- files that act as snapshots of your VM’s environment, settings, and
+-- data. The Amazon EC2 API
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportImage.html ImportImage>
+-- action uses those files to import your VM and create an AMI. To import
+-- using the CLI command, see
+-- <https://docs.aws.amazon.com/cli/latest/reference/ec2/import-image.html import-image>
+--
+-- You can reference the task ID from the VM import to pull in the AMI that
+-- the import created as the base image for your Image Builder recipe.
+module Amazonka.ImageBuilder.ImportVmImage
+  ( -- * Creating a Request
+    ImportVmImage (..),
+    newImportVmImage,
+
+    -- * Request Lenses
+    importVmImage_description,
+    importVmImage_osVersion,
+    importVmImage_tags,
+    importVmImage_name,
+    importVmImage_semanticVersion,
+    importVmImage_platform,
+    importVmImage_vmImportTaskId,
+    importVmImage_clientToken,
+
+    -- * Destructuring the Response
+    ImportVmImageResponse (..),
+    newImportVmImageResponse,
+
+    -- * Response Lenses
+    importVmImageResponse_clientToken,
+    importVmImageResponse_imageArn,
+    importVmImageResponse_requestId,
+    importVmImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newImportVmImage' smart constructor.
+data ImportVmImage = ImportVmImage'
+  { -- | The description for the base image that is created by the import
+    -- process.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The operating system version for the imported VM.
+    osVersion :: Prelude.Maybe Prelude.Text,
+    -- | Tags that are attached to the import resources.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the base image that is created by the import process.
+    name :: Prelude.Text,
+    -- | The semantic version to attach to the base image that was created during
+    -- the import process. This version follows the semantic version syntax.
+    --
+    -- The semantic version has four nodes:
+    -- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+    -- first three, and can filter on all of them.
+    --
+    -- __Assignment:__ For the first three nodes you can assign any positive
+    -- integer value, including zero, with an upper limit of 2^30-1, or
+    -- 1073741823 for each node. Image Builder automatically assigns the build
+    -- number to the fourth node.
+    --
+    -- __Patterns:__ You can use any numeric pattern that adheres to the
+    -- assignment requirements for the nodes that you can assign. For example,
+    -- you might choose a software version pattern, such as 1.0.0, or a date,
+    -- such as 2021.01.01.
+    semanticVersion :: Prelude.Text,
+    -- | The operating system platform for the imported VM.
+    platform :: Platform,
+    -- | The @importTaskId@ (API) or @ImportTaskId@ (CLI) from the Amazon EC2 VM
+    -- import process. Image Builder retrieves information from the import
+    -- process to pull in the AMI that is created from the VM source as the
+    -- base image for your recipe.
+    vmImportTaskId :: Prelude.Text,
+    -- | Unique, case-sensitive identifier you provide to ensure idempotency of
+    -- the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>
+    -- in the /Amazon EC2 API Reference/.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportVmImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'importVmImage_description' - The description for the base image that is created by the import
+-- process.
+--
+-- 'osVersion', 'importVmImage_osVersion' - The operating system version for the imported VM.
+--
+-- 'tags', 'importVmImage_tags' - Tags that are attached to the import resources.
+--
+-- 'name', 'importVmImage_name' - The name of the base image that is created by the import process.
+--
+-- 'semanticVersion', 'importVmImage_semanticVersion' - The semantic version to attach to the base image that was created during
+-- the import process. This version follows the semantic version syntax.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+--
+-- 'platform', 'importVmImage_platform' - The operating system platform for the imported VM.
+--
+-- 'vmImportTaskId', 'importVmImage_vmImportTaskId' - The @importTaskId@ (API) or @ImportTaskId@ (CLI) from the Amazon EC2 VM
+-- import process. Image Builder retrieves information from the import
+-- process to pull in the AMI that is created from the VM source as the
+-- base image for your recipe.
+--
+-- 'clientToken', 'importVmImage_clientToken' - Unique, case-sensitive identifier you provide to ensure idempotency of
+-- the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>
+-- in the /Amazon EC2 API Reference/.
+newImportVmImage ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'semanticVersion'
+  Prelude.Text ->
+  -- | 'platform'
+  Platform ->
+  -- | 'vmImportTaskId'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  ImportVmImage
+newImportVmImage
+  pName_
+  pSemanticVersion_
+  pPlatform_
+  pVmImportTaskId_
+  pClientToken_ =
+    ImportVmImage'
+      { description = Prelude.Nothing,
+        osVersion = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        name = pName_,
+        semanticVersion = pSemanticVersion_,
+        platform = pPlatform_,
+        vmImportTaskId = pVmImportTaskId_,
+        clientToken = pClientToken_
+      }
+
+-- | The description for the base image that is created by the import
+-- process.
+importVmImage_description :: Lens.Lens' ImportVmImage (Prelude.Maybe Prelude.Text)
+importVmImage_description = Lens.lens (\ImportVmImage' {description} -> description) (\s@ImportVmImage' {} a -> s {description = a} :: ImportVmImage)
+
+-- | The operating system version for the imported VM.
+importVmImage_osVersion :: Lens.Lens' ImportVmImage (Prelude.Maybe Prelude.Text)
+importVmImage_osVersion = Lens.lens (\ImportVmImage' {osVersion} -> osVersion) (\s@ImportVmImage' {} a -> s {osVersion = a} :: ImportVmImage)
+
+-- | Tags that are attached to the import resources.
+importVmImage_tags :: Lens.Lens' ImportVmImage (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+importVmImage_tags = Lens.lens (\ImportVmImage' {tags} -> tags) (\s@ImportVmImage' {} a -> s {tags = a} :: ImportVmImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the base image that is created by the import process.
+importVmImage_name :: Lens.Lens' ImportVmImage Prelude.Text
+importVmImage_name = Lens.lens (\ImportVmImage' {name} -> name) (\s@ImportVmImage' {} a -> s {name = a} :: ImportVmImage)
+
+-- | The semantic version to attach to the base image that was created during
+-- the import process. This version follows the semantic version syntax.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+importVmImage_semanticVersion :: Lens.Lens' ImportVmImage Prelude.Text
+importVmImage_semanticVersion = Lens.lens (\ImportVmImage' {semanticVersion} -> semanticVersion) (\s@ImportVmImage' {} a -> s {semanticVersion = a} :: ImportVmImage)
+
+-- | The operating system platform for the imported VM.
+importVmImage_platform :: Lens.Lens' ImportVmImage Platform
+importVmImage_platform = Lens.lens (\ImportVmImage' {platform} -> platform) (\s@ImportVmImage' {} a -> s {platform = a} :: ImportVmImage)
+
+-- | The @importTaskId@ (API) or @ImportTaskId@ (CLI) from the Amazon EC2 VM
+-- import process. Image Builder retrieves information from the import
+-- process to pull in the AMI that is created from the VM source as the
+-- base image for your recipe.
+importVmImage_vmImportTaskId :: Lens.Lens' ImportVmImage Prelude.Text
+importVmImage_vmImportTaskId = Lens.lens (\ImportVmImage' {vmImportTaskId} -> vmImportTaskId) (\s@ImportVmImage' {} a -> s {vmImportTaskId = a} :: ImportVmImage)
+
+-- | Unique, case-sensitive identifier you provide to ensure idempotency of
+-- the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>
+-- in the /Amazon EC2 API Reference/.
+importVmImage_clientToken :: Lens.Lens' ImportVmImage Prelude.Text
+importVmImage_clientToken = Lens.lens (\ImportVmImage' {clientToken} -> clientToken) (\s@ImportVmImage' {} a -> s {clientToken = a} :: ImportVmImage)
+
+instance Core.AWSRequest ImportVmImage where
+  type
+    AWSResponse ImportVmImage =
+      ImportVmImageResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ImportVmImageResponse'
+            Prelude.<$> (x Data..?> "clientToken")
+            Prelude.<*> (x Data..?> "imageArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ImportVmImage where
+  hashWithSalt _salt ImportVmImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` osVersion
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` semanticVersion
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` vmImportTaskId
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData ImportVmImage where
+  rnf ImportVmImage' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf osVersion
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf semanticVersion
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf vmImportTaskId
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance Data.ToHeaders ImportVmImage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ImportVmImage where
+  toJSON ImportVmImage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("osVersion" Data..=) Prelude.<$> osVersion,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ("semanticVersion" Data..= semanticVersion),
+            Prelude.Just ("platform" Data..= platform),
+            Prelude.Just
+              ("vmImportTaskId" Data..= vmImportTaskId),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance Data.ToPath ImportVmImage where
+  toPath = Prelude.const "/ImportVmImage"
+
+instance Data.ToQuery ImportVmImage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newImportVmImageResponse' smart constructor.
+data ImportVmImageResponse = ImportVmImageResponse'
+  { -- | The idempotency token that was used for this request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the AMI that was created during the VM
+    -- import process. This AMI is used as the base image for the recipe that
+    -- imported the VM.
+    imageArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportVmImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'importVmImageResponse_clientToken' - The idempotency token that was used for this request.
+--
+-- 'imageArn', 'importVmImageResponse_imageArn' - The Amazon Resource Name (ARN) of the AMI that was created during the VM
+-- import process. This AMI is used as the base image for the recipe that
+-- imported the VM.
+--
+-- 'requestId', 'importVmImageResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'importVmImageResponse_httpStatus' - The response's http status code.
+newImportVmImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ImportVmImageResponse
+newImportVmImageResponse pHttpStatus_ =
+  ImportVmImageResponse'
+    { clientToken =
+        Prelude.Nothing,
+      imageArn = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The idempotency token that was used for this request.
+importVmImageResponse_clientToken :: Lens.Lens' ImportVmImageResponse (Prelude.Maybe Prelude.Text)
+importVmImageResponse_clientToken = Lens.lens (\ImportVmImageResponse' {clientToken} -> clientToken) (\s@ImportVmImageResponse' {} a -> s {clientToken = a} :: ImportVmImageResponse)
+
+-- | The Amazon Resource Name (ARN) of the AMI that was created during the VM
+-- import process. This AMI is used as the base image for the recipe that
+-- imported the VM.
+importVmImageResponse_imageArn :: Lens.Lens' ImportVmImageResponse (Prelude.Maybe Prelude.Text)
+importVmImageResponse_imageArn = Lens.lens (\ImportVmImageResponse' {imageArn} -> imageArn) (\s@ImportVmImageResponse' {} a -> s {imageArn = a} :: ImportVmImageResponse)
+
+-- | The request ID that uniquely identifies this request.
+importVmImageResponse_requestId :: Lens.Lens' ImportVmImageResponse (Prelude.Maybe Prelude.Text)
+importVmImageResponse_requestId = Lens.lens (\ImportVmImageResponse' {requestId} -> requestId) (\s@ImportVmImageResponse' {} a -> s {requestId = a} :: ImportVmImageResponse)
+
+-- | The response's http status code.
+importVmImageResponse_httpStatus :: Lens.Lens' ImportVmImageResponse Prelude.Int
+importVmImageResponse_httpStatus = Lens.lens (\ImportVmImageResponse' {httpStatus} -> httpStatus) (\s@ImportVmImageResponse' {} a -> s {httpStatus = a} :: ImportVmImageResponse)
+
+instance Prelude.NFData ImportVmImageResponse where
+  rnf ImportVmImageResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf imageArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/Lens.hs b/gen/Amazonka/ImageBuilder/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Lens.hs
@@ -0,0 +1,947 @@
+{-# 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.ImageBuilder.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.ImageBuilder.Lens
+  ( -- * Operations
+
+    -- ** CancelImageCreation
+    cancelImageCreation_imageBuildVersionArn,
+    cancelImageCreation_clientToken,
+    cancelImageCreationResponse_clientToken,
+    cancelImageCreationResponse_imageBuildVersionArn,
+    cancelImageCreationResponse_requestId,
+    cancelImageCreationResponse_httpStatus,
+
+    -- ** CreateComponent
+    createComponent_changeDescription,
+    createComponent_data,
+    createComponent_description,
+    createComponent_kmsKeyId,
+    createComponent_supportedOsVersions,
+    createComponent_tags,
+    createComponent_uri,
+    createComponent_name,
+    createComponent_semanticVersion,
+    createComponent_platform,
+    createComponent_clientToken,
+    createComponentResponse_clientToken,
+    createComponentResponse_componentBuildVersionArn,
+    createComponentResponse_requestId,
+    createComponentResponse_httpStatus,
+
+    -- ** CreateContainerRecipe
+    createContainerRecipe_description,
+    createContainerRecipe_dockerfileTemplateData,
+    createContainerRecipe_dockerfileTemplateUri,
+    createContainerRecipe_imageOsVersionOverride,
+    createContainerRecipe_instanceConfiguration,
+    createContainerRecipe_kmsKeyId,
+    createContainerRecipe_platformOverride,
+    createContainerRecipe_tags,
+    createContainerRecipe_workingDirectory,
+    createContainerRecipe_containerType,
+    createContainerRecipe_name,
+    createContainerRecipe_semanticVersion,
+    createContainerRecipe_components,
+    createContainerRecipe_parentImage,
+    createContainerRecipe_targetRepository,
+    createContainerRecipe_clientToken,
+    createContainerRecipeResponse_clientToken,
+    createContainerRecipeResponse_containerRecipeArn,
+    createContainerRecipeResponse_requestId,
+    createContainerRecipeResponse_httpStatus,
+
+    -- ** CreateDistributionConfiguration
+    createDistributionConfiguration_description,
+    createDistributionConfiguration_tags,
+    createDistributionConfiguration_name,
+    createDistributionConfiguration_distributions,
+    createDistributionConfiguration_clientToken,
+    createDistributionConfigurationResponse_clientToken,
+    createDistributionConfigurationResponse_distributionConfigurationArn,
+    createDistributionConfigurationResponse_requestId,
+    createDistributionConfigurationResponse_httpStatus,
+
+    -- ** CreateImage
+    createImage_containerRecipeArn,
+    createImage_distributionConfigurationArn,
+    createImage_enhancedImageMetadataEnabled,
+    createImage_imageRecipeArn,
+    createImage_imageTestsConfiguration,
+    createImage_tags,
+    createImage_infrastructureConfigurationArn,
+    createImage_clientToken,
+    createImageResponse_clientToken,
+    createImageResponse_imageBuildVersionArn,
+    createImageResponse_requestId,
+    createImageResponse_httpStatus,
+
+    -- ** CreateImagePipeline
+    createImagePipeline_containerRecipeArn,
+    createImagePipeline_description,
+    createImagePipeline_distributionConfigurationArn,
+    createImagePipeline_enhancedImageMetadataEnabled,
+    createImagePipeline_imageRecipeArn,
+    createImagePipeline_imageTestsConfiguration,
+    createImagePipeline_schedule,
+    createImagePipeline_status,
+    createImagePipeline_tags,
+    createImagePipeline_name,
+    createImagePipeline_infrastructureConfigurationArn,
+    createImagePipeline_clientToken,
+    createImagePipelineResponse_clientToken,
+    createImagePipelineResponse_imagePipelineArn,
+    createImagePipelineResponse_requestId,
+    createImagePipelineResponse_httpStatus,
+
+    -- ** CreateImageRecipe
+    createImageRecipe_additionalInstanceConfiguration,
+    createImageRecipe_blockDeviceMappings,
+    createImageRecipe_description,
+    createImageRecipe_tags,
+    createImageRecipe_workingDirectory,
+    createImageRecipe_name,
+    createImageRecipe_semanticVersion,
+    createImageRecipe_components,
+    createImageRecipe_parentImage,
+    createImageRecipe_clientToken,
+    createImageRecipeResponse_clientToken,
+    createImageRecipeResponse_imageRecipeArn,
+    createImageRecipeResponse_requestId,
+    createImageRecipeResponse_httpStatus,
+
+    -- ** CreateInfrastructureConfiguration
+    createInfrastructureConfiguration_description,
+    createInfrastructureConfiguration_instanceMetadataOptions,
+    createInfrastructureConfiguration_instanceTypes,
+    createInfrastructureConfiguration_keyPair,
+    createInfrastructureConfiguration_logging,
+    createInfrastructureConfiguration_resourceTags,
+    createInfrastructureConfiguration_securityGroupIds,
+    createInfrastructureConfiguration_snsTopicArn,
+    createInfrastructureConfiguration_subnetId,
+    createInfrastructureConfiguration_tags,
+    createInfrastructureConfiguration_terminateInstanceOnFailure,
+    createInfrastructureConfiguration_name,
+    createInfrastructureConfiguration_instanceProfileName,
+    createInfrastructureConfiguration_clientToken,
+    createInfrastructureConfigurationResponse_clientToken,
+    createInfrastructureConfigurationResponse_infrastructureConfigurationArn,
+    createInfrastructureConfigurationResponse_requestId,
+    createInfrastructureConfigurationResponse_httpStatus,
+
+    -- ** DeleteComponent
+    deleteComponent_componentBuildVersionArn,
+    deleteComponentResponse_componentBuildVersionArn,
+    deleteComponentResponse_requestId,
+    deleteComponentResponse_httpStatus,
+
+    -- ** DeleteContainerRecipe
+    deleteContainerRecipe_containerRecipeArn,
+    deleteContainerRecipeResponse_containerRecipeArn,
+    deleteContainerRecipeResponse_requestId,
+    deleteContainerRecipeResponse_httpStatus,
+
+    -- ** DeleteDistributionConfiguration
+    deleteDistributionConfiguration_distributionConfigurationArn,
+    deleteDistributionConfigurationResponse_distributionConfigurationArn,
+    deleteDistributionConfigurationResponse_requestId,
+    deleteDistributionConfigurationResponse_httpStatus,
+
+    -- ** DeleteImage
+    deleteImage_imageBuildVersionArn,
+    deleteImageResponse_imageBuildVersionArn,
+    deleteImageResponse_requestId,
+    deleteImageResponse_httpStatus,
+
+    -- ** DeleteImagePipeline
+    deleteImagePipeline_imagePipelineArn,
+    deleteImagePipelineResponse_imagePipelineArn,
+    deleteImagePipelineResponse_requestId,
+    deleteImagePipelineResponse_httpStatus,
+
+    -- ** DeleteImageRecipe
+    deleteImageRecipe_imageRecipeArn,
+    deleteImageRecipeResponse_imageRecipeArn,
+    deleteImageRecipeResponse_requestId,
+    deleteImageRecipeResponse_httpStatus,
+
+    -- ** DeleteInfrastructureConfiguration
+    deleteInfrastructureConfiguration_infrastructureConfigurationArn,
+    deleteInfrastructureConfigurationResponse_infrastructureConfigurationArn,
+    deleteInfrastructureConfigurationResponse_requestId,
+    deleteInfrastructureConfigurationResponse_httpStatus,
+
+    -- ** GetComponent
+    getComponent_componentBuildVersionArn,
+    getComponentResponse_component,
+    getComponentResponse_requestId,
+    getComponentResponse_httpStatus,
+
+    -- ** GetComponentPolicy
+    getComponentPolicy_componentArn,
+    getComponentPolicyResponse_policy,
+    getComponentPolicyResponse_requestId,
+    getComponentPolicyResponse_httpStatus,
+
+    -- ** GetContainerRecipe
+    getContainerRecipe_containerRecipeArn,
+    getContainerRecipeResponse_containerRecipe,
+    getContainerRecipeResponse_requestId,
+    getContainerRecipeResponse_httpStatus,
+
+    -- ** GetContainerRecipePolicy
+    getContainerRecipePolicy_containerRecipeArn,
+    getContainerRecipePolicyResponse_policy,
+    getContainerRecipePolicyResponse_requestId,
+    getContainerRecipePolicyResponse_httpStatus,
+
+    -- ** GetDistributionConfiguration
+    getDistributionConfiguration_distributionConfigurationArn,
+    getDistributionConfigurationResponse_distributionConfiguration,
+    getDistributionConfigurationResponse_requestId,
+    getDistributionConfigurationResponse_httpStatus,
+
+    -- ** GetImage
+    getImage_imageBuildVersionArn,
+    getImageResponse_image,
+    getImageResponse_requestId,
+    getImageResponse_httpStatus,
+
+    -- ** GetImagePipeline
+    getImagePipeline_imagePipelineArn,
+    getImagePipelineResponse_imagePipeline,
+    getImagePipelineResponse_requestId,
+    getImagePipelineResponse_httpStatus,
+
+    -- ** GetImagePolicy
+    getImagePolicy_imageArn,
+    getImagePolicyResponse_policy,
+    getImagePolicyResponse_requestId,
+    getImagePolicyResponse_httpStatus,
+
+    -- ** GetImageRecipe
+    getImageRecipe_imageRecipeArn,
+    getImageRecipeResponse_imageRecipe,
+    getImageRecipeResponse_requestId,
+    getImageRecipeResponse_httpStatus,
+
+    -- ** GetImageRecipePolicy
+    getImageRecipePolicy_imageRecipeArn,
+    getImageRecipePolicyResponse_policy,
+    getImageRecipePolicyResponse_requestId,
+    getImageRecipePolicyResponse_httpStatus,
+
+    -- ** GetInfrastructureConfiguration
+    getInfrastructureConfiguration_infrastructureConfigurationArn,
+    getInfrastructureConfigurationResponse_infrastructureConfiguration,
+    getInfrastructureConfigurationResponse_requestId,
+    getInfrastructureConfigurationResponse_httpStatus,
+
+    -- ** ImportComponent
+    importComponent_changeDescription,
+    importComponent_data,
+    importComponent_description,
+    importComponent_kmsKeyId,
+    importComponent_tags,
+    importComponent_uri,
+    importComponent_name,
+    importComponent_semanticVersion,
+    importComponent_type,
+    importComponent_format,
+    importComponent_platform,
+    importComponent_clientToken,
+    importComponentResponse_clientToken,
+    importComponentResponse_componentBuildVersionArn,
+    importComponentResponse_requestId,
+    importComponentResponse_httpStatus,
+
+    -- ** ImportVmImage
+    importVmImage_description,
+    importVmImage_osVersion,
+    importVmImage_tags,
+    importVmImage_name,
+    importVmImage_semanticVersion,
+    importVmImage_platform,
+    importVmImage_vmImportTaskId,
+    importVmImage_clientToken,
+    importVmImageResponse_clientToken,
+    importVmImageResponse_imageArn,
+    importVmImageResponse_requestId,
+    importVmImageResponse_httpStatus,
+
+    -- ** ListComponentBuildVersions
+    listComponentBuildVersions_maxResults,
+    listComponentBuildVersions_nextToken,
+    listComponentBuildVersions_componentVersionArn,
+    listComponentBuildVersionsResponse_componentSummaryList,
+    listComponentBuildVersionsResponse_nextToken,
+    listComponentBuildVersionsResponse_requestId,
+    listComponentBuildVersionsResponse_httpStatus,
+
+    -- ** ListComponents
+    listComponents_byName,
+    listComponents_filters,
+    listComponents_maxResults,
+    listComponents_nextToken,
+    listComponents_owner,
+    listComponentsResponse_componentVersionList,
+    listComponentsResponse_nextToken,
+    listComponentsResponse_requestId,
+    listComponentsResponse_httpStatus,
+
+    -- ** ListContainerRecipes
+    listContainerRecipes_filters,
+    listContainerRecipes_maxResults,
+    listContainerRecipes_nextToken,
+    listContainerRecipes_owner,
+    listContainerRecipesResponse_containerRecipeSummaryList,
+    listContainerRecipesResponse_nextToken,
+    listContainerRecipesResponse_requestId,
+    listContainerRecipesResponse_httpStatus,
+
+    -- ** ListDistributionConfigurations
+    listDistributionConfigurations_filters,
+    listDistributionConfigurations_maxResults,
+    listDistributionConfigurations_nextToken,
+    listDistributionConfigurationsResponse_distributionConfigurationSummaryList,
+    listDistributionConfigurationsResponse_nextToken,
+    listDistributionConfigurationsResponse_requestId,
+    listDistributionConfigurationsResponse_httpStatus,
+
+    -- ** ListImageBuildVersions
+    listImageBuildVersions_filters,
+    listImageBuildVersions_maxResults,
+    listImageBuildVersions_nextToken,
+    listImageBuildVersions_imageVersionArn,
+    listImageBuildVersionsResponse_imageSummaryList,
+    listImageBuildVersionsResponse_nextToken,
+    listImageBuildVersionsResponse_requestId,
+    listImageBuildVersionsResponse_httpStatus,
+
+    -- ** ListImagePackages
+    listImagePackages_maxResults,
+    listImagePackages_nextToken,
+    listImagePackages_imageBuildVersionArn,
+    listImagePackagesResponse_imagePackageList,
+    listImagePackagesResponse_nextToken,
+    listImagePackagesResponse_requestId,
+    listImagePackagesResponse_httpStatus,
+
+    -- ** ListImagePipelineImages
+    listImagePipelineImages_filters,
+    listImagePipelineImages_maxResults,
+    listImagePipelineImages_nextToken,
+    listImagePipelineImages_imagePipelineArn,
+    listImagePipelineImagesResponse_imageSummaryList,
+    listImagePipelineImagesResponse_nextToken,
+    listImagePipelineImagesResponse_requestId,
+    listImagePipelineImagesResponse_httpStatus,
+
+    -- ** ListImagePipelines
+    listImagePipelines_filters,
+    listImagePipelines_maxResults,
+    listImagePipelines_nextToken,
+    listImagePipelinesResponse_imagePipelineList,
+    listImagePipelinesResponse_nextToken,
+    listImagePipelinesResponse_requestId,
+    listImagePipelinesResponse_httpStatus,
+
+    -- ** ListImageRecipes
+    listImageRecipes_filters,
+    listImageRecipes_maxResults,
+    listImageRecipes_nextToken,
+    listImageRecipes_owner,
+    listImageRecipesResponse_imageRecipeSummaryList,
+    listImageRecipesResponse_nextToken,
+    listImageRecipesResponse_requestId,
+    listImageRecipesResponse_httpStatus,
+
+    -- ** ListImages
+    listImages_byName,
+    listImages_filters,
+    listImages_includeDeprecated,
+    listImages_maxResults,
+    listImages_nextToken,
+    listImages_owner,
+    listImagesResponse_imageVersionList,
+    listImagesResponse_nextToken,
+    listImagesResponse_requestId,
+    listImagesResponse_httpStatus,
+
+    -- ** ListInfrastructureConfigurations
+    listInfrastructureConfigurations_filters,
+    listInfrastructureConfigurations_maxResults,
+    listInfrastructureConfigurations_nextToken,
+    listInfrastructureConfigurationsResponse_infrastructureConfigurationSummaryList,
+    listInfrastructureConfigurationsResponse_nextToken,
+    listInfrastructureConfigurationsResponse_requestId,
+    listInfrastructureConfigurationsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** PutComponentPolicy
+    putComponentPolicy_componentArn,
+    putComponentPolicy_policy,
+    putComponentPolicyResponse_componentArn,
+    putComponentPolicyResponse_requestId,
+    putComponentPolicyResponse_httpStatus,
+
+    -- ** PutContainerRecipePolicy
+    putContainerRecipePolicy_containerRecipeArn,
+    putContainerRecipePolicy_policy,
+    putContainerRecipePolicyResponse_containerRecipeArn,
+    putContainerRecipePolicyResponse_requestId,
+    putContainerRecipePolicyResponse_httpStatus,
+
+    -- ** PutImagePolicy
+    putImagePolicy_imageArn,
+    putImagePolicy_policy,
+    putImagePolicyResponse_imageArn,
+    putImagePolicyResponse_requestId,
+    putImagePolicyResponse_httpStatus,
+
+    -- ** PutImageRecipePolicy
+    putImageRecipePolicy_imageRecipeArn,
+    putImageRecipePolicy_policy,
+    putImageRecipePolicyResponse_imageRecipeArn,
+    putImageRecipePolicyResponse_requestId,
+    putImageRecipePolicyResponse_httpStatus,
+
+    -- ** StartImagePipelineExecution
+    startImagePipelineExecution_imagePipelineArn,
+    startImagePipelineExecution_clientToken,
+    startImagePipelineExecutionResponse_clientToken,
+    startImagePipelineExecutionResponse_imageBuildVersionArn,
+    startImagePipelineExecutionResponse_requestId,
+    startImagePipelineExecutionResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateDistributionConfiguration
+    updateDistributionConfiguration_description,
+    updateDistributionConfiguration_distributionConfigurationArn,
+    updateDistributionConfiguration_distributions,
+    updateDistributionConfiguration_clientToken,
+    updateDistributionConfigurationResponse_clientToken,
+    updateDistributionConfigurationResponse_distributionConfigurationArn,
+    updateDistributionConfigurationResponse_requestId,
+    updateDistributionConfigurationResponse_httpStatus,
+
+    -- ** UpdateImagePipeline
+    updateImagePipeline_containerRecipeArn,
+    updateImagePipeline_description,
+    updateImagePipeline_distributionConfigurationArn,
+    updateImagePipeline_enhancedImageMetadataEnabled,
+    updateImagePipeline_imageRecipeArn,
+    updateImagePipeline_imageTestsConfiguration,
+    updateImagePipeline_schedule,
+    updateImagePipeline_status,
+    updateImagePipeline_imagePipelineArn,
+    updateImagePipeline_infrastructureConfigurationArn,
+    updateImagePipeline_clientToken,
+    updateImagePipelineResponse_clientToken,
+    updateImagePipelineResponse_imagePipelineArn,
+    updateImagePipelineResponse_requestId,
+    updateImagePipelineResponse_httpStatus,
+
+    -- ** UpdateInfrastructureConfiguration
+    updateInfrastructureConfiguration_description,
+    updateInfrastructureConfiguration_instanceMetadataOptions,
+    updateInfrastructureConfiguration_instanceTypes,
+    updateInfrastructureConfiguration_keyPair,
+    updateInfrastructureConfiguration_logging,
+    updateInfrastructureConfiguration_resourceTags,
+    updateInfrastructureConfiguration_securityGroupIds,
+    updateInfrastructureConfiguration_snsTopicArn,
+    updateInfrastructureConfiguration_subnetId,
+    updateInfrastructureConfiguration_terminateInstanceOnFailure,
+    updateInfrastructureConfiguration_infrastructureConfigurationArn,
+    updateInfrastructureConfiguration_instanceProfileName,
+    updateInfrastructureConfiguration_clientToken,
+    updateInfrastructureConfigurationResponse_clientToken,
+    updateInfrastructureConfigurationResponse_infrastructureConfigurationArn,
+    updateInfrastructureConfigurationResponse_requestId,
+    updateInfrastructureConfigurationResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AdditionalInstanceConfiguration
+    additionalInstanceConfiguration_systemsManagerAgent,
+    additionalInstanceConfiguration_userDataOverride,
+
+    -- ** Ami
+    ami_accountId,
+    ami_description,
+    ami_image,
+    ami_name,
+    ami_region,
+    ami_state,
+
+    -- ** AmiDistributionConfiguration
+    amiDistributionConfiguration_amiTags,
+    amiDistributionConfiguration_description,
+    amiDistributionConfiguration_kmsKeyId,
+    amiDistributionConfiguration_launchPermission,
+    amiDistributionConfiguration_name,
+    amiDistributionConfiguration_targetAccountIds,
+
+    -- ** Component
+    component_arn,
+    component_changeDescription,
+    component_data,
+    component_dateCreated,
+    component_description,
+    component_encrypted,
+    component_kmsKeyId,
+    component_name,
+    component_owner,
+    component_parameters,
+    component_platform,
+    component_state,
+    component_supportedOsVersions,
+    component_tags,
+    component_type,
+    component_version,
+
+    -- ** ComponentConfiguration
+    componentConfiguration_parameters,
+    componentConfiguration_componentArn,
+
+    -- ** ComponentParameter
+    componentParameter_name,
+    componentParameter_value,
+
+    -- ** ComponentParameterDetail
+    componentParameterDetail_defaultValue,
+    componentParameterDetail_description,
+    componentParameterDetail_name,
+    componentParameterDetail_type,
+
+    -- ** ComponentState
+    componentState_reason,
+    componentState_status,
+
+    -- ** ComponentSummary
+    componentSummary_arn,
+    componentSummary_changeDescription,
+    componentSummary_dateCreated,
+    componentSummary_description,
+    componentSummary_name,
+    componentSummary_owner,
+    componentSummary_platform,
+    componentSummary_state,
+    componentSummary_supportedOsVersions,
+    componentSummary_tags,
+    componentSummary_type,
+    componentSummary_version,
+
+    -- ** ComponentVersion
+    componentVersion_arn,
+    componentVersion_dateCreated,
+    componentVersion_description,
+    componentVersion_name,
+    componentVersion_owner,
+    componentVersion_platform,
+    componentVersion_supportedOsVersions,
+    componentVersion_type,
+    componentVersion_version,
+
+    -- ** Container
+    container_imageUris,
+    container_region,
+
+    -- ** ContainerDistributionConfiguration
+    containerDistributionConfiguration_containerTags,
+    containerDistributionConfiguration_description,
+    containerDistributionConfiguration_targetRepository,
+
+    -- ** ContainerRecipe
+    containerRecipe_arn,
+    containerRecipe_components,
+    containerRecipe_containerType,
+    containerRecipe_dateCreated,
+    containerRecipe_description,
+    containerRecipe_dockerfileTemplateData,
+    containerRecipe_encrypted,
+    containerRecipe_instanceConfiguration,
+    containerRecipe_kmsKeyId,
+    containerRecipe_name,
+    containerRecipe_owner,
+    containerRecipe_parentImage,
+    containerRecipe_platform,
+    containerRecipe_tags,
+    containerRecipe_targetRepository,
+    containerRecipe_version,
+    containerRecipe_workingDirectory,
+
+    -- ** ContainerRecipeSummary
+    containerRecipeSummary_arn,
+    containerRecipeSummary_containerType,
+    containerRecipeSummary_dateCreated,
+    containerRecipeSummary_name,
+    containerRecipeSummary_owner,
+    containerRecipeSummary_parentImage,
+    containerRecipeSummary_platform,
+    containerRecipeSummary_tags,
+
+    -- ** Distribution
+    distribution_amiDistributionConfiguration,
+    distribution_containerDistributionConfiguration,
+    distribution_fastLaunchConfigurations,
+    distribution_launchTemplateConfigurations,
+    distribution_licenseConfigurationArns,
+    distribution_s3ExportConfiguration,
+    distribution_region,
+
+    -- ** DistributionConfiguration
+    distributionConfiguration_arn,
+    distributionConfiguration_dateCreated,
+    distributionConfiguration_dateUpdated,
+    distributionConfiguration_description,
+    distributionConfiguration_distributions,
+    distributionConfiguration_name,
+    distributionConfiguration_tags,
+    distributionConfiguration_timeoutMinutes,
+
+    -- ** DistributionConfigurationSummary
+    distributionConfigurationSummary_arn,
+    distributionConfigurationSummary_dateCreated,
+    distributionConfigurationSummary_dateUpdated,
+    distributionConfigurationSummary_description,
+    distributionConfigurationSummary_name,
+    distributionConfigurationSummary_regions,
+    distributionConfigurationSummary_tags,
+
+    -- ** EbsInstanceBlockDeviceSpecification
+    ebsInstanceBlockDeviceSpecification_deleteOnTermination,
+    ebsInstanceBlockDeviceSpecification_encrypted,
+    ebsInstanceBlockDeviceSpecification_iops,
+    ebsInstanceBlockDeviceSpecification_kmsKeyId,
+    ebsInstanceBlockDeviceSpecification_snapshotId,
+    ebsInstanceBlockDeviceSpecification_throughput,
+    ebsInstanceBlockDeviceSpecification_volumeSize,
+    ebsInstanceBlockDeviceSpecification_volumeType,
+
+    -- ** FastLaunchConfiguration
+    fastLaunchConfiguration_accountId,
+    fastLaunchConfiguration_launchTemplate,
+    fastLaunchConfiguration_maxParallelLaunches,
+    fastLaunchConfiguration_snapshotConfiguration,
+    fastLaunchConfiguration_enabled,
+
+    -- ** FastLaunchLaunchTemplateSpecification
+    fastLaunchLaunchTemplateSpecification_launchTemplateId,
+    fastLaunchLaunchTemplateSpecification_launchTemplateName,
+    fastLaunchLaunchTemplateSpecification_launchTemplateVersion,
+
+    -- ** FastLaunchSnapshotConfiguration
+    fastLaunchSnapshotConfiguration_targetResourceCount,
+
+    -- ** Filter
+    filter_name,
+    filter_values,
+
+    -- ** Image
+    image_arn,
+    image_buildType,
+    image_containerRecipe,
+    image_dateCreated,
+    image_distributionConfiguration,
+    image_enhancedImageMetadataEnabled,
+    image_imageRecipe,
+    image_imageTestsConfiguration,
+    image_infrastructureConfiguration,
+    image_name,
+    image_osVersion,
+    image_outputResources,
+    image_platform,
+    image_sourcePipelineArn,
+    image_sourcePipelineName,
+    image_state,
+    image_tags,
+    image_type,
+    image_version,
+
+    -- ** ImagePackage
+    imagePackage_packageName,
+    imagePackage_packageVersion,
+
+    -- ** ImagePipeline
+    imagePipeline_arn,
+    imagePipeline_containerRecipeArn,
+    imagePipeline_dateCreated,
+    imagePipeline_dateLastRun,
+    imagePipeline_dateNextRun,
+    imagePipeline_dateUpdated,
+    imagePipeline_description,
+    imagePipeline_distributionConfigurationArn,
+    imagePipeline_enhancedImageMetadataEnabled,
+    imagePipeline_imageRecipeArn,
+    imagePipeline_imageTestsConfiguration,
+    imagePipeline_infrastructureConfigurationArn,
+    imagePipeline_name,
+    imagePipeline_platform,
+    imagePipeline_schedule,
+    imagePipeline_status,
+    imagePipeline_tags,
+
+    -- ** ImageRecipe
+    imageRecipe_additionalInstanceConfiguration,
+    imageRecipe_arn,
+    imageRecipe_blockDeviceMappings,
+    imageRecipe_components,
+    imageRecipe_dateCreated,
+    imageRecipe_description,
+    imageRecipe_name,
+    imageRecipe_owner,
+    imageRecipe_parentImage,
+    imageRecipe_platform,
+    imageRecipe_tags,
+    imageRecipe_type,
+    imageRecipe_version,
+    imageRecipe_workingDirectory,
+
+    -- ** ImageRecipeSummary
+    imageRecipeSummary_arn,
+    imageRecipeSummary_dateCreated,
+    imageRecipeSummary_name,
+    imageRecipeSummary_owner,
+    imageRecipeSummary_parentImage,
+    imageRecipeSummary_platform,
+    imageRecipeSummary_tags,
+
+    -- ** ImageState
+    imageState_reason,
+    imageState_status,
+
+    -- ** ImageSummary
+    imageSummary_arn,
+    imageSummary_buildType,
+    imageSummary_dateCreated,
+    imageSummary_name,
+    imageSummary_osVersion,
+    imageSummary_outputResources,
+    imageSummary_owner,
+    imageSummary_platform,
+    imageSummary_state,
+    imageSummary_tags,
+    imageSummary_type,
+    imageSummary_version,
+
+    -- ** ImageTestsConfiguration
+    imageTestsConfiguration_imageTestsEnabled,
+    imageTestsConfiguration_timeoutMinutes,
+
+    -- ** ImageVersion
+    imageVersion_arn,
+    imageVersion_buildType,
+    imageVersion_dateCreated,
+    imageVersion_name,
+    imageVersion_osVersion,
+    imageVersion_owner,
+    imageVersion_platform,
+    imageVersion_type,
+    imageVersion_version,
+
+    -- ** InfrastructureConfiguration
+    infrastructureConfiguration_arn,
+    infrastructureConfiguration_dateCreated,
+    infrastructureConfiguration_dateUpdated,
+    infrastructureConfiguration_description,
+    infrastructureConfiguration_instanceMetadataOptions,
+    infrastructureConfiguration_instanceProfileName,
+    infrastructureConfiguration_instanceTypes,
+    infrastructureConfiguration_keyPair,
+    infrastructureConfiguration_logging,
+    infrastructureConfiguration_name,
+    infrastructureConfiguration_resourceTags,
+    infrastructureConfiguration_securityGroupIds,
+    infrastructureConfiguration_snsTopicArn,
+    infrastructureConfiguration_subnetId,
+    infrastructureConfiguration_tags,
+    infrastructureConfiguration_terminateInstanceOnFailure,
+
+    -- ** InfrastructureConfigurationSummary
+    infrastructureConfigurationSummary_arn,
+    infrastructureConfigurationSummary_dateCreated,
+    infrastructureConfigurationSummary_dateUpdated,
+    infrastructureConfigurationSummary_description,
+    infrastructureConfigurationSummary_instanceProfileName,
+    infrastructureConfigurationSummary_instanceTypes,
+    infrastructureConfigurationSummary_name,
+    infrastructureConfigurationSummary_resourceTags,
+    infrastructureConfigurationSummary_tags,
+
+    -- ** InstanceBlockDeviceMapping
+    instanceBlockDeviceMapping_deviceName,
+    instanceBlockDeviceMapping_ebs,
+    instanceBlockDeviceMapping_noDevice,
+    instanceBlockDeviceMapping_virtualName,
+
+    -- ** InstanceConfiguration
+    instanceConfiguration_blockDeviceMappings,
+    instanceConfiguration_image,
+
+    -- ** InstanceMetadataOptions
+    instanceMetadataOptions_httpPutResponseHopLimit,
+    instanceMetadataOptions_httpTokens,
+
+    -- ** LaunchPermissionConfiguration
+    launchPermissionConfiguration_organizationArns,
+    launchPermissionConfiguration_organizationalUnitArns,
+    launchPermissionConfiguration_userGroups,
+    launchPermissionConfiguration_userIds,
+
+    -- ** LaunchTemplateConfiguration
+    launchTemplateConfiguration_accountId,
+    launchTemplateConfiguration_setDefaultVersion,
+    launchTemplateConfiguration_launchTemplateId,
+
+    -- ** Logging
+    logging_s3Logs,
+
+    -- ** OutputResources
+    outputResources_amis,
+    outputResources_containers,
+
+    -- ** S3ExportConfiguration
+    s3ExportConfiguration_s3Prefix,
+    s3ExportConfiguration_roleName,
+    s3ExportConfiguration_diskImageFormat,
+    s3ExportConfiguration_s3Bucket,
+
+    -- ** S3Logs
+    s3Logs_s3BucketName,
+    s3Logs_s3KeyPrefix,
+
+    -- ** Schedule
+    schedule_pipelineExecutionStartCondition,
+    schedule_scheduleExpression,
+    schedule_timezone,
+
+    -- ** SystemsManagerAgent
+    systemsManagerAgent_uninstallAfterBuild,
+
+    -- ** TargetContainerRepository
+    targetContainerRepository_service,
+    targetContainerRepository_repositoryName,
+  )
+where
+
+import Amazonka.ImageBuilder.CancelImageCreation
+import Amazonka.ImageBuilder.CreateComponent
+import Amazonka.ImageBuilder.CreateContainerRecipe
+import Amazonka.ImageBuilder.CreateDistributionConfiguration
+import Amazonka.ImageBuilder.CreateImage
+import Amazonka.ImageBuilder.CreateImagePipeline
+import Amazonka.ImageBuilder.CreateImageRecipe
+import Amazonka.ImageBuilder.CreateInfrastructureConfiguration
+import Amazonka.ImageBuilder.DeleteComponent
+import Amazonka.ImageBuilder.DeleteContainerRecipe
+import Amazonka.ImageBuilder.DeleteDistributionConfiguration
+import Amazonka.ImageBuilder.DeleteImage
+import Amazonka.ImageBuilder.DeleteImagePipeline
+import Amazonka.ImageBuilder.DeleteImageRecipe
+import Amazonka.ImageBuilder.DeleteInfrastructureConfiguration
+import Amazonka.ImageBuilder.GetComponent
+import Amazonka.ImageBuilder.GetComponentPolicy
+import Amazonka.ImageBuilder.GetContainerRecipe
+import Amazonka.ImageBuilder.GetContainerRecipePolicy
+import Amazonka.ImageBuilder.GetDistributionConfiguration
+import Amazonka.ImageBuilder.GetImage
+import Amazonka.ImageBuilder.GetImagePipeline
+import Amazonka.ImageBuilder.GetImagePolicy
+import Amazonka.ImageBuilder.GetImageRecipe
+import Amazonka.ImageBuilder.GetImageRecipePolicy
+import Amazonka.ImageBuilder.GetInfrastructureConfiguration
+import Amazonka.ImageBuilder.ImportComponent
+import Amazonka.ImageBuilder.ImportVmImage
+import Amazonka.ImageBuilder.ListComponentBuildVersions
+import Amazonka.ImageBuilder.ListComponents
+import Amazonka.ImageBuilder.ListContainerRecipes
+import Amazonka.ImageBuilder.ListDistributionConfigurations
+import Amazonka.ImageBuilder.ListImageBuildVersions
+import Amazonka.ImageBuilder.ListImagePackages
+import Amazonka.ImageBuilder.ListImagePipelineImages
+import Amazonka.ImageBuilder.ListImagePipelines
+import Amazonka.ImageBuilder.ListImageRecipes
+import Amazonka.ImageBuilder.ListImages
+import Amazonka.ImageBuilder.ListInfrastructureConfigurations
+import Amazonka.ImageBuilder.ListTagsForResource
+import Amazonka.ImageBuilder.PutComponentPolicy
+import Amazonka.ImageBuilder.PutContainerRecipePolicy
+import Amazonka.ImageBuilder.PutImagePolicy
+import Amazonka.ImageBuilder.PutImageRecipePolicy
+import Amazonka.ImageBuilder.StartImagePipelineExecution
+import Amazonka.ImageBuilder.TagResource
+import Amazonka.ImageBuilder.Types.AdditionalInstanceConfiguration
+import Amazonka.ImageBuilder.Types.Ami
+import Amazonka.ImageBuilder.Types.AmiDistributionConfiguration
+import Amazonka.ImageBuilder.Types.Component
+import Amazonka.ImageBuilder.Types.ComponentConfiguration
+import Amazonka.ImageBuilder.Types.ComponentParameter
+import Amazonka.ImageBuilder.Types.ComponentParameterDetail
+import Amazonka.ImageBuilder.Types.ComponentState
+import Amazonka.ImageBuilder.Types.ComponentSummary
+import Amazonka.ImageBuilder.Types.ComponentVersion
+import Amazonka.ImageBuilder.Types.Container
+import Amazonka.ImageBuilder.Types.ContainerDistributionConfiguration
+import Amazonka.ImageBuilder.Types.ContainerRecipe
+import Amazonka.ImageBuilder.Types.ContainerRecipeSummary
+import Amazonka.ImageBuilder.Types.Distribution
+import Amazonka.ImageBuilder.Types.DistributionConfiguration
+import Amazonka.ImageBuilder.Types.DistributionConfigurationSummary
+import Amazonka.ImageBuilder.Types.EbsInstanceBlockDeviceSpecification
+import Amazonka.ImageBuilder.Types.FastLaunchConfiguration
+import Amazonka.ImageBuilder.Types.FastLaunchLaunchTemplateSpecification
+import Amazonka.ImageBuilder.Types.FastLaunchSnapshotConfiguration
+import Amazonka.ImageBuilder.Types.Filter
+import Amazonka.ImageBuilder.Types.Image
+import Amazonka.ImageBuilder.Types.ImagePackage
+import Amazonka.ImageBuilder.Types.ImagePipeline
+import Amazonka.ImageBuilder.Types.ImageRecipe
+import Amazonka.ImageBuilder.Types.ImageRecipeSummary
+import Amazonka.ImageBuilder.Types.ImageState
+import Amazonka.ImageBuilder.Types.ImageSummary
+import Amazonka.ImageBuilder.Types.ImageTestsConfiguration
+import Amazonka.ImageBuilder.Types.ImageVersion
+import Amazonka.ImageBuilder.Types.InfrastructureConfiguration
+import Amazonka.ImageBuilder.Types.InfrastructureConfigurationSummary
+import Amazonka.ImageBuilder.Types.InstanceBlockDeviceMapping
+import Amazonka.ImageBuilder.Types.InstanceConfiguration
+import Amazonka.ImageBuilder.Types.InstanceMetadataOptions
+import Amazonka.ImageBuilder.Types.LaunchPermissionConfiguration
+import Amazonka.ImageBuilder.Types.LaunchTemplateConfiguration
+import Amazonka.ImageBuilder.Types.Logging
+import Amazonka.ImageBuilder.Types.OutputResources
+import Amazonka.ImageBuilder.Types.S3ExportConfiguration
+import Amazonka.ImageBuilder.Types.S3Logs
+import Amazonka.ImageBuilder.Types.Schedule
+import Amazonka.ImageBuilder.Types.SystemsManagerAgent
+import Amazonka.ImageBuilder.Types.TargetContainerRepository
+import Amazonka.ImageBuilder.UntagResource
+import Amazonka.ImageBuilder.UpdateDistributionConfiguration
+import Amazonka.ImageBuilder.UpdateImagePipeline
+import Amazonka.ImageBuilder.UpdateInfrastructureConfiguration
diff --git a/gen/Amazonka/ImageBuilder/ListComponentBuildVersions.hs b/gen/Amazonka/ImageBuilder/ListComponentBuildVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/ListComponentBuildVersions.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.ListComponentBuildVersions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the list of component build versions for the specified semantic
+-- version.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Filtering:__ With semantic versioning, you have the flexibility to use
+-- wildcards (x) to specify the most recent versions or nodes when
+-- selecting the base image or components for your recipe. When you use a
+-- wildcard in any node, all nodes to the right of the first wildcard must
+-- also be wildcards.
+module Amazonka.ImageBuilder.ListComponentBuildVersions
+  ( -- * Creating a Request
+    ListComponentBuildVersions (..),
+    newListComponentBuildVersions,
+
+    -- * Request Lenses
+    listComponentBuildVersions_maxResults,
+    listComponentBuildVersions_nextToken,
+    listComponentBuildVersions_componentVersionArn,
+
+    -- * Destructuring the Response
+    ListComponentBuildVersionsResponse (..),
+    newListComponentBuildVersionsResponse,
+
+    -- * Response Lenses
+    listComponentBuildVersionsResponse_componentSummaryList,
+    listComponentBuildVersionsResponse_nextToken,
+    listComponentBuildVersionsResponse_requestId,
+    listComponentBuildVersionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListComponentBuildVersions' smart constructor.
+data ListComponentBuildVersions = ListComponentBuildVersions'
+  { -- | The maximum items to return in a request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to specify where to start paginating. This is the NextToken from
+    -- a previously truncated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The component version Amazon Resource Name (ARN) whose versions you want
+    -- to list.
+    componentVersionArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListComponentBuildVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listComponentBuildVersions_maxResults' - The maximum items to return in a request.
+--
+-- 'nextToken', 'listComponentBuildVersions_nextToken' - A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+--
+-- 'componentVersionArn', 'listComponentBuildVersions_componentVersionArn' - The component version Amazon Resource Name (ARN) whose versions you want
+-- to list.
+newListComponentBuildVersions ::
+  -- | 'componentVersionArn'
+  Prelude.Text ->
+  ListComponentBuildVersions
+newListComponentBuildVersions pComponentVersionArn_ =
+  ListComponentBuildVersions'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      componentVersionArn = pComponentVersionArn_
+    }
+
+-- | The maximum items to return in a request.
+listComponentBuildVersions_maxResults :: Lens.Lens' ListComponentBuildVersions (Prelude.Maybe Prelude.Natural)
+listComponentBuildVersions_maxResults = Lens.lens (\ListComponentBuildVersions' {maxResults} -> maxResults) (\s@ListComponentBuildVersions' {} a -> s {maxResults = a} :: ListComponentBuildVersions)
+
+-- | A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+listComponentBuildVersions_nextToken :: Lens.Lens' ListComponentBuildVersions (Prelude.Maybe Prelude.Text)
+listComponentBuildVersions_nextToken = Lens.lens (\ListComponentBuildVersions' {nextToken} -> nextToken) (\s@ListComponentBuildVersions' {} a -> s {nextToken = a} :: ListComponentBuildVersions)
+
+-- | The component version Amazon Resource Name (ARN) whose versions you want
+-- to list.
+listComponentBuildVersions_componentVersionArn :: Lens.Lens' ListComponentBuildVersions Prelude.Text
+listComponentBuildVersions_componentVersionArn = Lens.lens (\ListComponentBuildVersions' {componentVersionArn} -> componentVersionArn) (\s@ListComponentBuildVersions' {} a -> s {componentVersionArn = a} :: ListComponentBuildVersions)
+
+instance Core.AWSRequest ListComponentBuildVersions where
+  type
+    AWSResponse ListComponentBuildVersions =
+      ListComponentBuildVersionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListComponentBuildVersionsResponse'
+            Prelude.<$> ( x
+                            Data..?> "componentSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListComponentBuildVersions where
+  hashWithSalt _salt ListComponentBuildVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` componentVersionArn
+
+instance Prelude.NFData ListComponentBuildVersions where
+  rnf ListComponentBuildVersions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf componentVersionArn
+
+instance Data.ToHeaders ListComponentBuildVersions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListComponentBuildVersions where
+  toJSON ListComponentBuildVersions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("componentVersionArn" Data..= componentVersionArn)
+          ]
+      )
+
+instance Data.ToPath ListComponentBuildVersions where
+  toPath = Prelude.const "/ListComponentBuildVersions"
+
+instance Data.ToQuery ListComponentBuildVersions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListComponentBuildVersionsResponse' smart constructor.
+data ListComponentBuildVersionsResponse = ListComponentBuildVersionsResponse'
+  { -- | The list of component summaries for the specified semantic version.
+    componentSummaryList :: Prelude.Maybe [ComponentSummary],
+    -- | The next token used for paginated responses. When this is not empty,
+    -- there are additional elements that the service has not included in this
+    -- request. Use this token with the next request to retrieve additional
+    -- objects.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListComponentBuildVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'componentSummaryList', 'listComponentBuildVersionsResponse_componentSummaryList' - The list of component summaries for the specified semantic version.
+--
+-- 'nextToken', 'listComponentBuildVersionsResponse_nextToken' - The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+--
+-- 'requestId', 'listComponentBuildVersionsResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'listComponentBuildVersionsResponse_httpStatus' - The response's http status code.
+newListComponentBuildVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListComponentBuildVersionsResponse
+newListComponentBuildVersionsResponse pHttpStatus_ =
+  ListComponentBuildVersionsResponse'
+    { componentSummaryList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of component summaries for the specified semantic version.
+listComponentBuildVersionsResponse_componentSummaryList :: Lens.Lens' ListComponentBuildVersionsResponse (Prelude.Maybe [ComponentSummary])
+listComponentBuildVersionsResponse_componentSummaryList = Lens.lens (\ListComponentBuildVersionsResponse' {componentSummaryList} -> componentSummaryList) (\s@ListComponentBuildVersionsResponse' {} a -> s {componentSummaryList = a} :: ListComponentBuildVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+listComponentBuildVersionsResponse_nextToken :: Lens.Lens' ListComponentBuildVersionsResponse (Prelude.Maybe Prelude.Text)
+listComponentBuildVersionsResponse_nextToken = Lens.lens (\ListComponentBuildVersionsResponse' {nextToken} -> nextToken) (\s@ListComponentBuildVersionsResponse' {} a -> s {nextToken = a} :: ListComponentBuildVersionsResponse)
+
+-- | The request ID that uniquely identifies this request.
+listComponentBuildVersionsResponse_requestId :: Lens.Lens' ListComponentBuildVersionsResponse (Prelude.Maybe Prelude.Text)
+listComponentBuildVersionsResponse_requestId = Lens.lens (\ListComponentBuildVersionsResponse' {requestId} -> requestId) (\s@ListComponentBuildVersionsResponse' {} a -> s {requestId = a} :: ListComponentBuildVersionsResponse)
+
+-- | The response's http status code.
+listComponentBuildVersionsResponse_httpStatus :: Lens.Lens' ListComponentBuildVersionsResponse Prelude.Int
+listComponentBuildVersionsResponse_httpStatus = Lens.lens (\ListComponentBuildVersionsResponse' {httpStatus} -> httpStatus) (\s@ListComponentBuildVersionsResponse' {} a -> s {httpStatus = a} :: ListComponentBuildVersionsResponse)
+
+instance
+  Prelude.NFData
+    ListComponentBuildVersionsResponse
+  where
+  rnf ListComponentBuildVersionsResponse' {..} =
+    Prelude.rnf componentSummaryList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/ListComponents.hs b/gen/Amazonka/ImageBuilder/ListComponents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/ListComponents.hs
@@ -0,0 +1,329 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.ListComponents
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the list of component build versions for the specified semantic
+-- version.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Filtering:__ With semantic versioning, you have the flexibility to use
+-- wildcards (x) to specify the most recent versions or nodes when
+-- selecting the base image or components for your recipe. When you use a
+-- wildcard in any node, all nodes to the right of the first wildcard must
+-- also be wildcards.
+module Amazonka.ImageBuilder.ListComponents
+  ( -- * Creating a Request
+    ListComponents (..),
+    newListComponents,
+
+    -- * Request Lenses
+    listComponents_byName,
+    listComponents_filters,
+    listComponents_maxResults,
+    listComponents_nextToken,
+    listComponents_owner,
+
+    -- * Destructuring the Response
+    ListComponentsResponse (..),
+    newListComponentsResponse,
+
+    -- * Response Lenses
+    listComponentsResponse_componentVersionList,
+    listComponentsResponse_nextToken,
+    listComponentsResponse_requestId,
+    listComponentsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListComponents' smart constructor.
+data ListComponents = ListComponents'
+  { -- | Returns the list of component build versions for the specified name.
+    byName :: Prelude.Maybe Prelude.Bool,
+    -- | Use the following filters to streamline results:
+    --
+    -- -   @description@
+    --
+    -- -   @name@
+    --
+    -- -   @platform@
+    --
+    -- -   @supportedOsVersion@
+    --
+    -- -   @type@
+    --
+    -- -   @version@
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | The maximum items to return in a request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to specify where to start paginating. This is the NextToken from
+    -- a previously truncated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The owner defines which components you want to list. By default, this
+    -- request will only show components owned by your account. You can use
+    -- this field to specify if you want to view components owned by yourself,
+    -- by Amazon, or those components that have been shared with you by other
+    -- customers.
+    owner :: Prelude.Maybe Ownership
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListComponents' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'byName', 'listComponents_byName' - Returns the list of component build versions for the specified name.
+--
+-- 'filters', 'listComponents_filters' - Use the following filters to streamline results:
+--
+-- -   @description@
+--
+-- -   @name@
+--
+-- -   @platform@
+--
+-- -   @supportedOsVersion@
+--
+-- -   @type@
+--
+-- -   @version@
+--
+-- 'maxResults', 'listComponents_maxResults' - The maximum items to return in a request.
+--
+-- 'nextToken', 'listComponents_nextToken' - A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+--
+-- 'owner', 'listComponents_owner' - The owner defines which components you want to list. By default, this
+-- request will only show components owned by your account. You can use
+-- this field to specify if you want to view components owned by yourself,
+-- by Amazon, or those components that have been shared with you by other
+-- customers.
+newListComponents ::
+  ListComponents
+newListComponents =
+  ListComponents'
+    { byName = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      owner = Prelude.Nothing
+    }
+
+-- | Returns the list of component build versions for the specified name.
+listComponents_byName :: Lens.Lens' ListComponents (Prelude.Maybe Prelude.Bool)
+listComponents_byName = Lens.lens (\ListComponents' {byName} -> byName) (\s@ListComponents' {} a -> s {byName = a} :: ListComponents)
+
+-- | Use the following filters to streamline results:
+--
+-- -   @description@
+--
+-- -   @name@
+--
+-- -   @platform@
+--
+-- -   @supportedOsVersion@
+--
+-- -   @type@
+--
+-- -   @version@
+listComponents_filters :: Lens.Lens' ListComponents (Prelude.Maybe (Prelude.NonEmpty Filter))
+listComponents_filters = Lens.lens (\ListComponents' {filters} -> filters) (\s@ListComponents' {} a -> s {filters = a} :: ListComponents) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum items to return in a request.
+listComponents_maxResults :: Lens.Lens' ListComponents (Prelude.Maybe Prelude.Natural)
+listComponents_maxResults = Lens.lens (\ListComponents' {maxResults} -> maxResults) (\s@ListComponents' {} a -> s {maxResults = a} :: ListComponents)
+
+-- | A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+listComponents_nextToken :: Lens.Lens' ListComponents (Prelude.Maybe Prelude.Text)
+listComponents_nextToken = Lens.lens (\ListComponents' {nextToken} -> nextToken) (\s@ListComponents' {} a -> s {nextToken = a} :: ListComponents)
+
+-- | The owner defines which components you want to list. By default, this
+-- request will only show components owned by your account. You can use
+-- this field to specify if you want to view components owned by yourself,
+-- by Amazon, or those components that have been shared with you by other
+-- customers.
+listComponents_owner :: Lens.Lens' ListComponents (Prelude.Maybe Ownership)
+listComponents_owner = Lens.lens (\ListComponents' {owner} -> owner) (\s@ListComponents' {} a -> s {owner = a} :: ListComponents)
+
+instance Core.AWSRequest ListComponents where
+  type
+    AWSResponse ListComponents =
+      ListComponentsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListComponentsResponse'
+            Prelude.<$> ( x
+                            Data..?> "componentVersionList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListComponents where
+  hashWithSalt _salt ListComponents' {..} =
+    _salt
+      `Prelude.hashWithSalt` byName
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` owner
+
+instance Prelude.NFData ListComponents where
+  rnf ListComponents' {..} =
+    Prelude.rnf byName
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf owner
+
+instance Data.ToHeaders ListComponents where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListComponents where
+  toJSON ListComponents' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("byName" Data..=) Prelude.<$> byName,
+            ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("owner" Data..=) Prelude.<$> owner
+          ]
+      )
+
+instance Data.ToPath ListComponents where
+  toPath = Prelude.const "/ListComponents"
+
+instance Data.ToQuery ListComponents where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListComponentsResponse' smart constructor.
+data ListComponentsResponse = ListComponentsResponse'
+  { -- | The list of component semantic versions.
+    --
+    -- The semantic version has four nodes:
+    -- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+    -- first three, and can filter on all of them.
+    componentVersionList :: Prelude.Maybe [ComponentVersion],
+    -- | The next token used for paginated responses. When this is not empty,
+    -- there are additional elements that the service has not included in this
+    -- request. Use this token with the next request to retrieve additional
+    -- objects.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListComponentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'componentVersionList', 'listComponentsResponse_componentVersionList' - The list of component semantic versions.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- 'nextToken', 'listComponentsResponse_nextToken' - The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+--
+-- 'requestId', 'listComponentsResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'listComponentsResponse_httpStatus' - The response's http status code.
+newListComponentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListComponentsResponse
+newListComponentsResponse pHttpStatus_ =
+  ListComponentsResponse'
+    { componentVersionList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of component semantic versions.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+listComponentsResponse_componentVersionList :: Lens.Lens' ListComponentsResponse (Prelude.Maybe [ComponentVersion])
+listComponentsResponse_componentVersionList = Lens.lens (\ListComponentsResponse' {componentVersionList} -> componentVersionList) (\s@ListComponentsResponse' {} a -> s {componentVersionList = a} :: ListComponentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+listComponentsResponse_nextToken :: Lens.Lens' ListComponentsResponse (Prelude.Maybe Prelude.Text)
+listComponentsResponse_nextToken = Lens.lens (\ListComponentsResponse' {nextToken} -> nextToken) (\s@ListComponentsResponse' {} a -> s {nextToken = a} :: ListComponentsResponse)
+
+-- | The request ID that uniquely identifies this request.
+listComponentsResponse_requestId :: Lens.Lens' ListComponentsResponse (Prelude.Maybe Prelude.Text)
+listComponentsResponse_requestId = Lens.lens (\ListComponentsResponse' {requestId} -> requestId) (\s@ListComponentsResponse' {} a -> s {requestId = a} :: ListComponentsResponse)
+
+-- | The response's http status code.
+listComponentsResponse_httpStatus :: Lens.Lens' ListComponentsResponse Prelude.Int
+listComponentsResponse_httpStatus = Lens.lens (\ListComponentsResponse' {httpStatus} -> httpStatus) (\s@ListComponentsResponse' {} a -> s {httpStatus = a} :: ListComponentsResponse)
+
+instance Prelude.NFData ListComponentsResponse where
+  rnf ListComponentsResponse' {..} =
+    Prelude.rnf componentVersionList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/ListContainerRecipes.hs b/gen/Amazonka/ImageBuilder/ListContainerRecipes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/ListContainerRecipes.hs
@@ -0,0 +1,278 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.ListContainerRecipes
+-- 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 container recipes.
+module Amazonka.ImageBuilder.ListContainerRecipes
+  ( -- * Creating a Request
+    ListContainerRecipes (..),
+    newListContainerRecipes,
+
+    -- * Request Lenses
+    listContainerRecipes_filters,
+    listContainerRecipes_maxResults,
+    listContainerRecipes_nextToken,
+    listContainerRecipes_owner,
+
+    -- * Destructuring the Response
+    ListContainerRecipesResponse (..),
+    newListContainerRecipesResponse,
+
+    -- * Response Lenses
+    listContainerRecipesResponse_containerRecipeSummaryList,
+    listContainerRecipesResponse_nextToken,
+    listContainerRecipesResponse_requestId,
+    listContainerRecipesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListContainerRecipes' smart constructor.
+data ListContainerRecipes = ListContainerRecipes'
+  { -- | Use the following filters to streamline results:
+    --
+    -- -   @containerType@
+    --
+    -- -   @name@
+    --
+    -- -   @parentImage@
+    --
+    -- -   @platform@
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | The maximum number of results to return in the list.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Provides a token for pagination, which determines where to begin the
+    -- next set of results when the current set reaches the maximum for one
+    -- request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Returns container recipes belonging to the specified owner, that have
+    -- been shared with you. You can omit this field to return container
+    -- recipes belonging to your account.
+    owner :: Prelude.Maybe Ownership
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListContainerRecipes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listContainerRecipes_filters' - Use the following filters to streamline results:
+--
+-- -   @containerType@
+--
+-- -   @name@
+--
+-- -   @parentImage@
+--
+-- -   @platform@
+--
+-- 'maxResults', 'listContainerRecipes_maxResults' - The maximum number of results to return in the list.
+--
+-- 'nextToken', 'listContainerRecipes_nextToken' - Provides a token for pagination, which determines where to begin the
+-- next set of results when the current set reaches the maximum for one
+-- request.
+--
+-- 'owner', 'listContainerRecipes_owner' - Returns container recipes belonging to the specified owner, that have
+-- been shared with you. You can omit this field to return container
+-- recipes belonging to your account.
+newListContainerRecipes ::
+  ListContainerRecipes
+newListContainerRecipes =
+  ListContainerRecipes'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      owner = Prelude.Nothing
+    }
+
+-- | Use the following filters to streamline results:
+--
+-- -   @containerType@
+--
+-- -   @name@
+--
+-- -   @parentImage@
+--
+-- -   @platform@
+listContainerRecipes_filters :: Lens.Lens' ListContainerRecipes (Prelude.Maybe (Prelude.NonEmpty Filter))
+listContainerRecipes_filters = Lens.lens (\ListContainerRecipes' {filters} -> filters) (\s@ListContainerRecipes' {} a -> s {filters = a} :: ListContainerRecipes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in the list.
+listContainerRecipes_maxResults :: Lens.Lens' ListContainerRecipes (Prelude.Maybe Prelude.Natural)
+listContainerRecipes_maxResults = Lens.lens (\ListContainerRecipes' {maxResults} -> maxResults) (\s@ListContainerRecipes' {} a -> s {maxResults = a} :: ListContainerRecipes)
+
+-- | Provides a token for pagination, which determines where to begin the
+-- next set of results when the current set reaches the maximum for one
+-- request.
+listContainerRecipes_nextToken :: Lens.Lens' ListContainerRecipes (Prelude.Maybe Prelude.Text)
+listContainerRecipes_nextToken = Lens.lens (\ListContainerRecipes' {nextToken} -> nextToken) (\s@ListContainerRecipes' {} a -> s {nextToken = a} :: ListContainerRecipes)
+
+-- | Returns container recipes belonging to the specified owner, that have
+-- been shared with you. You can omit this field to return container
+-- recipes belonging to your account.
+listContainerRecipes_owner :: Lens.Lens' ListContainerRecipes (Prelude.Maybe Ownership)
+listContainerRecipes_owner = Lens.lens (\ListContainerRecipes' {owner} -> owner) (\s@ListContainerRecipes' {} a -> s {owner = a} :: ListContainerRecipes)
+
+instance Core.AWSRequest ListContainerRecipes where
+  type
+    AWSResponse ListContainerRecipes =
+      ListContainerRecipesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListContainerRecipesResponse'
+            Prelude.<$> ( x
+                            Data..?> "containerRecipeSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListContainerRecipes where
+  hashWithSalt _salt ListContainerRecipes' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` owner
+
+instance Prelude.NFData ListContainerRecipes where
+  rnf ListContainerRecipes' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf owner
+
+instance Data.ToHeaders ListContainerRecipes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListContainerRecipes where
+  toJSON ListContainerRecipes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("owner" Data..=) Prelude.<$> owner
+          ]
+      )
+
+instance Data.ToPath ListContainerRecipes where
+  toPath = Prelude.const "/ListContainerRecipes"
+
+instance Data.ToQuery ListContainerRecipes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListContainerRecipesResponse' smart constructor.
+data ListContainerRecipesResponse = ListContainerRecipesResponse'
+  { -- | The list of container recipes returned for the request.
+    containerRecipeSummaryList :: Prelude.Maybe [ContainerRecipeSummary],
+    -- | The next token field is used for paginated responses. When this is not
+    -- empty, there are additional container recipes that the service has not
+    -- included in this response. Use this token with the next request to
+    -- retrieve additional list items.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListContainerRecipesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'containerRecipeSummaryList', 'listContainerRecipesResponse_containerRecipeSummaryList' - The list of container recipes returned for the request.
+--
+-- 'nextToken', 'listContainerRecipesResponse_nextToken' - The next token field is used for paginated responses. When this is not
+-- empty, there are additional container recipes that the service has not
+-- included in this response. Use this token with the next request to
+-- retrieve additional list items.
+--
+-- 'requestId', 'listContainerRecipesResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'listContainerRecipesResponse_httpStatus' - The response's http status code.
+newListContainerRecipesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListContainerRecipesResponse
+newListContainerRecipesResponse pHttpStatus_ =
+  ListContainerRecipesResponse'
+    { containerRecipeSummaryList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of container recipes returned for the request.
+listContainerRecipesResponse_containerRecipeSummaryList :: Lens.Lens' ListContainerRecipesResponse (Prelude.Maybe [ContainerRecipeSummary])
+listContainerRecipesResponse_containerRecipeSummaryList = Lens.lens (\ListContainerRecipesResponse' {containerRecipeSummaryList} -> containerRecipeSummaryList) (\s@ListContainerRecipesResponse' {} a -> s {containerRecipeSummaryList = a} :: ListContainerRecipesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next token field is used for paginated responses. When this is not
+-- empty, there are additional container recipes that the service has not
+-- included in this response. Use this token with the next request to
+-- retrieve additional list items.
+listContainerRecipesResponse_nextToken :: Lens.Lens' ListContainerRecipesResponse (Prelude.Maybe Prelude.Text)
+listContainerRecipesResponse_nextToken = Lens.lens (\ListContainerRecipesResponse' {nextToken} -> nextToken) (\s@ListContainerRecipesResponse' {} a -> s {nextToken = a} :: ListContainerRecipesResponse)
+
+-- | The request ID that uniquely identifies this request.
+listContainerRecipesResponse_requestId :: Lens.Lens' ListContainerRecipesResponse (Prelude.Maybe Prelude.Text)
+listContainerRecipesResponse_requestId = Lens.lens (\ListContainerRecipesResponse' {requestId} -> requestId) (\s@ListContainerRecipesResponse' {} a -> s {requestId = a} :: ListContainerRecipesResponse)
+
+-- | The response's http status code.
+listContainerRecipesResponse_httpStatus :: Lens.Lens' ListContainerRecipesResponse Prelude.Int
+listContainerRecipesResponse_httpStatus = Lens.lens (\ListContainerRecipesResponse' {httpStatus} -> httpStatus) (\s@ListContainerRecipesResponse' {} a -> s {httpStatus = a} :: ListContainerRecipesResponse)
+
+instance Prelude.NFData ListContainerRecipesResponse where
+  rnf ListContainerRecipesResponse' {..} =
+    Prelude.rnf containerRecipeSummaryList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/ListDistributionConfigurations.hs b/gen/Amazonka/ImageBuilder/ListDistributionConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/ListDistributionConfigurations.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.ImageBuilder.ListDistributionConfigurations
+-- 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 distribution configurations.
+module Amazonka.ImageBuilder.ListDistributionConfigurations
+  ( -- * Creating a Request
+    ListDistributionConfigurations (..),
+    newListDistributionConfigurations,
+
+    -- * Request Lenses
+    listDistributionConfigurations_filters,
+    listDistributionConfigurations_maxResults,
+    listDistributionConfigurations_nextToken,
+
+    -- * Destructuring the Response
+    ListDistributionConfigurationsResponse (..),
+    newListDistributionConfigurationsResponse,
+
+    -- * Response Lenses
+    listDistributionConfigurationsResponse_distributionConfigurationSummaryList,
+    listDistributionConfigurationsResponse_nextToken,
+    listDistributionConfigurationsResponse_requestId,
+    listDistributionConfigurationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDistributionConfigurations' smart constructor.
+data ListDistributionConfigurations = ListDistributionConfigurations'
+  { -- | You can filter on @name@ to streamline results.
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | The maximum items to return in a request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to specify where to start paginating. This is the NextToken from
+    -- a previously truncated response.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDistributionConfigurations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listDistributionConfigurations_filters' - You can filter on @name@ to streamline results.
+--
+-- 'maxResults', 'listDistributionConfigurations_maxResults' - The maximum items to return in a request.
+--
+-- 'nextToken', 'listDistributionConfigurations_nextToken' - A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+newListDistributionConfigurations ::
+  ListDistributionConfigurations
+newListDistributionConfigurations =
+  ListDistributionConfigurations'
+    { filters =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | You can filter on @name@ to streamline results.
+listDistributionConfigurations_filters :: Lens.Lens' ListDistributionConfigurations (Prelude.Maybe (Prelude.NonEmpty Filter))
+listDistributionConfigurations_filters = Lens.lens (\ListDistributionConfigurations' {filters} -> filters) (\s@ListDistributionConfigurations' {} a -> s {filters = a} :: ListDistributionConfigurations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum items to return in a request.
+listDistributionConfigurations_maxResults :: Lens.Lens' ListDistributionConfigurations (Prelude.Maybe Prelude.Natural)
+listDistributionConfigurations_maxResults = Lens.lens (\ListDistributionConfigurations' {maxResults} -> maxResults) (\s@ListDistributionConfigurations' {} a -> s {maxResults = a} :: ListDistributionConfigurations)
+
+-- | A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+listDistributionConfigurations_nextToken :: Lens.Lens' ListDistributionConfigurations (Prelude.Maybe Prelude.Text)
+listDistributionConfigurations_nextToken = Lens.lens (\ListDistributionConfigurations' {nextToken} -> nextToken) (\s@ListDistributionConfigurations' {} a -> s {nextToken = a} :: ListDistributionConfigurations)
+
+instance
+  Core.AWSRequest
+    ListDistributionConfigurations
+  where
+  type
+    AWSResponse ListDistributionConfigurations =
+      ListDistributionConfigurationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDistributionConfigurationsResponse'
+            Prelude.<$> ( x
+                            Data..?> "distributionConfigurationSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListDistributionConfigurations
+  where
+  hashWithSalt
+    _salt
+    ListDistributionConfigurations' {..} =
+      _salt
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    ListDistributionConfigurations
+  where
+  rnf ListDistributionConfigurations' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    ListDistributionConfigurations
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListDistributionConfigurations where
+  toJSON ListDistributionConfigurations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListDistributionConfigurations where
+  toPath =
+    Prelude.const "/ListDistributionConfigurations"
+
+instance Data.ToQuery ListDistributionConfigurations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListDistributionConfigurationsResponse' smart constructor.
+data ListDistributionConfigurationsResponse = ListDistributionConfigurationsResponse'
+  { -- | The list of distributions.
+    distributionConfigurationSummaryList :: Prelude.Maybe [DistributionConfigurationSummary],
+    -- | The next token used for paginated responses. When this is not empty,
+    -- there are additional elements that the service has not included in this
+    -- request. Use this token with the next request to retrieve additional
+    -- objects.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDistributionConfigurationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'distributionConfigurationSummaryList', 'listDistributionConfigurationsResponse_distributionConfigurationSummaryList' - The list of distributions.
+--
+-- 'nextToken', 'listDistributionConfigurationsResponse_nextToken' - The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+--
+-- 'requestId', 'listDistributionConfigurationsResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'listDistributionConfigurationsResponse_httpStatus' - The response's http status code.
+newListDistributionConfigurationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDistributionConfigurationsResponse
+newListDistributionConfigurationsResponse
+  pHttpStatus_ =
+    ListDistributionConfigurationsResponse'
+      { distributionConfigurationSummaryList =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        requestId = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The list of distributions.
+listDistributionConfigurationsResponse_distributionConfigurationSummaryList :: Lens.Lens' ListDistributionConfigurationsResponse (Prelude.Maybe [DistributionConfigurationSummary])
+listDistributionConfigurationsResponse_distributionConfigurationSummaryList = Lens.lens (\ListDistributionConfigurationsResponse' {distributionConfigurationSummaryList} -> distributionConfigurationSummaryList) (\s@ListDistributionConfigurationsResponse' {} a -> s {distributionConfigurationSummaryList = a} :: ListDistributionConfigurationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+listDistributionConfigurationsResponse_nextToken :: Lens.Lens' ListDistributionConfigurationsResponse (Prelude.Maybe Prelude.Text)
+listDistributionConfigurationsResponse_nextToken = Lens.lens (\ListDistributionConfigurationsResponse' {nextToken} -> nextToken) (\s@ListDistributionConfigurationsResponse' {} a -> s {nextToken = a} :: ListDistributionConfigurationsResponse)
+
+-- | The request ID that uniquely identifies this request.
+listDistributionConfigurationsResponse_requestId :: Lens.Lens' ListDistributionConfigurationsResponse (Prelude.Maybe Prelude.Text)
+listDistributionConfigurationsResponse_requestId = Lens.lens (\ListDistributionConfigurationsResponse' {requestId} -> requestId) (\s@ListDistributionConfigurationsResponse' {} a -> s {requestId = a} :: ListDistributionConfigurationsResponse)
+
+-- | The response's http status code.
+listDistributionConfigurationsResponse_httpStatus :: Lens.Lens' ListDistributionConfigurationsResponse Prelude.Int
+listDistributionConfigurationsResponse_httpStatus = Lens.lens (\ListDistributionConfigurationsResponse' {httpStatus} -> httpStatus) (\s@ListDistributionConfigurationsResponse' {} a -> s {httpStatus = a} :: ListDistributionConfigurationsResponse)
+
+instance
+  Prelude.NFData
+    ListDistributionConfigurationsResponse
+  where
+  rnf ListDistributionConfigurationsResponse' {..} =
+    Prelude.rnf distributionConfigurationSummaryList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/ListImageBuildVersions.hs b/gen/Amazonka/ImageBuilder/ListImageBuildVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/ListImageBuildVersions.hs
@@ -0,0 +1,284 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.ListImageBuildVersions
+-- 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 image build versions.
+module Amazonka.ImageBuilder.ListImageBuildVersions
+  ( -- * Creating a Request
+    ListImageBuildVersions (..),
+    newListImageBuildVersions,
+
+    -- * Request Lenses
+    listImageBuildVersions_filters,
+    listImageBuildVersions_maxResults,
+    listImageBuildVersions_nextToken,
+    listImageBuildVersions_imageVersionArn,
+
+    -- * Destructuring the Response
+    ListImageBuildVersionsResponse (..),
+    newListImageBuildVersionsResponse,
+
+    -- * Response Lenses
+    listImageBuildVersionsResponse_imageSummaryList,
+    listImageBuildVersionsResponse_nextToken,
+    listImageBuildVersionsResponse_requestId,
+    listImageBuildVersionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListImageBuildVersions' smart constructor.
+data ListImageBuildVersions = ListImageBuildVersions'
+  { -- | Use the following filters to streamline results:
+    --
+    -- -   @name@
+    --
+    -- -   @osVersion@
+    --
+    -- -   @platform@
+    --
+    -- -   @type@
+    --
+    -- -   @version@
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | The maximum items to return in a request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to specify where to start paginating. This is the NextToken from
+    -- a previously truncated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the image whose build versions you
+    -- want to retrieve.
+    imageVersionArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImageBuildVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listImageBuildVersions_filters' - Use the following filters to streamline results:
+--
+-- -   @name@
+--
+-- -   @osVersion@
+--
+-- -   @platform@
+--
+-- -   @type@
+--
+-- -   @version@
+--
+-- 'maxResults', 'listImageBuildVersions_maxResults' - The maximum items to return in a request.
+--
+-- 'nextToken', 'listImageBuildVersions_nextToken' - A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+--
+-- 'imageVersionArn', 'listImageBuildVersions_imageVersionArn' - The Amazon Resource Name (ARN) of the image whose build versions you
+-- want to retrieve.
+newListImageBuildVersions ::
+  -- | 'imageVersionArn'
+  Prelude.Text ->
+  ListImageBuildVersions
+newListImageBuildVersions pImageVersionArn_ =
+  ListImageBuildVersions'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      imageVersionArn = pImageVersionArn_
+    }
+
+-- | Use the following filters to streamline results:
+--
+-- -   @name@
+--
+-- -   @osVersion@
+--
+-- -   @platform@
+--
+-- -   @type@
+--
+-- -   @version@
+listImageBuildVersions_filters :: Lens.Lens' ListImageBuildVersions (Prelude.Maybe (Prelude.NonEmpty Filter))
+listImageBuildVersions_filters = Lens.lens (\ListImageBuildVersions' {filters} -> filters) (\s@ListImageBuildVersions' {} a -> s {filters = a} :: ListImageBuildVersions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum items to return in a request.
+listImageBuildVersions_maxResults :: Lens.Lens' ListImageBuildVersions (Prelude.Maybe Prelude.Natural)
+listImageBuildVersions_maxResults = Lens.lens (\ListImageBuildVersions' {maxResults} -> maxResults) (\s@ListImageBuildVersions' {} a -> s {maxResults = a} :: ListImageBuildVersions)
+
+-- | A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+listImageBuildVersions_nextToken :: Lens.Lens' ListImageBuildVersions (Prelude.Maybe Prelude.Text)
+listImageBuildVersions_nextToken = Lens.lens (\ListImageBuildVersions' {nextToken} -> nextToken) (\s@ListImageBuildVersions' {} a -> s {nextToken = a} :: ListImageBuildVersions)
+
+-- | The Amazon Resource Name (ARN) of the image whose build versions you
+-- want to retrieve.
+listImageBuildVersions_imageVersionArn :: Lens.Lens' ListImageBuildVersions Prelude.Text
+listImageBuildVersions_imageVersionArn = Lens.lens (\ListImageBuildVersions' {imageVersionArn} -> imageVersionArn) (\s@ListImageBuildVersions' {} a -> s {imageVersionArn = a} :: ListImageBuildVersions)
+
+instance Core.AWSRequest ListImageBuildVersions where
+  type
+    AWSResponse ListImageBuildVersions =
+      ListImageBuildVersionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListImageBuildVersionsResponse'
+            Prelude.<$> ( x
+                            Data..?> "imageSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListImageBuildVersions where
+  hashWithSalt _salt ListImageBuildVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` imageVersionArn
+
+instance Prelude.NFData ListImageBuildVersions where
+  rnf ListImageBuildVersions' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf imageVersionArn
+
+instance Data.ToHeaders ListImageBuildVersions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListImageBuildVersions where
+  toJSON ListImageBuildVersions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("imageVersionArn" Data..= imageVersionArn)
+          ]
+      )
+
+instance Data.ToPath ListImageBuildVersions where
+  toPath = Prelude.const "/ListImageBuildVersions"
+
+instance Data.ToQuery ListImageBuildVersions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListImageBuildVersionsResponse' smart constructor.
+data ListImageBuildVersionsResponse = ListImageBuildVersionsResponse'
+  { -- | The list of image build versions.
+    imageSummaryList :: Prelude.Maybe [ImageSummary],
+    -- | The next token used for paginated responses. When this is not empty,
+    -- there are additional elements that the service has not included in this
+    -- request. Use this token with the next request to retrieve additional
+    -- objects.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImageBuildVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageSummaryList', 'listImageBuildVersionsResponse_imageSummaryList' - The list of image build versions.
+--
+-- 'nextToken', 'listImageBuildVersionsResponse_nextToken' - The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+--
+-- 'requestId', 'listImageBuildVersionsResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'listImageBuildVersionsResponse_httpStatus' - The response's http status code.
+newListImageBuildVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListImageBuildVersionsResponse
+newListImageBuildVersionsResponse pHttpStatus_ =
+  ListImageBuildVersionsResponse'
+    { imageSummaryList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of image build versions.
+listImageBuildVersionsResponse_imageSummaryList :: Lens.Lens' ListImageBuildVersionsResponse (Prelude.Maybe [ImageSummary])
+listImageBuildVersionsResponse_imageSummaryList = Lens.lens (\ListImageBuildVersionsResponse' {imageSummaryList} -> imageSummaryList) (\s@ListImageBuildVersionsResponse' {} a -> s {imageSummaryList = a} :: ListImageBuildVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+listImageBuildVersionsResponse_nextToken :: Lens.Lens' ListImageBuildVersionsResponse (Prelude.Maybe Prelude.Text)
+listImageBuildVersionsResponse_nextToken = Lens.lens (\ListImageBuildVersionsResponse' {nextToken} -> nextToken) (\s@ListImageBuildVersionsResponse' {} a -> s {nextToken = a} :: ListImageBuildVersionsResponse)
+
+-- | The request ID that uniquely identifies this request.
+listImageBuildVersionsResponse_requestId :: Lens.Lens' ListImageBuildVersionsResponse (Prelude.Maybe Prelude.Text)
+listImageBuildVersionsResponse_requestId = Lens.lens (\ListImageBuildVersionsResponse' {requestId} -> requestId) (\s@ListImageBuildVersionsResponse' {} a -> s {requestId = a} :: ListImageBuildVersionsResponse)
+
+-- | The response's http status code.
+listImageBuildVersionsResponse_httpStatus :: Lens.Lens' ListImageBuildVersionsResponse Prelude.Int
+listImageBuildVersionsResponse_httpStatus = Lens.lens (\ListImageBuildVersionsResponse' {httpStatus} -> httpStatus) (\s@ListImageBuildVersionsResponse' {} a -> s {httpStatus = a} :: ListImageBuildVersionsResponse)
+
+instance
+  Prelude.NFData
+    ListImageBuildVersionsResponse
+  where
+  rnf ListImageBuildVersionsResponse' {..} =
+    Prelude.rnf imageSummaryList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/ListImagePackages.hs b/gen/Amazonka/ImageBuilder/ListImagePackages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/ListImagePackages.hs
@@ -0,0 +1,239 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.ListImagePackages
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the Packages that are associated with an Image Build Version, as
+-- determined by Amazon Web Services Systems Manager Inventory at build
+-- time.
+module Amazonka.ImageBuilder.ListImagePackages
+  ( -- * Creating a Request
+    ListImagePackages (..),
+    newListImagePackages,
+
+    -- * Request Lenses
+    listImagePackages_maxResults,
+    listImagePackages_nextToken,
+    listImagePackages_imageBuildVersionArn,
+
+    -- * Destructuring the Response
+    ListImagePackagesResponse (..),
+    newListImagePackagesResponse,
+
+    -- * Response Lenses
+    listImagePackagesResponse_imagePackageList,
+    listImagePackagesResponse_nextToken,
+    listImagePackagesResponse_requestId,
+    listImagePackagesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListImagePackages' smart constructor.
+data ListImagePackages = ListImagePackages'
+  { -- | The maxiumum number of results to return from the ListImagePackages
+    -- request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to specify where to start paginating. This is the NextToken from
+    -- a previously truncated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Filter results for the ListImagePackages request by the Image Build
+    -- Version ARN
+    imageBuildVersionArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImagePackages' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listImagePackages_maxResults' - The maxiumum number of results to return from the ListImagePackages
+-- request.
+--
+-- 'nextToken', 'listImagePackages_nextToken' - A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+--
+-- 'imageBuildVersionArn', 'listImagePackages_imageBuildVersionArn' - Filter results for the ListImagePackages request by the Image Build
+-- Version ARN
+newListImagePackages ::
+  -- | 'imageBuildVersionArn'
+  Prelude.Text ->
+  ListImagePackages
+newListImagePackages pImageBuildVersionArn_ =
+  ListImagePackages'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      imageBuildVersionArn = pImageBuildVersionArn_
+    }
+
+-- | The maxiumum number of results to return from the ListImagePackages
+-- request.
+listImagePackages_maxResults :: Lens.Lens' ListImagePackages (Prelude.Maybe Prelude.Natural)
+listImagePackages_maxResults = Lens.lens (\ListImagePackages' {maxResults} -> maxResults) (\s@ListImagePackages' {} a -> s {maxResults = a} :: ListImagePackages)
+
+-- | A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+listImagePackages_nextToken :: Lens.Lens' ListImagePackages (Prelude.Maybe Prelude.Text)
+listImagePackages_nextToken = Lens.lens (\ListImagePackages' {nextToken} -> nextToken) (\s@ListImagePackages' {} a -> s {nextToken = a} :: ListImagePackages)
+
+-- | Filter results for the ListImagePackages request by the Image Build
+-- Version ARN
+listImagePackages_imageBuildVersionArn :: Lens.Lens' ListImagePackages Prelude.Text
+listImagePackages_imageBuildVersionArn = Lens.lens (\ListImagePackages' {imageBuildVersionArn} -> imageBuildVersionArn) (\s@ListImagePackages' {} a -> s {imageBuildVersionArn = a} :: ListImagePackages)
+
+instance Core.AWSRequest ListImagePackages where
+  type
+    AWSResponse ListImagePackages =
+      ListImagePackagesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListImagePackagesResponse'
+            Prelude.<$> ( x
+                            Data..?> "imagePackageList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListImagePackages where
+  hashWithSalt _salt ListImagePackages' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` imageBuildVersionArn
+
+instance Prelude.NFData ListImagePackages where
+  rnf ListImagePackages' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf imageBuildVersionArn
+
+instance Data.ToHeaders ListImagePackages where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListImagePackages where
+  toJSON ListImagePackages' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ( "imageBuildVersionArn"
+                  Data..= imageBuildVersionArn
+              )
+          ]
+      )
+
+instance Data.ToPath ListImagePackages where
+  toPath = Prelude.const "/ListImagePackages"
+
+instance Data.ToQuery ListImagePackages where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListImagePackagesResponse' smart constructor.
+data ListImagePackagesResponse = ListImagePackagesResponse'
+  { -- | The list of Image Packages returned in the response.
+    imagePackageList :: Prelude.Maybe [ImagePackage],
+    -- | A token to specify where to start paginating. This is the NextToken from
+    -- a previously truncated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImagePackagesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imagePackageList', 'listImagePackagesResponse_imagePackageList' - The list of Image Packages returned in the response.
+--
+-- 'nextToken', 'listImagePackagesResponse_nextToken' - A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+--
+-- 'requestId', 'listImagePackagesResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'listImagePackagesResponse_httpStatus' - The response's http status code.
+newListImagePackagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListImagePackagesResponse
+newListImagePackagesResponse pHttpStatus_ =
+  ListImagePackagesResponse'
+    { imagePackageList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of Image Packages returned in the response.
+listImagePackagesResponse_imagePackageList :: Lens.Lens' ListImagePackagesResponse (Prelude.Maybe [ImagePackage])
+listImagePackagesResponse_imagePackageList = Lens.lens (\ListImagePackagesResponse' {imagePackageList} -> imagePackageList) (\s@ListImagePackagesResponse' {} a -> s {imagePackageList = a} :: ListImagePackagesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+listImagePackagesResponse_nextToken :: Lens.Lens' ListImagePackagesResponse (Prelude.Maybe Prelude.Text)
+listImagePackagesResponse_nextToken = Lens.lens (\ListImagePackagesResponse' {nextToken} -> nextToken) (\s@ListImagePackagesResponse' {} a -> s {nextToken = a} :: ListImagePackagesResponse)
+
+-- | The request ID that uniquely identifies this request.
+listImagePackagesResponse_requestId :: Lens.Lens' ListImagePackagesResponse (Prelude.Maybe Prelude.Text)
+listImagePackagesResponse_requestId = Lens.lens (\ListImagePackagesResponse' {requestId} -> requestId) (\s@ListImagePackagesResponse' {} a -> s {requestId = a} :: ListImagePackagesResponse)
+
+-- | The response's http status code.
+listImagePackagesResponse_httpStatus :: Lens.Lens' ListImagePackagesResponse Prelude.Int
+listImagePackagesResponse_httpStatus = Lens.lens (\ListImagePackagesResponse' {httpStatus} -> httpStatus) (\s@ListImagePackagesResponse' {} a -> s {httpStatus = a} :: ListImagePackagesResponse)
+
+instance Prelude.NFData ListImagePackagesResponse where
+  rnf ListImagePackagesResponse' {..} =
+    Prelude.rnf imagePackageList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/ListImagePipelineImages.hs b/gen/Amazonka/ImageBuilder/ListImagePipelineImages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/ListImagePipelineImages.hs
@@ -0,0 +1,266 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.ListImagePipelineImages
+-- 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 images created by the specified pipeline.
+module Amazonka.ImageBuilder.ListImagePipelineImages
+  ( -- * Creating a Request
+    ListImagePipelineImages (..),
+    newListImagePipelineImages,
+
+    -- * Request Lenses
+    listImagePipelineImages_filters,
+    listImagePipelineImages_maxResults,
+    listImagePipelineImages_nextToken,
+    listImagePipelineImages_imagePipelineArn,
+
+    -- * Destructuring the Response
+    ListImagePipelineImagesResponse (..),
+    newListImagePipelineImagesResponse,
+
+    -- * Response Lenses
+    listImagePipelineImagesResponse_imageSummaryList,
+    listImagePipelineImagesResponse_nextToken,
+    listImagePipelineImagesResponse_requestId,
+    listImagePipelineImagesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListImagePipelineImages' smart constructor.
+data ListImagePipelineImages = ListImagePipelineImages'
+  { -- | Use the following filters to streamline results:
+    --
+    -- -   @name@
+    --
+    -- -   @version@
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | The maximum items to return in a request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to specify where to start paginating. This is the NextToken from
+    -- a previously truncated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the image pipeline whose images you
+    -- want to view.
+    imagePipelineArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImagePipelineImages' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listImagePipelineImages_filters' - Use the following filters to streamline results:
+--
+-- -   @name@
+--
+-- -   @version@
+--
+-- 'maxResults', 'listImagePipelineImages_maxResults' - The maximum items to return in a request.
+--
+-- 'nextToken', 'listImagePipelineImages_nextToken' - A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+--
+-- 'imagePipelineArn', 'listImagePipelineImages_imagePipelineArn' - The Amazon Resource Name (ARN) of the image pipeline whose images you
+-- want to view.
+newListImagePipelineImages ::
+  -- | 'imagePipelineArn'
+  Prelude.Text ->
+  ListImagePipelineImages
+newListImagePipelineImages pImagePipelineArn_ =
+  ListImagePipelineImages'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      imagePipelineArn = pImagePipelineArn_
+    }
+
+-- | Use the following filters to streamline results:
+--
+-- -   @name@
+--
+-- -   @version@
+listImagePipelineImages_filters :: Lens.Lens' ListImagePipelineImages (Prelude.Maybe (Prelude.NonEmpty Filter))
+listImagePipelineImages_filters = Lens.lens (\ListImagePipelineImages' {filters} -> filters) (\s@ListImagePipelineImages' {} a -> s {filters = a} :: ListImagePipelineImages) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum items to return in a request.
+listImagePipelineImages_maxResults :: Lens.Lens' ListImagePipelineImages (Prelude.Maybe Prelude.Natural)
+listImagePipelineImages_maxResults = Lens.lens (\ListImagePipelineImages' {maxResults} -> maxResults) (\s@ListImagePipelineImages' {} a -> s {maxResults = a} :: ListImagePipelineImages)
+
+-- | A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+listImagePipelineImages_nextToken :: Lens.Lens' ListImagePipelineImages (Prelude.Maybe Prelude.Text)
+listImagePipelineImages_nextToken = Lens.lens (\ListImagePipelineImages' {nextToken} -> nextToken) (\s@ListImagePipelineImages' {} a -> s {nextToken = a} :: ListImagePipelineImages)
+
+-- | The Amazon Resource Name (ARN) of the image pipeline whose images you
+-- want to view.
+listImagePipelineImages_imagePipelineArn :: Lens.Lens' ListImagePipelineImages Prelude.Text
+listImagePipelineImages_imagePipelineArn = Lens.lens (\ListImagePipelineImages' {imagePipelineArn} -> imagePipelineArn) (\s@ListImagePipelineImages' {} a -> s {imagePipelineArn = a} :: ListImagePipelineImages)
+
+instance Core.AWSRequest ListImagePipelineImages where
+  type
+    AWSResponse ListImagePipelineImages =
+      ListImagePipelineImagesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListImagePipelineImagesResponse'
+            Prelude.<$> ( x
+                            Data..?> "imageSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListImagePipelineImages where
+  hashWithSalt _salt ListImagePipelineImages' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` imagePipelineArn
+
+instance Prelude.NFData ListImagePipelineImages where
+  rnf ListImagePipelineImages' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf imagePipelineArn
+
+instance Data.ToHeaders ListImagePipelineImages where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListImagePipelineImages where
+  toJSON ListImagePipelineImages' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("imagePipelineArn" Data..= imagePipelineArn)
+          ]
+      )
+
+instance Data.ToPath ListImagePipelineImages where
+  toPath = Prelude.const "/ListImagePipelineImages"
+
+instance Data.ToQuery ListImagePipelineImages where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListImagePipelineImagesResponse' smart constructor.
+data ListImagePipelineImagesResponse = ListImagePipelineImagesResponse'
+  { -- | The list of images built by this pipeline.
+    imageSummaryList :: Prelude.Maybe [ImageSummary],
+    -- | The next token used for paginated responses. When this is not empty,
+    -- there are additional elements that the service has not included in this
+    -- request. Use this token with the next request to retrieve additional
+    -- objects.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImagePipelineImagesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageSummaryList', 'listImagePipelineImagesResponse_imageSummaryList' - The list of images built by this pipeline.
+--
+-- 'nextToken', 'listImagePipelineImagesResponse_nextToken' - The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+--
+-- 'requestId', 'listImagePipelineImagesResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'listImagePipelineImagesResponse_httpStatus' - The response's http status code.
+newListImagePipelineImagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListImagePipelineImagesResponse
+newListImagePipelineImagesResponse pHttpStatus_ =
+  ListImagePipelineImagesResponse'
+    { imageSummaryList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of images built by this pipeline.
+listImagePipelineImagesResponse_imageSummaryList :: Lens.Lens' ListImagePipelineImagesResponse (Prelude.Maybe [ImageSummary])
+listImagePipelineImagesResponse_imageSummaryList = Lens.lens (\ListImagePipelineImagesResponse' {imageSummaryList} -> imageSummaryList) (\s@ListImagePipelineImagesResponse' {} a -> s {imageSummaryList = a} :: ListImagePipelineImagesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+listImagePipelineImagesResponse_nextToken :: Lens.Lens' ListImagePipelineImagesResponse (Prelude.Maybe Prelude.Text)
+listImagePipelineImagesResponse_nextToken = Lens.lens (\ListImagePipelineImagesResponse' {nextToken} -> nextToken) (\s@ListImagePipelineImagesResponse' {} a -> s {nextToken = a} :: ListImagePipelineImagesResponse)
+
+-- | The request ID that uniquely identifies this request.
+listImagePipelineImagesResponse_requestId :: Lens.Lens' ListImagePipelineImagesResponse (Prelude.Maybe Prelude.Text)
+listImagePipelineImagesResponse_requestId = Lens.lens (\ListImagePipelineImagesResponse' {requestId} -> requestId) (\s@ListImagePipelineImagesResponse' {} a -> s {requestId = a} :: ListImagePipelineImagesResponse)
+
+-- | The response's http status code.
+listImagePipelineImagesResponse_httpStatus :: Lens.Lens' ListImagePipelineImagesResponse Prelude.Int
+listImagePipelineImagesResponse_httpStatus = Lens.lens (\ListImagePipelineImagesResponse' {httpStatus} -> httpStatus) (\s@ListImagePipelineImagesResponse' {} a -> s {httpStatus = a} :: ListImagePipelineImagesResponse)
+
+instance
+  Prelude.NFData
+    ListImagePipelineImagesResponse
+  where
+  rnf ListImagePipelineImagesResponse' {..} =
+    Prelude.rnf imageSummaryList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/ListImagePipelines.hs b/gen/Amazonka/ImageBuilder/ListImagePipelines.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/ListImagePipelines.hs
@@ -0,0 +1,268 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.ListImagePipelines
+-- 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 image pipelines.
+module Amazonka.ImageBuilder.ListImagePipelines
+  ( -- * Creating a Request
+    ListImagePipelines (..),
+    newListImagePipelines,
+
+    -- * Request Lenses
+    listImagePipelines_filters,
+    listImagePipelines_maxResults,
+    listImagePipelines_nextToken,
+
+    -- * Destructuring the Response
+    ListImagePipelinesResponse (..),
+    newListImagePipelinesResponse,
+
+    -- * Response Lenses
+    listImagePipelinesResponse_imagePipelineList,
+    listImagePipelinesResponse_nextToken,
+    listImagePipelinesResponse_requestId,
+    listImagePipelinesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListImagePipelines' smart constructor.
+data ListImagePipelines = ListImagePipelines'
+  { -- | Use the following filters to streamline results:
+    --
+    -- -   @description@
+    --
+    -- -   @distributionConfigurationArn@
+    --
+    -- -   @imageRecipeArn@
+    --
+    -- -   @infrastructureConfigurationArn@
+    --
+    -- -   @name@
+    --
+    -- -   @status@
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | The maximum items to return in a request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to specify where to start paginating. This is the NextToken from
+    -- a previously truncated response.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImagePipelines' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listImagePipelines_filters' - Use the following filters to streamline results:
+--
+-- -   @description@
+--
+-- -   @distributionConfigurationArn@
+--
+-- -   @imageRecipeArn@
+--
+-- -   @infrastructureConfigurationArn@
+--
+-- -   @name@
+--
+-- -   @status@
+--
+-- 'maxResults', 'listImagePipelines_maxResults' - The maximum items to return in a request.
+--
+-- 'nextToken', 'listImagePipelines_nextToken' - A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+newListImagePipelines ::
+  ListImagePipelines
+newListImagePipelines =
+  ListImagePipelines'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Use the following filters to streamline results:
+--
+-- -   @description@
+--
+-- -   @distributionConfigurationArn@
+--
+-- -   @imageRecipeArn@
+--
+-- -   @infrastructureConfigurationArn@
+--
+-- -   @name@
+--
+-- -   @status@
+listImagePipelines_filters :: Lens.Lens' ListImagePipelines (Prelude.Maybe (Prelude.NonEmpty Filter))
+listImagePipelines_filters = Lens.lens (\ListImagePipelines' {filters} -> filters) (\s@ListImagePipelines' {} a -> s {filters = a} :: ListImagePipelines) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum items to return in a request.
+listImagePipelines_maxResults :: Lens.Lens' ListImagePipelines (Prelude.Maybe Prelude.Natural)
+listImagePipelines_maxResults = Lens.lens (\ListImagePipelines' {maxResults} -> maxResults) (\s@ListImagePipelines' {} a -> s {maxResults = a} :: ListImagePipelines)
+
+-- | A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+listImagePipelines_nextToken :: Lens.Lens' ListImagePipelines (Prelude.Maybe Prelude.Text)
+listImagePipelines_nextToken = Lens.lens (\ListImagePipelines' {nextToken} -> nextToken) (\s@ListImagePipelines' {} a -> s {nextToken = a} :: ListImagePipelines)
+
+instance Core.AWSRequest ListImagePipelines where
+  type
+    AWSResponse ListImagePipelines =
+      ListImagePipelinesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListImagePipelinesResponse'
+            Prelude.<$> ( x
+                            Data..?> "imagePipelineList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListImagePipelines where
+  hashWithSalt _salt ListImagePipelines' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListImagePipelines where
+  rnf ListImagePipelines' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListImagePipelines where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListImagePipelines where
+  toJSON ListImagePipelines' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListImagePipelines where
+  toPath = Prelude.const "/ListImagePipelines"
+
+instance Data.ToQuery ListImagePipelines where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListImagePipelinesResponse' smart constructor.
+data ListImagePipelinesResponse = ListImagePipelinesResponse'
+  { -- | The list of image pipelines.
+    imagePipelineList :: Prelude.Maybe [ImagePipeline],
+    -- | The next token used for paginated responses. When this is not empty,
+    -- there are additional elements that the service has not included in this
+    -- request. Use this token with the next request to retrieve additional
+    -- objects.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImagePipelinesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imagePipelineList', 'listImagePipelinesResponse_imagePipelineList' - The list of image pipelines.
+--
+-- 'nextToken', 'listImagePipelinesResponse_nextToken' - The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+--
+-- 'requestId', 'listImagePipelinesResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'listImagePipelinesResponse_httpStatus' - The response's http status code.
+newListImagePipelinesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListImagePipelinesResponse
+newListImagePipelinesResponse pHttpStatus_ =
+  ListImagePipelinesResponse'
+    { imagePipelineList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of image pipelines.
+listImagePipelinesResponse_imagePipelineList :: Lens.Lens' ListImagePipelinesResponse (Prelude.Maybe [ImagePipeline])
+listImagePipelinesResponse_imagePipelineList = Lens.lens (\ListImagePipelinesResponse' {imagePipelineList} -> imagePipelineList) (\s@ListImagePipelinesResponse' {} a -> s {imagePipelineList = a} :: ListImagePipelinesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+listImagePipelinesResponse_nextToken :: Lens.Lens' ListImagePipelinesResponse (Prelude.Maybe Prelude.Text)
+listImagePipelinesResponse_nextToken = Lens.lens (\ListImagePipelinesResponse' {nextToken} -> nextToken) (\s@ListImagePipelinesResponse' {} a -> s {nextToken = a} :: ListImagePipelinesResponse)
+
+-- | The request ID that uniquely identifies this request.
+listImagePipelinesResponse_requestId :: Lens.Lens' ListImagePipelinesResponse (Prelude.Maybe Prelude.Text)
+listImagePipelinesResponse_requestId = Lens.lens (\ListImagePipelinesResponse' {requestId} -> requestId) (\s@ListImagePipelinesResponse' {} a -> s {requestId = a} :: ListImagePipelinesResponse)
+
+-- | The response's http status code.
+listImagePipelinesResponse_httpStatus :: Lens.Lens' ListImagePipelinesResponse Prelude.Int
+listImagePipelinesResponse_httpStatus = Lens.lens (\ListImagePipelinesResponse' {httpStatus} -> httpStatus) (\s@ListImagePipelinesResponse' {} a -> s {httpStatus = a} :: ListImagePipelinesResponse)
+
+instance Prelude.NFData ListImagePipelinesResponse where
+  rnf ListImagePipelinesResponse' {..} =
+    Prelude.rnf imagePipelineList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/ListImageRecipes.hs b/gen/Amazonka/ImageBuilder/ListImageRecipes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/ListImageRecipes.hs
@@ -0,0 +1,275 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.ListImageRecipes
+-- 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 image recipes.
+module Amazonka.ImageBuilder.ListImageRecipes
+  ( -- * Creating a Request
+    ListImageRecipes (..),
+    newListImageRecipes,
+
+    -- * Request Lenses
+    listImageRecipes_filters,
+    listImageRecipes_maxResults,
+    listImageRecipes_nextToken,
+    listImageRecipes_owner,
+
+    -- * Destructuring the Response
+    ListImageRecipesResponse (..),
+    newListImageRecipesResponse,
+
+    -- * Response Lenses
+    listImageRecipesResponse_imageRecipeSummaryList,
+    listImageRecipesResponse_nextToken,
+    listImageRecipesResponse_requestId,
+    listImageRecipesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListImageRecipes' smart constructor.
+data ListImageRecipes = ListImageRecipes'
+  { -- | Use the following filters to streamline results:
+    --
+    -- -   @name@
+    --
+    -- -   @parentImage@
+    --
+    -- -   @platform@
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | The maximum items to return in a request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to specify where to start paginating. This is the NextToken from
+    -- a previously truncated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The owner defines which image recipes you want to list. By default, this
+    -- request will only show image recipes owned by your account. You can use
+    -- this field to specify if you want to view image recipes owned by
+    -- yourself, by Amazon, or those image recipes that have been shared with
+    -- you by other customers.
+    owner :: Prelude.Maybe Ownership
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImageRecipes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listImageRecipes_filters' - Use the following filters to streamline results:
+--
+-- -   @name@
+--
+-- -   @parentImage@
+--
+-- -   @platform@
+--
+-- 'maxResults', 'listImageRecipes_maxResults' - The maximum items to return in a request.
+--
+-- 'nextToken', 'listImageRecipes_nextToken' - A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+--
+-- 'owner', 'listImageRecipes_owner' - The owner defines which image recipes you want to list. By default, this
+-- request will only show image recipes owned by your account. You can use
+-- this field to specify if you want to view image recipes owned by
+-- yourself, by Amazon, or those image recipes that have been shared with
+-- you by other customers.
+newListImageRecipes ::
+  ListImageRecipes
+newListImageRecipes =
+  ListImageRecipes'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      owner = Prelude.Nothing
+    }
+
+-- | Use the following filters to streamline results:
+--
+-- -   @name@
+--
+-- -   @parentImage@
+--
+-- -   @platform@
+listImageRecipes_filters :: Lens.Lens' ListImageRecipes (Prelude.Maybe (Prelude.NonEmpty Filter))
+listImageRecipes_filters = Lens.lens (\ListImageRecipes' {filters} -> filters) (\s@ListImageRecipes' {} a -> s {filters = a} :: ListImageRecipes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum items to return in a request.
+listImageRecipes_maxResults :: Lens.Lens' ListImageRecipes (Prelude.Maybe Prelude.Natural)
+listImageRecipes_maxResults = Lens.lens (\ListImageRecipes' {maxResults} -> maxResults) (\s@ListImageRecipes' {} a -> s {maxResults = a} :: ListImageRecipes)
+
+-- | A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+listImageRecipes_nextToken :: Lens.Lens' ListImageRecipes (Prelude.Maybe Prelude.Text)
+listImageRecipes_nextToken = Lens.lens (\ListImageRecipes' {nextToken} -> nextToken) (\s@ListImageRecipes' {} a -> s {nextToken = a} :: ListImageRecipes)
+
+-- | The owner defines which image recipes you want to list. By default, this
+-- request will only show image recipes owned by your account. You can use
+-- this field to specify if you want to view image recipes owned by
+-- yourself, by Amazon, or those image recipes that have been shared with
+-- you by other customers.
+listImageRecipes_owner :: Lens.Lens' ListImageRecipes (Prelude.Maybe Ownership)
+listImageRecipes_owner = Lens.lens (\ListImageRecipes' {owner} -> owner) (\s@ListImageRecipes' {} a -> s {owner = a} :: ListImageRecipes)
+
+instance Core.AWSRequest ListImageRecipes where
+  type
+    AWSResponse ListImageRecipes =
+      ListImageRecipesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListImageRecipesResponse'
+            Prelude.<$> ( x
+                            Data..?> "imageRecipeSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListImageRecipes where
+  hashWithSalt _salt ListImageRecipes' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` owner
+
+instance Prelude.NFData ListImageRecipes where
+  rnf ListImageRecipes' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf owner
+
+instance Data.ToHeaders ListImageRecipes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListImageRecipes where
+  toJSON ListImageRecipes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("owner" Data..=) Prelude.<$> owner
+          ]
+      )
+
+instance Data.ToPath ListImageRecipes where
+  toPath = Prelude.const "/ListImageRecipes"
+
+instance Data.ToQuery ListImageRecipes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListImageRecipesResponse' smart constructor.
+data ListImageRecipesResponse = ListImageRecipesResponse'
+  { -- | The list of image pipelines.
+    imageRecipeSummaryList :: Prelude.Maybe [ImageRecipeSummary],
+    -- | The next token used for paginated responses. When this is not empty,
+    -- there are additional elements that the service has not included in this
+    -- request. Use this token with the next request to retrieve additional
+    -- objects.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImageRecipesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageRecipeSummaryList', 'listImageRecipesResponse_imageRecipeSummaryList' - The list of image pipelines.
+--
+-- 'nextToken', 'listImageRecipesResponse_nextToken' - The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+--
+-- 'requestId', 'listImageRecipesResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'listImageRecipesResponse_httpStatus' - The response's http status code.
+newListImageRecipesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListImageRecipesResponse
+newListImageRecipesResponse pHttpStatus_ =
+  ListImageRecipesResponse'
+    { imageRecipeSummaryList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of image pipelines.
+listImageRecipesResponse_imageRecipeSummaryList :: Lens.Lens' ListImageRecipesResponse (Prelude.Maybe [ImageRecipeSummary])
+listImageRecipesResponse_imageRecipeSummaryList = Lens.lens (\ListImageRecipesResponse' {imageRecipeSummaryList} -> imageRecipeSummaryList) (\s@ListImageRecipesResponse' {} a -> s {imageRecipeSummaryList = a} :: ListImageRecipesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+listImageRecipesResponse_nextToken :: Lens.Lens' ListImageRecipesResponse (Prelude.Maybe Prelude.Text)
+listImageRecipesResponse_nextToken = Lens.lens (\ListImageRecipesResponse' {nextToken} -> nextToken) (\s@ListImageRecipesResponse' {} a -> s {nextToken = a} :: ListImageRecipesResponse)
+
+-- | The request ID that uniquely identifies this request.
+listImageRecipesResponse_requestId :: Lens.Lens' ListImageRecipesResponse (Prelude.Maybe Prelude.Text)
+listImageRecipesResponse_requestId = Lens.lens (\ListImageRecipesResponse' {requestId} -> requestId) (\s@ListImageRecipesResponse' {} a -> s {requestId = a} :: ListImageRecipesResponse)
+
+-- | The response's http status code.
+listImageRecipesResponse_httpStatus :: Lens.Lens' ListImageRecipesResponse Prelude.Int
+listImageRecipesResponse_httpStatus = Lens.lens (\ListImageRecipesResponse' {httpStatus} -> httpStatus) (\s@ListImageRecipesResponse' {} a -> s {httpStatus = a} :: ListImageRecipesResponse)
+
+instance Prelude.NFData ListImageRecipesResponse where
+  rnf ListImageRecipesResponse' {..} =
+    Prelude.rnf imageRecipeSummaryList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/ListImages.hs b/gen/Amazonka/ImageBuilder/ListImages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/ListImages.hs
@@ -0,0 +1,342 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.ListImages
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the list of images that you have access to.
+module Amazonka.ImageBuilder.ListImages
+  ( -- * Creating a Request
+    ListImages (..),
+    newListImages,
+
+    -- * Request Lenses
+    listImages_byName,
+    listImages_filters,
+    listImages_includeDeprecated,
+    listImages_maxResults,
+    listImages_nextToken,
+    listImages_owner,
+
+    -- * Destructuring the Response
+    ListImagesResponse (..),
+    newListImagesResponse,
+
+    -- * Response Lenses
+    listImagesResponse_imageVersionList,
+    listImagesResponse_nextToken,
+    listImagesResponse_requestId,
+    listImagesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListImages' smart constructor.
+data ListImages = ListImages'
+  { -- | Requests a list of images with a specific recipe name.
+    byName :: Prelude.Maybe Prelude.Bool,
+    -- | Use the following filters to streamline results:
+    --
+    -- -   @name@
+    --
+    -- -   @osVersion@
+    --
+    -- -   @platform@
+    --
+    -- -   @type@
+    --
+    -- -   @version@
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | Includes deprecated images in the response list.
+    includeDeprecated :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum items to return in a request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to specify where to start paginating. This is the NextToken from
+    -- a previously truncated response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The owner defines which images you want to list. By default, this
+    -- request will only show images owned by your account. You can use this
+    -- field to specify if you want to view images owned by yourself, by
+    -- Amazon, or those images that have been shared with you by other
+    -- customers.
+    owner :: Prelude.Maybe Ownership
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImages' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'byName', 'listImages_byName' - Requests a list of images with a specific recipe name.
+--
+-- 'filters', 'listImages_filters' - Use the following filters to streamline results:
+--
+-- -   @name@
+--
+-- -   @osVersion@
+--
+-- -   @platform@
+--
+-- -   @type@
+--
+-- -   @version@
+--
+-- 'includeDeprecated', 'listImages_includeDeprecated' - Includes deprecated images in the response list.
+--
+-- 'maxResults', 'listImages_maxResults' - The maximum items to return in a request.
+--
+-- 'nextToken', 'listImages_nextToken' - A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+--
+-- 'owner', 'listImages_owner' - The owner defines which images you want to list. By default, this
+-- request will only show images owned by your account. You can use this
+-- field to specify if you want to view images owned by yourself, by
+-- Amazon, or those images that have been shared with you by other
+-- customers.
+newListImages ::
+  ListImages
+newListImages =
+  ListImages'
+    { byName = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      includeDeprecated = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      owner = Prelude.Nothing
+    }
+
+-- | Requests a list of images with a specific recipe name.
+listImages_byName :: Lens.Lens' ListImages (Prelude.Maybe Prelude.Bool)
+listImages_byName = Lens.lens (\ListImages' {byName} -> byName) (\s@ListImages' {} a -> s {byName = a} :: ListImages)
+
+-- | Use the following filters to streamline results:
+--
+-- -   @name@
+--
+-- -   @osVersion@
+--
+-- -   @platform@
+--
+-- -   @type@
+--
+-- -   @version@
+listImages_filters :: Lens.Lens' ListImages (Prelude.Maybe (Prelude.NonEmpty Filter))
+listImages_filters = Lens.lens (\ListImages' {filters} -> filters) (\s@ListImages' {} a -> s {filters = a} :: ListImages) Prelude.. Lens.mapping Lens.coerced
+
+-- | Includes deprecated images in the response list.
+listImages_includeDeprecated :: Lens.Lens' ListImages (Prelude.Maybe Prelude.Bool)
+listImages_includeDeprecated = Lens.lens (\ListImages' {includeDeprecated} -> includeDeprecated) (\s@ListImages' {} a -> s {includeDeprecated = a} :: ListImages)
+
+-- | The maximum items to return in a request.
+listImages_maxResults :: Lens.Lens' ListImages (Prelude.Maybe Prelude.Natural)
+listImages_maxResults = Lens.lens (\ListImages' {maxResults} -> maxResults) (\s@ListImages' {} a -> s {maxResults = a} :: ListImages)
+
+-- | A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+listImages_nextToken :: Lens.Lens' ListImages (Prelude.Maybe Prelude.Text)
+listImages_nextToken = Lens.lens (\ListImages' {nextToken} -> nextToken) (\s@ListImages' {} a -> s {nextToken = a} :: ListImages)
+
+-- | The owner defines which images you want to list. By default, this
+-- request will only show images owned by your account. You can use this
+-- field to specify if you want to view images owned by yourself, by
+-- Amazon, or those images that have been shared with you by other
+-- customers.
+listImages_owner :: Lens.Lens' ListImages (Prelude.Maybe Ownership)
+listImages_owner = Lens.lens (\ListImages' {owner} -> owner) (\s@ListImages' {} a -> s {owner = a} :: ListImages)
+
+instance Core.AWSRequest ListImages where
+  type AWSResponse ListImages = ListImagesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListImagesResponse'
+            Prelude.<$> ( x
+                            Data..?> "imageVersionList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListImages where
+  hashWithSalt _salt ListImages' {..} =
+    _salt
+      `Prelude.hashWithSalt` byName
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` includeDeprecated
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` owner
+
+instance Prelude.NFData ListImages where
+  rnf ListImages' {..} =
+    Prelude.rnf byName
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf includeDeprecated
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf owner
+
+instance Data.ToHeaders ListImages where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListImages where
+  toJSON ListImages' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("byName" Data..=) Prelude.<$> byName,
+            ("filters" Data..=) Prelude.<$> filters,
+            ("includeDeprecated" Data..=)
+              Prelude.<$> includeDeprecated,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("owner" Data..=) Prelude.<$> owner
+          ]
+      )
+
+instance Data.ToPath ListImages where
+  toPath = Prelude.const "/ListImages"
+
+instance Data.ToQuery ListImages where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListImagesResponse' smart constructor.
+data ListImagesResponse = ListImagesResponse'
+  { -- | The list of image semantic versions.
+    --
+    -- The semantic version has four nodes:
+    -- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+    -- first three, and can filter on all of them.
+    --
+    -- __Filtering:__ With semantic versioning, you have the flexibility to use
+    -- wildcards (x) to specify the most recent versions or nodes when
+    -- selecting the base image or components for your recipe. When you use a
+    -- wildcard in any node, all nodes to the right of the first wildcard must
+    -- also be wildcards.
+    imageVersionList :: Prelude.Maybe [ImageVersion],
+    -- | The next token used for paginated responses. When this is not empty,
+    -- there are additional elements that the service has not included in this
+    -- request. Use this token with the next request to retrieve additional
+    -- objects.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImagesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageVersionList', 'listImagesResponse_imageVersionList' - The list of image semantic versions.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Filtering:__ With semantic versioning, you have the flexibility to use
+-- wildcards (x) to specify the most recent versions or nodes when
+-- selecting the base image or components for your recipe. When you use a
+-- wildcard in any node, all nodes to the right of the first wildcard must
+-- also be wildcards.
+--
+-- 'nextToken', 'listImagesResponse_nextToken' - The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+--
+-- 'requestId', 'listImagesResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'listImagesResponse_httpStatus' - The response's http status code.
+newListImagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListImagesResponse
+newListImagesResponse pHttpStatus_ =
+  ListImagesResponse'
+    { imageVersionList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of image semantic versions.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Filtering:__ With semantic versioning, you have the flexibility to use
+-- wildcards (x) to specify the most recent versions or nodes when
+-- selecting the base image or components for your recipe. When you use a
+-- wildcard in any node, all nodes to the right of the first wildcard must
+-- also be wildcards.
+listImagesResponse_imageVersionList :: Lens.Lens' ListImagesResponse (Prelude.Maybe [ImageVersion])
+listImagesResponse_imageVersionList = Lens.lens (\ListImagesResponse' {imageVersionList} -> imageVersionList) (\s@ListImagesResponse' {} a -> s {imageVersionList = a} :: ListImagesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+listImagesResponse_nextToken :: Lens.Lens' ListImagesResponse (Prelude.Maybe Prelude.Text)
+listImagesResponse_nextToken = Lens.lens (\ListImagesResponse' {nextToken} -> nextToken) (\s@ListImagesResponse' {} a -> s {nextToken = a} :: ListImagesResponse)
+
+-- | The request ID that uniquely identifies this request.
+listImagesResponse_requestId :: Lens.Lens' ListImagesResponse (Prelude.Maybe Prelude.Text)
+listImagesResponse_requestId = Lens.lens (\ListImagesResponse' {requestId} -> requestId) (\s@ListImagesResponse' {} a -> s {requestId = a} :: ListImagesResponse)
+
+-- | The response's http status code.
+listImagesResponse_httpStatus :: Lens.Lens' ListImagesResponse Prelude.Int
+listImagesResponse_httpStatus = Lens.lens (\ListImagesResponse' {httpStatus} -> httpStatus) (\s@ListImagesResponse' {} a -> s {httpStatus = a} :: ListImagesResponse)
+
+instance Prelude.NFData ListImagesResponse where
+  rnf ListImagesResponse' {..} =
+    Prelude.rnf imageVersionList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/ListInfrastructureConfigurations.hs b/gen/Amazonka/ImageBuilder/ListInfrastructureConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/ListInfrastructureConfigurations.hs
@@ -0,0 +1,255 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.ListInfrastructureConfigurations
+-- 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 infrastructure configurations.
+module Amazonka.ImageBuilder.ListInfrastructureConfigurations
+  ( -- * Creating a Request
+    ListInfrastructureConfigurations (..),
+    newListInfrastructureConfigurations,
+
+    -- * Request Lenses
+    listInfrastructureConfigurations_filters,
+    listInfrastructureConfigurations_maxResults,
+    listInfrastructureConfigurations_nextToken,
+
+    -- * Destructuring the Response
+    ListInfrastructureConfigurationsResponse (..),
+    newListInfrastructureConfigurationsResponse,
+
+    -- * Response Lenses
+    listInfrastructureConfigurationsResponse_infrastructureConfigurationSummaryList,
+    listInfrastructureConfigurationsResponse_nextToken,
+    listInfrastructureConfigurationsResponse_requestId,
+    listInfrastructureConfigurationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListInfrastructureConfigurations' smart constructor.
+data ListInfrastructureConfigurations = ListInfrastructureConfigurations'
+  { -- | You can filter on @name@ to streamline results.
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | The maximum items to return in a request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token to specify where to start paginating. This is the NextToken from
+    -- a previously truncated response.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListInfrastructureConfigurations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listInfrastructureConfigurations_filters' - You can filter on @name@ to streamline results.
+--
+-- 'maxResults', 'listInfrastructureConfigurations_maxResults' - The maximum items to return in a request.
+--
+-- 'nextToken', 'listInfrastructureConfigurations_nextToken' - A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+newListInfrastructureConfigurations ::
+  ListInfrastructureConfigurations
+newListInfrastructureConfigurations =
+  ListInfrastructureConfigurations'
+    { filters =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | You can filter on @name@ to streamline results.
+listInfrastructureConfigurations_filters :: Lens.Lens' ListInfrastructureConfigurations (Prelude.Maybe (Prelude.NonEmpty Filter))
+listInfrastructureConfigurations_filters = Lens.lens (\ListInfrastructureConfigurations' {filters} -> filters) (\s@ListInfrastructureConfigurations' {} a -> s {filters = a} :: ListInfrastructureConfigurations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum items to return in a request.
+listInfrastructureConfigurations_maxResults :: Lens.Lens' ListInfrastructureConfigurations (Prelude.Maybe Prelude.Natural)
+listInfrastructureConfigurations_maxResults = Lens.lens (\ListInfrastructureConfigurations' {maxResults} -> maxResults) (\s@ListInfrastructureConfigurations' {} a -> s {maxResults = a} :: ListInfrastructureConfigurations)
+
+-- | A token to specify where to start paginating. This is the NextToken from
+-- a previously truncated response.
+listInfrastructureConfigurations_nextToken :: Lens.Lens' ListInfrastructureConfigurations (Prelude.Maybe Prelude.Text)
+listInfrastructureConfigurations_nextToken = Lens.lens (\ListInfrastructureConfigurations' {nextToken} -> nextToken) (\s@ListInfrastructureConfigurations' {} a -> s {nextToken = a} :: ListInfrastructureConfigurations)
+
+instance
+  Core.AWSRequest
+    ListInfrastructureConfigurations
+  where
+  type
+    AWSResponse ListInfrastructureConfigurations =
+      ListInfrastructureConfigurationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListInfrastructureConfigurationsResponse'
+            Prelude.<$> ( x
+                            Data..?> "infrastructureConfigurationSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListInfrastructureConfigurations
+  where
+  hashWithSalt
+    _salt
+    ListInfrastructureConfigurations' {..} =
+      _salt
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    ListInfrastructureConfigurations
+  where
+  rnf ListInfrastructureConfigurations' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    ListInfrastructureConfigurations
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListInfrastructureConfigurations where
+  toJSON ListInfrastructureConfigurations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListInfrastructureConfigurations where
+  toPath =
+    Prelude.const "/ListInfrastructureConfigurations"
+
+instance
+  Data.ToQuery
+    ListInfrastructureConfigurations
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListInfrastructureConfigurationsResponse' smart constructor.
+data ListInfrastructureConfigurationsResponse = ListInfrastructureConfigurationsResponse'
+  { -- | The list of infrastructure configurations.
+    infrastructureConfigurationSummaryList :: Prelude.Maybe [InfrastructureConfigurationSummary],
+    -- | The next token used for paginated responses. When this is not empty,
+    -- there are additional elements that the service has not included in this
+    -- request. Use this token with the next request to retrieve additional
+    -- objects.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListInfrastructureConfigurationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'infrastructureConfigurationSummaryList', 'listInfrastructureConfigurationsResponse_infrastructureConfigurationSummaryList' - The list of infrastructure configurations.
+--
+-- 'nextToken', 'listInfrastructureConfigurationsResponse_nextToken' - The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+--
+-- 'requestId', 'listInfrastructureConfigurationsResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'listInfrastructureConfigurationsResponse_httpStatus' - The response's http status code.
+newListInfrastructureConfigurationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListInfrastructureConfigurationsResponse
+newListInfrastructureConfigurationsResponse
+  pHttpStatus_ =
+    ListInfrastructureConfigurationsResponse'
+      { infrastructureConfigurationSummaryList =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        requestId = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The list of infrastructure configurations.
+listInfrastructureConfigurationsResponse_infrastructureConfigurationSummaryList :: Lens.Lens' ListInfrastructureConfigurationsResponse (Prelude.Maybe [InfrastructureConfigurationSummary])
+listInfrastructureConfigurationsResponse_infrastructureConfigurationSummaryList = Lens.lens (\ListInfrastructureConfigurationsResponse' {infrastructureConfigurationSummaryList} -> infrastructureConfigurationSummaryList) (\s@ListInfrastructureConfigurationsResponse' {} a -> s {infrastructureConfigurationSummaryList = a} :: ListInfrastructureConfigurationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next token used for paginated responses. When this is not empty,
+-- there are additional elements that the service has not included in this
+-- request. Use this token with the next request to retrieve additional
+-- objects.
+listInfrastructureConfigurationsResponse_nextToken :: Lens.Lens' ListInfrastructureConfigurationsResponse (Prelude.Maybe Prelude.Text)
+listInfrastructureConfigurationsResponse_nextToken = Lens.lens (\ListInfrastructureConfigurationsResponse' {nextToken} -> nextToken) (\s@ListInfrastructureConfigurationsResponse' {} a -> s {nextToken = a} :: ListInfrastructureConfigurationsResponse)
+
+-- | The request ID that uniquely identifies this request.
+listInfrastructureConfigurationsResponse_requestId :: Lens.Lens' ListInfrastructureConfigurationsResponse (Prelude.Maybe Prelude.Text)
+listInfrastructureConfigurationsResponse_requestId = Lens.lens (\ListInfrastructureConfigurationsResponse' {requestId} -> requestId) (\s@ListInfrastructureConfigurationsResponse' {} a -> s {requestId = a} :: ListInfrastructureConfigurationsResponse)
+
+-- | The response's http status code.
+listInfrastructureConfigurationsResponse_httpStatus :: Lens.Lens' ListInfrastructureConfigurationsResponse Prelude.Int
+listInfrastructureConfigurationsResponse_httpStatus = Lens.lens (\ListInfrastructureConfigurationsResponse' {httpStatus} -> httpStatus) (\s@ListInfrastructureConfigurationsResponse' {} a -> s {httpStatus = a} :: ListInfrastructureConfigurationsResponse)
+
+instance
+  Prelude.NFData
+    ListInfrastructureConfigurationsResponse
+  where
+  rnf ListInfrastructureConfigurationsResponse' {..} =
+    Prelude.rnf infrastructureConfigurationSummaryList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/ListTagsForResource.hs b/gen/Amazonka/ImageBuilder/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/ListTagsForResource.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.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)
+--
+-- Returns the list of tags for the specified resource.
+module Amazonka.ImageBuilder.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) of the resource whose tags you want to
+    -- retrieve.
+    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 whose tags you want to
+-- retrieve.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the resource whose tags you want to
+-- retrieve.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags for the specified resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags for the specified resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags for the specified resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/PutComponentPolicy.hs b/gen/Amazonka/ImageBuilder/PutComponentPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/PutComponentPolicy.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.PutComponentPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Applies a policy to a component. We recommend that you call the RAM API
+-- <https://docs.aws.amazon.com/ram/latest/APIReference/API_CreateResourceShare.html CreateResourceShare>
+-- to share resources. If you call the Image Builder API
+-- @PutComponentPolicy@, you must also call the RAM API
+-- <https://docs.aws.amazon.com/ram/latest/APIReference/API_PromoteResourceShareCreatedFromPolicy.html PromoteResourceShareCreatedFromPolicy>
+-- in order for the resource to be visible to all principals with whom the
+-- resource is shared.
+module Amazonka.ImageBuilder.PutComponentPolicy
+  ( -- * Creating a Request
+    PutComponentPolicy (..),
+    newPutComponentPolicy,
+
+    -- * Request Lenses
+    putComponentPolicy_componentArn,
+    putComponentPolicy_policy,
+
+    -- * Destructuring the Response
+    PutComponentPolicyResponse (..),
+    newPutComponentPolicyResponse,
+
+    -- * Response Lenses
+    putComponentPolicyResponse_componentArn,
+    putComponentPolicyResponse_requestId,
+    putComponentPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutComponentPolicy' smart constructor.
+data PutComponentPolicy = PutComponentPolicy'
+  { -- | The Amazon Resource Name (ARN) of the component that this policy should
+    -- be applied to.
+    componentArn :: Prelude.Text,
+    -- | The policy to apply.
+    policy :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutComponentPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'componentArn', 'putComponentPolicy_componentArn' - The Amazon Resource Name (ARN) of the component that this policy should
+-- be applied to.
+--
+-- 'policy', 'putComponentPolicy_policy' - The policy to apply.
+newPutComponentPolicy ::
+  -- | 'componentArn'
+  Prelude.Text ->
+  -- | 'policy'
+  Prelude.Text ->
+  PutComponentPolicy
+newPutComponentPolicy pComponentArn_ pPolicy_ =
+  PutComponentPolicy'
+    { componentArn = pComponentArn_,
+      policy = pPolicy_
+    }
+
+-- | The Amazon Resource Name (ARN) of the component that this policy should
+-- be applied to.
+putComponentPolicy_componentArn :: Lens.Lens' PutComponentPolicy Prelude.Text
+putComponentPolicy_componentArn = Lens.lens (\PutComponentPolicy' {componentArn} -> componentArn) (\s@PutComponentPolicy' {} a -> s {componentArn = a} :: PutComponentPolicy)
+
+-- | The policy to apply.
+putComponentPolicy_policy :: Lens.Lens' PutComponentPolicy Prelude.Text
+putComponentPolicy_policy = Lens.lens (\PutComponentPolicy' {policy} -> policy) (\s@PutComponentPolicy' {} a -> s {policy = a} :: PutComponentPolicy)
+
+instance Core.AWSRequest PutComponentPolicy where
+  type
+    AWSResponse PutComponentPolicy =
+      PutComponentPolicyResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutComponentPolicyResponse'
+            Prelude.<$> (x Data..?> "componentArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutComponentPolicy where
+  hashWithSalt _salt PutComponentPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` componentArn
+      `Prelude.hashWithSalt` policy
+
+instance Prelude.NFData PutComponentPolicy where
+  rnf PutComponentPolicy' {..} =
+    Prelude.rnf componentArn
+      `Prelude.seq` Prelude.rnf policy
+
+instance Data.ToHeaders PutComponentPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutComponentPolicy where
+  toJSON PutComponentPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("componentArn" Data..= componentArn),
+            Prelude.Just ("policy" Data..= policy)
+          ]
+      )
+
+instance Data.ToPath PutComponentPolicy where
+  toPath = Prelude.const "/PutComponentPolicy"
+
+instance Data.ToQuery PutComponentPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutComponentPolicyResponse' smart constructor.
+data PutComponentPolicyResponse = PutComponentPolicyResponse'
+  { -- | The Amazon Resource Name (ARN) of the component that this policy was
+    -- applied to.
+    componentArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutComponentPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'componentArn', 'putComponentPolicyResponse_componentArn' - The Amazon Resource Name (ARN) of the component that this policy was
+-- applied to.
+--
+-- 'requestId', 'putComponentPolicyResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'putComponentPolicyResponse_httpStatus' - The response's http status code.
+newPutComponentPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutComponentPolicyResponse
+newPutComponentPolicyResponse pHttpStatus_ =
+  PutComponentPolicyResponse'
+    { componentArn =
+        Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the component that this policy was
+-- applied to.
+putComponentPolicyResponse_componentArn :: Lens.Lens' PutComponentPolicyResponse (Prelude.Maybe Prelude.Text)
+putComponentPolicyResponse_componentArn = Lens.lens (\PutComponentPolicyResponse' {componentArn} -> componentArn) (\s@PutComponentPolicyResponse' {} a -> s {componentArn = a} :: PutComponentPolicyResponse)
+
+-- | The request ID that uniquely identifies this request.
+putComponentPolicyResponse_requestId :: Lens.Lens' PutComponentPolicyResponse (Prelude.Maybe Prelude.Text)
+putComponentPolicyResponse_requestId = Lens.lens (\PutComponentPolicyResponse' {requestId} -> requestId) (\s@PutComponentPolicyResponse' {} a -> s {requestId = a} :: PutComponentPolicyResponse)
+
+-- | The response's http status code.
+putComponentPolicyResponse_httpStatus :: Lens.Lens' PutComponentPolicyResponse Prelude.Int
+putComponentPolicyResponse_httpStatus = Lens.lens (\PutComponentPolicyResponse' {httpStatus} -> httpStatus) (\s@PutComponentPolicyResponse' {} a -> s {httpStatus = a} :: PutComponentPolicyResponse)
+
+instance Prelude.NFData PutComponentPolicyResponse where
+  rnf PutComponentPolicyResponse' {..} =
+    Prelude.rnf componentArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/PutContainerRecipePolicy.hs b/gen/Amazonka/ImageBuilder/PutContainerRecipePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/PutContainerRecipePolicy.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.PutContainerRecipePolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Applies a policy to a container image. We recommend that you call the
+-- RAM API CreateResourceShare
+-- (https:\/\/docs.aws.amazon.com\/\/ram\/latest\/APIReference\/API_CreateResourceShare.html)
+-- to share resources. If you call the Image Builder API
+-- @PutContainerImagePolicy@, you must also call the RAM API
+-- PromoteResourceShareCreatedFromPolicy
+-- (https:\/\/docs.aws.amazon.com\/\/ram\/latest\/APIReference\/API_PromoteResourceShareCreatedFromPolicy.html)
+-- in order for the resource to be visible to all principals with whom the
+-- resource is shared.
+module Amazonka.ImageBuilder.PutContainerRecipePolicy
+  ( -- * Creating a Request
+    PutContainerRecipePolicy (..),
+    newPutContainerRecipePolicy,
+
+    -- * Request Lenses
+    putContainerRecipePolicy_containerRecipeArn,
+    putContainerRecipePolicy_policy,
+
+    -- * Destructuring the Response
+    PutContainerRecipePolicyResponse (..),
+    newPutContainerRecipePolicyResponse,
+
+    -- * Response Lenses
+    putContainerRecipePolicyResponse_containerRecipeArn,
+    putContainerRecipePolicyResponse_requestId,
+    putContainerRecipePolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutContainerRecipePolicy' smart constructor.
+data PutContainerRecipePolicy = PutContainerRecipePolicy'
+  { -- | The Amazon Resource Name (ARN) of the container recipe that this policy
+    -- should be applied to.
+    containerRecipeArn :: Prelude.Text,
+    -- | The policy to apply to the container recipe.
+    policy :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutContainerRecipePolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'containerRecipeArn', 'putContainerRecipePolicy_containerRecipeArn' - The Amazon Resource Name (ARN) of the container recipe that this policy
+-- should be applied to.
+--
+-- 'policy', 'putContainerRecipePolicy_policy' - The policy to apply to the container recipe.
+newPutContainerRecipePolicy ::
+  -- | 'containerRecipeArn'
+  Prelude.Text ->
+  -- | 'policy'
+  Prelude.Text ->
+  PutContainerRecipePolicy
+newPutContainerRecipePolicy
+  pContainerRecipeArn_
+  pPolicy_ =
+    PutContainerRecipePolicy'
+      { containerRecipeArn =
+          pContainerRecipeArn_,
+        policy = pPolicy_
+      }
+
+-- | The Amazon Resource Name (ARN) of the container recipe that this policy
+-- should be applied to.
+putContainerRecipePolicy_containerRecipeArn :: Lens.Lens' PutContainerRecipePolicy Prelude.Text
+putContainerRecipePolicy_containerRecipeArn = Lens.lens (\PutContainerRecipePolicy' {containerRecipeArn} -> containerRecipeArn) (\s@PutContainerRecipePolicy' {} a -> s {containerRecipeArn = a} :: PutContainerRecipePolicy)
+
+-- | The policy to apply to the container recipe.
+putContainerRecipePolicy_policy :: Lens.Lens' PutContainerRecipePolicy Prelude.Text
+putContainerRecipePolicy_policy = Lens.lens (\PutContainerRecipePolicy' {policy} -> policy) (\s@PutContainerRecipePolicy' {} a -> s {policy = a} :: PutContainerRecipePolicy)
+
+instance Core.AWSRequest PutContainerRecipePolicy where
+  type
+    AWSResponse PutContainerRecipePolicy =
+      PutContainerRecipePolicyResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutContainerRecipePolicyResponse'
+            Prelude.<$> (x Data..?> "containerRecipeArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutContainerRecipePolicy where
+  hashWithSalt _salt PutContainerRecipePolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` containerRecipeArn
+      `Prelude.hashWithSalt` policy
+
+instance Prelude.NFData PutContainerRecipePolicy where
+  rnf PutContainerRecipePolicy' {..} =
+    Prelude.rnf containerRecipeArn
+      `Prelude.seq` Prelude.rnf policy
+
+instance Data.ToHeaders PutContainerRecipePolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutContainerRecipePolicy where
+  toJSON PutContainerRecipePolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("containerRecipeArn" Data..= containerRecipeArn),
+            Prelude.Just ("policy" Data..= policy)
+          ]
+      )
+
+instance Data.ToPath PutContainerRecipePolicy where
+  toPath = Prelude.const "/PutContainerRecipePolicy"
+
+instance Data.ToQuery PutContainerRecipePolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutContainerRecipePolicyResponse' smart constructor.
+data PutContainerRecipePolicyResponse = PutContainerRecipePolicyResponse'
+  { -- | The Amazon Resource Name (ARN) of the container recipe that this policy
+    -- was applied to.
+    containerRecipeArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutContainerRecipePolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'containerRecipeArn', 'putContainerRecipePolicyResponse_containerRecipeArn' - The Amazon Resource Name (ARN) of the container recipe that this policy
+-- was applied to.
+--
+-- 'requestId', 'putContainerRecipePolicyResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'putContainerRecipePolicyResponse_httpStatus' - The response's http status code.
+newPutContainerRecipePolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutContainerRecipePolicyResponse
+newPutContainerRecipePolicyResponse pHttpStatus_ =
+  PutContainerRecipePolicyResponse'
+    { containerRecipeArn =
+        Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the container recipe that this policy
+-- was applied to.
+putContainerRecipePolicyResponse_containerRecipeArn :: Lens.Lens' PutContainerRecipePolicyResponse (Prelude.Maybe Prelude.Text)
+putContainerRecipePolicyResponse_containerRecipeArn = Lens.lens (\PutContainerRecipePolicyResponse' {containerRecipeArn} -> containerRecipeArn) (\s@PutContainerRecipePolicyResponse' {} a -> s {containerRecipeArn = a} :: PutContainerRecipePolicyResponse)
+
+-- | The request ID that uniquely identifies this request.
+putContainerRecipePolicyResponse_requestId :: Lens.Lens' PutContainerRecipePolicyResponse (Prelude.Maybe Prelude.Text)
+putContainerRecipePolicyResponse_requestId = Lens.lens (\PutContainerRecipePolicyResponse' {requestId} -> requestId) (\s@PutContainerRecipePolicyResponse' {} a -> s {requestId = a} :: PutContainerRecipePolicyResponse)
+
+-- | The response's http status code.
+putContainerRecipePolicyResponse_httpStatus :: Lens.Lens' PutContainerRecipePolicyResponse Prelude.Int
+putContainerRecipePolicyResponse_httpStatus = Lens.lens (\PutContainerRecipePolicyResponse' {httpStatus} -> httpStatus) (\s@PutContainerRecipePolicyResponse' {} a -> s {httpStatus = a} :: PutContainerRecipePolicyResponse)
+
+instance
+  Prelude.NFData
+    PutContainerRecipePolicyResponse
+  where
+  rnf PutContainerRecipePolicyResponse' {..} =
+    Prelude.rnf containerRecipeArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/PutImagePolicy.hs b/gen/Amazonka/ImageBuilder/PutImagePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/PutImagePolicy.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.PutImagePolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Applies a policy to an image. We recommend that you call the RAM API
+-- <https://docs.aws.amazon.com/ram/latest/APIReference/API_CreateResourceShare.html CreateResourceShare>
+-- to share resources. If you call the Image Builder API @PutImagePolicy@,
+-- you must also call the RAM API
+-- <https://docs.aws.amazon.com/ram/latest/APIReference/API_PromoteResourceShareCreatedFromPolicy.html PromoteResourceShareCreatedFromPolicy>
+-- in order for the resource to be visible to all principals with whom the
+-- resource is shared.
+module Amazonka.ImageBuilder.PutImagePolicy
+  ( -- * Creating a Request
+    PutImagePolicy (..),
+    newPutImagePolicy,
+
+    -- * Request Lenses
+    putImagePolicy_imageArn,
+    putImagePolicy_policy,
+
+    -- * Destructuring the Response
+    PutImagePolicyResponse (..),
+    newPutImagePolicyResponse,
+
+    -- * Response Lenses
+    putImagePolicyResponse_imageArn,
+    putImagePolicyResponse_requestId,
+    putImagePolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutImagePolicy' smart constructor.
+data PutImagePolicy = PutImagePolicy'
+  { -- | The Amazon Resource Name (ARN) of the image that this policy should be
+    -- applied to.
+    imageArn :: Prelude.Text,
+    -- | The policy to apply.
+    policy :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutImagePolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageArn', 'putImagePolicy_imageArn' - The Amazon Resource Name (ARN) of the image that this policy should be
+-- applied to.
+--
+-- 'policy', 'putImagePolicy_policy' - The policy to apply.
+newPutImagePolicy ::
+  -- | 'imageArn'
+  Prelude.Text ->
+  -- | 'policy'
+  Prelude.Text ->
+  PutImagePolicy
+newPutImagePolicy pImageArn_ pPolicy_ =
+  PutImagePolicy'
+    { imageArn = pImageArn_,
+      policy = pPolicy_
+    }
+
+-- | The Amazon Resource Name (ARN) of the image that this policy should be
+-- applied to.
+putImagePolicy_imageArn :: Lens.Lens' PutImagePolicy Prelude.Text
+putImagePolicy_imageArn = Lens.lens (\PutImagePolicy' {imageArn} -> imageArn) (\s@PutImagePolicy' {} a -> s {imageArn = a} :: PutImagePolicy)
+
+-- | The policy to apply.
+putImagePolicy_policy :: Lens.Lens' PutImagePolicy Prelude.Text
+putImagePolicy_policy = Lens.lens (\PutImagePolicy' {policy} -> policy) (\s@PutImagePolicy' {} a -> s {policy = a} :: PutImagePolicy)
+
+instance Core.AWSRequest PutImagePolicy where
+  type
+    AWSResponse PutImagePolicy =
+      PutImagePolicyResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutImagePolicyResponse'
+            Prelude.<$> (x Data..?> "imageArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutImagePolicy where
+  hashWithSalt _salt PutImagePolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` imageArn
+      `Prelude.hashWithSalt` policy
+
+instance Prelude.NFData PutImagePolicy where
+  rnf PutImagePolicy' {..} =
+    Prelude.rnf imageArn
+      `Prelude.seq` Prelude.rnf policy
+
+instance Data.ToHeaders PutImagePolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutImagePolicy where
+  toJSON PutImagePolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("imageArn" Data..= imageArn),
+            Prelude.Just ("policy" Data..= policy)
+          ]
+      )
+
+instance Data.ToPath PutImagePolicy where
+  toPath = Prelude.const "/PutImagePolicy"
+
+instance Data.ToQuery PutImagePolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutImagePolicyResponse' smart constructor.
+data PutImagePolicyResponse = PutImagePolicyResponse'
+  { -- | The Amazon Resource Name (ARN) of the image that this policy was applied
+    -- to.
+    imageArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutImagePolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageArn', 'putImagePolicyResponse_imageArn' - The Amazon Resource Name (ARN) of the image that this policy was applied
+-- to.
+--
+-- 'requestId', 'putImagePolicyResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'putImagePolicyResponse_httpStatus' - The response's http status code.
+newPutImagePolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutImagePolicyResponse
+newPutImagePolicyResponse pHttpStatus_ =
+  PutImagePolicyResponse'
+    { imageArn = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the image that this policy was applied
+-- to.
+putImagePolicyResponse_imageArn :: Lens.Lens' PutImagePolicyResponse (Prelude.Maybe Prelude.Text)
+putImagePolicyResponse_imageArn = Lens.lens (\PutImagePolicyResponse' {imageArn} -> imageArn) (\s@PutImagePolicyResponse' {} a -> s {imageArn = a} :: PutImagePolicyResponse)
+
+-- | The request ID that uniquely identifies this request.
+putImagePolicyResponse_requestId :: Lens.Lens' PutImagePolicyResponse (Prelude.Maybe Prelude.Text)
+putImagePolicyResponse_requestId = Lens.lens (\PutImagePolicyResponse' {requestId} -> requestId) (\s@PutImagePolicyResponse' {} a -> s {requestId = a} :: PutImagePolicyResponse)
+
+-- | The response's http status code.
+putImagePolicyResponse_httpStatus :: Lens.Lens' PutImagePolicyResponse Prelude.Int
+putImagePolicyResponse_httpStatus = Lens.lens (\PutImagePolicyResponse' {httpStatus} -> httpStatus) (\s@PutImagePolicyResponse' {} a -> s {httpStatus = a} :: PutImagePolicyResponse)
+
+instance Prelude.NFData PutImagePolicyResponse where
+  rnf PutImagePolicyResponse' {..} =
+    Prelude.rnf imageArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/PutImageRecipePolicy.hs b/gen/Amazonka/ImageBuilder/PutImageRecipePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/PutImageRecipePolicy.hs
@@ -0,0 +1,211 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.PutImageRecipePolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Applies a policy to an image recipe. We recommend that you call the RAM
+-- API
+-- <https://docs.aws.amazon.com/ram/latest/APIReference/API_CreateResourceShare.html CreateResourceShare>
+-- to share resources. If you call the Image Builder API
+-- @PutImageRecipePolicy@, you must also call the RAM API
+-- <https://docs.aws.amazon.com/ram/latest/APIReference/API_PromoteResourceShareCreatedFromPolicy.html PromoteResourceShareCreatedFromPolicy>
+-- in order for the resource to be visible to all principals with whom the
+-- resource is shared.
+module Amazonka.ImageBuilder.PutImageRecipePolicy
+  ( -- * Creating a Request
+    PutImageRecipePolicy (..),
+    newPutImageRecipePolicy,
+
+    -- * Request Lenses
+    putImageRecipePolicy_imageRecipeArn,
+    putImageRecipePolicy_policy,
+
+    -- * Destructuring the Response
+    PutImageRecipePolicyResponse (..),
+    newPutImageRecipePolicyResponse,
+
+    -- * Response Lenses
+    putImageRecipePolicyResponse_imageRecipeArn,
+    putImageRecipePolicyResponse_requestId,
+    putImageRecipePolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutImageRecipePolicy' smart constructor.
+data PutImageRecipePolicy = PutImageRecipePolicy'
+  { -- | The Amazon Resource Name (ARN) of the image recipe that this policy
+    -- should be applied to.
+    imageRecipeArn :: Prelude.Text,
+    -- | The policy to apply.
+    policy :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutImageRecipePolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageRecipeArn', 'putImageRecipePolicy_imageRecipeArn' - The Amazon Resource Name (ARN) of the image recipe that this policy
+-- should be applied to.
+--
+-- 'policy', 'putImageRecipePolicy_policy' - The policy to apply.
+newPutImageRecipePolicy ::
+  -- | 'imageRecipeArn'
+  Prelude.Text ->
+  -- | 'policy'
+  Prelude.Text ->
+  PutImageRecipePolicy
+newPutImageRecipePolicy pImageRecipeArn_ pPolicy_ =
+  PutImageRecipePolicy'
+    { imageRecipeArn =
+        pImageRecipeArn_,
+      policy = pPolicy_
+    }
+
+-- | The Amazon Resource Name (ARN) of the image recipe that this policy
+-- should be applied to.
+putImageRecipePolicy_imageRecipeArn :: Lens.Lens' PutImageRecipePolicy Prelude.Text
+putImageRecipePolicy_imageRecipeArn = Lens.lens (\PutImageRecipePolicy' {imageRecipeArn} -> imageRecipeArn) (\s@PutImageRecipePolicy' {} a -> s {imageRecipeArn = a} :: PutImageRecipePolicy)
+
+-- | The policy to apply.
+putImageRecipePolicy_policy :: Lens.Lens' PutImageRecipePolicy Prelude.Text
+putImageRecipePolicy_policy = Lens.lens (\PutImageRecipePolicy' {policy} -> policy) (\s@PutImageRecipePolicy' {} a -> s {policy = a} :: PutImageRecipePolicy)
+
+instance Core.AWSRequest PutImageRecipePolicy where
+  type
+    AWSResponse PutImageRecipePolicy =
+      PutImageRecipePolicyResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutImageRecipePolicyResponse'
+            Prelude.<$> (x Data..?> "imageRecipeArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutImageRecipePolicy where
+  hashWithSalt _salt PutImageRecipePolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` imageRecipeArn
+      `Prelude.hashWithSalt` policy
+
+instance Prelude.NFData PutImageRecipePolicy where
+  rnf PutImageRecipePolicy' {..} =
+    Prelude.rnf imageRecipeArn
+      `Prelude.seq` Prelude.rnf policy
+
+instance Data.ToHeaders PutImageRecipePolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutImageRecipePolicy where
+  toJSON PutImageRecipePolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("imageRecipeArn" Data..= imageRecipeArn),
+            Prelude.Just ("policy" Data..= policy)
+          ]
+      )
+
+instance Data.ToPath PutImageRecipePolicy where
+  toPath = Prelude.const "/PutImageRecipePolicy"
+
+instance Data.ToQuery PutImageRecipePolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutImageRecipePolicyResponse' smart constructor.
+data PutImageRecipePolicyResponse = PutImageRecipePolicyResponse'
+  { -- | The Amazon Resource Name (ARN) of the image recipe that this policy was
+    -- applied to.
+    imageRecipeArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutImageRecipePolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageRecipeArn', 'putImageRecipePolicyResponse_imageRecipeArn' - The Amazon Resource Name (ARN) of the image recipe that this policy was
+-- applied to.
+--
+-- 'requestId', 'putImageRecipePolicyResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'putImageRecipePolicyResponse_httpStatus' - The response's http status code.
+newPutImageRecipePolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutImageRecipePolicyResponse
+newPutImageRecipePolicyResponse pHttpStatus_ =
+  PutImageRecipePolicyResponse'
+    { imageRecipeArn =
+        Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the image recipe that this policy was
+-- applied to.
+putImageRecipePolicyResponse_imageRecipeArn :: Lens.Lens' PutImageRecipePolicyResponse (Prelude.Maybe Prelude.Text)
+putImageRecipePolicyResponse_imageRecipeArn = Lens.lens (\PutImageRecipePolicyResponse' {imageRecipeArn} -> imageRecipeArn) (\s@PutImageRecipePolicyResponse' {} a -> s {imageRecipeArn = a} :: PutImageRecipePolicyResponse)
+
+-- | The request ID that uniquely identifies this request.
+putImageRecipePolicyResponse_requestId :: Lens.Lens' PutImageRecipePolicyResponse (Prelude.Maybe Prelude.Text)
+putImageRecipePolicyResponse_requestId = Lens.lens (\PutImageRecipePolicyResponse' {requestId} -> requestId) (\s@PutImageRecipePolicyResponse' {} a -> s {requestId = a} :: PutImageRecipePolicyResponse)
+
+-- | The response's http status code.
+putImageRecipePolicyResponse_httpStatus :: Lens.Lens' PutImageRecipePolicyResponse Prelude.Int
+putImageRecipePolicyResponse_httpStatus = Lens.lens (\PutImageRecipePolicyResponse' {httpStatus} -> httpStatus) (\s@PutImageRecipePolicyResponse' {} a -> s {httpStatus = a} :: PutImageRecipePolicyResponse)
+
+instance Prelude.NFData PutImageRecipePolicyResponse where
+  rnf PutImageRecipePolicyResponse' {..} =
+    Prelude.rnf imageRecipeArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/StartImagePipelineExecution.hs b/gen/Amazonka/ImageBuilder/StartImagePipelineExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/StartImagePipelineExecution.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.ImageBuilder.StartImagePipelineExecution
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Manually triggers a pipeline to create an image.
+module Amazonka.ImageBuilder.StartImagePipelineExecution
+  ( -- * Creating a Request
+    StartImagePipelineExecution (..),
+    newStartImagePipelineExecution,
+
+    -- * Request Lenses
+    startImagePipelineExecution_imagePipelineArn,
+    startImagePipelineExecution_clientToken,
+
+    -- * Destructuring the Response
+    StartImagePipelineExecutionResponse (..),
+    newStartImagePipelineExecutionResponse,
+
+    -- * Response Lenses
+    startImagePipelineExecutionResponse_clientToken,
+    startImagePipelineExecutionResponse_imageBuildVersionArn,
+    startImagePipelineExecutionResponse_requestId,
+    startImagePipelineExecutionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartImagePipelineExecution' smart constructor.
+data StartImagePipelineExecution = StartImagePipelineExecution'
+  { -- | The Amazon Resource Name (ARN) of the image pipeline that you want to
+    -- manually invoke.
+    imagePipelineArn :: Prelude.Text,
+    -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartImagePipelineExecution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imagePipelineArn', 'startImagePipelineExecution_imagePipelineArn' - The Amazon Resource Name (ARN) of the image pipeline that you want to
+-- manually invoke.
+--
+-- 'clientToken', 'startImagePipelineExecution_clientToken' - The idempotency token used to make this request idempotent.
+newStartImagePipelineExecution ::
+  -- | 'imagePipelineArn'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  StartImagePipelineExecution
+newStartImagePipelineExecution
+  pImagePipelineArn_
+  pClientToken_ =
+    StartImagePipelineExecution'
+      { imagePipelineArn =
+          pImagePipelineArn_,
+        clientToken = pClientToken_
+      }
+
+-- | The Amazon Resource Name (ARN) of the image pipeline that you want to
+-- manually invoke.
+startImagePipelineExecution_imagePipelineArn :: Lens.Lens' StartImagePipelineExecution Prelude.Text
+startImagePipelineExecution_imagePipelineArn = Lens.lens (\StartImagePipelineExecution' {imagePipelineArn} -> imagePipelineArn) (\s@StartImagePipelineExecution' {} a -> s {imagePipelineArn = a} :: StartImagePipelineExecution)
+
+-- | The idempotency token used to make this request idempotent.
+startImagePipelineExecution_clientToken :: Lens.Lens' StartImagePipelineExecution Prelude.Text
+startImagePipelineExecution_clientToken = Lens.lens (\StartImagePipelineExecution' {clientToken} -> clientToken) (\s@StartImagePipelineExecution' {} a -> s {clientToken = a} :: StartImagePipelineExecution)
+
+instance Core.AWSRequest StartImagePipelineExecution where
+  type
+    AWSResponse StartImagePipelineExecution =
+      StartImagePipelineExecutionResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartImagePipelineExecutionResponse'
+            Prelude.<$> (x Data..?> "clientToken")
+            Prelude.<*> (x Data..?> "imageBuildVersionArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartImagePipelineExecution where
+  hashWithSalt _salt StartImagePipelineExecution' {..} =
+    _salt
+      `Prelude.hashWithSalt` imagePipelineArn
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData StartImagePipelineExecution where
+  rnf StartImagePipelineExecution' {..} =
+    Prelude.rnf imagePipelineArn
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance Data.ToHeaders StartImagePipelineExecution where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartImagePipelineExecution where
+  toJSON StartImagePipelineExecution' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("imagePipelineArn" Data..= imagePipelineArn),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance Data.ToPath StartImagePipelineExecution where
+  toPath = Prelude.const "/StartImagePipelineExecution"
+
+instance Data.ToQuery StartImagePipelineExecution where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartImagePipelineExecutionResponse' smart constructor.
+data StartImagePipelineExecutionResponse = StartImagePipelineExecutionResponse'
+  { -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the image that was created by this
+    -- request.
+    imageBuildVersionArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartImagePipelineExecutionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'startImagePipelineExecutionResponse_clientToken' - The idempotency token used to make this request idempotent.
+--
+-- 'imageBuildVersionArn', 'startImagePipelineExecutionResponse_imageBuildVersionArn' - The Amazon Resource Name (ARN) of the image that was created by this
+-- request.
+--
+-- 'requestId', 'startImagePipelineExecutionResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'startImagePipelineExecutionResponse_httpStatus' - The response's http status code.
+newStartImagePipelineExecutionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartImagePipelineExecutionResponse
+newStartImagePipelineExecutionResponse pHttpStatus_ =
+  StartImagePipelineExecutionResponse'
+    { clientToken =
+        Prelude.Nothing,
+      imageBuildVersionArn = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The idempotency token used to make this request idempotent.
+startImagePipelineExecutionResponse_clientToken :: Lens.Lens' StartImagePipelineExecutionResponse (Prelude.Maybe Prelude.Text)
+startImagePipelineExecutionResponse_clientToken = Lens.lens (\StartImagePipelineExecutionResponse' {clientToken} -> clientToken) (\s@StartImagePipelineExecutionResponse' {} a -> s {clientToken = a} :: StartImagePipelineExecutionResponse)
+
+-- | The Amazon Resource Name (ARN) of the image that was created by this
+-- request.
+startImagePipelineExecutionResponse_imageBuildVersionArn :: Lens.Lens' StartImagePipelineExecutionResponse (Prelude.Maybe Prelude.Text)
+startImagePipelineExecutionResponse_imageBuildVersionArn = Lens.lens (\StartImagePipelineExecutionResponse' {imageBuildVersionArn} -> imageBuildVersionArn) (\s@StartImagePipelineExecutionResponse' {} a -> s {imageBuildVersionArn = a} :: StartImagePipelineExecutionResponse)
+
+-- | The request ID that uniquely identifies this request.
+startImagePipelineExecutionResponse_requestId :: Lens.Lens' StartImagePipelineExecutionResponse (Prelude.Maybe Prelude.Text)
+startImagePipelineExecutionResponse_requestId = Lens.lens (\StartImagePipelineExecutionResponse' {requestId} -> requestId) (\s@StartImagePipelineExecutionResponse' {} a -> s {requestId = a} :: StartImagePipelineExecutionResponse)
+
+-- | The response's http status code.
+startImagePipelineExecutionResponse_httpStatus :: Lens.Lens' StartImagePipelineExecutionResponse Prelude.Int
+startImagePipelineExecutionResponse_httpStatus = Lens.lens (\StartImagePipelineExecutionResponse' {httpStatus} -> httpStatus) (\s@StartImagePipelineExecutionResponse' {} a -> s {httpStatus = a} :: StartImagePipelineExecutionResponse)
+
+instance
+  Prelude.NFData
+    StartImagePipelineExecutionResponse
+  where
+  rnf StartImagePipelineExecutionResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf imageBuildVersionArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/TagResource.hs b/gen/Amazonka/ImageBuilder/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/TagResource.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.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)
+--
+-- Adds a tag to a resource.
+module Amazonka.ImageBuilder.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource that you want to tag.
+    resourceArn :: Prelude.Text,
+    -- | The tags to apply to the resource.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource that you want to tag.
+--
+-- 'tags', 'tagResource_tags' - The tags to apply to the resource.
+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 tag.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The tags to apply to the resource.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/Types.hs b/gen/Amazonka/ImageBuilder/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types.hs
@@ -0,0 +1,816 @@
+{-# 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.ImageBuilder.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.ImageBuilder.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _CallRateLimitExceededException,
+    _ClientException,
+    _ForbiddenException,
+    _IdempotentParameterMismatchException,
+    _InvalidPaginationTokenException,
+    _InvalidParameterCombinationException,
+    _InvalidParameterException,
+    _InvalidParameterValueException,
+    _InvalidRequestException,
+    _InvalidVersionNumberException,
+    _ResourceAlreadyExistsException,
+    _ResourceDependencyException,
+    _ResourceInUseException,
+    _ResourceNotFoundException,
+    _ServiceException,
+    _ServiceQuotaExceededException,
+    _ServiceUnavailableException,
+
+    -- * BuildType
+    BuildType (..),
+
+    -- * ComponentFormat
+    ComponentFormat (..),
+
+    -- * ComponentStatus
+    ComponentStatus (..),
+
+    -- * ComponentType
+    ComponentType (..),
+
+    -- * ContainerRepositoryService
+    ContainerRepositoryService (..),
+
+    -- * ContainerType
+    ContainerType (..),
+
+    -- * DiskImageFormat
+    DiskImageFormat (..),
+
+    -- * EbsVolumeType
+    EbsVolumeType (..),
+
+    -- * ImageStatus
+    ImageStatus (..),
+
+    -- * ImageType
+    ImageType (..),
+
+    -- * Ownership
+    Ownership (..),
+
+    -- * PipelineExecutionStartCondition
+    PipelineExecutionStartCondition (..),
+
+    -- * PipelineStatus
+    PipelineStatus (..),
+
+    -- * Platform
+    Platform (..),
+
+    -- * AdditionalInstanceConfiguration
+    AdditionalInstanceConfiguration (..),
+    newAdditionalInstanceConfiguration,
+    additionalInstanceConfiguration_systemsManagerAgent,
+    additionalInstanceConfiguration_userDataOverride,
+
+    -- * Ami
+    Ami (..),
+    newAmi,
+    ami_accountId,
+    ami_description,
+    ami_image,
+    ami_name,
+    ami_region,
+    ami_state,
+
+    -- * AmiDistributionConfiguration
+    AmiDistributionConfiguration (..),
+    newAmiDistributionConfiguration,
+    amiDistributionConfiguration_amiTags,
+    amiDistributionConfiguration_description,
+    amiDistributionConfiguration_kmsKeyId,
+    amiDistributionConfiguration_launchPermission,
+    amiDistributionConfiguration_name,
+    amiDistributionConfiguration_targetAccountIds,
+
+    -- * Component
+    Component (..),
+    newComponent,
+    component_arn,
+    component_changeDescription,
+    component_data,
+    component_dateCreated,
+    component_description,
+    component_encrypted,
+    component_kmsKeyId,
+    component_name,
+    component_owner,
+    component_parameters,
+    component_platform,
+    component_state,
+    component_supportedOsVersions,
+    component_tags,
+    component_type,
+    component_version,
+
+    -- * ComponentConfiguration
+    ComponentConfiguration (..),
+    newComponentConfiguration,
+    componentConfiguration_parameters,
+    componentConfiguration_componentArn,
+
+    -- * ComponentParameter
+    ComponentParameter (..),
+    newComponentParameter,
+    componentParameter_name,
+    componentParameter_value,
+
+    -- * ComponentParameterDetail
+    ComponentParameterDetail (..),
+    newComponentParameterDetail,
+    componentParameterDetail_defaultValue,
+    componentParameterDetail_description,
+    componentParameterDetail_name,
+    componentParameterDetail_type,
+
+    -- * ComponentState
+    ComponentState (..),
+    newComponentState,
+    componentState_reason,
+    componentState_status,
+
+    -- * ComponentSummary
+    ComponentSummary (..),
+    newComponentSummary,
+    componentSummary_arn,
+    componentSummary_changeDescription,
+    componentSummary_dateCreated,
+    componentSummary_description,
+    componentSummary_name,
+    componentSummary_owner,
+    componentSummary_platform,
+    componentSummary_state,
+    componentSummary_supportedOsVersions,
+    componentSummary_tags,
+    componentSummary_type,
+    componentSummary_version,
+
+    -- * ComponentVersion
+    ComponentVersion (..),
+    newComponentVersion,
+    componentVersion_arn,
+    componentVersion_dateCreated,
+    componentVersion_description,
+    componentVersion_name,
+    componentVersion_owner,
+    componentVersion_platform,
+    componentVersion_supportedOsVersions,
+    componentVersion_type,
+    componentVersion_version,
+
+    -- * Container
+    Container (..),
+    newContainer,
+    container_imageUris,
+    container_region,
+
+    -- * ContainerDistributionConfiguration
+    ContainerDistributionConfiguration (..),
+    newContainerDistributionConfiguration,
+    containerDistributionConfiguration_containerTags,
+    containerDistributionConfiguration_description,
+    containerDistributionConfiguration_targetRepository,
+
+    -- * ContainerRecipe
+    ContainerRecipe (..),
+    newContainerRecipe,
+    containerRecipe_arn,
+    containerRecipe_components,
+    containerRecipe_containerType,
+    containerRecipe_dateCreated,
+    containerRecipe_description,
+    containerRecipe_dockerfileTemplateData,
+    containerRecipe_encrypted,
+    containerRecipe_instanceConfiguration,
+    containerRecipe_kmsKeyId,
+    containerRecipe_name,
+    containerRecipe_owner,
+    containerRecipe_parentImage,
+    containerRecipe_platform,
+    containerRecipe_tags,
+    containerRecipe_targetRepository,
+    containerRecipe_version,
+    containerRecipe_workingDirectory,
+
+    -- * ContainerRecipeSummary
+    ContainerRecipeSummary (..),
+    newContainerRecipeSummary,
+    containerRecipeSummary_arn,
+    containerRecipeSummary_containerType,
+    containerRecipeSummary_dateCreated,
+    containerRecipeSummary_name,
+    containerRecipeSummary_owner,
+    containerRecipeSummary_parentImage,
+    containerRecipeSummary_platform,
+    containerRecipeSummary_tags,
+
+    -- * Distribution
+    Distribution (..),
+    newDistribution,
+    distribution_amiDistributionConfiguration,
+    distribution_containerDistributionConfiguration,
+    distribution_fastLaunchConfigurations,
+    distribution_launchTemplateConfigurations,
+    distribution_licenseConfigurationArns,
+    distribution_s3ExportConfiguration,
+    distribution_region,
+
+    -- * DistributionConfiguration
+    DistributionConfiguration (..),
+    newDistributionConfiguration,
+    distributionConfiguration_arn,
+    distributionConfiguration_dateCreated,
+    distributionConfiguration_dateUpdated,
+    distributionConfiguration_description,
+    distributionConfiguration_distributions,
+    distributionConfiguration_name,
+    distributionConfiguration_tags,
+    distributionConfiguration_timeoutMinutes,
+
+    -- * DistributionConfigurationSummary
+    DistributionConfigurationSummary (..),
+    newDistributionConfigurationSummary,
+    distributionConfigurationSummary_arn,
+    distributionConfigurationSummary_dateCreated,
+    distributionConfigurationSummary_dateUpdated,
+    distributionConfigurationSummary_description,
+    distributionConfigurationSummary_name,
+    distributionConfigurationSummary_regions,
+    distributionConfigurationSummary_tags,
+
+    -- * EbsInstanceBlockDeviceSpecification
+    EbsInstanceBlockDeviceSpecification (..),
+    newEbsInstanceBlockDeviceSpecification,
+    ebsInstanceBlockDeviceSpecification_deleteOnTermination,
+    ebsInstanceBlockDeviceSpecification_encrypted,
+    ebsInstanceBlockDeviceSpecification_iops,
+    ebsInstanceBlockDeviceSpecification_kmsKeyId,
+    ebsInstanceBlockDeviceSpecification_snapshotId,
+    ebsInstanceBlockDeviceSpecification_throughput,
+    ebsInstanceBlockDeviceSpecification_volumeSize,
+    ebsInstanceBlockDeviceSpecification_volumeType,
+
+    -- * FastLaunchConfiguration
+    FastLaunchConfiguration (..),
+    newFastLaunchConfiguration,
+    fastLaunchConfiguration_accountId,
+    fastLaunchConfiguration_launchTemplate,
+    fastLaunchConfiguration_maxParallelLaunches,
+    fastLaunchConfiguration_snapshotConfiguration,
+    fastLaunchConfiguration_enabled,
+
+    -- * FastLaunchLaunchTemplateSpecification
+    FastLaunchLaunchTemplateSpecification (..),
+    newFastLaunchLaunchTemplateSpecification,
+    fastLaunchLaunchTemplateSpecification_launchTemplateId,
+    fastLaunchLaunchTemplateSpecification_launchTemplateName,
+    fastLaunchLaunchTemplateSpecification_launchTemplateVersion,
+
+    -- * FastLaunchSnapshotConfiguration
+    FastLaunchSnapshotConfiguration (..),
+    newFastLaunchSnapshotConfiguration,
+    fastLaunchSnapshotConfiguration_targetResourceCount,
+
+    -- * Filter
+    Filter (..),
+    newFilter,
+    filter_name,
+    filter_values,
+
+    -- * Image
+    Image (..),
+    newImage,
+    image_arn,
+    image_buildType,
+    image_containerRecipe,
+    image_dateCreated,
+    image_distributionConfiguration,
+    image_enhancedImageMetadataEnabled,
+    image_imageRecipe,
+    image_imageTestsConfiguration,
+    image_infrastructureConfiguration,
+    image_name,
+    image_osVersion,
+    image_outputResources,
+    image_platform,
+    image_sourcePipelineArn,
+    image_sourcePipelineName,
+    image_state,
+    image_tags,
+    image_type,
+    image_version,
+
+    -- * ImagePackage
+    ImagePackage (..),
+    newImagePackage,
+    imagePackage_packageName,
+    imagePackage_packageVersion,
+
+    -- * ImagePipeline
+    ImagePipeline (..),
+    newImagePipeline,
+    imagePipeline_arn,
+    imagePipeline_containerRecipeArn,
+    imagePipeline_dateCreated,
+    imagePipeline_dateLastRun,
+    imagePipeline_dateNextRun,
+    imagePipeline_dateUpdated,
+    imagePipeline_description,
+    imagePipeline_distributionConfigurationArn,
+    imagePipeline_enhancedImageMetadataEnabled,
+    imagePipeline_imageRecipeArn,
+    imagePipeline_imageTestsConfiguration,
+    imagePipeline_infrastructureConfigurationArn,
+    imagePipeline_name,
+    imagePipeline_platform,
+    imagePipeline_schedule,
+    imagePipeline_status,
+    imagePipeline_tags,
+
+    -- * ImageRecipe
+    ImageRecipe (..),
+    newImageRecipe,
+    imageRecipe_additionalInstanceConfiguration,
+    imageRecipe_arn,
+    imageRecipe_blockDeviceMappings,
+    imageRecipe_components,
+    imageRecipe_dateCreated,
+    imageRecipe_description,
+    imageRecipe_name,
+    imageRecipe_owner,
+    imageRecipe_parentImage,
+    imageRecipe_platform,
+    imageRecipe_tags,
+    imageRecipe_type,
+    imageRecipe_version,
+    imageRecipe_workingDirectory,
+
+    -- * ImageRecipeSummary
+    ImageRecipeSummary (..),
+    newImageRecipeSummary,
+    imageRecipeSummary_arn,
+    imageRecipeSummary_dateCreated,
+    imageRecipeSummary_name,
+    imageRecipeSummary_owner,
+    imageRecipeSummary_parentImage,
+    imageRecipeSummary_platform,
+    imageRecipeSummary_tags,
+
+    -- * ImageState
+    ImageState (..),
+    newImageState,
+    imageState_reason,
+    imageState_status,
+
+    -- * ImageSummary
+    ImageSummary (..),
+    newImageSummary,
+    imageSummary_arn,
+    imageSummary_buildType,
+    imageSummary_dateCreated,
+    imageSummary_name,
+    imageSummary_osVersion,
+    imageSummary_outputResources,
+    imageSummary_owner,
+    imageSummary_platform,
+    imageSummary_state,
+    imageSummary_tags,
+    imageSummary_type,
+    imageSummary_version,
+
+    -- * ImageTestsConfiguration
+    ImageTestsConfiguration (..),
+    newImageTestsConfiguration,
+    imageTestsConfiguration_imageTestsEnabled,
+    imageTestsConfiguration_timeoutMinutes,
+
+    -- * ImageVersion
+    ImageVersion (..),
+    newImageVersion,
+    imageVersion_arn,
+    imageVersion_buildType,
+    imageVersion_dateCreated,
+    imageVersion_name,
+    imageVersion_osVersion,
+    imageVersion_owner,
+    imageVersion_platform,
+    imageVersion_type,
+    imageVersion_version,
+
+    -- * InfrastructureConfiguration
+    InfrastructureConfiguration (..),
+    newInfrastructureConfiguration,
+    infrastructureConfiguration_arn,
+    infrastructureConfiguration_dateCreated,
+    infrastructureConfiguration_dateUpdated,
+    infrastructureConfiguration_description,
+    infrastructureConfiguration_instanceMetadataOptions,
+    infrastructureConfiguration_instanceProfileName,
+    infrastructureConfiguration_instanceTypes,
+    infrastructureConfiguration_keyPair,
+    infrastructureConfiguration_logging,
+    infrastructureConfiguration_name,
+    infrastructureConfiguration_resourceTags,
+    infrastructureConfiguration_securityGroupIds,
+    infrastructureConfiguration_snsTopicArn,
+    infrastructureConfiguration_subnetId,
+    infrastructureConfiguration_tags,
+    infrastructureConfiguration_terminateInstanceOnFailure,
+
+    -- * InfrastructureConfigurationSummary
+    InfrastructureConfigurationSummary (..),
+    newInfrastructureConfigurationSummary,
+    infrastructureConfigurationSummary_arn,
+    infrastructureConfigurationSummary_dateCreated,
+    infrastructureConfigurationSummary_dateUpdated,
+    infrastructureConfigurationSummary_description,
+    infrastructureConfigurationSummary_instanceProfileName,
+    infrastructureConfigurationSummary_instanceTypes,
+    infrastructureConfigurationSummary_name,
+    infrastructureConfigurationSummary_resourceTags,
+    infrastructureConfigurationSummary_tags,
+
+    -- * InstanceBlockDeviceMapping
+    InstanceBlockDeviceMapping (..),
+    newInstanceBlockDeviceMapping,
+    instanceBlockDeviceMapping_deviceName,
+    instanceBlockDeviceMapping_ebs,
+    instanceBlockDeviceMapping_noDevice,
+    instanceBlockDeviceMapping_virtualName,
+
+    -- * InstanceConfiguration
+    InstanceConfiguration (..),
+    newInstanceConfiguration,
+    instanceConfiguration_blockDeviceMappings,
+    instanceConfiguration_image,
+
+    -- * InstanceMetadataOptions
+    InstanceMetadataOptions (..),
+    newInstanceMetadataOptions,
+    instanceMetadataOptions_httpPutResponseHopLimit,
+    instanceMetadataOptions_httpTokens,
+
+    -- * LaunchPermissionConfiguration
+    LaunchPermissionConfiguration (..),
+    newLaunchPermissionConfiguration,
+    launchPermissionConfiguration_organizationArns,
+    launchPermissionConfiguration_organizationalUnitArns,
+    launchPermissionConfiguration_userGroups,
+    launchPermissionConfiguration_userIds,
+
+    -- * LaunchTemplateConfiguration
+    LaunchTemplateConfiguration (..),
+    newLaunchTemplateConfiguration,
+    launchTemplateConfiguration_accountId,
+    launchTemplateConfiguration_setDefaultVersion,
+    launchTemplateConfiguration_launchTemplateId,
+
+    -- * Logging
+    Logging (..),
+    newLogging,
+    logging_s3Logs,
+
+    -- * OutputResources
+    OutputResources (..),
+    newOutputResources,
+    outputResources_amis,
+    outputResources_containers,
+
+    -- * S3ExportConfiguration
+    S3ExportConfiguration (..),
+    newS3ExportConfiguration,
+    s3ExportConfiguration_s3Prefix,
+    s3ExportConfiguration_roleName,
+    s3ExportConfiguration_diskImageFormat,
+    s3ExportConfiguration_s3Bucket,
+
+    -- * S3Logs
+    S3Logs (..),
+    newS3Logs,
+    s3Logs_s3BucketName,
+    s3Logs_s3KeyPrefix,
+
+    -- * Schedule
+    Schedule (..),
+    newSchedule,
+    schedule_pipelineExecutionStartCondition,
+    schedule_scheduleExpression,
+    schedule_timezone,
+
+    -- * SystemsManagerAgent
+    SystemsManagerAgent (..),
+    newSystemsManagerAgent,
+    systemsManagerAgent_uninstallAfterBuild,
+
+    -- * TargetContainerRepository
+    TargetContainerRepository (..),
+    newTargetContainerRepository,
+    targetContainerRepository_service,
+    targetContainerRepository_repositoryName,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.ImageBuilder.Types.AdditionalInstanceConfiguration
+import Amazonka.ImageBuilder.Types.Ami
+import Amazonka.ImageBuilder.Types.AmiDistributionConfiguration
+import Amazonka.ImageBuilder.Types.BuildType
+import Amazonka.ImageBuilder.Types.Component
+import Amazonka.ImageBuilder.Types.ComponentConfiguration
+import Amazonka.ImageBuilder.Types.ComponentFormat
+import Amazonka.ImageBuilder.Types.ComponentParameter
+import Amazonka.ImageBuilder.Types.ComponentParameterDetail
+import Amazonka.ImageBuilder.Types.ComponentState
+import Amazonka.ImageBuilder.Types.ComponentStatus
+import Amazonka.ImageBuilder.Types.ComponentSummary
+import Amazonka.ImageBuilder.Types.ComponentType
+import Amazonka.ImageBuilder.Types.ComponentVersion
+import Amazonka.ImageBuilder.Types.Container
+import Amazonka.ImageBuilder.Types.ContainerDistributionConfiguration
+import Amazonka.ImageBuilder.Types.ContainerRecipe
+import Amazonka.ImageBuilder.Types.ContainerRecipeSummary
+import Amazonka.ImageBuilder.Types.ContainerRepositoryService
+import Amazonka.ImageBuilder.Types.ContainerType
+import Amazonka.ImageBuilder.Types.DiskImageFormat
+import Amazonka.ImageBuilder.Types.Distribution
+import Amazonka.ImageBuilder.Types.DistributionConfiguration
+import Amazonka.ImageBuilder.Types.DistributionConfigurationSummary
+import Amazonka.ImageBuilder.Types.EbsInstanceBlockDeviceSpecification
+import Amazonka.ImageBuilder.Types.EbsVolumeType
+import Amazonka.ImageBuilder.Types.FastLaunchConfiguration
+import Amazonka.ImageBuilder.Types.FastLaunchLaunchTemplateSpecification
+import Amazonka.ImageBuilder.Types.FastLaunchSnapshotConfiguration
+import Amazonka.ImageBuilder.Types.Filter
+import Amazonka.ImageBuilder.Types.Image
+import Amazonka.ImageBuilder.Types.ImagePackage
+import Amazonka.ImageBuilder.Types.ImagePipeline
+import Amazonka.ImageBuilder.Types.ImageRecipe
+import Amazonka.ImageBuilder.Types.ImageRecipeSummary
+import Amazonka.ImageBuilder.Types.ImageState
+import Amazonka.ImageBuilder.Types.ImageStatus
+import Amazonka.ImageBuilder.Types.ImageSummary
+import Amazonka.ImageBuilder.Types.ImageTestsConfiguration
+import Amazonka.ImageBuilder.Types.ImageType
+import Amazonka.ImageBuilder.Types.ImageVersion
+import Amazonka.ImageBuilder.Types.InfrastructureConfiguration
+import Amazonka.ImageBuilder.Types.InfrastructureConfigurationSummary
+import Amazonka.ImageBuilder.Types.InstanceBlockDeviceMapping
+import Amazonka.ImageBuilder.Types.InstanceConfiguration
+import Amazonka.ImageBuilder.Types.InstanceMetadataOptions
+import Amazonka.ImageBuilder.Types.LaunchPermissionConfiguration
+import Amazonka.ImageBuilder.Types.LaunchTemplateConfiguration
+import Amazonka.ImageBuilder.Types.Logging
+import Amazonka.ImageBuilder.Types.OutputResources
+import Amazonka.ImageBuilder.Types.Ownership
+import Amazonka.ImageBuilder.Types.PipelineExecutionStartCondition
+import Amazonka.ImageBuilder.Types.PipelineStatus
+import Amazonka.ImageBuilder.Types.Platform
+import Amazonka.ImageBuilder.Types.S3ExportConfiguration
+import Amazonka.ImageBuilder.Types.S3Logs
+import Amazonka.ImageBuilder.Types.Schedule
+import Amazonka.ImageBuilder.Types.SystemsManagerAgent
+import Amazonka.ImageBuilder.Types.TargetContainerRepository
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2019-12-02@ of the Amazon EC2 Image Builder SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "ImageBuilder",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "imagebuilder",
+      Core.signingName = "imagebuilder",
+      Core.version = "2019-12-02",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "ImageBuilder",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | You have exceeded the permitted request rate for the specific operation.
+_CallRateLimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_CallRateLimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "CallRateLimitExceededException"
+    Prelude.. Core.hasStatus 429
+
+-- | These errors are usually caused by a client action, such as using an
+-- action or resource on behalf of a user that doesn\'t have permissions to
+-- use the action or resource, or specifying an invalid resource
+-- identifier.
+_ClientException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ClientException =
+  Core._MatchServiceError
+    defaultService
+    "ClientException"
+    Prelude.. Core.hasStatus 400
+
+-- | You are not authorized to perform the requested operation.
+_ForbiddenException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ForbiddenException =
+  Core._MatchServiceError
+    defaultService
+    "ForbiddenException"
+    Prelude.. Core.hasStatus 403
+
+-- | You have specified a client token for an operation using parameter
+-- values that differ from a previous request that used the same client
+-- token.
+_IdempotentParameterMismatchException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_IdempotentParameterMismatchException =
+  Core._MatchServiceError
+    defaultService
+    "IdempotentParameterMismatchException"
+    Prelude.. Core.hasStatus 400
+
+-- | You have provided an invalid pagination token in your request.
+_InvalidPaginationTokenException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidPaginationTokenException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidPaginationTokenException"
+    Prelude.. Core.hasStatus 400
+
+-- | You have specified two or more mutually exclusive parameters. Review the
+-- error message for details.
+_InvalidParameterCombinationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidParameterCombinationException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidParameterCombinationException"
+    Prelude.. Core.hasStatus 400
+
+-- | The specified parameter is invalid. Review the available parameters for
+-- the API request.
+_InvalidParameterException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidParameterException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidParameterException"
+    Prelude.. Core.hasStatus 400
+
+-- | The value that you provided for the specified parameter is invalid.
+_InvalidParameterValueException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidParameterValueException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidParameterValueException"
+    Prelude.. Core.hasStatus 400
+
+-- | You have made a request for an action that is not supported by the
+-- service.
+_InvalidRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidRequestException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | Your version number is out of bounds or does not follow the required
+-- syntax.
+_InvalidVersionNumberException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidVersionNumberException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidVersionNumberException"
+    Prelude.. Core.hasStatus 400
+
+-- | The resource that you are trying to create already exists.
+_ResourceAlreadyExistsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceAlreadyExistsException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceAlreadyExistsException"
+    Prelude.. Core.hasStatus 400
+
+-- | You have attempted to mutate or delete a resource with a dependency that
+-- prohibits this action. See the error message for more details.
+_ResourceDependencyException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceDependencyException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceDependencyException"
+    Prelude.. Core.hasStatus 400
+
+-- | The resource that you are trying to operate on is currently in use.
+-- Review the message details and retry later.
+_ResourceInUseException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceInUseException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceInUseException"
+    Prelude.. Core.hasStatus 400
+
+-- | At least one of the resources referenced by your request does not exist.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | This exception is thrown when the service encounters an unrecoverable
+-- exception.
+_ServiceException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceException"
+    Prelude.. Core.hasStatus 500
+
+-- | You have exceeded the number of permitted resources or operations for
+-- this service. For service quotas, see
+-- <https://docs.aws.amazon.com/general/latest/gr/imagebuilder.html#limits_imagebuilder EC2 Image Builder endpoints and quotas>.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The service is unable to process your request at this time.
+_ServiceUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceUnavailableException"
+    Prelude.. Core.hasStatus 503
diff --git a/gen/Amazonka/ImageBuilder/Types/AdditionalInstanceConfiguration.hs b/gen/Amazonka/ImageBuilder/Types/AdditionalInstanceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/AdditionalInstanceConfiguration.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.AdditionalInstanceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.AdditionalInstanceConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.SystemsManagerAgent
+import qualified Amazonka.Prelude as Prelude
+
+-- | In addition to your infrastruction configuration, these settings provide
+-- an extra layer of control over your build instances. For instances where
+-- Image Builder installs the Systems Manager agent, you can choose whether
+-- to keep it for the AMI that you create. You can also specify commands to
+-- run on launch for all of your build instances.
+--
+-- /See:/ 'newAdditionalInstanceConfiguration' smart constructor.
+data AdditionalInstanceConfiguration = AdditionalInstanceConfiguration'
+  { -- | Contains settings for the Systems Manager agent on your build instance.
+    systemsManagerAgent :: Prelude.Maybe SystemsManagerAgent,
+    -- | Use this property to provide commands or a command script to run when
+    -- you launch your build instance.
+    --
+    -- The userDataOverride property replaces any commands that Image Builder
+    -- might have added to ensure that Systems Manager is installed on your
+    -- Linux build instance. If you override the user data, make sure that you
+    -- add commands to install Systems Manager, if it is not pre-installed on
+    -- your base image.
+    --
+    -- The user data is always base 64 encoded. For example, the following
+    -- commands are encoded as
+    -- @IyEvYmluL2Jhc2gKbWtkaXIgLXAgL3Zhci9iYi8KdG91Y2ggL3Zhci$@:
+    --
+    -- /#!\/bin\/bash/
+    --
+    -- mkdir -p \/var\/bb\/
+    --
+    -- touch \/var
+    userDataOverride :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AdditionalInstanceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'systemsManagerAgent', 'additionalInstanceConfiguration_systemsManagerAgent' - Contains settings for the Systems Manager agent on your build instance.
+--
+-- 'userDataOverride', 'additionalInstanceConfiguration_userDataOverride' - Use this property to provide commands or a command script to run when
+-- you launch your build instance.
+--
+-- The userDataOverride property replaces any commands that Image Builder
+-- might have added to ensure that Systems Manager is installed on your
+-- Linux build instance. If you override the user data, make sure that you
+-- add commands to install Systems Manager, if it is not pre-installed on
+-- your base image.
+--
+-- The user data is always base 64 encoded. For example, the following
+-- commands are encoded as
+-- @IyEvYmluL2Jhc2gKbWtkaXIgLXAgL3Zhci9iYi8KdG91Y2ggL3Zhci$@:
+--
+-- /#!\/bin\/bash/
+--
+-- mkdir -p \/var\/bb\/
+--
+-- touch \/var
+newAdditionalInstanceConfiguration ::
+  AdditionalInstanceConfiguration
+newAdditionalInstanceConfiguration =
+  AdditionalInstanceConfiguration'
+    { systemsManagerAgent =
+        Prelude.Nothing,
+      userDataOverride = Prelude.Nothing
+    }
+
+-- | Contains settings for the Systems Manager agent on your build instance.
+additionalInstanceConfiguration_systemsManagerAgent :: Lens.Lens' AdditionalInstanceConfiguration (Prelude.Maybe SystemsManagerAgent)
+additionalInstanceConfiguration_systemsManagerAgent = Lens.lens (\AdditionalInstanceConfiguration' {systemsManagerAgent} -> systemsManagerAgent) (\s@AdditionalInstanceConfiguration' {} a -> s {systemsManagerAgent = a} :: AdditionalInstanceConfiguration)
+
+-- | Use this property to provide commands or a command script to run when
+-- you launch your build instance.
+--
+-- The userDataOverride property replaces any commands that Image Builder
+-- might have added to ensure that Systems Manager is installed on your
+-- Linux build instance. If you override the user data, make sure that you
+-- add commands to install Systems Manager, if it is not pre-installed on
+-- your base image.
+--
+-- The user data is always base 64 encoded. For example, the following
+-- commands are encoded as
+-- @IyEvYmluL2Jhc2gKbWtkaXIgLXAgL3Zhci9iYi8KdG91Y2ggL3Zhci$@:
+--
+-- /#!\/bin\/bash/
+--
+-- mkdir -p \/var\/bb\/
+--
+-- touch \/var
+additionalInstanceConfiguration_userDataOverride :: Lens.Lens' AdditionalInstanceConfiguration (Prelude.Maybe Prelude.Text)
+additionalInstanceConfiguration_userDataOverride = Lens.lens (\AdditionalInstanceConfiguration' {userDataOverride} -> userDataOverride) (\s@AdditionalInstanceConfiguration' {} a -> s {userDataOverride = a} :: AdditionalInstanceConfiguration)
+
+instance
+  Data.FromJSON
+    AdditionalInstanceConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "AdditionalInstanceConfiguration"
+      ( \x ->
+          AdditionalInstanceConfiguration'
+            Prelude.<$> (x Data..:? "systemsManagerAgent")
+            Prelude.<*> (x Data..:? "userDataOverride")
+      )
+
+instance
+  Prelude.Hashable
+    AdditionalInstanceConfiguration
+  where
+  hashWithSalt
+    _salt
+    AdditionalInstanceConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` systemsManagerAgent
+        `Prelude.hashWithSalt` userDataOverride
+
+instance
+  Prelude.NFData
+    AdditionalInstanceConfiguration
+  where
+  rnf AdditionalInstanceConfiguration' {..} =
+    Prelude.rnf systemsManagerAgent
+      `Prelude.seq` Prelude.rnf userDataOverride
+
+instance Data.ToJSON AdditionalInstanceConfiguration where
+  toJSON AdditionalInstanceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("systemsManagerAgent" Data..=)
+              Prelude.<$> systemsManagerAgent,
+            ("userDataOverride" Data..=)
+              Prelude.<$> userDataOverride
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/Ami.hs b/gen/Amazonka/ImageBuilder/Types/Ami.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/Ami.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.ImageBuilder.Types.Ami
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.Ami where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.ImageState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details of an Amazon EC2 AMI.
+--
+-- /See:/ 'newAmi' smart constructor.
+data Ami = Ami'
+  { -- | The account ID of the owner of the AMI.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The description of the Amazon EC2 AMI. Minimum and maximum length are in
+    -- characters.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The AMI ID of the Amazon EC2 AMI.
+    image :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Amazon EC2 AMI.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services Region of the Amazon EC2 AMI.
+    region :: Prelude.Maybe Prelude.Text,
+    state :: Prelude.Maybe ImageState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ami' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'ami_accountId' - The account ID of the owner of the AMI.
+--
+-- 'description', 'ami_description' - The description of the Amazon EC2 AMI. Minimum and maximum length are in
+-- characters.
+--
+-- 'image', 'ami_image' - The AMI ID of the Amazon EC2 AMI.
+--
+-- 'name', 'ami_name' - The name of the Amazon EC2 AMI.
+--
+-- 'region', 'ami_region' - The Amazon Web Services Region of the Amazon EC2 AMI.
+--
+-- 'state', 'ami_state' - Undocumented member.
+newAmi ::
+  Ami
+newAmi =
+  Ami'
+    { accountId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      image = Prelude.Nothing,
+      name = Prelude.Nothing,
+      region = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The account ID of the owner of the AMI.
+ami_accountId :: Lens.Lens' Ami (Prelude.Maybe Prelude.Text)
+ami_accountId = Lens.lens (\Ami' {accountId} -> accountId) (\s@Ami' {} a -> s {accountId = a} :: Ami)
+
+-- | The description of the Amazon EC2 AMI. Minimum and maximum length are in
+-- characters.
+ami_description :: Lens.Lens' Ami (Prelude.Maybe Prelude.Text)
+ami_description = Lens.lens (\Ami' {description} -> description) (\s@Ami' {} a -> s {description = a} :: Ami)
+
+-- | The AMI ID of the Amazon EC2 AMI.
+ami_image :: Lens.Lens' Ami (Prelude.Maybe Prelude.Text)
+ami_image = Lens.lens (\Ami' {image} -> image) (\s@Ami' {} a -> s {image = a} :: Ami)
+
+-- | The name of the Amazon EC2 AMI.
+ami_name :: Lens.Lens' Ami (Prelude.Maybe Prelude.Text)
+ami_name = Lens.lens (\Ami' {name} -> name) (\s@Ami' {} a -> s {name = a} :: Ami)
+
+-- | The Amazon Web Services Region of the Amazon EC2 AMI.
+ami_region :: Lens.Lens' Ami (Prelude.Maybe Prelude.Text)
+ami_region = Lens.lens (\Ami' {region} -> region) (\s@Ami' {} a -> s {region = a} :: Ami)
+
+-- | Undocumented member.
+ami_state :: Lens.Lens' Ami (Prelude.Maybe ImageState)
+ami_state = Lens.lens (\Ami' {state} -> state) (\s@Ami' {} a -> s {state = a} :: Ami)
+
+instance Data.FromJSON Ami where
+  parseJSON =
+    Data.withObject
+      "Ami"
+      ( \x ->
+          Ami'
+            Prelude.<$> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "image")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "region")
+            Prelude.<*> (x Data..:? "state")
+      )
+
+instance Prelude.Hashable Ami where
+  hashWithSalt _salt Ami' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` image
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` region
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData Ami where
+  rnf Ami' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf image
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf region
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/ImageBuilder/Types/AmiDistributionConfiguration.hs b/gen/Amazonka/ImageBuilder/Types/AmiDistributionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/AmiDistributionConfiguration.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.AmiDistributionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.AmiDistributionConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.LaunchPermissionConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Define and configure the output AMIs of the pipeline.
+--
+-- /See:/ 'newAmiDistributionConfiguration' smart constructor.
+data AmiDistributionConfiguration = AmiDistributionConfiguration'
+  { -- | The tags to apply to AMIs distributed to this Region.
+    amiTags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The description of the AMI distribution configuration. Minimum and
+    -- maximum length are in characters.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The KMS key identifier used to encrypt the distributed image.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | Launch permissions can be used to configure which Amazon Web Services
+    -- accounts can use the AMI to launch instances.
+    launchPermission :: Prelude.Maybe LaunchPermissionConfiguration,
+    -- | The name of the output AMI.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ID of an account to which you want to distribute an image.
+    targetAccountIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AmiDistributionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'amiTags', 'amiDistributionConfiguration_amiTags' - The tags to apply to AMIs distributed to this Region.
+--
+-- 'description', 'amiDistributionConfiguration_description' - The description of the AMI distribution configuration. Minimum and
+-- maximum length are in characters.
+--
+-- 'kmsKeyId', 'amiDistributionConfiguration_kmsKeyId' - The KMS key identifier used to encrypt the distributed image.
+--
+-- 'launchPermission', 'amiDistributionConfiguration_launchPermission' - Launch permissions can be used to configure which Amazon Web Services
+-- accounts can use the AMI to launch instances.
+--
+-- 'name', 'amiDistributionConfiguration_name' - The name of the output AMI.
+--
+-- 'targetAccountIds', 'amiDistributionConfiguration_targetAccountIds' - The ID of an account to which you want to distribute an image.
+newAmiDistributionConfiguration ::
+  AmiDistributionConfiguration
+newAmiDistributionConfiguration =
+  AmiDistributionConfiguration'
+    { amiTags =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      launchPermission = Prelude.Nothing,
+      name = Prelude.Nothing,
+      targetAccountIds = Prelude.Nothing
+    }
+
+-- | The tags to apply to AMIs distributed to this Region.
+amiDistributionConfiguration_amiTags :: Lens.Lens' AmiDistributionConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+amiDistributionConfiguration_amiTags = Lens.lens (\AmiDistributionConfiguration' {amiTags} -> amiTags) (\s@AmiDistributionConfiguration' {} a -> s {amiTags = a} :: AmiDistributionConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The description of the AMI distribution configuration. Minimum and
+-- maximum length are in characters.
+amiDistributionConfiguration_description :: Lens.Lens' AmiDistributionConfiguration (Prelude.Maybe Prelude.Text)
+amiDistributionConfiguration_description = Lens.lens (\AmiDistributionConfiguration' {description} -> description) (\s@AmiDistributionConfiguration' {} a -> s {description = a} :: AmiDistributionConfiguration)
+
+-- | The KMS key identifier used to encrypt the distributed image.
+amiDistributionConfiguration_kmsKeyId :: Lens.Lens' AmiDistributionConfiguration (Prelude.Maybe Prelude.Text)
+amiDistributionConfiguration_kmsKeyId = Lens.lens (\AmiDistributionConfiguration' {kmsKeyId} -> kmsKeyId) (\s@AmiDistributionConfiguration' {} a -> s {kmsKeyId = a} :: AmiDistributionConfiguration)
+
+-- | Launch permissions can be used to configure which Amazon Web Services
+-- accounts can use the AMI to launch instances.
+amiDistributionConfiguration_launchPermission :: Lens.Lens' AmiDistributionConfiguration (Prelude.Maybe LaunchPermissionConfiguration)
+amiDistributionConfiguration_launchPermission = Lens.lens (\AmiDistributionConfiguration' {launchPermission} -> launchPermission) (\s@AmiDistributionConfiguration' {} a -> s {launchPermission = a} :: AmiDistributionConfiguration)
+
+-- | The name of the output AMI.
+amiDistributionConfiguration_name :: Lens.Lens' AmiDistributionConfiguration (Prelude.Maybe Prelude.Text)
+amiDistributionConfiguration_name = Lens.lens (\AmiDistributionConfiguration' {name} -> name) (\s@AmiDistributionConfiguration' {} a -> s {name = a} :: AmiDistributionConfiguration)
+
+-- | The ID of an account to which you want to distribute an image.
+amiDistributionConfiguration_targetAccountIds :: Lens.Lens' AmiDistributionConfiguration (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+amiDistributionConfiguration_targetAccountIds = Lens.lens (\AmiDistributionConfiguration' {targetAccountIds} -> targetAccountIds) (\s@AmiDistributionConfiguration' {} a -> s {targetAccountIds = a} :: AmiDistributionConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON AmiDistributionConfiguration where
+  parseJSON =
+    Data.withObject
+      "AmiDistributionConfiguration"
+      ( \x ->
+          AmiDistributionConfiguration'
+            Prelude.<$> (x Data..:? "amiTags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "kmsKeyId")
+            Prelude.<*> (x Data..:? "launchPermission")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "targetAccountIds")
+      )
+
+instance
+  Prelude.Hashable
+    AmiDistributionConfiguration
+  where
+  hashWithSalt _salt AmiDistributionConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` amiTags
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` launchPermission
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` targetAccountIds
+
+instance Prelude.NFData AmiDistributionConfiguration where
+  rnf AmiDistributionConfiguration' {..} =
+    Prelude.rnf amiTags
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf launchPermission
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf targetAccountIds
+
+instance Data.ToJSON AmiDistributionConfiguration where
+  toJSON AmiDistributionConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("amiTags" Data..=) Prelude.<$> amiTags,
+            ("description" Data..=) Prelude.<$> description,
+            ("kmsKeyId" Data..=) Prelude.<$> kmsKeyId,
+            ("launchPermission" Data..=)
+              Prelude.<$> launchPermission,
+            ("name" Data..=) Prelude.<$> name,
+            ("targetAccountIds" Data..=)
+              Prelude.<$> targetAccountIds
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/BuildType.hs b/gen/Amazonka/ImageBuilder/Types/BuildType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/BuildType.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.ImageBuilder.Types.BuildType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.BuildType
+  ( BuildType
+      ( ..,
+        BuildType_IMPORT,
+        BuildType_SCHEDULED,
+        BuildType_USER_INITIATED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BuildType = BuildType'
+  { fromBuildType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern BuildType_IMPORT :: BuildType
+pattern BuildType_IMPORT = BuildType' "IMPORT"
+
+pattern BuildType_SCHEDULED :: BuildType
+pattern BuildType_SCHEDULED = BuildType' "SCHEDULED"
+
+pattern BuildType_USER_INITIATED :: BuildType
+pattern BuildType_USER_INITIATED = BuildType' "USER_INITIATED"
+
+{-# COMPLETE
+  BuildType_IMPORT,
+  BuildType_SCHEDULED,
+  BuildType_USER_INITIATED,
+  BuildType'
+  #-}
diff --git a/gen/Amazonka/ImageBuilder/Types/Component.hs b/gen/Amazonka/ImageBuilder/Types/Component.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/Component.hs
@@ -0,0 +1,271 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.Component
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.Component where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.ComponentParameterDetail
+import Amazonka.ImageBuilder.Types.ComponentState
+import Amazonka.ImageBuilder.Types.ComponentType
+import Amazonka.ImageBuilder.Types.Platform
+import qualified Amazonka.Prelude as Prelude
+
+-- | A detailed view of a component.
+--
+-- /See:/ 'newComponent' smart constructor.
+data Component = Component'
+  { -- | The Amazon Resource Name (ARN) of the component.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The change description of the component.
+    changeDescription :: Prelude.Maybe Prelude.Text,
+    -- | Component data contains the YAML document content for the component.
+    data' :: Prelude.Maybe Prelude.Text,
+    -- | The date that the component was created.
+    dateCreated :: Prelude.Maybe Prelude.Text,
+    -- | The description of the component.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The encryption status of the component.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The KMS key identifier used to encrypt the component.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the component.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The owner of the component.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | Contains parameter details for each of the parameters that are defined
+    -- for the component.
+    parameters :: Prelude.Maybe [ComponentParameterDetail],
+    -- | The platform of the component.
+    platform :: Prelude.Maybe Platform,
+    -- | Describes the current status of the component. This is used for
+    -- components that are no longer active.
+    state :: Prelude.Maybe ComponentState,
+    -- | The operating system (OS) version supported by the component. If the OS
+    -- information is available, a prefix match is performed against the base
+    -- image OS version during image recipe creation.
+    supportedOsVersions :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The tags associated with the component.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The type of the component denotes whether the component is used to build
+    -- the image or only to test it.
+    type' :: Prelude.Maybe ComponentType,
+    -- | The version of the component.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Component' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'component_arn' - The Amazon Resource Name (ARN) of the component.
+--
+-- 'changeDescription', 'component_changeDescription' - The change description of the component.
+--
+-- 'data'', 'component_data' - Component data contains the YAML document content for the component.
+--
+-- 'dateCreated', 'component_dateCreated' - The date that the component was created.
+--
+-- 'description', 'component_description' - The description of the component.
+--
+-- 'encrypted', 'component_encrypted' - The encryption status of the component.
+--
+-- 'kmsKeyId', 'component_kmsKeyId' - The KMS key identifier used to encrypt the component.
+--
+-- 'name', 'component_name' - The name of the component.
+--
+-- 'owner', 'component_owner' - The owner of the component.
+--
+-- 'parameters', 'component_parameters' - Contains parameter details for each of the parameters that are defined
+-- for the component.
+--
+-- 'platform', 'component_platform' - The platform of the component.
+--
+-- 'state', 'component_state' - Describes the current status of the component. This is used for
+-- components that are no longer active.
+--
+-- 'supportedOsVersions', 'component_supportedOsVersions' - The operating system (OS) version supported by the component. If the OS
+-- information is available, a prefix match is performed against the base
+-- image OS version during image recipe creation.
+--
+-- 'tags', 'component_tags' - The tags associated with the component.
+--
+-- 'type'', 'component_type' - The type of the component denotes whether the component is used to build
+-- the image or only to test it.
+--
+-- 'version', 'component_version' - The version of the component.
+newComponent ::
+  Component
+newComponent =
+  Component'
+    { arn = Prelude.Nothing,
+      changeDescription = Prelude.Nothing,
+      data' = Prelude.Nothing,
+      dateCreated = Prelude.Nothing,
+      description = Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      name = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      parameters = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      state = Prelude.Nothing,
+      supportedOsVersions = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the component.
+component_arn :: Lens.Lens' Component (Prelude.Maybe Prelude.Text)
+component_arn = Lens.lens (\Component' {arn} -> arn) (\s@Component' {} a -> s {arn = a} :: Component)
+
+-- | The change description of the component.
+component_changeDescription :: Lens.Lens' Component (Prelude.Maybe Prelude.Text)
+component_changeDescription = Lens.lens (\Component' {changeDescription} -> changeDescription) (\s@Component' {} a -> s {changeDescription = a} :: Component)
+
+-- | Component data contains the YAML document content for the component.
+component_data :: Lens.Lens' Component (Prelude.Maybe Prelude.Text)
+component_data = Lens.lens (\Component' {data'} -> data') (\s@Component' {} a -> s {data' = a} :: Component)
+
+-- | The date that the component was created.
+component_dateCreated :: Lens.Lens' Component (Prelude.Maybe Prelude.Text)
+component_dateCreated = Lens.lens (\Component' {dateCreated} -> dateCreated) (\s@Component' {} a -> s {dateCreated = a} :: Component)
+
+-- | The description of the component.
+component_description :: Lens.Lens' Component (Prelude.Maybe Prelude.Text)
+component_description = Lens.lens (\Component' {description} -> description) (\s@Component' {} a -> s {description = a} :: Component)
+
+-- | The encryption status of the component.
+component_encrypted :: Lens.Lens' Component (Prelude.Maybe Prelude.Bool)
+component_encrypted = Lens.lens (\Component' {encrypted} -> encrypted) (\s@Component' {} a -> s {encrypted = a} :: Component)
+
+-- | The KMS key identifier used to encrypt the component.
+component_kmsKeyId :: Lens.Lens' Component (Prelude.Maybe Prelude.Text)
+component_kmsKeyId = Lens.lens (\Component' {kmsKeyId} -> kmsKeyId) (\s@Component' {} a -> s {kmsKeyId = a} :: Component)
+
+-- | The name of the component.
+component_name :: Lens.Lens' Component (Prelude.Maybe Prelude.Text)
+component_name = Lens.lens (\Component' {name} -> name) (\s@Component' {} a -> s {name = a} :: Component)
+
+-- | The owner of the component.
+component_owner :: Lens.Lens' Component (Prelude.Maybe Prelude.Text)
+component_owner = Lens.lens (\Component' {owner} -> owner) (\s@Component' {} a -> s {owner = a} :: Component)
+
+-- | Contains parameter details for each of the parameters that are defined
+-- for the component.
+component_parameters :: Lens.Lens' Component (Prelude.Maybe [ComponentParameterDetail])
+component_parameters = Lens.lens (\Component' {parameters} -> parameters) (\s@Component' {} a -> s {parameters = a} :: Component) Prelude.. Lens.mapping Lens.coerced
+
+-- | The platform of the component.
+component_platform :: Lens.Lens' Component (Prelude.Maybe Platform)
+component_platform = Lens.lens (\Component' {platform} -> platform) (\s@Component' {} a -> s {platform = a} :: Component)
+
+-- | Describes the current status of the component. This is used for
+-- components that are no longer active.
+component_state :: Lens.Lens' Component (Prelude.Maybe ComponentState)
+component_state = Lens.lens (\Component' {state} -> state) (\s@Component' {} a -> s {state = a} :: Component)
+
+-- | The operating system (OS) version supported by the component. If the OS
+-- information is available, a prefix match is performed against the base
+-- image OS version during image recipe creation.
+component_supportedOsVersions :: Lens.Lens' Component (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+component_supportedOsVersions = Lens.lens (\Component' {supportedOsVersions} -> supportedOsVersions) (\s@Component' {} a -> s {supportedOsVersions = a} :: Component) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags associated with the component.
+component_tags :: Lens.Lens' Component (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+component_tags = Lens.lens (\Component' {tags} -> tags) (\s@Component' {} a -> s {tags = a} :: Component) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of the component denotes whether the component is used to build
+-- the image or only to test it.
+component_type :: Lens.Lens' Component (Prelude.Maybe ComponentType)
+component_type = Lens.lens (\Component' {type'} -> type') (\s@Component' {} a -> s {type' = a} :: Component)
+
+-- | The version of the component.
+component_version :: Lens.Lens' Component (Prelude.Maybe Prelude.Text)
+component_version = Lens.lens (\Component' {version} -> version) (\s@Component' {} a -> s {version = a} :: Component)
+
+instance Data.FromJSON Component where
+  parseJSON =
+    Data.withObject
+      "Component"
+      ( \x ->
+          Component'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "changeDescription")
+            Prelude.<*> (x Data..:? "data")
+            Prelude.<*> (x Data..:? "dateCreated")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "encrypted")
+            Prelude.<*> (x Data..:? "kmsKeyId")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "parameters" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "platform")
+            Prelude.<*> (x Data..:? "state")
+            Prelude.<*> (x Data..:? "supportedOsVersions")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable Component where
+  hashWithSalt _salt Component' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` changeDescription
+      `Prelude.hashWithSalt` data'
+      `Prelude.hashWithSalt` dateCreated
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` supportedOsVersions
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData Component where
+  rnf Component' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf changeDescription
+      `Prelude.seq` Prelude.rnf data'
+      `Prelude.seq` Prelude.rnf dateCreated
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf supportedOsVersions
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/ImageBuilder/Types/ComponentConfiguration.hs b/gen/Amazonka/ImageBuilder/Types/ComponentConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ComponentConfiguration.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.ImageBuilder.Types.ComponentConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ComponentConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.ComponentParameter
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration details of the component.
+--
+-- /See:/ 'newComponentConfiguration' smart constructor.
+data ComponentConfiguration = ComponentConfiguration'
+  { -- | A group of parameter settings that are used to configure the component
+    -- for a specific recipe.
+    parameters :: Prelude.Maybe (Prelude.NonEmpty ComponentParameter),
+    -- | The Amazon Resource Name (ARN) of the component.
+    componentArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'parameters', 'componentConfiguration_parameters' - A group of parameter settings that are used to configure the component
+-- for a specific recipe.
+--
+-- 'componentArn', 'componentConfiguration_componentArn' - The Amazon Resource Name (ARN) of the component.
+newComponentConfiguration ::
+  -- | 'componentArn'
+  Prelude.Text ->
+  ComponentConfiguration
+newComponentConfiguration pComponentArn_ =
+  ComponentConfiguration'
+    { parameters =
+        Prelude.Nothing,
+      componentArn = pComponentArn_
+    }
+
+-- | A group of parameter settings that are used to configure the component
+-- for a specific recipe.
+componentConfiguration_parameters :: Lens.Lens' ComponentConfiguration (Prelude.Maybe (Prelude.NonEmpty ComponentParameter))
+componentConfiguration_parameters = Lens.lens (\ComponentConfiguration' {parameters} -> parameters) (\s@ComponentConfiguration' {} a -> s {parameters = a} :: ComponentConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the component.
+componentConfiguration_componentArn :: Lens.Lens' ComponentConfiguration Prelude.Text
+componentConfiguration_componentArn = Lens.lens (\ComponentConfiguration' {componentArn} -> componentArn) (\s@ComponentConfiguration' {} a -> s {componentArn = a} :: ComponentConfiguration)
+
+instance Data.FromJSON ComponentConfiguration where
+  parseJSON =
+    Data.withObject
+      "ComponentConfiguration"
+      ( \x ->
+          ComponentConfiguration'
+            Prelude.<$> (x Data..:? "parameters")
+            Prelude.<*> (x Data..: "componentArn")
+      )
+
+instance Prelude.Hashable ComponentConfiguration where
+  hashWithSalt _salt ComponentConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` componentArn
+
+instance Prelude.NFData ComponentConfiguration where
+  rnf ComponentConfiguration' {..} =
+    Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf componentArn
+
+instance Data.ToJSON ComponentConfiguration where
+  toJSON ComponentConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("parameters" Data..=) Prelude.<$> parameters,
+            Prelude.Just ("componentArn" Data..= componentArn)
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/ComponentFormat.hs b/gen/Amazonka/ImageBuilder/Types/ComponentFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ComponentFormat.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.ImageBuilder.Types.ComponentFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ComponentFormat
+  ( ComponentFormat
+      ( ..,
+        ComponentFormat_SHELL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ComponentFormat = ComponentFormat'
+  { fromComponentFormat ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ComponentFormat_SHELL :: ComponentFormat
+pattern ComponentFormat_SHELL = ComponentFormat' "SHELL"
+
+{-# COMPLETE
+  ComponentFormat_SHELL,
+  ComponentFormat'
+  #-}
diff --git a/gen/Amazonka/ImageBuilder/Types/ComponentParameter.hs b/gen/Amazonka/ImageBuilder/Types/ComponentParameter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ComponentParameter.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.ComponentParameter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ComponentParameter 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
+
+-- | Contains a key\/value pair that sets the named component parameter.
+--
+-- /See:/ 'newComponentParameter' smart constructor.
+data ComponentParameter = ComponentParameter'
+  { -- | The name of the component parameter to set.
+    name :: Prelude.Text,
+    -- | Sets the value for the named component parameter.
+    value :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentParameter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'componentParameter_name' - The name of the component parameter to set.
+--
+-- 'value', 'componentParameter_value' - Sets the value for the named component parameter.
+newComponentParameter ::
+  -- | 'name'
+  Prelude.Text ->
+  ComponentParameter
+newComponentParameter pName_ =
+  ComponentParameter'
+    { name = pName_,
+      value = Prelude.mempty
+    }
+
+-- | The name of the component parameter to set.
+componentParameter_name :: Lens.Lens' ComponentParameter Prelude.Text
+componentParameter_name = Lens.lens (\ComponentParameter' {name} -> name) (\s@ComponentParameter' {} a -> s {name = a} :: ComponentParameter)
+
+-- | Sets the value for the named component parameter.
+componentParameter_value :: Lens.Lens' ComponentParameter [Prelude.Text]
+componentParameter_value = Lens.lens (\ComponentParameter' {value} -> value) (\s@ComponentParameter' {} a -> s {value = a} :: ComponentParameter) Prelude.. Lens.coerced
+
+instance Data.FromJSON ComponentParameter where
+  parseJSON =
+    Data.withObject
+      "ComponentParameter"
+      ( \x ->
+          ComponentParameter'
+            Prelude.<$> (x Data..: "name")
+            Prelude.<*> (x Data..:? "value" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ComponentParameter where
+  hashWithSalt _salt ComponentParameter' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData ComponentParameter where
+  rnf ComponentParameter' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON ComponentParameter where
+  toJSON ComponentParameter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just ("value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/ComponentParameterDetail.hs b/gen/Amazonka/ImageBuilder/Types/ComponentParameterDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ComponentParameterDetail.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.ImageBuilder.Types.ComponentParameterDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ComponentParameterDetail 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
+
+-- | Defines a parameter that is used to provide configuration details for
+-- the component.
+--
+-- /See:/ 'newComponentParameterDetail' smart constructor.
+data ComponentParameterDetail = ComponentParameterDetail'
+  { -- | The default value of this parameter if no input is provided.
+    defaultValue :: Prelude.Maybe [Prelude.Text],
+    -- | Describes this parameter.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of this input parameter.
+    name :: Prelude.Text,
+    -- | The type of input this parameter provides. The currently supported value
+    -- is \"string\".
+    type' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentParameterDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'defaultValue', 'componentParameterDetail_defaultValue' - The default value of this parameter if no input is provided.
+--
+-- 'description', 'componentParameterDetail_description' - Describes this parameter.
+--
+-- 'name', 'componentParameterDetail_name' - The name of this input parameter.
+--
+-- 'type'', 'componentParameterDetail_type' - The type of input this parameter provides. The currently supported value
+-- is \"string\".
+newComponentParameterDetail ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'type''
+  Prelude.Text ->
+  ComponentParameterDetail
+newComponentParameterDetail pName_ pType_ =
+  ComponentParameterDetail'
+    { defaultValue =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = pName_,
+      type' = pType_
+    }
+
+-- | The default value of this parameter if no input is provided.
+componentParameterDetail_defaultValue :: Lens.Lens' ComponentParameterDetail (Prelude.Maybe [Prelude.Text])
+componentParameterDetail_defaultValue = Lens.lens (\ComponentParameterDetail' {defaultValue} -> defaultValue) (\s@ComponentParameterDetail' {} a -> s {defaultValue = a} :: ComponentParameterDetail) Prelude.. Lens.mapping Lens.coerced
+
+-- | Describes this parameter.
+componentParameterDetail_description :: Lens.Lens' ComponentParameterDetail (Prelude.Maybe Prelude.Text)
+componentParameterDetail_description = Lens.lens (\ComponentParameterDetail' {description} -> description) (\s@ComponentParameterDetail' {} a -> s {description = a} :: ComponentParameterDetail)
+
+-- | The name of this input parameter.
+componentParameterDetail_name :: Lens.Lens' ComponentParameterDetail Prelude.Text
+componentParameterDetail_name = Lens.lens (\ComponentParameterDetail' {name} -> name) (\s@ComponentParameterDetail' {} a -> s {name = a} :: ComponentParameterDetail)
+
+-- | The type of input this parameter provides. The currently supported value
+-- is \"string\".
+componentParameterDetail_type :: Lens.Lens' ComponentParameterDetail Prelude.Text
+componentParameterDetail_type = Lens.lens (\ComponentParameterDetail' {type'} -> type') (\s@ComponentParameterDetail' {} a -> s {type' = a} :: ComponentParameterDetail)
+
+instance Data.FromJSON ComponentParameterDetail where
+  parseJSON =
+    Data.withObject
+      "ComponentParameterDetail"
+      ( \x ->
+          ComponentParameterDetail'
+            Prelude.<$> (x Data..:? "defaultValue" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance Prelude.Hashable ComponentParameterDetail where
+  hashWithSalt _salt ComponentParameterDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` defaultValue
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ComponentParameterDetail where
+  rnf ComponentParameterDetail' {..} =
+    Prelude.rnf defaultValue
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ImageBuilder/Types/ComponentState.hs b/gen/Amazonka/ImageBuilder/Types/ComponentState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ComponentState.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.ComponentState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ComponentState where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.ComponentStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | A group of fields that describe the current status of components that
+-- are no longer active.
+--
+-- /See:/ 'newComponentState' smart constructor.
+data ComponentState = ComponentState'
+  { -- | Describes how or why the component changed state.
+    reason :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the component.
+    status :: Prelude.Maybe ComponentStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentState' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reason', 'componentState_reason' - Describes how or why the component changed state.
+--
+-- 'status', 'componentState_status' - The current state of the component.
+newComponentState ::
+  ComponentState
+newComponentState =
+  ComponentState'
+    { reason = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | Describes how or why the component changed state.
+componentState_reason :: Lens.Lens' ComponentState (Prelude.Maybe Prelude.Text)
+componentState_reason = Lens.lens (\ComponentState' {reason} -> reason) (\s@ComponentState' {} a -> s {reason = a} :: ComponentState)
+
+-- | The current state of the component.
+componentState_status :: Lens.Lens' ComponentState (Prelude.Maybe ComponentStatus)
+componentState_status = Lens.lens (\ComponentState' {status} -> status) (\s@ComponentState' {} a -> s {status = a} :: ComponentState)
+
+instance Data.FromJSON ComponentState where
+  parseJSON =
+    Data.withObject
+      "ComponentState"
+      ( \x ->
+          ComponentState'
+            Prelude.<$> (x Data..:? "reason")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable ComponentState where
+  hashWithSalt _salt ComponentState' {..} =
+    _salt
+      `Prelude.hashWithSalt` reason
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ComponentState where
+  rnf ComponentState' {..} =
+    Prelude.rnf reason `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/ImageBuilder/Types/ComponentStatus.hs b/gen/Amazonka/ImageBuilder/Types/ComponentStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ComponentStatus.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.ImageBuilder.Types.ComponentStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ComponentStatus
+  ( ComponentStatus
+      ( ..,
+        ComponentStatus_DEPRECATED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ComponentStatus = ComponentStatus'
+  { fromComponentStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ComponentStatus_DEPRECATED :: ComponentStatus
+pattern ComponentStatus_DEPRECATED = ComponentStatus' "DEPRECATED"
+
+{-# COMPLETE
+  ComponentStatus_DEPRECATED,
+  ComponentStatus'
+  #-}
diff --git a/gen/Amazonka/ImageBuilder/Types/ComponentSummary.hs b/gen/Amazonka/ImageBuilder/Types/ComponentSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ComponentSummary.hs
@@ -0,0 +1,216 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.ComponentSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ComponentSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.ComponentState
+import Amazonka.ImageBuilder.Types.ComponentType
+import Amazonka.ImageBuilder.Types.Platform
+import qualified Amazonka.Prelude as Prelude
+
+-- | A high-level summary of a component.
+--
+-- /See:/ 'newComponentSummary' smart constructor.
+data ComponentSummary = ComponentSummary'
+  { -- | The Amazon Resource Name (ARN) of the component.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The change description of the component.
+    changeDescription :: Prelude.Maybe Prelude.Text,
+    -- | The date that the component was created.
+    dateCreated :: Prelude.Maybe Prelude.Text,
+    -- | The description of the component.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the component.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The owner of the component.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The platform of the component.
+    platform :: Prelude.Maybe Platform,
+    -- | Describes the current status of the component.
+    state :: Prelude.Maybe ComponentState,
+    -- | The operating system (OS) version supported by the component. If the OS
+    -- information is available, a prefix match is performed against the base
+    -- image OS version during image recipe creation.
+    supportedOsVersions :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The tags associated with the component.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The type of the component denotes whether the component is used to build
+    -- the image or only to test it.
+    type' :: Prelude.Maybe ComponentType,
+    -- | The version of the component.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'componentSummary_arn' - The Amazon Resource Name (ARN) of the component.
+--
+-- 'changeDescription', 'componentSummary_changeDescription' - The change description of the component.
+--
+-- 'dateCreated', 'componentSummary_dateCreated' - The date that the component was created.
+--
+-- 'description', 'componentSummary_description' - The description of the component.
+--
+-- 'name', 'componentSummary_name' - The name of the component.
+--
+-- 'owner', 'componentSummary_owner' - The owner of the component.
+--
+-- 'platform', 'componentSummary_platform' - The platform of the component.
+--
+-- 'state', 'componentSummary_state' - Describes the current status of the component.
+--
+-- 'supportedOsVersions', 'componentSummary_supportedOsVersions' - The operating system (OS) version supported by the component. If the OS
+-- information is available, a prefix match is performed against the base
+-- image OS version during image recipe creation.
+--
+-- 'tags', 'componentSummary_tags' - The tags associated with the component.
+--
+-- 'type'', 'componentSummary_type' - The type of the component denotes whether the component is used to build
+-- the image or only to test it.
+--
+-- 'version', 'componentSummary_version' - The version of the component.
+newComponentSummary ::
+  ComponentSummary
+newComponentSummary =
+  ComponentSummary'
+    { arn = Prelude.Nothing,
+      changeDescription = Prelude.Nothing,
+      dateCreated = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      state = Prelude.Nothing,
+      supportedOsVersions = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the component.
+componentSummary_arn :: Lens.Lens' ComponentSummary (Prelude.Maybe Prelude.Text)
+componentSummary_arn = Lens.lens (\ComponentSummary' {arn} -> arn) (\s@ComponentSummary' {} a -> s {arn = a} :: ComponentSummary)
+
+-- | The change description of the component.
+componentSummary_changeDescription :: Lens.Lens' ComponentSummary (Prelude.Maybe Prelude.Text)
+componentSummary_changeDescription = Lens.lens (\ComponentSummary' {changeDescription} -> changeDescription) (\s@ComponentSummary' {} a -> s {changeDescription = a} :: ComponentSummary)
+
+-- | The date that the component was created.
+componentSummary_dateCreated :: Lens.Lens' ComponentSummary (Prelude.Maybe Prelude.Text)
+componentSummary_dateCreated = Lens.lens (\ComponentSummary' {dateCreated} -> dateCreated) (\s@ComponentSummary' {} a -> s {dateCreated = a} :: ComponentSummary)
+
+-- | The description of the component.
+componentSummary_description :: Lens.Lens' ComponentSummary (Prelude.Maybe Prelude.Text)
+componentSummary_description = Lens.lens (\ComponentSummary' {description} -> description) (\s@ComponentSummary' {} a -> s {description = a} :: ComponentSummary)
+
+-- | The name of the component.
+componentSummary_name :: Lens.Lens' ComponentSummary (Prelude.Maybe Prelude.Text)
+componentSummary_name = Lens.lens (\ComponentSummary' {name} -> name) (\s@ComponentSummary' {} a -> s {name = a} :: ComponentSummary)
+
+-- | The owner of the component.
+componentSummary_owner :: Lens.Lens' ComponentSummary (Prelude.Maybe Prelude.Text)
+componentSummary_owner = Lens.lens (\ComponentSummary' {owner} -> owner) (\s@ComponentSummary' {} a -> s {owner = a} :: ComponentSummary)
+
+-- | The platform of the component.
+componentSummary_platform :: Lens.Lens' ComponentSummary (Prelude.Maybe Platform)
+componentSummary_platform = Lens.lens (\ComponentSummary' {platform} -> platform) (\s@ComponentSummary' {} a -> s {platform = a} :: ComponentSummary)
+
+-- | Describes the current status of the component.
+componentSummary_state :: Lens.Lens' ComponentSummary (Prelude.Maybe ComponentState)
+componentSummary_state = Lens.lens (\ComponentSummary' {state} -> state) (\s@ComponentSummary' {} a -> s {state = a} :: ComponentSummary)
+
+-- | The operating system (OS) version supported by the component. If the OS
+-- information is available, a prefix match is performed against the base
+-- image OS version during image recipe creation.
+componentSummary_supportedOsVersions :: Lens.Lens' ComponentSummary (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+componentSummary_supportedOsVersions = Lens.lens (\ComponentSummary' {supportedOsVersions} -> supportedOsVersions) (\s@ComponentSummary' {} a -> s {supportedOsVersions = a} :: ComponentSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags associated with the component.
+componentSummary_tags :: Lens.Lens' ComponentSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+componentSummary_tags = Lens.lens (\ComponentSummary' {tags} -> tags) (\s@ComponentSummary' {} a -> s {tags = a} :: ComponentSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of the component denotes whether the component is used to build
+-- the image or only to test it.
+componentSummary_type :: Lens.Lens' ComponentSummary (Prelude.Maybe ComponentType)
+componentSummary_type = Lens.lens (\ComponentSummary' {type'} -> type') (\s@ComponentSummary' {} a -> s {type' = a} :: ComponentSummary)
+
+-- | The version of the component.
+componentSummary_version :: Lens.Lens' ComponentSummary (Prelude.Maybe Prelude.Text)
+componentSummary_version = Lens.lens (\ComponentSummary' {version} -> version) (\s@ComponentSummary' {} a -> s {version = a} :: ComponentSummary)
+
+instance Data.FromJSON ComponentSummary where
+  parseJSON =
+    Data.withObject
+      "ComponentSummary"
+      ( \x ->
+          ComponentSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "changeDescription")
+            Prelude.<*> (x Data..:? "dateCreated")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "platform")
+            Prelude.<*> (x Data..:? "state")
+            Prelude.<*> (x Data..:? "supportedOsVersions")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable ComponentSummary where
+  hashWithSalt _salt ComponentSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` changeDescription
+      `Prelude.hashWithSalt` dateCreated
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` supportedOsVersions
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData ComponentSummary where
+  rnf ComponentSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf changeDescription
+      `Prelude.seq` Prelude.rnf dateCreated
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf supportedOsVersions
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/ImageBuilder/Types/ComponentType.hs b/gen/Amazonka/ImageBuilder/Types/ComponentType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ComponentType.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.ImageBuilder.Types.ComponentType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ComponentType
+  ( ComponentType
+      ( ..,
+        ComponentType_BUILD,
+        ComponentType_TEST
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ComponentType = ComponentType'
+  { fromComponentType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ComponentType_BUILD :: ComponentType
+pattern ComponentType_BUILD = ComponentType' "BUILD"
+
+pattern ComponentType_TEST :: ComponentType
+pattern ComponentType_TEST = ComponentType' "TEST"
+
+{-# COMPLETE
+  ComponentType_BUILD,
+  ComponentType_TEST,
+  ComponentType'
+  #-}
diff --git a/gen/Amazonka/ImageBuilder/Types/ComponentVersion.hs b/gen/Amazonka/ImageBuilder/Types/ComponentVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ComponentVersion.hs
@@ -0,0 +1,279 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.ComponentVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ComponentVersion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.ComponentType
+import Amazonka.ImageBuilder.Types.Platform
+import qualified Amazonka.Prelude as Prelude
+
+-- | The defining characteristics of a specific version of an Amazon Web
+-- Services TOE component.
+--
+-- /See:/ 'newComponentVersion' smart constructor.
+data ComponentVersion = ComponentVersion'
+  { -- | The Amazon Resource Name (ARN) of the component.
+    --
+    -- Semantic versioning is included in each object\'s Amazon Resource Name
+    -- (ARN), at the level that applies to that object as follows:
+    --
+    -- 1.  Versionless ARNs and Name ARNs do not include specific values in any
+    --     of the nodes. The nodes are either left off entirely, or they are
+    --     specified as wildcards, for example: x.x.x.
+    --
+    -- 2.  Version ARNs have only the first three nodes:
+    --     \<major>.\<minor>.\<patch>
+    --
+    -- 3.  Build version ARNs have all four nodes, and point to a specific
+    --     build for a specific version of an object.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date that the component was created.
+    dateCreated :: Prelude.Maybe Prelude.Text,
+    -- | The description of the component.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the component.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The owner of the component.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The platform of the component.
+    platform :: Prelude.Maybe Platform,
+    -- | he operating system (OS) version supported by the component. If the OS
+    -- information is available, a prefix match is performed against the base
+    -- image OS version during image recipe creation.
+    supportedOsVersions :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The type of the component denotes whether the component is used to build
+    -- the image or only to test it.
+    type' :: Prelude.Maybe ComponentType,
+    -- | The semantic version of the component.
+    --
+    -- The semantic version has four nodes:
+    -- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+    -- first three, and can filter on all of them.
+    --
+    -- __Assignment:__ For the first three nodes you can assign any positive
+    -- integer value, including zero, with an upper limit of 2^30-1, or
+    -- 1073741823 for each node. Image Builder automatically assigns the build
+    -- number to the fourth node.
+    --
+    -- __Patterns:__ You can use any numeric pattern that adheres to the
+    -- assignment requirements for the nodes that you can assign. For example,
+    -- you might choose a software version pattern, such as 1.0.0, or a date,
+    -- such as 2021.01.01.
+    --
+    -- __Filtering:__ With semantic versioning, you have the flexibility to use
+    -- wildcards (x) to specify the most recent versions or nodes when
+    -- selecting the base image or components for your recipe. When you use a
+    -- wildcard in any node, all nodes to the right of the first wildcard must
+    -- also be wildcards.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'componentVersion_arn' - The Amazon Resource Name (ARN) of the component.
+--
+-- Semantic versioning is included in each object\'s Amazon Resource Name
+-- (ARN), at the level that applies to that object as follows:
+--
+-- 1.  Versionless ARNs and Name ARNs do not include specific values in any
+--     of the nodes. The nodes are either left off entirely, or they are
+--     specified as wildcards, for example: x.x.x.
+--
+-- 2.  Version ARNs have only the first three nodes:
+--     \<major>.\<minor>.\<patch>
+--
+-- 3.  Build version ARNs have all four nodes, and point to a specific
+--     build for a specific version of an object.
+--
+-- 'dateCreated', 'componentVersion_dateCreated' - The date that the component was created.
+--
+-- 'description', 'componentVersion_description' - The description of the component.
+--
+-- 'name', 'componentVersion_name' - The name of the component.
+--
+-- 'owner', 'componentVersion_owner' - The owner of the component.
+--
+-- 'platform', 'componentVersion_platform' - The platform of the component.
+--
+-- 'supportedOsVersions', 'componentVersion_supportedOsVersions' - he operating system (OS) version supported by the component. If the OS
+-- information is available, a prefix match is performed against the base
+-- image OS version during image recipe creation.
+--
+-- 'type'', 'componentVersion_type' - The type of the component denotes whether the component is used to build
+-- the image or only to test it.
+--
+-- 'version', 'componentVersion_version' - The semantic version of the component.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+--
+-- __Filtering:__ With semantic versioning, you have the flexibility to use
+-- wildcards (x) to specify the most recent versions or nodes when
+-- selecting the base image or components for your recipe. When you use a
+-- wildcard in any node, all nodes to the right of the first wildcard must
+-- also be wildcards.
+newComponentVersion ::
+  ComponentVersion
+newComponentVersion =
+  ComponentVersion'
+    { arn = Prelude.Nothing,
+      dateCreated = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      supportedOsVersions = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the component.
+--
+-- Semantic versioning is included in each object\'s Amazon Resource Name
+-- (ARN), at the level that applies to that object as follows:
+--
+-- 1.  Versionless ARNs and Name ARNs do not include specific values in any
+--     of the nodes. The nodes are either left off entirely, or they are
+--     specified as wildcards, for example: x.x.x.
+--
+-- 2.  Version ARNs have only the first three nodes:
+--     \<major>.\<minor>.\<patch>
+--
+-- 3.  Build version ARNs have all four nodes, and point to a specific
+--     build for a specific version of an object.
+componentVersion_arn :: Lens.Lens' ComponentVersion (Prelude.Maybe Prelude.Text)
+componentVersion_arn = Lens.lens (\ComponentVersion' {arn} -> arn) (\s@ComponentVersion' {} a -> s {arn = a} :: ComponentVersion)
+
+-- | The date that the component was created.
+componentVersion_dateCreated :: Lens.Lens' ComponentVersion (Prelude.Maybe Prelude.Text)
+componentVersion_dateCreated = Lens.lens (\ComponentVersion' {dateCreated} -> dateCreated) (\s@ComponentVersion' {} a -> s {dateCreated = a} :: ComponentVersion)
+
+-- | The description of the component.
+componentVersion_description :: Lens.Lens' ComponentVersion (Prelude.Maybe Prelude.Text)
+componentVersion_description = Lens.lens (\ComponentVersion' {description} -> description) (\s@ComponentVersion' {} a -> s {description = a} :: ComponentVersion)
+
+-- | The name of the component.
+componentVersion_name :: Lens.Lens' ComponentVersion (Prelude.Maybe Prelude.Text)
+componentVersion_name = Lens.lens (\ComponentVersion' {name} -> name) (\s@ComponentVersion' {} a -> s {name = a} :: ComponentVersion)
+
+-- | The owner of the component.
+componentVersion_owner :: Lens.Lens' ComponentVersion (Prelude.Maybe Prelude.Text)
+componentVersion_owner = Lens.lens (\ComponentVersion' {owner} -> owner) (\s@ComponentVersion' {} a -> s {owner = a} :: ComponentVersion)
+
+-- | The platform of the component.
+componentVersion_platform :: Lens.Lens' ComponentVersion (Prelude.Maybe Platform)
+componentVersion_platform = Lens.lens (\ComponentVersion' {platform} -> platform) (\s@ComponentVersion' {} a -> s {platform = a} :: ComponentVersion)
+
+-- | he operating system (OS) version supported by the component. If the OS
+-- information is available, a prefix match is performed against the base
+-- image OS version during image recipe creation.
+componentVersion_supportedOsVersions :: Lens.Lens' ComponentVersion (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+componentVersion_supportedOsVersions = Lens.lens (\ComponentVersion' {supportedOsVersions} -> supportedOsVersions) (\s@ComponentVersion' {} a -> s {supportedOsVersions = a} :: ComponentVersion) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of the component denotes whether the component is used to build
+-- the image or only to test it.
+componentVersion_type :: Lens.Lens' ComponentVersion (Prelude.Maybe ComponentType)
+componentVersion_type = Lens.lens (\ComponentVersion' {type'} -> type') (\s@ComponentVersion' {} a -> s {type' = a} :: ComponentVersion)
+
+-- | The semantic version of the component.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+--
+-- __Filtering:__ With semantic versioning, you have the flexibility to use
+-- wildcards (x) to specify the most recent versions or nodes when
+-- selecting the base image or components for your recipe. When you use a
+-- wildcard in any node, all nodes to the right of the first wildcard must
+-- also be wildcards.
+componentVersion_version :: Lens.Lens' ComponentVersion (Prelude.Maybe Prelude.Text)
+componentVersion_version = Lens.lens (\ComponentVersion' {version} -> version) (\s@ComponentVersion' {} a -> s {version = a} :: ComponentVersion)
+
+instance Data.FromJSON ComponentVersion where
+  parseJSON =
+    Data.withObject
+      "ComponentVersion"
+      ( \x ->
+          ComponentVersion'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "dateCreated")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "platform")
+            Prelude.<*> (x Data..:? "supportedOsVersions")
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable ComponentVersion where
+  hashWithSalt _salt ComponentVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` dateCreated
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` supportedOsVersions
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData ComponentVersion where
+  rnf ComponentVersion' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf dateCreated
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf supportedOsVersions
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/ImageBuilder/Types/Container.hs b/gen/Amazonka/ImageBuilder/Types/Container.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/Container.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.Container
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.Container where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A container encapsulates the runtime environment for an application.
+--
+-- /See:/ 'newContainer' smart constructor.
+data Container = Container'
+  { -- | A list of URIs for containers created in the context Region.
+    imageUris :: Prelude.Maybe [Prelude.Text],
+    -- | Containers and container images are Region-specific. This is the Region
+    -- context for the container.
+    region :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Container' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageUris', 'container_imageUris' - A list of URIs for containers created in the context Region.
+--
+-- 'region', 'container_region' - Containers and container images are Region-specific. This is the Region
+-- context for the container.
+newContainer ::
+  Container
+newContainer =
+  Container'
+    { imageUris = Prelude.Nothing,
+      region = Prelude.Nothing
+    }
+
+-- | A list of URIs for containers created in the context Region.
+container_imageUris :: Lens.Lens' Container (Prelude.Maybe [Prelude.Text])
+container_imageUris = Lens.lens (\Container' {imageUris} -> imageUris) (\s@Container' {} a -> s {imageUris = a} :: Container) Prelude.. Lens.mapping Lens.coerced
+
+-- | Containers and container images are Region-specific. This is the Region
+-- context for the container.
+container_region :: Lens.Lens' Container (Prelude.Maybe Prelude.Text)
+container_region = Lens.lens (\Container' {region} -> region) (\s@Container' {} a -> s {region = a} :: Container)
+
+instance Data.FromJSON Container where
+  parseJSON =
+    Data.withObject
+      "Container"
+      ( \x ->
+          Container'
+            Prelude.<$> (x Data..:? "imageUris" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "region")
+      )
+
+instance Prelude.Hashable Container where
+  hashWithSalt _salt Container' {..} =
+    _salt
+      `Prelude.hashWithSalt` imageUris
+      `Prelude.hashWithSalt` region
+
+instance Prelude.NFData Container where
+  rnf Container' {..} =
+    Prelude.rnf imageUris
+      `Prelude.seq` Prelude.rnf region
diff --git a/gen/Amazonka/ImageBuilder/Types/ContainerDistributionConfiguration.hs b/gen/Amazonka/ImageBuilder/Types/ContainerDistributionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ContainerDistributionConfiguration.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.ContainerDistributionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ContainerDistributionConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.TargetContainerRepository
+import qualified Amazonka.Prelude as Prelude
+
+-- | Container distribution settings for encryption, licensing, and sharing
+-- in a specific Region.
+--
+-- /See:/ 'newContainerDistributionConfiguration' smart constructor.
+data ContainerDistributionConfiguration = ContainerDistributionConfiguration'
+  { -- | Tags that are attached to the container distribution configuration.
+    containerTags :: Prelude.Maybe [Prelude.Text],
+    -- | The description of the container distribution configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The destination repository for the container distribution configuration.
+    targetRepository :: TargetContainerRepository
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ContainerDistributionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'containerTags', 'containerDistributionConfiguration_containerTags' - Tags that are attached to the container distribution configuration.
+--
+-- 'description', 'containerDistributionConfiguration_description' - The description of the container distribution configuration.
+--
+-- 'targetRepository', 'containerDistributionConfiguration_targetRepository' - The destination repository for the container distribution configuration.
+newContainerDistributionConfiguration ::
+  -- | 'targetRepository'
+  TargetContainerRepository ->
+  ContainerDistributionConfiguration
+newContainerDistributionConfiguration
+  pTargetRepository_ =
+    ContainerDistributionConfiguration'
+      { containerTags =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        targetRepository = pTargetRepository_
+      }
+
+-- | Tags that are attached to the container distribution configuration.
+containerDistributionConfiguration_containerTags :: Lens.Lens' ContainerDistributionConfiguration (Prelude.Maybe [Prelude.Text])
+containerDistributionConfiguration_containerTags = Lens.lens (\ContainerDistributionConfiguration' {containerTags} -> containerTags) (\s@ContainerDistributionConfiguration' {} a -> s {containerTags = a} :: ContainerDistributionConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The description of the container distribution configuration.
+containerDistributionConfiguration_description :: Lens.Lens' ContainerDistributionConfiguration (Prelude.Maybe Prelude.Text)
+containerDistributionConfiguration_description = Lens.lens (\ContainerDistributionConfiguration' {description} -> description) (\s@ContainerDistributionConfiguration' {} a -> s {description = a} :: ContainerDistributionConfiguration)
+
+-- | The destination repository for the container distribution configuration.
+containerDistributionConfiguration_targetRepository :: Lens.Lens' ContainerDistributionConfiguration TargetContainerRepository
+containerDistributionConfiguration_targetRepository = Lens.lens (\ContainerDistributionConfiguration' {targetRepository} -> targetRepository) (\s@ContainerDistributionConfiguration' {} a -> s {targetRepository = a} :: ContainerDistributionConfiguration)
+
+instance
+  Data.FromJSON
+    ContainerDistributionConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "ContainerDistributionConfiguration"
+      ( \x ->
+          ContainerDistributionConfiguration'
+            Prelude.<$> (x Data..:? "containerTags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..: "targetRepository")
+      )
+
+instance
+  Prelude.Hashable
+    ContainerDistributionConfiguration
+  where
+  hashWithSalt
+    _salt
+    ContainerDistributionConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` containerTags
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` targetRepository
+
+instance
+  Prelude.NFData
+    ContainerDistributionConfiguration
+  where
+  rnf ContainerDistributionConfiguration' {..} =
+    Prelude.rnf containerTags
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf targetRepository
+
+instance
+  Data.ToJSON
+    ContainerDistributionConfiguration
+  where
+  toJSON ContainerDistributionConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("containerTags" Data..=) Prelude.<$> containerTags,
+            ("description" Data..=) Prelude.<$> description,
+            Prelude.Just
+              ("targetRepository" Data..= targetRepository)
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/ContainerRecipe.hs b/gen/Amazonka/ImageBuilder/Types/ContainerRecipe.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ContainerRecipe.hs
@@ -0,0 +1,386 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.ContainerRecipe
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ContainerRecipe where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.ComponentConfiguration
+import Amazonka.ImageBuilder.Types.ContainerType
+import Amazonka.ImageBuilder.Types.InstanceConfiguration
+import Amazonka.ImageBuilder.Types.Platform
+import Amazonka.ImageBuilder.Types.TargetContainerRepository
+import qualified Amazonka.Prelude as Prelude
+
+-- | A container recipe.
+--
+-- /See:/ 'newContainerRecipe' smart constructor.
+data ContainerRecipe = ContainerRecipe'
+  { -- | The Amazon Resource Name (ARN) of the container recipe.
+    --
+    -- Semantic versioning is included in each object\'s Amazon Resource Name
+    -- (ARN), at the level that applies to that object as follows:
+    --
+    -- 1.  Versionless ARNs and Name ARNs do not include specific values in any
+    --     of the nodes. The nodes are either left off entirely, or they are
+    --     specified as wildcards, for example: x.x.x.
+    --
+    -- 2.  Version ARNs have only the first three nodes:
+    --     \<major>.\<minor>.\<patch>
+    --
+    -- 3.  Build version ARNs have all four nodes, and point to a specific
+    --     build for a specific version of an object.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Components for build and test that are included in the container recipe.
+    components :: Prelude.Maybe (Prelude.NonEmpty ComponentConfiguration),
+    -- | Specifies the type of container, such as Docker.
+    containerType :: Prelude.Maybe ContainerType,
+    -- | The date when this container recipe was created.
+    dateCreated :: Prelude.Maybe Prelude.Text,
+    -- | The description of the container recipe.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Dockerfiles are text documents that are used to build Docker containers,
+    -- and ensure that they contain all of the elements required by the
+    -- application running inside. The template data consists of contextual
+    -- variables where Image Builder places build information or scripts, based
+    -- on your container image recipe.
+    dockerfileTemplateData :: Prelude.Maybe Prelude.Text,
+    -- | A flag that indicates if the target container is encrypted.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | A group of options that can be used to configure an instance for
+    -- building and testing container images.
+    instanceConfiguration :: Prelude.Maybe InstanceConfiguration,
+    -- | Identifies which KMS key is used to encrypt the container image for
+    -- distribution to the target Region.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the container recipe.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The owner of the container recipe.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The base image for the container recipe.
+    parentImage :: Prelude.Maybe Prelude.Text,
+    -- | The system platform for the container, such as Windows or Linux.
+    platform :: Prelude.Maybe Platform,
+    -- | Tags that are attached to the container recipe.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The destination repository for the container image.
+    targetRepository :: Prelude.Maybe TargetContainerRepository,
+    -- | The semantic version of the container recipe.
+    --
+    -- The semantic version has four nodes:
+    -- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+    -- first three, and can filter on all of them.
+    --
+    -- __Assignment:__ For the first three nodes you can assign any positive
+    -- integer value, including zero, with an upper limit of 2^30-1, or
+    -- 1073741823 for each node. Image Builder automatically assigns the build
+    -- number to the fourth node.
+    --
+    -- __Patterns:__ You can use any numeric pattern that adheres to the
+    -- assignment requirements for the nodes that you can assign. For example,
+    -- you might choose a software version pattern, such as 1.0.0, or a date,
+    -- such as 2021.01.01.
+    --
+    -- __Filtering:__ With semantic versioning, you have the flexibility to use
+    -- wildcards (x) to specify the most recent versions or nodes when
+    -- selecting the base image or components for your recipe. When you use a
+    -- wildcard in any node, all nodes to the right of the first wildcard must
+    -- also be wildcards.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The working directory for use during build and test workflows.
+    workingDirectory :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ContainerRecipe' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'containerRecipe_arn' - The Amazon Resource Name (ARN) of the container recipe.
+--
+-- Semantic versioning is included in each object\'s Amazon Resource Name
+-- (ARN), at the level that applies to that object as follows:
+--
+-- 1.  Versionless ARNs and Name ARNs do not include specific values in any
+--     of the nodes. The nodes are either left off entirely, or they are
+--     specified as wildcards, for example: x.x.x.
+--
+-- 2.  Version ARNs have only the first three nodes:
+--     \<major>.\<minor>.\<patch>
+--
+-- 3.  Build version ARNs have all four nodes, and point to a specific
+--     build for a specific version of an object.
+--
+-- 'components', 'containerRecipe_components' - Components for build and test that are included in the container recipe.
+--
+-- 'containerType', 'containerRecipe_containerType' - Specifies the type of container, such as Docker.
+--
+-- 'dateCreated', 'containerRecipe_dateCreated' - The date when this container recipe was created.
+--
+-- 'description', 'containerRecipe_description' - The description of the container recipe.
+--
+-- 'dockerfileTemplateData', 'containerRecipe_dockerfileTemplateData' - Dockerfiles are text documents that are used to build Docker containers,
+-- and ensure that they contain all of the elements required by the
+-- application running inside. The template data consists of contextual
+-- variables where Image Builder places build information or scripts, based
+-- on your container image recipe.
+--
+-- 'encrypted', 'containerRecipe_encrypted' - A flag that indicates if the target container is encrypted.
+--
+-- 'instanceConfiguration', 'containerRecipe_instanceConfiguration' - A group of options that can be used to configure an instance for
+-- building and testing container images.
+--
+-- 'kmsKeyId', 'containerRecipe_kmsKeyId' - Identifies which KMS key is used to encrypt the container image for
+-- distribution to the target Region.
+--
+-- 'name', 'containerRecipe_name' - The name of the container recipe.
+--
+-- 'owner', 'containerRecipe_owner' - The owner of the container recipe.
+--
+-- 'parentImage', 'containerRecipe_parentImage' - The base image for the container recipe.
+--
+-- 'platform', 'containerRecipe_platform' - The system platform for the container, such as Windows or Linux.
+--
+-- 'tags', 'containerRecipe_tags' - Tags that are attached to the container recipe.
+--
+-- 'targetRepository', 'containerRecipe_targetRepository' - The destination repository for the container image.
+--
+-- 'version', 'containerRecipe_version' - The semantic version of the container recipe.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+--
+-- __Filtering:__ With semantic versioning, you have the flexibility to use
+-- wildcards (x) to specify the most recent versions or nodes when
+-- selecting the base image or components for your recipe. When you use a
+-- wildcard in any node, all nodes to the right of the first wildcard must
+-- also be wildcards.
+--
+-- 'workingDirectory', 'containerRecipe_workingDirectory' - The working directory for use during build and test workflows.
+newContainerRecipe ::
+  ContainerRecipe
+newContainerRecipe =
+  ContainerRecipe'
+    { arn = Prelude.Nothing,
+      components = Prelude.Nothing,
+      containerType = Prelude.Nothing,
+      dateCreated = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dockerfileTemplateData = Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      instanceConfiguration = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      name = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      parentImage = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      targetRepository = Prelude.Nothing,
+      version = Prelude.Nothing,
+      workingDirectory = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the container recipe.
+--
+-- Semantic versioning is included in each object\'s Amazon Resource Name
+-- (ARN), at the level that applies to that object as follows:
+--
+-- 1.  Versionless ARNs and Name ARNs do not include specific values in any
+--     of the nodes. The nodes are either left off entirely, or they are
+--     specified as wildcards, for example: x.x.x.
+--
+-- 2.  Version ARNs have only the first three nodes:
+--     \<major>.\<minor>.\<patch>
+--
+-- 3.  Build version ARNs have all four nodes, and point to a specific
+--     build for a specific version of an object.
+containerRecipe_arn :: Lens.Lens' ContainerRecipe (Prelude.Maybe Prelude.Text)
+containerRecipe_arn = Lens.lens (\ContainerRecipe' {arn} -> arn) (\s@ContainerRecipe' {} a -> s {arn = a} :: ContainerRecipe)
+
+-- | Components for build and test that are included in the container recipe.
+containerRecipe_components :: Lens.Lens' ContainerRecipe (Prelude.Maybe (Prelude.NonEmpty ComponentConfiguration))
+containerRecipe_components = Lens.lens (\ContainerRecipe' {components} -> components) (\s@ContainerRecipe' {} a -> s {components = a} :: ContainerRecipe) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the type of container, such as Docker.
+containerRecipe_containerType :: Lens.Lens' ContainerRecipe (Prelude.Maybe ContainerType)
+containerRecipe_containerType = Lens.lens (\ContainerRecipe' {containerType} -> containerType) (\s@ContainerRecipe' {} a -> s {containerType = a} :: ContainerRecipe)
+
+-- | The date when this container recipe was created.
+containerRecipe_dateCreated :: Lens.Lens' ContainerRecipe (Prelude.Maybe Prelude.Text)
+containerRecipe_dateCreated = Lens.lens (\ContainerRecipe' {dateCreated} -> dateCreated) (\s@ContainerRecipe' {} a -> s {dateCreated = a} :: ContainerRecipe)
+
+-- | The description of the container recipe.
+containerRecipe_description :: Lens.Lens' ContainerRecipe (Prelude.Maybe Prelude.Text)
+containerRecipe_description = Lens.lens (\ContainerRecipe' {description} -> description) (\s@ContainerRecipe' {} a -> s {description = a} :: ContainerRecipe)
+
+-- | Dockerfiles are text documents that are used to build Docker containers,
+-- and ensure that they contain all of the elements required by the
+-- application running inside. The template data consists of contextual
+-- variables where Image Builder places build information or scripts, based
+-- on your container image recipe.
+containerRecipe_dockerfileTemplateData :: Lens.Lens' ContainerRecipe (Prelude.Maybe Prelude.Text)
+containerRecipe_dockerfileTemplateData = Lens.lens (\ContainerRecipe' {dockerfileTemplateData} -> dockerfileTemplateData) (\s@ContainerRecipe' {} a -> s {dockerfileTemplateData = a} :: ContainerRecipe)
+
+-- | A flag that indicates if the target container is encrypted.
+containerRecipe_encrypted :: Lens.Lens' ContainerRecipe (Prelude.Maybe Prelude.Bool)
+containerRecipe_encrypted = Lens.lens (\ContainerRecipe' {encrypted} -> encrypted) (\s@ContainerRecipe' {} a -> s {encrypted = a} :: ContainerRecipe)
+
+-- | A group of options that can be used to configure an instance for
+-- building and testing container images.
+containerRecipe_instanceConfiguration :: Lens.Lens' ContainerRecipe (Prelude.Maybe InstanceConfiguration)
+containerRecipe_instanceConfiguration = Lens.lens (\ContainerRecipe' {instanceConfiguration} -> instanceConfiguration) (\s@ContainerRecipe' {} a -> s {instanceConfiguration = a} :: ContainerRecipe)
+
+-- | Identifies which KMS key is used to encrypt the container image for
+-- distribution to the target Region.
+containerRecipe_kmsKeyId :: Lens.Lens' ContainerRecipe (Prelude.Maybe Prelude.Text)
+containerRecipe_kmsKeyId = Lens.lens (\ContainerRecipe' {kmsKeyId} -> kmsKeyId) (\s@ContainerRecipe' {} a -> s {kmsKeyId = a} :: ContainerRecipe)
+
+-- | The name of the container recipe.
+containerRecipe_name :: Lens.Lens' ContainerRecipe (Prelude.Maybe Prelude.Text)
+containerRecipe_name = Lens.lens (\ContainerRecipe' {name} -> name) (\s@ContainerRecipe' {} a -> s {name = a} :: ContainerRecipe)
+
+-- | The owner of the container recipe.
+containerRecipe_owner :: Lens.Lens' ContainerRecipe (Prelude.Maybe Prelude.Text)
+containerRecipe_owner = Lens.lens (\ContainerRecipe' {owner} -> owner) (\s@ContainerRecipe' {} a -> s {owner = a} :: ContainerRecipe)
+
+-- | The base image for the container recipe.
+containerRecipe_parentImage :: Lens.Lens' ContainerRecipe (Prelude.Maybe Prelude.Text)
+containerRecipe_parentImage = Lens.lens (\ContainerRecipe' {parentImage} -> parentImage) (\s@ContainerRecipe' {} a -> s {parentImage = a} :: ContainerRecipe)
+
+-- | The system platform for the container, such as Windows or Linux.
+containerRecipe_platform :: Lens.Lens' ContainerRecipe (Prelude.Maybe Platform)
+containerRecipe_platform = Lens.lens (\ContainerRecipe' {platform} -> platform) (\s@ContainerRecipe' {} a -> s {platform = a} :: ContainerRecipe)
+
+-- | Tags that are attached to the container recipe.
+containerRecipe_tags :: Lens.Lens' ContainerRecipe (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+containerRecipe_tags = Lens.lens (\ContainerRecipe' {tags} -> tags) (\s@ContainerRecipe' {} a -> s {tags = a} :: ContainerRecipe) Prelude.. Lens.mapping Lens.coerced
+
+-- | The destination repository for the container image.
+containerRecipe_targetRepository :: Lens.Lens' ContainerRecipe (Prelude.Maybe TargetContainerRepository)
+containerRecipe_targetRepository = Lens.lens (\ContainerRecipe' {targetRepository} -> targetRepository) (\s@ContainerRecipe' {} a -> s {targetRepository = a} :: ContainerRecipe)
+
+-- | The semantic version of the container recipe.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+--
+-- __Filtering:__ With semantic versioning, you have the flexibility to use
+-- wildcards (x) to specify the most recent versions or nodes when
+-- selecting the base image or components for your recipe. When you use a
+-- wildcard in any node, all nodes to the right of the first wildcard must
+-- also be wildcards.
+containerRecipe_version :: Lens.Lens' ContainerRecipe (Prelude.Maybe Prelude.Text)
+containerRecipe_version = Lens.lens (\ContainerRecipe' {version} -> version) (\s@ContainerRecipe' {} a -> s {version = a} :: ContainerRecipe)
+
+-- | The working directory for use during build and test workflows.
+containerRecipe_workingDirectory :: Lens.Lens' ContainerRecipe (Prelude.Maybe Prelude.Text)
+containerRecipe_workingDirectory = Lens.lens (\ContainerRecipe' {workingDirectory} -> workingDirectory) (\s@ContainerRecipe' {} a -> s {workingDirectory = a} :: ContainerRecipe)
+
+instance Data.FromJSON ContainerRecipe where
+  parseJSON =
+    Data.withObject
+      "ContainerRecipe"
+      ( \x ->
+          ContainerRecipe'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "components")
+            Prelude.<*> (x Data..:? "containerType")
+            Prelude.<*> (x Data..:? "dateCreated")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "dockerfileTemplateData")
+            Prelude.<*> (x Data..:? "encrypted")
+            Prelude.<*> (x Data..:? "instanceConfiguration")
+            Prelude.<*> (x Data..:? "kmsKeyId")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "parentImage")
+            Prelude.<*> (x Data..:? "platform")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "targetRepository")
+            Prelude.<*> (x Data..:? "version")
+            Prelude.<*> (x Data..:? "workingDirectory")
+      )
+
+instance Prelude.Hashable ContainerRecipe where
+  hashWithSalt _salt ContainerRecipe' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` components
+      `Prelude.hashWithSalt` containerType
+      `Prelude.hashWithSalt` dateCreated
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dockerfileTemplateData
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` instanceConfiguration
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` parentImage
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` targetRepository
+      `Prelude.hashWithSalt` version
+      `Prelude.hashWithSalt` workingDirectory
+
+instance Prelude.NFData ContainerRecipe where
+  rnf ContainerRecipe' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf components
+      `Prelude.seq` Prelude.rnf containerType
+      `Prelude.seq` Prelude.rnf dateCreated
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dockerfileTemplateData
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf instanceConfiguration
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf parentImage
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf targetRepository
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf workingDirectory
diff --git a/gen/Amazonka/ImageBuilder/Types/ContainerRecipeSummary.hs b/gen/Amazonka/ImageBuilder/Types/ContainerRecipeSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ContainerRecipeSummary.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.ContainerRecipeSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ContainerRecipeSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.ContainerType
+import Amazonka.ImageBuilder.Types.Platform
+import qualified Amazonka.Prelude as Prelude
+
+-- | A summary of a container recipe
+--
+-- /See:/ 'newContainerRecipeSummary' smart constructor.
+data ContainerRecipeSummary = ContainerRecipeSummary'
+  { -- | The Amazon Resource Name (ARN) of the container recipe.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the type of container, such as \"Docker\".
+    containerType :: Prelude.Maybe ContainerType,
+    -- | The date when this container recipe was created.
+    dateCreated :: Prelude.Maybe Prelude.Text,
+    -- | The name of the container recipe.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The owner of the container recipe.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The base image for the container recipe.
+    parentImage :: Prelude.Maybe Prelude.Text,
+    -- | The system platform for the container, such as Windows or Linux.
+    platform :: Prelude.Maybe Platform,
+    -- | Tags that are attached to the container recipe.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ContainerRecipeSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'containerRecipeSummary_arn' - The Amazon Resource Name (ARN) of the container recipe.
+--
+-- 'containerType', 'containerRecipeSummary_containerType' - Specifies the type of container, such as \"Docker\".
+--
+-- 'dateCreated', 'containerRecipeSummary_dateCreated' - The date when this container recipe was created.
+--
+-- 'name', 'containerRecipeSummary_name' - The name of the container recipe.
+--
+-- 'owner', 'containerRecipeSummary_owner' - The owner of the container recipe.
+--
+-- 'parentImage', 'containerRecipeSummary_parentImage' - The base image for the container recipe.
+--
+-- 'platform', 'containerRecipeSummary_platform' - The system platform for the container, such as Windows or Linux.
+--
+-- 'tags', 'containerRecipeSummary_tags' - Tags that are attached to the container recipe.
+newContainerRecipeSummary ::
+  ContainerRecipeSummary
+newContainerRecipeSummary =
+  ContainerRecipeSummary'
+    { arn = Prelude.Nothing,
+      containerType = Prelude.Nothing,
+      dateCreated = Prelude.Nothing,
+      name = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      parentImage = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the container recipe.
+containerRecipeSummary_arn :: Lens.Lens' ContainerRecipeSummary (Prelude.Maybe Prelude.Text)
+containerRecipeSummary_arn = Lens.lens (\ContainerRecipeSummary' {arn} -> arn) (\s@ContainerRecipeSummary' {} a -> s {arn = a} :: ContainerRecipeSummary)
+
+-- | Specifies the type of container, such as \"Docker\".
+containerRecipeSummary_containerType :: Lens.Lens' ContainerRecipeSummary (Prelude.Maybe ContainerType)
+containerRecipeSummary_containerType = Lens.lens (\ContainerRecipeSummary' {containerType} -> containerType) (\s@ContainerRecipeSummary' {} a -> s {containerType = a} :: ContainerRecipeSummary)
+
+-- | The date when this container recipe was created.
+containerRecipeSummary_dateCreated :: Lens.Lens' ContainerRecipeSummary (Prelude.Maybe Prelude.Text)
+containerRecipeSummary_dateCreated = Lens.lens (\ContainerRecipeSummary' {dateCreated} -> dateCreated) (\s@ContainerRecipeSummary' {} a -> s {dateCreated = a} :: ContainerRecipeSummary)
+
+-- | The name of the container recipe.
+containerRecipeSummary_name :: Lens.Lens' ContainerRecipeSummary (Prelude.Maybe Prelude.Text)
+containerRecipeSummary_name = Lens.lens (\ContainerRecipeSummary' {name} -> name) (\s@ContainerRecipeSummary' {} a -> s {name = a} :: ContainerRecipeSummary)
+
+-- | The owner of the container recipe.
+containerRecipeSummary_owner :: Lens.Lens' ContainerRecipeSummary (Prelude.Maybe Prelude.Text)
+containerRecipeSummary_owner = Lens.lens (\ContainerRecipeSummary' {owner} -> owner) (\s@ContainerRecipeSummary' {} a -> s {owner = a} :: ContainerRecipeSummary)
+
+-- | The base image for the container recipe.
+containerRecipeSummary_parentImage :: Lens.Lens' ContainerRecipeSummary (Prelude.Maybe Prelude.Text)
+containerRecipeSummary_parentImage = Lens.lens (\ContainerRecipeSummary' {parentImage} -> parentImage) (\s@ContainerRecipeSummary' {} a -> s {parentImage = a} :: ContainerRecipeSummary)
+
+-- | The system platform for the container, such as Windows or Linux.
+containerRecipeSummary_platform :: Lens.Lens' ContainerRecipeSummary (Prelude.Maybe Platform)
+containerRecipeSummary_platform = Lens.lens (\ContainerRecipeSummary' {platform} -> platform) (\s@ContainerRecipeSummary' {} a -> s {platform = a} :: ContainerRecipeSummary)
+
+-- | Tags that are attached to the container recipe.
+containerRecipeSummary_tags :: Lens.Lens' ContainerRecipeSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+containerRecipeSummary_tags = Lens.lens (\ContainerRecipeSummary' {tags} -> tags) (\s@ContainerRecipeSummary' {} a -> s {tags = a} :: ContainerRecipeSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ContainerRecipeSummary where
+  parseJSON =
+    Data.withObject
+      "ContainerRecipeSummary"
+      ( \x ->
+          ContainerRecipeSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "containerType")
+            Prelude.<*> (x Data..:? "dateCreated")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "parentImage")
+            Prelude.<*> (x Data..:? "platform")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ContainerRecipeSummary where
+  hashWithSalt _salt ContainerRecipeSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` containerType
+      `Prelude.hashWithSalt` dateCreated
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` parentImage
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData ContainerRecipeSummary where
+  rnf ContainerRecipeSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf containerType
+      `Prelude.seq` Prelude.rnf dateCreated
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf parentImage
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/ImageBuilder/Types/ContainerRepositoryService.hs b/gen/Amazonka/ImageBuilder/Types/ContainerRepositoryService.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ContainerRepositoryService.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.ImageBuilder.Types.ContainerRepositoryService
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ContainerRepositoryService
+  ( ContainerRepositoryService
+      ( ..,
+        ContainerRepositoryService_ECR
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ContainerRepositoryService = ContainerRepositoryService'
+  { fromContainerRepositoryService ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ContainerRepositoryService_ECR :: ContainerRepositoryService
+pattern ContainerRepositoryService_ECR = ContainerRepositoryService' "ECR"
+
+{-# COMPLETE
+  ContainerRepositoryService_ECR,
+  ContainerRepositoryService'
+  #-}
diff --git a/gen/Amazonka/ImageBuilder/Types/ContainerType.hs b/gen/Amazonka/ImageBuilder/Types/ContainerType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ContainerType.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.ImageBuilder.Types.ContainerType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ContainerType
+  ( ContainerType
+      ( ..,
+        ContainerType_DOCKER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ContainerType = ContainerType'
+  { fromContainerType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ContainerType_DOCKER :: ContainerType
+pattern ContainerType_DOCKER = ContainerType' "DOCKER"
+
+{-# COMPLETE
+  ContainerType_DOCKER,
+  ContainerType'
+  #-}
diff --git a/gen/Amazonka/ImageBuilder/Types/DiskImageFormat.hs b/gen/Amazonka/ImageBuilder/Types/DiskImageFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/DiskImageFormat.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.ImageBuilder.Types.DiskImageFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.DiskImageFormat
+  ( DiskImageFormat
+      ( ..,
+        DiskImageFormat_RAW,
+        DiskImageFormat_VHD,
+        DiskImageFormat_VMDK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DiskImageFormat = DiskImageFormat'
+  { fromDiskImageFormat ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DiskImageFormat_RAW :: DiskImageFormat
+pattern DiskImageFormat_RAW = DiskImageFormat' "RAW"
+
+pattern DiskImageFormat_VHD :: DiskImageFormat
+pattern DiskImageFormat_VHD = DiskImageFormat' "VHD"
+
+pattern DiskImageFormat_VMDK :: DiskImageFormat
+pattern DiskImageFormat_VMDK = DiskImageFormat' "VMDK"
+
+{-# COMPLETE
+  DiskImageFormat_RAW,
+  DiskImageFormat_VHD,
+  DiskImageFormat_VMDK,
+  DiskImageFormat'
+  #-}
diff --git a/gen/Amazonka/ImageBuilder/Types/Distribution.hs b/gen/Amazonka/ImageBuilder/Types/Distribution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/Distribution.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.Distribution
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.Distribution where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.AmiDistributionConfiguration
+import Amazonka.ImageBuilder.Types.ContainerDistributionConfiguration
+import Amazonka.ImageBuilder.Types.FastLaunchConfiguration
+import Amazonka.ImageBuilder.Types.LaunchTemplateConfiguration
+import Amazonka.ImageBuilder.Types.S3ExportConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines the settings for a specific Region.
+--
+-- /See:/ 'newDistribution' smart constructor.
+data Distribution = Distribution'
+  { -- | The specific AMI settings; for example, launch permissions or AMI tags.
+    amiDistributionConfiguration :: Prelude.Maybe AmiDistributionConfiguration,
+    -- | Container distribution settings for encryption, licensing, and sharing
+    -- in a specific Region.
+    containerDistributionConfiguration :: Prelude.Maybe ContainerDistributionConfiguration,
+    -- | The Windows faster-launching configurations to use for AMI distribution.
+    fastLaunchConfigurations :: Prelude.Maybe (Prelude.NonEmpty FastLaunchConfiguration),
+    -- | A group of launchTemplateConfiguration settings that apply to image
+    -- distribution for specified accounts.
+    launchTemplateConfigurations :: Prelude.Maybe (Prelude.NonEmpty LaunchTemplateConfiguration),
+    -- | The License Manager Configuration to associate with the AMI in the
+    -- specified Region.
+    licenseConfigurationArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | Configure export settings to deliver disk images created from your image
+    -- build, using a file format that is compatible with your VMs in that
+    -- Region.
+    s3ExportConfiguration :: Prelude.Maybe S3ExportConfiguration,
+    -- | The target Region.
+    region :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Distribution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'amiDistributionConfiguration', 'distribution_amiDistributionConfiguration' - The specific AMI settings; for example, launch permissions or AMI tags.
+--
+-- 'containerDistributionConfiguration', 'distribution_containerDistributionConfiguration' - Container distribution settings for encryption, licensing, and sharing
+-- in a specific Region.
+--
+-- 'fastLaunchConfigurations', 'distribution_fastLaunchConfigurations' - The Windows faster-launching configurations to use for AMI distribution.
+--
+-- 'launchTemplateConfigurations', 'distribution_launchTemplateConfigurations' - A group of launchTemplateConfiguration settings that apply to image
+-- distribution for specified accounts.
+--
+-- 'licenseConfigurationArns', 'distribution_licenseConfigurationArns' - The License Manager Configuration to associate with the AMI in the
+-- specified Region.
+--
+-- 's3ExportConfiguration', 'distribution_s3ExportConfiguration' - Configure export settings to deliver disk images created from your image
+-- build, using a file format that is compatible with your VMs in that
+-- Region.
+--
+-- 'region', 'distribution_region' - The target Region.
+newDistribution ::
+  -- | 'region'
+  Prelude.Text ->
+  Distribution
+newDistribution pRegion_ =
+  Distribution'
+    { amiDistributionConfiguration =
+        Prelude.Nothing,
+      containerDistributionConfiguration = Prelude.Nothing,
+      fastLaunchConfigurations = Prelude.Nothing,
+      launchTemplateConfigurations = Prelude.Nothing,
+      licenseConfigurationArns = Prelude.Nothing,
+      s3ExportConfiguration = Prelude.Nothing,
+      region = pRegion_
+    }
+
+-- | The specific AMI settings; for example, launch permissions or AMI tags.
+distribution_amiDistributionConfiguration :: Lens.Lens' Distribution (Prelude.Maybe AmiDistributionConfiguration)
+distribution_amiDistributionConfiguration = Lens.lens (\Distribution' {amiDistributionConfiguration} -> amiDistributionConfiguration) (\s@Distribution' {} a -> s {amiDistributionConfiguration = a} :: Distribution)
+
+-- | Container distribution settings for encryption, licensing, and sharing
+-- in a specific Region.
+distribution_containerDistributionConfiguration :: Lens.Lens' Distribution (Prelude.Maybe ContainerDistributionConfiguration)
+distribution_containerDistributionConfiguration = Lens.lens (\Distribution' {containerDistributionConfiguration} -> containerDistributionConfiguration) (\s@Distribution' {} a -> s {containerDistributionConfiguration = a} :: Distribution)
+
+-- | The Windows faster-launching configurations to use for AMI distribution.
+distribution_fastLaunchConfigurations :: Lens.Lens' Distribution (Prelude.Maybe (Prelude.NonEmpty FastLaunchConfiguration))
+distribution_fastLaunchConfigurations = Lens.lens (\Distribution' {fastLaunchConfigurations} -> fastLaunchConfigurations) (\s@Distribution' {} a -> s {fastLaunchConfigurations = a} :: Distribution) Prelude.. Lens.mapping Lens.coerced
+
+-- | A group of launchTemplateConfiguration settings that apply to image
+-- distribution for specified accounts.
+distribution_launchTemplateConfigurations :: Lens.Lens' Distribution (Prelude.Maybe (Prelude.NonEmpty LaunchTemplateConfiguration))
+distribution_launchTemplateConfigurations = Lens.lens (\Distribution' {launchTemplateConfigurations} -> launchTemplateConfigurations) (\s@Distribution' {} a -> s {launchTemplateConfigurations = a} :: Distribution) Prelude.. Lens.mapping Lens.coerced
+
+-- | The License Manager Configuration to associate with the AMI in the
+-- specified Region.
+distribution_licenseConfigurationArns :: Lens.Lens' Distribution (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+distribution_licenseConfigurationArns = Lens.lens (\Distribution' {licenseConfigurationArns} -> licenseConfigurationArns) (\s@Distribution' {} a -> s {licenseConfigurationArns = a} :: Distribution) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configure export settings to deliver disk images created from your image
+-- build, using a file format that is compatible with your VMs in that
+-- Region.
+distribution_s3ExportConfiguration :: Lens.Lens' Distribution (Prelude.Maybe S3ExportConfiguration)
+distribution_s3ExportConfiguration = Lens.lens (\Distribution' {s3ExportConfiguration} -> s3ExportConfiguration) (\s@Distribution' {} a -> s {s3ExportConfiguration = a} :: Distribution)
+
+-- | The target Region.
+distribution_region :: Lens.Lens' Distribution Prelude.Text
+distribution_region = Lens.lens (\Distribution' {region} -> region) (\s@Distribution' {} a -> s {region = a} :: Distribution)
+
+instance Data.FromJSON Distribution where
+  parseJSON =
+    Data.withObject
+      "Distribution"
+      ( \x ->
+          Distribution'
+            Prelude.<$> (x Data..:? "amiDistributionConfiguration")
+            Prelude.<*> (x Data..:? "containerDistributionConfiguration")
+            Prelude.<*> (x Data..:? "fastLaunchConfigurations")
+            Prelude.<*> (x Data..:? "launchTemplateConfigurations")
+            Prelude.<*> (x Data..:? "licenseConfigurationArns")
+            Prelude.<*> (x Data..:? "s3ExportConfiguration")
+            Prelude.<*> (x Data..: "region")
+      )
+
+instance Prelude.Hashable Distribution where
+  hashWithSalt _salt Distribution' {..} =
+    _salt
+      `Prelude.hashWithSalt` amiDistributionConfiguration
+      `Prelude.hashWithSalt` containerDistributionConfiguration
+      `Prelude.hashWithSalt` fastLaunchConfigurations
+      `Prelude.hashWithSalt` launchTemplateConfigurations
+      `Prelude.hashWithSalt` licenseConfigurationArns
+      `Prelude.hashWithSalt` s3ExportConfiguration
+      `Prelude.hashWithSalt` region
+
+instance Prelude.NFData Distribution where
+  rnf Distribution' {..} =
+    Prelude.rnf amiDistributionConfiguration
+      `Prelude.seq` Prelude.rnf containerDistributionConfiguration
+      `Prelude.seq` Prelude.rnf fastLaunchConfigurations
+      `Prelude.seq` Prelude.rnf launchTemplateConfigurations
+      `Prelude.seq` Prelude.rnf licenseConfigurationArns
+      `Prelude.seq` Prelude.rnf s3ExportConfiguration
+      `Prelude.seq` Prelude.rnf region
+
+instance Data.ToJSON Distribution where
+  toJSON Distribution' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("amiDistributionConfiguration" Data..=)
+              Prelude.<$> amiDistributionConfiguration,
+            ("containerDistributionConfiguration" Data..=)
+              Prelude.<$> containerDistributionConfiguration,
+            ("fastLaunchConfigurations" Data..=)
+              Prelude.<$> fastLaunchConfigurations,
+            ("launchTemplateConfigurations" Data..=)
+              Prelude.<$> launchTemplateConfigurations,
+            ("licenseConfigurationArns" Data..=)
+              Prelude.<$> licenseConfigurationArns,
+            ("s3ExportConfiguration" Data..=)
+              Prelude.<$> s3ExportConfiguration,
+            Prelude.Just ("region" Data..= region)
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/DistributionConfiguration.hs b/gen/Amazonka/ImageBuilder/Types/DistributionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/DistributionConfiguration.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.DistributionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.DistributionConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.Distribution
+import qualified Amazonka.Prelude as Prelude
+
+-- | A distribution configuration.
+--
+-- /See:/ 'newDistributionConfiguration' smart constructor.
+data DistributionConfiguration = DistributionConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the distribution configuration.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date on which this distribution configuration was created.
+    dateCreated :: Prelude.Maybe Prelude.Text,
+    -- | The date on which this distribution configuration was last updated.
+    dateUpdated :: Prelude.Maybe Prelude.Text,
+    -- | The description of the distribution configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The distribution objects that apply Region-specific settings for the
+    -- deployment of the image to targeted Regions.
+    distributions :: Prelude.Maybe [Distribution],
+    -- | The name of the distribution configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The tags of the distribution configuration.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The maximum duration in minutes for this distribution configuration.
+    timeoutMinutes :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DistributionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'distributionConfiguration_arn' - The Amazon Resource Name (ARN) of the distribution configuration.
+--
+-- 'dateCreated', 'distributionConfiguration_dateCreated' - The date on which this distribution configuration was created.
+--
+-- 'dateUpdated', 'distributionConfiguration_dateUpdated' - The date on which this distribution configuration was last updated.
+--
+-- 'description', 'distributionConfiguration_description' - The description of the distribution configuration.
+--
+-- 'distributions', 'distributionConfiguration_distributions' - The distribution objects that apply Region-specific settings for the
+-- deployment of the image to targeted Regions.
+--
+-- 'name', 'distributionConfiguration_name' - The name of the distribution configuration.
+--
+-- 'tags', 'distributionConfiguration_tags' - The tags of the distribution configuration.
+--
+-- 'timeoutMinutes', 'distributionConfiguration_timeoutMinutes' - The maximum duration in minutes for this distribution configuration.
+newDistributionConfiguration ::
+  -- | 'timeoutMinutes'
+  Prelude.Natural ->
+  DistributionConfiguration
+newDistributionConfiguration pTimeoutMinutes_ =
+  DistributionConfiguration'
+    { arn = Prelude.Nothing,
+      dateCreated = Prelude.Nothing,
+      dateUpdated = Prelude.Nothing,
+      description = Prelude.Nothing,
+      distributions = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      timeoutMinutes = pTimeoutMinutes_
+    }
+
+-- | The Amazon Resource Name (ARN) of the distribution configuration.
+distributionConfiguration_arn :: Lens.Lens' DistributionConfiguration (Prelude.Maybe Prelude.Text)
+distributionConfiguration_arn = Lens.lens (\DistributionConfiguration' {arn} -> arn) (\s@DistributionConfiguration' {} a -> s {arn = a} :: DistributionConfiguration)
+
+-- | The date on which this distribution configuration was created.
+distributionConfiguration_dateCreated :: Lens.Lens' DistributionConfiguration (Prelude.Maybe Prelude.Text)
+distributionConfiguration_dateCreated = Lens.lens (\DistributionConfiguration' {dateCreated} -> dateCreated) (\s@DistributionConfiguration' {} a -> s {dateCreated = a} :: DistributionConfiguration)
+
+-- | The date on which this distribution configuration was last updated.
+distributionConfiguration_dateUpdated :: Lens.Lens' DistributionConfiguration (Prelude.Maybe Prelude.Text)
+distributionConfiguration_dateUpdated = Lens.lens (\DistributionConfiguration' {dateUpdated} -> dateUpdated) (\s@DistributionConfiguration' {} a -> s {dateUpdated = a} :: DistributionConfiguration)
+
+-- | The description of the distribution configuration.
+distributionConfiguration_description :: Lens.Lens' DistributionConfiguration (Prelude.Maybe Prelude.Text)
+distributionConfiguration_description = Lens.lens (\DistributionConfiguration' {description} -> description) (\s@DistributionConfiguration' {} a -> s {description = a} :: DistributionConfiguration)
+
+-- | The distribution objects that apply Region-specific settings for the
+-- deployment of the image to targeted Regions.
+distributionConfiguration_distributions :: Lens.Lens' DistributionConfiguration (Prelude.Maybe [Distribution])
+distributionConfiguration_distributions = Lens.lens (\DistributionConfiguration' {distributions} -> distributions) (\s@DistributionConfiguration' {} a -> s {distributions = a} :: DistributionConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the distribution configuration.
+distributionConfiguration_name :: Lens.Lens' DistributionConfiguration (Prelude.Maybe Prelude.Text)
+distributionConfiguration_name = Lens.lens (\DistributionConfiguration' {name} -> name) (\s@DistributionConfiguration' {} a -> s {name = a} :: DistributionConfiguration)
+
+-- | The tags of the distribution configuration.
+distributionConfiguration_tags :: Lens.Lens' DistributionConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+distributionConfiguration_tags = Lens.lens (\DistributionConfiguration' {tags} -> tags) (\s@DistributionConfiguration' {} a -> s {tags = a} :: DistributionConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum duration in minutes for this distribution configuration.
+distributionConfiguration_timeoutMinutes :: Lens.Lens' DistributionConfiguration Prelude.Natural
+distributionConfiguration_timeoutMinutes = Lens.lens (\DistributionConfiguration' {timeoutMinutes} -> timeoutMinutes) (\s@DistributionConfiguration' {} a -> s {timeoutMinutes = a} :: DistributionConfiguration)
+
+instance Data.FromJSON DistributionConfiguration where
+  parseJSON =
+    Data.withObject
+      "DistributionConfiguration"
+      ( \x ->
+          DistributionConfiguration'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "dateCreated")
+            Prelude.<*> (x Data..:? "dateUpdated")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "distributions" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "timeoutMinutes")
+      )
+
+instance Prelude.Hashable DistributionConfiguration where
+  hashWithSalt _salt DistributionConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` dateCreated
+      `Prelude.hashWithSalt` dateUpdated
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` distributions
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` timeoutMinutes
+
+instance Prelude.NFData DistributionConfiguration where
+  rnf DistributionConfiguration' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf dateCreated
+      `Prelude.seq` Prelude.rnf dateUpdated
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf distributions
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf timeoutMinutes
diff --git a/gen/Amazonka/ImageBuilder/Types/DistributionConfigurationSummary.hs b/gen/Amazonka/ImageBuilder/Types/DistributionConfigurationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/DistributionConfigurationSummary.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.DistributionConfigurationSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.DistributionConfigurationSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A high-level overview of a distribution configuration.
+--
+-- /See:/ 'newDistributionConfigurationSummary' smart constructor.
+data DistributionConfigurationSummary = DistributionConfigurationSummary'
+  { -- | The Amazon Resource Name (ARN) of the distribution configuration.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date on which the distribution configuration was created.
+    dateCreated :: Prelude.Maybe Prelude.Text,
+    -- | The date on which the distribution configuration was updated.
+    dateUpdated :: Prelude.Maybe Prelude.Text,
+    -- | The description of the distribution configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the distribution configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A list of Regions where the container image is distributed to.
+    regions :: Prelude.Maybe [Prelude.Text],
+    -- | The tags associated with the distribution configuration.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DistributionConfigurationSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'distributionConfigurationSummary_arn' - The Amazon Resource Name (ARN) of the distribution configuration.
+--
+-- 'dateCreated', 'distributionConfigurationSummary_dateCreated' - The date on which the distribution configuration was created.
+--
+-- 'dateUpdated', 'distributionConfigurationSummary_dateUpdated' - The date on which the distribution configuration was updated.
+--
+-- 'description', 'distributionConfigurationSummary_description' - The description of the distribution configuration.
+--
+-- 'name', 'distributionConfigurationSummary_name' - The name of the distribution configuration.
+--
+-- 'regions', 'distributionConfigurationSummary_regions' - A list of Regions where the container image is distributed to.
+--
+-- 'tags', 'distributionConfigurationSummary_tags' - The tags associated with the distribution configuration.
+newDistributionConfigurationSummary ::
+  DistributionConfigurationSummary
+newDistributionConfigurationSummary =
+  DistributionConfigurationSummary'
+    { arn =
+        Prelude.Nothing,
+      dateCreated = Prelude.Nothing,
+      dateUpdated = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      regions = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the distribution configuration.
+distributionConfigurationSummary_arn :: Lens.Lens' DistributionConfigurationSummary (Prelude.Maybe Prelude.Text)
+distributionConfigurationSummary_arn = Lens.lens (\DistributionConfigurationSummary' {arn} -> arn) (\s@DistributionConfigurationSummary' {} a -> s {arn = a} :: DistributionConfigurationSummary)
+
+-- | The date on which the distribution configuration was created.
+distributionConfigurationSummary_dateCreated :: Lens.Lens' DistributionConfigurationSummary (Prelude.Maybe Prelude.Text)
+distributionConfigurationSummary_dateCreated = Lens.lens (\DistributionConfigurationSummary' {dateCreated} -> dateCreated) (\s@DistributionConfigurationSummary' {} a -> s {dateCreated = a} :: DistributionConfigurationSummary)
+
+-- | The date on which the distribution configuration was updated.
+distributionConfigurationSummary_dateUpdated :: Lens.Lens' DistributionConfigurationSummary (Prelude.Maybe Prelude.Text)
+distributionConfigurationSummary_dateUpdated = Lens.lens (\DistributionConfigurationSummary' {dateUpdated} -> dateUpdated) (\s@DistributionConfigurationSummary' {} a -> s {dateUpdated = a} :: DistributionConfigurationSummary)
+
+-- | The description of the distribution configuration.
+distributionConfigurationSummary_description :: Lens.Lens' DistributionConfigurationSummary (Prelude.Maybe Prelude.Text)
+distributionConfigurationSummary_description = Lens.lens (\DistributionConfigurationSummary' {description} -> description) (\s@DistributionConfigurationSummary' {} a -> s {description = a} :: DistributionConfigurationSummary)
+
+-- | The name of the distribution configuration.
+distributionConfigurationSummary_name :: Lens.Lens' DistributionConfigurationSummary (Prelude.Maybe Prelude.Text)
+distributionConfigurationSummary_name = Lens.lens (\DistributionConfigurationSummary' {name} -> name) (\s@DistributionConfigurationSummary' {} a -> s {name = a} :: DistributionConfigurationSummary)
+
+-- | A list of Regions where the container image is distributed to.
+distributionConfigurationSummary_regions :: Lens.Lens' DistributionConfigurationSummary (Prelude.Maybe [Prelude.Text])
+distributionConfigurationSummary_regions = Lens.lens (\DistributionConfigurationSummary' {regions} -> regions) (\s@DistributionConfigurationSummary' {} a -> s {regions = a} :: DistributionConfigurationSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags associated with the distribution configuration.
+distributionConfigurationSummary_tags :: Lens.Lens' DistributionConfigurationSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+distributionConfigurationSummary_tags = Lens.lens (\DistributionConfigurationSummary' {tags} -> tags) (\s@DistributionConfigurationSummary' {} a -> s {tags = a} :: DistributionConfigurationSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromJSON
+    DistributionConfigurationSummary
+  where
+  parseJSON =
+    Data.withObject
+      "DistributionConfigurationSummary"
+      ( \x ->
+          DistributionConfigurationSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "dateCreated")
+            Prelude.<*> (x Data..:? "dateUpdated")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "regions" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance
+  Prelude.Hashable
+    DistributionConfigurationSummary
+  where
+  hashWithSalt
+    _salt
+    DistributionConfigurationSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` arn
+        `Prelude.hashWithSalt` dateCreated
+        `Prelude.hashWithSalt` dateUpdated
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` regions
+        `Prelude.hashWithSalt` tags
+
+instance
+  Prelude.NFData
+    DistributionConfigurationSummary
+  where
+  rnf DistributionConfigurationSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf dateCreated
+      `Prelude.seq` Prelude.rnf dateUpdated
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf regions
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/ImageBuilder/Types/EbsInstanceBlockDeviceSpecification.hs b/gen/Amazonka/ImageBuilder/Types/EbsInstanceBlockDeviceSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/EbsInstanceBlockDeviceSpecification.hs
@@ -0,0 +1,191 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.EbsInstanceBlockDeviceSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.EbsInstanceBlockDeviceSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.EbsVolumeType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Amazon EBS-specific block device mapping specifications.
+--
+-- /See:/ 'newEbsInstanceBlockDeviceSpecification' smart constructor.
+data EbsInstanceBlockDeviceSpecification = EbsInstanceBlockDeviceSpecification'
+  { -- | Use to configure delete on termination of the associated device.
+    deleteOnTermination :: Prelude.Maybe Prelude.Bool,
+    -- | Use to configure device encryption.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | Use to configure device IOPS.
+    iops :: Prelude.Maybe Prelude.Natural,
+    -- | Use to configure the KMS key to use when encrypting the device.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The snapshot that defines the device contents.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | __For GP3 volumes only__ – The throughput in MiB\/s that the volume
+    -- supports.
+    throughput :: Prelude.Maybe Prelude.Natural,
+    -- | Use to override the device\'s volume size.
+    volumeSize :: Prelude.Maybe Prelude.Natural,
+    -- | Use to override the device\'s volume type.
+    volumeType :: Prelude.Maybe EbsVolumeType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EbsInstanceBlockDeviceSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deleteOnTermination', 'ebsInstanceBlockDeviceSpecification_deleteOnTermination' - Use to configure delete on termination of the associated device.
+--
+-- 'encrypted', 'ebsInstanceBlockDeviceSpecification_encrypted' - Use to configure device encryption.
+--
+-- 'iops', 'ebsInstanceBlockDeviceSpecification_iops' - Use to configure device IOPS.
+--
+-- 'kmsKeyId', 'ebsInstanceBlockDeviceSpecification_kmsKeyId' - Use to configure the KMS key to use when encrypting the device.
+--
+-- 'snapshotId', 'ebsInstanceBlockDeviceSpecification_snapshotId' - The snapshot that defines the device contents.
+--
+-- 'throughput', 'ebsInstanceBlockDeviceSpecification_throughput' - __For GP3 volumes only__ – The throughput in MiB\/s that the volume
+-- supports.
+--
+-- 'volumeSize', 'ebsInstanceBlockDeviceSpecification_volumeSize' - Use to override the device\'s volume size.
+--
+-- 'volumeType', 'ebsInstanceBlockDeviceSpecification_volumeType' - Use to override the device\'s volume type.
+newEbsInstanceBlockDeviceSpecification ::
+  EbsInstanceBlockDeviceSpecification
+newEbsInstanceBlockDeviceSpecification =
+  EbsInstanceBlockDeviceSpecification'
+    { deleteOnTermination =
+        Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      iops = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      throughput = Prelude.Nothing,
+      volumeSize = Prelude.Nothing,
+      volumeType = Prelude.Nothing
+    }
+
+-- | Use to configure delete on termination of the associated device.
+ebsInstanceBlockDeviceSpecification_deleteOnTermination :: Lens.Lens' EbsInstanceBlockDeviceSpecification (Prelude.Maybe Prelude.Bool)
+ebsInstanceBlockDeviceSpecification_deleteOnTermination = Lens.lens (\EbsInstanceBlockDeviceSpecification' {deleteOnTermination} -> deleteOnTermination) (\s@EbsInstanceBlockDeviceSpecification' {} a -> s {deleteOnTermination = a} :: EbsInstanceBlockDeviceSpecification)
+
+-- | Use to configure device encryption.
+ebsInstanceBlockDeviceSpecification_encrypted :: Lens.Lens' EbsInstanceBlockDeviceSpecification (Prelude.Maybe Prelude.Bool)
+ebsInstanceBlockDeviceSpecification_encrypted = Lens.lens (\EbsInstanceBlockDeviceSpecification' {encrypted} -> encrypted) (\s@EbsInstanceBlockDeviceSpecification' {} a -> s {encrypted = a} :: EbsInstanceBlockDeviceSpecification)
+
+-- | Use to configure device IOPS.
+ebsInstanceBlockDeviceSpecification_iops :: Lens.Lens' EbsInstanceBlockDeviceSpecification (Prelude.Maybe Prelude.Natural)
+ebsInstanceBlockDeviceSpecification_iops = Lens.lens (\EbsInstanceBlockDeviceSpecification' {iops} -> iops) (\s@EbsInstanceBlockDeviceSpecification' {} a -> s {iops = a} :: EbsInstanceBlockDeviceSpecification)
+
+-- | Use to configure the KMS key to use when encrypting the device.
+ebsInstanceBlockDeviceSpecification_kmsKeyId :: Lens.Lens' EbsInstanceBlockDeviceSpecification (Prelude.Maybe Prelude.Text)
+ebsInstanceBlockDeviceSpecification_kmsKeyId = Lens.lens (\EbsInstanceBlockDeviceSpecification' {kmsKeyId} -> kmsKeyId) (\s@EbsInstanceBlockDeviceSpecification' {} a -> s {kmsKeyId = a} :: EbsInstanceBlockDeviceSpecification)
+
+-- | The snapshot that defines the device contents.
+ebsInstanceBlockDeviceSpecification_snapshotId :: Lens.Lens' EbsInstanceBlockDeviceSpecification (Prelude.Maybe Prelude.Text)
+ebsInstanceBlockDeviceSpecification_snapshotId = Lens.lens (\EbsInstanceBlockDeviceSpecification' {snapshotId} -> snapshotId) (\s@EbsInstanceBlockDeviceSpecification' {} a -> s {snapshotId = a} :: EbsInstanceBlockDeviceSpecification)
+
+-- | __For GP3 volumes only__ – The throughput in MiB\/s that the volume
+-- supports.
+ebsInstanceBlockDeviceSpecification_throughput :: Lens.Lens' EbsInstanceBlockDeviceSpecification (Prelude.Maybe Prelude.Natural)
+ebsInstanceBlockDeviceSpecification_throughput = Lens.lens (\EbsInstanceBlockDeviceSpecification' {throughput} -> throughput) (\s@EbsInstanceBlockDeviceSpecification' {} a -> s {throughput = a} :: EbsInstanceBlockDeviceSpecification)
+
+-- | Use to override the device\'s volume size.
+ebsInstanceBlockDeviceSpecification_volumeSize :: Lens.Lens' EbsInstanceBlockDeviceSpecification (Prelude.Maybe Prelude.Natural)
+ebsInstanceBlockDeviceSpecification_volumeSize = Lens.lens (\EbsInstanceBlockDeviceSpecification' {volumeSize} -> volumeSize) (\s@EbsInstanceBlockDeviceSpecification' {} a -> s {volumeSize = a} :: EbsInstanceBlockDeviceSpecification)
+
+-- | Use to override the device\'s volume type.
+ebsInstanceBlockDeviceSpecification_volumeType :: Lens.Lens' EbsInstanceBlockDeviceSpecification (Prelude.Maybe EbsVolumeType)
+ebsInstanceBlockDeviceSpecification_volumeType = Lens.lens (\EbsInstanceBlockDeviceSpecification' {volumeType} -> volumeType) (\s@EbsInstanceBlockDeviceSpecification' {} a -> s {volumeType = a} :: EbsInstanceBlockDeviceSpecification)
+
+instance
+  Data.FromJSON
+    EbsInstanceBlockDeviceSpecification
+  where
+  parseJSON =
+    Data.withObject
+      "EbsInstanceBlockDeviceSpecification"
+      ( \x ->
+          EbsInstanceBlockDeviceSpecification'
+            Prelude.<$> (x Data..:? "deleteOnTermination")
+            Prelude.<*> (x Data..:? "encrypted")
+            Prelude.<*> (x Data..:? "iops")
+            Prelude.<*> (x Data..:? "kmsKeyId")
+            Prelude.<*> (x Data..:? "snapshotId")
+            Prelude.<*> (x Data..:? "throughput")
+            Prelude.<*> (x Data..:? "volumeSize")
+            Prelude.<*> (x Data..:? "volumeType")
+      )
+
+instance
+  Prelude.Hashable
+    EbsInstanceBlockDeviceSpecification
+  where
+  hashWithSalt
+    _salt
+    EbsInstanceBlockDeviceSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` deleteOnTermination
+        `Prelude.hashWithSalt` encrypted
+        `Prelude.hashWithSalt` iops
+        `Prelude.hashWithSalt` kmsKeyId
+        `Prelude.hashWithSalt` snapshotId
+        `Prelude.hashWithSalt` throughput
+        `Prelude.hashWithSalt` volumeSize
+        `Prelude.hashWithSalt` volumeType
+
+instance
+  Prelude.NFData
+    EbsInstanceBlockDeviceSpecification
+  where
+  rnf EbsInstanceBlockDeviceSpecification' {..} =
+    Prelude.rnf deleteOnTermination
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf iops
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf throughput
+      `Prelude.seq` Prelude.rnf volumeSize
+      `Prelude.seq` Prelude.rnf volumeType
+
+instance
+  Data.ToJSON
+    EbsInstanceBlockDeviceSpecification
+  where
+  toJSON EbsInstanceBlockDeviceSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("deleteOnTermination" Data..=)
+              Prelude.<$> deleteOnTermination,
+            ("encrypted" Data..=) Prelude.<$> encrypted,
+            ("iops" Data..=) Prelude.<$> iops,
+            ("kmsKeyId" Data..=) Prelude.<$> kmsKeyId,
+            ("snapshotId" Data..=) Prelude.<$> snapshotId,
+            ("throughput" Data..=) Prelude.<$> throughput,
+            ("volumeSize" Data..=) Prelude.<$> volumeSize,
+            ("volumeType" Data..=) Prelude.<$> volumeType
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/EbsVolumeType.hs b/gen/Amazonka/ImageBuilder/Types/EbsVolumeType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/EbsVolumeType.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.ImageBuilder.Types.EbsVolumeType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.EbsVolumeType
+  ( EbsVolumeType
+      ( ..,
+        EbsVolumeType_Gp2,
+        EbsVolumeType_Gp3,
+        EbsVolumeType_Io1,
+        EbsVolumeType_Io2,
+        EbsVolumeType_Sc1,
+        EbsVolumeType_St1,
+        EbsVolumeType_Standard
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EbsVolumeType = EbsVolumeType'
+  { fromEbsVolumeType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EbsVolumeType_Gp2 :: EbsVolumeType
+pattern EbsVolumeType_Gp2 = EbsVolumeType' "gp2"
+
+pattern EbsVolumeType_Gp3 :: EbsVolumeType
+pattern EbsVolumeType_Gp3 = EbsVolumeType' "gp3"
+
+pattern EbsVolumeType_Io1 :: EbsVolumeType
+pattern EbsVolumeType_Io1 = EbsVolumeType' "io1"
+
+pattern EbsVolumeType_Io2 :: EbsVolumeType
+pattern EbsVolumeType_Io2 = EbsVolumeType' "io2"
+
+pattern EbsVolumeType_Sc1 :: EbsVolumeType
+pattern EbsVolumeType_Sc1 = EbsVolumeType' "sc1"
+
+pattern EbsVolumeType_St1 :: EbsVolumeType
+pattern EbsVolumeType_St1 = EbsVolumeType' "st1"
+
+pattern EbsVolumeType_Standard :: EbsVolumeType
+pattern EbsVolumeType_Standard = EbsVolumeType' "standard"
+
+{-# COMPLETE
+  EbsVolumeType_Gp2,
+  EbsVolumeType_Gp3,
+  EbsVolumeType_Io1,
+  EbsVolumeType_Io2,
+  EbsVolumeType_Sc1,
+  EbsVolumeType_St1,
+  EbsVolumeType_Standard,
+  EbsVolumeType'
+  #-}
diff --git a/gen/Amazonka/ImageBuilder/Types/FastLaunchConfiguration.hs b/gen/Amazonka/ImageBuilder/Types/FastLaunchConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/FastLaunchConfiguration.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.FastLaunchConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.FastLaunchConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.FastLaunchLaunchTemplateSpecification
+import Amazonka.ImageBuilder.Types.FastLaunchSnapshotConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Define and configure faster launching for output Windows AMIs.
+--
+-- /See:/ 'newFastLaunchConfiguration' smart constructor.
+data FastLaunchConfiguration = FastLaunchConfiguration'
+  { -- | The owner account ID for the fast-launch enabled Windows AMI.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The launch template that the fast-launch enabled Windows AMI uses when
+    -- it launches Windows instances to create pre-provisioned snapshots.
+    launchTemplate :: Prelude.Maybe FastLaunchLaunchTemplateSpecification,
+    -- | The maximum number of parallel instances that are launched for creating
+    -- resources.
+    maxParallelLaunches :: Prelude.Maybe Prelude.Natural,
+    -- | Configuration settings for managing the number of snapshots that are
+    -- created from pre-provisioned instances for the Windows AMI when faster
+    -- launching is enabled.
+    snapshotConfiguration :: Prelude.Maybe FastLaunchSnapshotConfiguration,
+    -- | A Boolean that represents the current state of faster launching for the
+    -- Windows AMI. Set to @true@ to start using Windows faster launching, or
+    -- @false@ to stop using it.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FastLaunchConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'fastLaunchConfiguration_accountId' - The owner account ID for the fast-launch enabled Windows AMI.
+--
+-- 'launchTemplate', 'fastLaunchConfiguration_launchTemplate' - The launch template that the fast-launch enabled Windows AMI uses when
+-- it launches Windows instances to create pre-provisioned snapshots.
+--
+-- 'maxParallelLaunches', 'fastLaunchConfiguration_maxParallelLaunches' - The maximum number of parallel instances that are launched for creating
+-- resources.
+--
+-- 'snapshotConfiguration', 'fastLaunchConfiguration_snapshotConfiguration' - Configuration settings for managing the number of snapshots that are
+-- created from pre-provisioned instances for the Windows AMI when faster
+-- launching is enabled.
+--
+-- 'enabled', 'fastLaunchConfiguration_enabled' - A Boolean that represents the current state of faster launching for the
+-- Windows AMI. Set to @true@ to start using Windows faster launching, or
+-- @false@ to stop using it.
+newFastLaunchConfiguration ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  FastLaunchConfiguration
+newFastLaunchConfiguration pEnabled_ =
+  FastLaunchConfiguration'
+    { accountId =
+        Prelude.Nothing,
+      launchTemplate = Prelude.Nothing,
+      maxParallelLaunches = Prelude.Nothing,
+      snapshotConfiguration = Prelude.Nothing,
+      enabled = pEnabled_
+    }
+
+-- | The owner account ID for the fast-launch enabled Windows AMI.
+fastLaunchConfiguration_accountId :: Lens.Lens' FastLaunchConfiguration (Prelude.Maybe Prelude.Text)
+fastLaunchConfiguration_accountId = Lens.lens (\FastLaunchConfiguration' {accountId} -> accountId) (\s@FastLaunchConfiguration' {} a -> s {accountId = a} :: FastLaunchConfiguration)
+
+-- | The launch template that the fast-launch enabled Windows AMI uses when
+-- it launches Windows instances to create pre-provisioned snapshots.
+fastLaunchConfiguration_launchTemplate :: Lens.Lens' FastLaunchConfiguration (Prelude.Maybe FastLaunchLaunchTemplateSpecification)
+fastLaunchConfiguration_launchTemplate = Lens.lens (\FastLaunchConfiguration' {launchTemplate} -> launchTemplate) (\s@FastLaunchConfiguration' {} a -> s {launchTemplate = a} :: FastLaunchConfiguration)
+
+-- | The maximum number of parallel instances that are launched for creating
+-- resources.
+fastLaunchConfiguration_maxParallelLaunches :: Lens.Lens' FastLaunchConfiguration (Prelude.Maybe Prelude.Natural)
+fastLaunchConfiguration_maxParallelLaunches = Lens.lens (\FastLaunchConfiguration' {maxParallelLaunches} -> maxParallelLaunches) (\s@FastLaunchConfiguration' {} a -> s {maxParallelLaunches = a} :: FastLaunchConfiguration)
+
+-- | Configuration settings for managing the number of snapshots that are
+-- created from pre-provisioned instances for the Windows AMI when faster
+-- launching is enabled.
+fastLaunchConfiguration_snapshotConfiguration :: Lens.Lens' FastLaunchConfiguration (Prelude.Maybe FastLaunchSnapshotConfiguration)
+fastLaunchConfiguration_snapshotConfiguration = Lens.lens (\FastLaunchConfiguration' {snapshotConfiguration} -> snapshotConfiguration) (\s@FastLaunchConfiguration' {} a -> s {snapshotConfiguration = a} :: FastLaunchConfiguration)
+
+-- | A Boolean that represents the current state of faster launching for the
+-- Windows AMI. Set to @true@ to start using Windows faster launching, or
+-- @false@ to stop using it.
+fastLaunchConfiguration_enabled :: Lens.Lens' FastLaunchConfiguration Prelude.Bool
+fastLaunchConfiguration_enabled = Lens.lens (\FastLaunchConfiguration' {enabled} -> enabled) (\s@FastLaunchConfiguration' {} a -> s {enabled = a} :: FastLaunchConfiguration)
+
+instance Data.FromJSON FastLaunchConfiguration where
+  parseJSON =
+    Data.withObject
+      "FastLaunchConfiguration"
+      ( \x ->
+          FastLaunchConfiguration'
+            Prelude.<$> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "launchTemplate")
+            Prelude.<*> (x Data..:? "maxParallelLaunches")
+            Prelude.<*> (x Data..:? "snapshotConfiguration")
+            Prelude.<*> (x Data..: "enabled")
+      )
+
+instance Prelude.Hashable FastLaunchConfiguration where
+  hashWithSalt _salt FastLaunchConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` launchTemplate
+      `Prelude.hashWithSalt` maxParallelLaunches
+      `Prelude.hashWithSalt` snapshotConfiguration
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData FastLaunchConfiguration where
+  rnf FastLaunchConfiguration' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf launchTemplate
+      `Prelude.seq` Prelude.rnf maxParallelLaunches
+      `Prelude.seq` Prelude.rnf snapshotConfiguration
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON FastLaunchConfiguration where
+  toJSON FastLaunchConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("accountId" Data..=) Prelude.<$> accountId,
+            ("launchTemplate" Data..=)
+              Prelude.<$> launchTemplate,
+            ("maxParallelLaunches" Data..=)
+              Prelude.<$> maxParallelLaunches,
+            ("snapshotConfiguration" Data..=)
+              Prelude.<$> snapshotConfiguration,
+            Prelude.Just ("enabled" Data..= enabled)
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/FastLaunchLaunchTemplateSpecification.hs b/gen/Amazonka/ImageBuilder/Types/FastLaunchLaunchTemplateSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/FastLaunchLaunchTemplateSpecification.hs
@@ -0,0 +1,138 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.FastLaunchLaunchTemplateSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.FastLaunchLaunchTemplateSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Identifies the launch template that the associated Windows AMI uses for
+-- launching an instance when faster launching is enabled.
+--
+-- You can specify either the @launchTemplateName@ or the
+-- @launchTemplateId@, but not both.
+--
+-- /See:/ 'newFastLaunchLaunchTemplateSpecification' smart constructor.
+data FastLaunchLaunchTemplateSpecification = FastLaunchLaunchTemplateSpecification'
+  { -- | The ID of the launch template to use for faster launching for a Windows
+    -- AMI.
+    launchTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template to use for faster launching for a
+    -- Windows AMI.
+    launchTemplateName :: Prelude.Maybe Prelude.Text,
+    -- | The version of the launch template to use for faster launching for a
+    -- Windows AMI.
+    launchTemplateVersion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FastLaunchLaunchTemplateSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplateId', 'fastLaunchLaunchTemplateSpecification_launchTemplateId' - The ID of the launch template to use for faster launching for a Windows
+-- AMI.
+--
+-- 'launchTemplateName', 'fastLaunchLaunchTemplateSpecification_launchTemplateName' - The name of the launch template to use for faster launching for a
+-- Windows AMI.
+--
+-- 'launchTemplateVersion', 'fastLaunchLaunchTemplateSpecification_launchTemplateVersion' - The version of the launch template to use for faster launching for a
+-- Windows AMI.
+newFastLaunchLaunchTemplateSpecification ::
+  FastLaunchLaunchTemplateSpecification
+newFastLaunchLaunchTemplateSpecification =
+  FastLaunchLaunchTemplateSpecification'
+    { launchTemplateId =
+        Prelude.Nothing,
+      launchTemplateName = Prelude.Nothing,
+      launchTemplateVersion =
+        Prelude.Nothing
+    }
+
+-- | The ID of the launch template to use for faster launching for a Windows
+-- AMI.
+fastLaunchLaunchTemplateSpecification_launchTemplateId :: Lens.Lens' FastLaunchLaunchTemplateSpecification (Prelude.Maybe Prelude.Text)
+fastLaunchLaunchTemplateSpecification_launchTemplateId = Lens.lens (\FastLaunchLaunchTemplateSpecification' {launchTemplateId} -> launchTemplateId) (\s@FastLaunchLaunchTemplateSpecification' {} a -> s {launchTemplateId = a} :: FastLaunchLaunchTemplateSpecification)
+
+-- | The name of the launch template to use for faster launching for a
+-- Windows AMI.
+fastLaunchLaunchTemplateSpecification_launchTemplateName :: Lens.Lens' FastLaunchLaunchTemplateSpecification (Prelude.Maybe Prelude.Text)
+fastLaunchLaunchTemplateSpecification_launchTemplateName = Lens.lens (\FastLaunchLaunchTemplateSpecification' {launchTemplateName} -> launchTemplateName) (\s@FastLaunchLaunchTemplateSpecification' {} a -> s {launchTemplateName = a} :: FastLaunchLaunchTemplateSpecification)
+
+-- | The version of the launch template to use for faster launching for a
+-- Windows AMI.
+fastLaunchLaunchTemplateSpecification_launchTemplateVersion :: Lens.Lens' FastLaunchLaunchTemplateSpecification (Prelude.Maybe Prelude.Text)
+fastLaunchLaunchTemplateSpecification_launchTemplateVersion = Lens.lens (\FastLaunchLaunchTemplateSpecification' {launchTemplateVersion} -> launchTemplateVersion) (\s@FastLaunchLaunchTemplateSpecification' {} a -> s {launchTemplateVersion = a} :: FastLaunchLaunchTemplateSpecification)
+
+instance
+  Data.FromJSON
+    FastLaunchLaunchTemplateSpecification
+  where
+  parseJSON =
+    Data.withObject
+      "FastLaunchLaunchTemplateSpecification"
+      ( \x ->
+          FastLaunchLaunchTemplateSpecification'
+            Prelude.<$> (x Data..:? "launchTemplateId")
+            Prelude.<*> (x Data..:? "launchTemplateName")
+            Prelude.<*> (x Data..:? "launchTemplateVersion")
+      )
+
+instance
+  Prelude.Hashable
+    FastLaunchLaunchTemplateSpecification
+  where
+  hashWithSalt
+    _salt
+    FastLaunchLaunchTemplateSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` launchTemplateId
+        `Prelude.hashWithSalt` launchTemplateName
+        `Prelude.hashWithSalt` launchTemplateVersion
+
+instance
+  Prelude.NFData
+    FastLaunchLaunchTemplateSpecification
+  where
+  rnf FastLaunchLaunchTemplateSpecification' {..} =
+    Prelude.rnf launchTemplateId
+      `Prelude.seq` Prelude.rnf launchTemplateName
+      `Prelude.seq` Prelude.rnf launchTemplateVersion
+
+instance
+  Data.ToJSON
+    FastLaunchLaunchTemplateSpecification
+  where
+  toJSON FastLaunchLaunchTemplateSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("launchTemplateId" Data..=)
+              Prelude.<$> launchTemplateId,
+            ("launchTemplateName" Data..=)
+              Prelude.<$> launchTemplateName,
+            ("launchTemplateVersion" Data..=)
+              Prelude.<$> launchTemplateVersion
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/FastLaunchSnapshotConfiguration.hs b/gen/Amazonka/ImageBuilder/Types/FastLaunchSnapshotConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/FastLaunchSnapshotConfiguration.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.ImageBuilder.Types.FastLaunchSnapshotConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.FastLaunchSnapshotConfiguration 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
+
+-- | Configuration settings for creating and managing pre-provisioned
+-- snapshots for a fast-launch enabled Windows AMI.
+--
+-- /See:/ 'newFastLaunchSnapshotConfiguration' smart constructor.
+data FastLaunchSnapshotConfiguration = FastLaunchSnapshotConfiguration'
+  { -- | The number of pre-provisioned snapshots to keep on hand for a
+    -- fast-launch enabled Windows AMI.
+    targetResourceCount :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FastLaunchSnapshotConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'targetResourceCount', 'fastLaunchSnapshotConfiguration_targetResourceCount' - The number of pre-provisioned snapshots to keep on hand for a
+-- fast-launch enabled Windows AMI.
+newFastLaunchSnapshotConfiguration ::
+  FastLaunchSnapshotConfiguration
+newFastLaunchSnapshotConfiguration =
+  FastLaunchSnapshotConfiguration'
+    { targetResourceCount =
+        Prelude.Nothing
+    }
+
+-- | The number of pre-provisioned snapshots to keep on hand for a
+-- fast-launch enabled Windows AMI.
+fastLaunchSnapshotConfiguration_targetResourceCount :: Lens.Lens' FastLaunchSnapshotConfiguration (Prelude.Maybe Prelude.Natural)
+fastLaunchSnapshotConfiguration_targetResourceCount = Lens.lens (\FastLaunchSnapshotConfiguration' {targetResourceCount} -> targetResourceCount) (\s@FastLaunchSnapshotConfiguration' {} a -> s {targetResourceCount = a} :: FastLaunchSnapshotConfiguration)
+
+instance
+  Data.FromJSON
+    FastLaunchSnapshotConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "FastLaunchSnapshotConfiguration"
+      ( \x ->
+          FastLaunchSnapshotConfiguration'
+            Prelude.<$> (x Data..:? "targetResourceCount")
+      )
+
+instance
+  Prelude.Hashable
+    FastLaunchSnapshotConfiguration
+  where
+  hashWithSalt
+    _salt
+    FastLaunchSnapshotConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` targetResourceCount
+
+instance
+  Prelude.NFData
+    FastLaunchSnapshotConfiguration
+  where
+  rnf FastLaunchSnapshotConfiguration' {..} =
+    Prelude.rnf targetResourceCount
+
+instance Data.ToJSON FastLaunchSnapshotConfiguration where
+  toJSON FastLaunchSnapshotConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("targetResourceCount" Data..=)
+              Prelude.<$> targetResourceCount
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/Filter.hs b/gen/Amazonka/ImageBuilder/Types/Filter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/Filter.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.Filter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.Filter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A filter name and value pair that is used to return a more specific list
+-- of results from a list operation. Filters can be used to match a set of
+-- resources by specific criteria, such as tags, attributes, or IDs.
+--
+-- /See:/ 'newFilter' smart constructor.
+data Filter = Filter'
+  { -- | The name of the filter. Filter names are case-sensitive.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The filter values. Filter values are case-sensitive.
+    values :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Filter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'filter_name' - The name of the filter. Filter names are case-sensitive.
+--
+-- 'values', 'filter_values' - The filter values. Filter values are case-sensitive.
+newFilter ::
+  Filter
+newFilter =
+  Filter'
+    { name = Prelude.Nothing,
+      values = Prelude.Nothing
+    }
+
+-- | The name of the filter. Filter names are case-sensitive.
+filter_name :: Lens.Lens' Filter (Prelude.Maybe Prelude.Text)
+filter_name = Lens.lens (\Filter' {name} -> name) (\s@Filter' {} a -> s {name = a} :: Filter)
+
+-- | The filter values. Filter values are case-sensitive.
+filter_values :: Lens.Lens' Filter (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+filter_values = Lens.lens (\Filter' {values} -> values) (\s@Filter' {} a -> s {values = a} :: Filter) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable Filter where
+  hashWithSalt _salt Filter' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData Filter where
+  rnf Filter' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON Filter where
+  toJSON Filter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("name" Data..=) Prelude.<$> name,
+            ("values" Data..=) Prelude.<$> values
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/Image.hs b/gen/Amazonka/ImageBuilder/Types/Image.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/Image.hs
@@ -0,0 +1,442 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.Image
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.Image where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.BuildType
+import Amazonka.ImageBuilder.Types.ContainerRecipe
+import Amazonka.ImageBuilder.Types.DistributionConfiguration
+import Amazonka.ImageBuilder.Types.ImageRecipe
+import Amazonka.ImageBuilder.Types.ImageState
+import Amazonka.ImageBuilder.Types.ImageTestsConfiguration
+import Amazonka.ImageBuilder.Types.ImageType
+import Amazonka.ImageBuilder.Types.InfrastructureConfiguration
+import Amazonka.ImageBuilder.Types.OutputResources
+import Amazonka.ImageBuilder.Types.Platform
+import qualified Amazonka.Prelude as Prelude
+
+-- | An Image Builder image. You must specify exactly one recipe for the
+-- image – either a container recipe (@containerRecipe@), which creates a
+-- container image, or an image recipe (@imageRecipe@), which creates an
+-- AMI.
+--
+-- /See:/ 'newImage' smart constructor.
+data Image = Image'
+  { -- | The Amazon Resource Name (ARN) of the image.
+    --
+    -- Semantic versioning is included in each object\'s Amazon Resource Name
+    -- (ARN), at the level that applies to that object as follows:
+    --
+    -- 1.  Versionless ARNs and Name ARNs do not include specific values in any
+    --     of the nodes. The nodes are either left off entirely, or they are
+    --     specified as wildcards, for example: x.x.x.
+    --
+    -- 2.  Version ARNs have only the first three nodes:
+    --     \<major>.\<minor>.\<patch>
+    --
+    -- 3.  Build version ARNs have all four nodes, and point to a specific
+    --     build for a specific version of an object.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Indicates the type of build that created this image. The build can be
+    -- initiated in the following ways:
+    --
+    -- -   __USER_INITIATED__ – A manual pipeline build request.
+    --
+    -- -   __SCHEDULED__ – A pipeline build initiated by a cron expression in
+    --     the Image Builder pipeline, or from EventBridge.
+    --
+    -- -   __IMPORT__ – A VM import created the image to use as the base image
+    --     for the recipe.
+    buildType :: Prelude.Maybe BuildType,
+    -- | The recipe that is used to create an Image Builder container image.
+    containerRecipe :: Prelude.Maybe ContainerRecipe,
+    -- | The date on which this image was created.
+    dateCreated :: Prelude.Maybe Prelude.Text,
+    -- | The distribution configuration used when creating this image.
+    distributionConfiguration :: Prelude.Maybe DistributionConfiguration,
+    -- | Collects additional information about the image being created, including
+    -- the operating system (OS) version and package list. This information is
+    -- used to enhance the overall experience of using EC2 Image Builder.
+    -- Enabled by default.
+    enhancedImageMetadataEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The image recipe used when creating the image.
+    imageRecipe :: Prelude.Maybe ImageRecipe,
+    -- | The image tests configuration used when creating this image.
+    imageTestsConfiguration :: Prelude.Maybe ImageTestsConfiguration,
+    -- | The infrastructure used when creating this image.
+    infrastructureConfiguration :: Prelude.Maybe InfrastructureConfiguration,
+    -- | The name of the image.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The operating system version of the instance. For example, Amazon Linux
+    -- 2, Ubuntu 18, or Microsoft Windows Server 2019.
+    osVersion :: Prelude.Maybe Prelude.Text,
+    -- | The output resources produced when creating this image.
+    outputResources :: Prelude.Maybe OutputResources,
+    -- | The platform of the image.
+    platform :: Prelude.Maybe Platform,
+    -- | The Amazon Resource Name (ARN) of the image pipeline that created this
+    -- image.
+    sourcePipelineArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the image pipeline that created this image.
+    sourcePipelineName :: Prelude.Maybe Prelude.Text,
+    -- | The state of the image.
+    state :: Prelude.Maybe ImageState,
+    -- | The tags of the image.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Specifies whether this is an AMI or container image.
+    type' :: Prelude.Maybe ImageType,
+    -- | The semantic version of the image.
+    --
+    -- The semantic version has four nodes:
+    -- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+    -- first three, and can filter on all of them.
+    --
+    -- __Assignment:__ For the first three nodes you can assign any positive
+    -- integer value, including zero, with an upper limit of 2^30-1, or
+    -- 1073741823 for each node. Image Builder automatically assigns the build
+    -- number to the fourth node.
+    --
+    -- __Patterns:__ You can use any numeric pattern that adheres to the
+    -- assignment requirements for the nodes that you can assign. For example,
+    -- you might choose a software version pattern, such as 1.0.0, or a date,
+    -- such as 2021.01.01.
+    --
+    -- __Filtering:__ With semantic versioning, you have the flexibility to use
+    -- wildcards (x) to specify the most recent versions or nodes when
+    -- selecting the base image or components for your recipe. When you use a
+    -- wildcard in any node, all nodes to the right of the first wildcard must
+    -- also be wildcards.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Image' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'image_arn' - The Amazon Resource Name (ARN) of the image.
+--
+-- Semantic versioning is included in each object\'s Amazon Resource Name
+-- (ARN), at the level that applies to that object as follows:
+--
+-- 1.  Versionless ARNs and Name ARNs do not include specific values in any
+--     of the nodes. The nodes are either left off entirely, or they are
+--     specified as wildcards, for example: x.x.x.
+--
+-- 2.  Version ARNs have only the first three nodes:
+--     \<major>.\<minor>.\<patch>
+--
+-- 3.  Build version ARNs have all four nodes, and point to a specific
+--     build for a specific version of an object.
+--
+-- 'buildType', 'image_buildType' - Indicates the type of build that created this image. The build can be
+-- initiated in the following ways:
+--
+-- -   __USER_INITIATED__ – A manual pipeline build request.
+--
+-- -   __SCHEDULED__ – A pipeline build initiated by a cron expression in
+--     the Image Builder pipeline, or from EventBridge.
+--
+-- -   __IMPORT__ – A VM import created the image to use as the base image
+--     for the recipe.
+--
+-- 'containerRecipe', 'image_containerRecipe' - The recipe that is used to create an Image Builder container image.
+--
+-- 'dateCreated', 'image_dateCreated' - The date on which this image was created.
+--
+-- 'distributionConfiguration', 'image_distributionConfiguration' - The distribution configuration used when creating this image.
+--
+-- 'enhancedImageMetadataEnabled', 'image_enhancedImageMetadataEnabled' - Collects additional information about the image being created, including
+-- the operating system (OS) version and package list. This information is
+-- used to enhance the overall experience of using EC2 Image Builder.
+-- Enabled by default.
+--
+-- 'imageRecipe', 'image_imageRecipe' - The image recipe used when creating the image.
+--
+-- 'imageTestsConfiguration', 'image_imageTestsConfiguration' - The image tests configuration used when creating this image.
+--
+-- 'infrastructureConfiguration', 'image_infrastructureConfiguration' - The infrastructure used when creating this image.
+--
+-- 'name', 'image_name' - The name of the image.
+--
+-- 'osVersion', 'image_osVersion' - The operating system version of the instance. For example, Amazon Linux
+-- 2, Ubuntu 18, or Microsoft Windows Server 2019.
+--
+-- 'outputResources', 'image_outputResources' - The output resources produced when creating this image.
+--
+-- 'platform', 'image_platform' - The platform of the image.
+--
+-- 'sourcePipelineArn', 'image_sourcePipelineArn' - The Amazon Resource Name (ARN) of the image pipeline that created this
+-- image.
+--
+-- 'sourcePipelineName', 'image_sourcePipelineName' - The name of the image pipeline that created this image.
+--
+-- 'state', 'image_state' - The state of the image.
+--
+-- 'tags', 'image_tags' - The tags of the image.
+--
+-- 'type'', 'image_type' - Specifies whether this is an AMI or container image.
+--
+-- 'version', 'image_version' - The semantic version of the image.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+--
+-- __Filtering:__ With semantic versioning, you have the flexibility to use
+-- wildcards (x) to specify the most recent versions or nodes when
+-- selecting the base image or components for your recipe. When you use a
+-- wildcard in any node, all nodes to the right of the first wildcard must
+-- also be wildcards.
+newImage ::
+  Image
+newImage =
+  Image'
+    { arn = Prelude.Nothing,
+      buildType = Prelude.Nothing,
+      containerRecipe = Prelude.Nothing,
+      dateCreated = Prelude.Nothing,
+      distributionConfiguration = Prelude.Nothing,
+      enhancedImageMetadataEnabled = Prelude.Nothing,
+      imageRecipe = Prelude.Nothing,
+      imageTestsConfiguration = Prelude.Nothing,
+      infrastructureConfiguration = Prelude.Nothing,
+      name = Prelude.Nothing,
+      osVersion = Prelude.Nothing,
+      outputResources = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      sourcePipelineArn = Prelude.Nothing,
+      sourcePipelineName = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the image.
+--
+-- Semantic versioning is included in each object\'s Amazon Resource Name
+-- (ARN), at the level that applies to that object as follows:
+--
+-- 1.  Versionless ARNs and Name ARNs do not include specific values in any
+--     of the nodes. The nodes are either left off entirely, or they are
+--     specified as wildcards, for example: x.x.x.
+--
+-- 2.  Version ARNs have only the first three nodes:
+--     \<major>.\<minor>.\<patch>
+--
+-- 3.  Build version ARNs have all four nodes, and point to a specific
+--     build for a specific version of an object.
+image_arn :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_arn = Lens.lens (\Image' {arn} -> arn) (\s@Image' {} a -> s {arn = a} :: Image)
+
+-- | Indicates the type of build that created this image. The build can be
+-- initiated in the following ways:
+--
+-- -   __USER_INITIATED__ – A manual pipeline build request.
+--
+-- -   __SCHEDULED__ – A pipeline build initiated by a cron expression in
+--     the Image Builder pipeline, or from EventBridge.
+--
+-- -   __IMPORT__ – A VM import created the image to use as the base image
+--     for the recipe.
+image_buildType :: Lens.Lens' Image (Prelude.Maybe BuildType)
+image_buildType = Lens.lens (\Image' {buildType} -> buildType) (\s@Image' {} a -> s {buildType = a} :: Image)
+
+-- | The recipe that is used to create an Image Builder container image.
+image_containerRecipe :: Lens.Lens' Image (Prelude.Maybe ContainerRecipe)
+image_containerRecipe = Lens.lens (\Image' {containerRecipe} -> containerRecipe) (\s@Image' {} a -> s {containerRecipe = a} :: Image)
+
+-- | The date on which this image was created.
+image_dateCreated :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_dateCreated = Lens.lens (\Image' {dateCreated} -> dateCreated) (\s@Image' {} a -> s {dateCreated = a} :: Image)
+
+-- | The distribution configuration used when creating this image.
+image_distributionConfiguration :: Lens.Lens' Image (Prelude.Maybe DistributionConfiguration)
+image_distributionConfiguration = Lens.lens (\Image' {distributionConfiguration} -> distributionConfiguration) (\s@Image' {} a -> s {distributionConfiguration = a} :: Image)
+
+-- | Collects additional information about the image being created, including
+-- the operating system (OS) version and package list. This information is
+-- used to enhance the overall experience of using EC2 Image Builder.
+-- Enabled by default.
+image_enhancedImageMetadataEnabled :: Lens.Lens' Image (Prelude.Maybe Prelude.Bool)
+image_enhancedImageMetadataEnabled = Lens.lens (\Image' {enhancedImageMetadataEnabled} -> enhancedImageMetadataEnabled) (\s@Image' {} a -> s {enhancedImageMetadataEnabled = a} :: Image)
+
+-- | The image recipe used when creating the image.
+image_imageRecipe :: Lens.Lens' Image (Prelude.Maybe ImageRecipe)
+image_imageRecipe = Lens.lens (\Image' {imageRecipe} -> imageRecipe) (\s@Image' {} a -> s {imageRecipe = a} :: Image)
+
+-- | The image tests configuration used when creating this image.
+image_imageTestsConfiguration :: Lens.Lens' Image (Prelude.Maybe ImageTestsConfiguration)
+image_imageTestsConfiguration = Lens.lens (\Image' {imageTestsConfiguration} -> imageTestsConfiguration) (\s@Image' {} a -> s {imageTestsConfiguration = a} :: Image)
+
+-- | The infrastructure used when creating this image.
+image_infrastructureConfiguration :: Lens.Lens' Image (Prelude.Maybe InfrastructureConfiguration)
+image_infrastructureConfiguration = Lens.lens (\Image' {infrastructureConfiguration} -> infrastructureConfiguration) (\s@Image' {} a -> s {infrastructureConfiguration = a} :: Image)
+
+-- | The name of the image.
+image_name :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_name = Lens.lens (\Image' {name} -> name) (\s@Image' {} a -> s {name = a} :: Image)
+
+-- | The operating system version of the instance. For example, Amazon Linux
+-- 2, Ubuntu 18, or Microsoft Windows Server 2019.
+image_osVersion :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_osVersion = Lens.lens (\Image' {osVersion} -> osVersion) (\s@Image' {} a -> s {osVersion = a} :: Image)
+
+-- | The output resources produced when creating this image.
+image_outputResources :: Lens.Lens' Image (Prelude.Maybe OutputResources)
+image_outputResources = Lens.lens (\Image' {outputResources} -> outputResources) (\s@Image' {} a -> s {outputResources = a} :: Image)
+
+-- | The platform of the image.
+image_platform :: Lens.Lens' Image (Prelude.Maybe Platform)
+image_platform = Lens.lens (\Image' {platform} -> platform) (\s@Image' {} a -> s {platform = a} :: Image)
+
+-- | The Amazon Resource Name (ARN) of the image pipeline that created this
+-- image.
+image_sourcePipelineArn :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_sourcePipelineArn = Lens.lens (\Image' {sourcePipelineArn} -> sourcePipelineArn) (\s@Image' {} a -> s {sourcePipelineArn = a} :: Image)
+
+-- | The name of the image pipeline that created this image.
+image_sourcePipelineName :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_sourcePipelineName = Lens.lens (\Image' {sourcePipelineName} -> sourcePipelineName) (\s@Image' {} a -> s {sourcePipelineName = a} :: Image)
+
+-- | The state of the image.
+image_state :: Lens.Lens' Image (Prelude.Maybe ImageState)
+image_state = Lens.lens (\Image' {state} -> state) (\s@Image' {} a -> s {state = a} :: Image)
+
+-- | The tags of the image.
+image_tags :: Lens.Lens' Image (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+image_tags = Lens.lens (\Image' {tags} -> tags) (\s@Image' {} a -> s {tags = a} :: Image) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies whether this is an AMI or container image.
+image_type :: Lens.Lens' Image (Prelude.Maybe ImageType)
+image_type = Lens.lens (\Image' {type'} -> type') (\s@Image' {} a -> s {type' = a} :: Image)
+
+-- | The semantic version of the image.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+--
+-- __Filtering:__ With semantic versioning, you have the flexibility to use
+-- wildcards (x) to specify the most recent versions or nodes when
+-- selecting the base image or components for your recipe. When you use a
+-- wildcard in any node, all nodes to the right of the first wildcard must
+-- also be wildcards.
+image_version :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_version = Lens.lens (\Image' {version} -> version) (\s@Image' {} a -> s {version = a} :: Image)
+
+instance Data.FromJSON Image where
+  parseJSON =
+    Data.withObject
+      "Image"
+      ( \x ->
+          Image'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "buildType")
+            Prelude.<*> (x Data..:? "containerRecipe")
+            Prelude.<*> (x Data..:? "dateCreated")
+            Prelude.<*> (x Data..:? "distributionConfiguration")
+            Prelude.<*> (x Data..:? "enhancedImageMetadataEnabled")
+            Prelude.<*> (x Data..:? "imageRecipe")
+            Prelude.<*> (x Data..:? "imageTestsConfiguration")
+            Prelude.<*> (x Data..:? "infrastructureConfiguration")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "osVersion")
+            Prelude.<*> (x Data..:? "outputResources")
+            Prelude.<*> (x Data..:? "platform")
+            Prelude.<*> (x Data..:? "sourcePipelineArn")
+            Prelude.<*> (x Data..:? "sourcePipelineName")
+            Prelude.<*> (x Data..:? "state")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable Image where
+  hashWithSalt _salt Image' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` buildType
+      `Prelude.hashWithSalt` containerRecipe
+      `Prelude.hashWithSalt` dateCreated
+      `Prelude.hashWithSalt` distributionConfiguration
+      `Prelude.hashWithSalt` enhancedImageMetadataEnabled
+      `Prelude.hashWithSalt` imageRecipe
+      `Prelude.hashWithSalt` imageTestsConfiguration
+      `Prelude.hashWithSalt` infrastructureConfiguration
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` osVersion
+      `Prelude.hashWithSalt` outputResources
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` sourcePipelineArn
+      `Prelude.hashWithSalt` sourcePipelineName
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData Image where
+  rnf Image' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf buildType
+      `Prelude.seq` Prelude.rnf containerRecipe
+      `Prelude.seq` Prelude.rnf dateCreated
+      `Prelude.seq` Prelude.rnf distributionConfiguration
+      `Prelude.seq` Prelude.rnf enhancedImageMetadataEnabled
+      `Prelude.seq` Prelude.rnf imageRecipe
+      `Prelude.seq` Prelude.rnf imageTestsConfiguration
+      `Prelude.seq` Prelude.rnf infrastructureConfiguration
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf osVersion
+      `Prelude.seq` Prelude.rnf outputResources
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf sourcePipelineArn
+      `Prelude.seq` Prelude.rnf sourcePipelineName
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/ImageBuilder/Types/ImagePackage.hs b/gen/Amazonka/ImageBuilder/Types/ImagePackage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ImagePackage.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.ImageBuilder.Types.ImagePackage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ImagePackage 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
+
+-- | Represents a package installed on an Image Builder image.
+--
+-- /See:/ 'newImagePackage' smart constructor.
+data ImagePackage = ImagePackage'
+  { -- | The name of the package as reported to the operating system package
+    -- manager.
+    packageName :: Prelude.Maybe Prelude.Text,
+    -- | The version of the package as reported to the operating system package
+    -- manager.
+    packageVersion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImagePackage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'packageName', 'imagePackage_packageName' - The name of the package as reported to the operating system package
+-- manager.
+--
+-- 'packageVersion', 'imagePackage_packageVersion' - The version of the package as reported to the operating system package
+-- manager.
+newImagePackage ::
+  ImagePackage
+newImagePackage =
+  ImagePackage'
+    { packageName = Prelude.Nothing,
+      packageVersion = Prelude.Nothing
+    }
+
+-- | The name of the package as reported to the operating system package
+-- manager.
+imagePackage_packageName :: Lens.Lens' ImagePackage (Prelude.Maybe Prelude.Text)
+imagePackage_packageName = Lens.lens (\ImagePackage' {packageName} -> packageName) (\s@ImagePackage' {} a -> s {packageName = a} :: ImagePackage)
+
+-- | The version of the package as reported to the operating system package
+-- manager.
+imagePackage_packageVersion :: Lens.Lens' ImagePackage (Prelude.Maybe Prelude.Text)
+imagePackage_packageVersion = Lens.lens (\ImagePackage' {packageVersion} -> packageVersion) (\s@ImagePackage' {} a -> s {packageVersion = a} :: ImagePackage)
+
+instance Data.FromJSON ImagePackage where
+  parseJSON =
+    Data.withObject
+      "ImagePackage"
+      ( \x ->
+          ImagePackage'
+            Prelude.<$> (x Data..:? "packageName")
+            Prelude.<*> (x Data..:? "packageVersion")
+      )
+
+instance Prelude.Hashable ImagePackage where
+  hashWithSalt _salt ImagePackage' {..} =
+    _salt
+      `Prelude.hashWithSalt` packageName
+      `Prelude.hashWithSalt` packageVersion
+
+instance Prelude.NFData ImagePackage where
+  rnf ImagePackage' {..} =
+    Prelude.rnf packageName
+      `Prelude.seq` Prelude.rnf packageVersion
diff --git a/gen/Amazonka/ImageBuilder/Types/ImagePipeline.hs b/gen/Amazonka/ImageBuilder/Types/ImagePipeline.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ImagePipeline.hs
@@ -0,0 +1,289 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.ImagePipeline
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ImagePipeline where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.ImageTestsConfiguration
+import Amazonka.ImageBuilder.Types.PipelineStatus
+import Amazonka.ImageBuilder.Types.Platform
+import Amazonka.ImageBuilder.Types.Schedule
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details of an image pipeline.
+--
+-- /See:/ 'newImagePipeline' smart constructor.
+data ImagePipeline = ImagePipeline'
+  { -- | The Amazon Resource Name (ARN) of the image pipeline.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the container recipe that is used for
+    -- this pipeline.
+    containerRecipeArn :: Prelude.Maybe Prelude.Text,
+    -- | The date on which this image pipeline was created.
+    dateCreated :: Prelude.Maybe Prelude.Text,
+    -- | The date on which this image pipeline was last run.
+    dateLastRun :: Prelude.Maybe Prelude.Text,
+    -- | The date on which this image pipeline will next be run.
+    dateNextRun :: Prelude.Maybe Prelude.Text,
+    -- | The date on which this image pipeline was last updated.
+    dateUpdated :: Prelude.Maybe Prelude.Text,
+    -- | The description of the image pipeline.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the distribution configuration
+    -- associated with this image pipeline.
+    distributionConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | Collects additional information about the image being created, including
+    -- the operating system (OS) version and package list. This information is
+    -- used to enhance the overall experience of using EC2 Image Builder.
+    -- Enabled by default.
+    enhancedImageMetadataEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the image recipe associated with this
+    -- image pipeline.
+    imageRecipeArn :: Prelude.Maybe Prelude.Text,
+    -- | The image tests configuration of the image pipeline.
+    imageTestsConfiguration :: Prelude.Maybe ImageTestsConfiguration,
+    -- | The Amazon Resource Name (ARN) of the infrastructure configuration
+    -- associated with this image pipeline.
+    infrastructureConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the image pipeline.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The platform of the image pipeline.
+    platform :: Prelude.Maybe Platform,
+    -- | The schedule of the image pipeline.
+    schedule :: Prelude.Maybe Schedule,
+    -- | The status of the image pipeline.
+    status :: Prelude.Maybe PipelineStatus,
+    -- | The tags of this image pipeline.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImagePipeline' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'imagePipeline_arn' - The Amazon Resource Name (ARN) of the image pipeline.
+--
+-- 'containerRecipeArn', 'imagePipeline_containerRecipeArn' - The Amazon Resource Name (ARN) of the container recipe that is used for
+-- this pipeline.
+--
+-- 'dateCreated', 'imagePipeline_dateCreated' - The date on which this image pipeline was created.
+--
+-- 'dateLastRun', 'imagePipeline_dateLastRun' - The date on which this image pipeline was last run.
+--
+-- 'dateNextRun', 'imagePipeline_dateNextRun' - The date on which this image pipeline will next be run.
+--
+-- 'dateUpdated', 'imagePipeline_dateUpdated' - The date on which this image pipeline was last updated.
+--
+-- 'description', 'imagePipeline_description' - The description of the image pipeline.
+--
+-- 'distributionConfigurationArn', 'imagePipeline_distributionConfigurationArn' - The Amazon Resource Name (ARN) of the distribution configuration
+-- associated with this image pipeline.
+--
+-- 'enhancedImageMetadataEnabled', 'imagePipeline_enhancedImageMetadataEnabled' - Collects additional information about the image being created, including
+-- the operating system (OS) version and package list. This information is
+-- used to enhance the overall experience of using EC2 Image Builder.
+-- Enabled by default.
+--
+-- 'imageRecipeArn', 'imagePipeline_imageRecipeArn' - The Amazon Resource Name (ARN) of the image recipe associated with this
+-- image pipeline.
+--
+-- 'imageTestsConfiguration', 'imagePipeline_imageTestsConfiguration' - The image tests configuration of the image pipeline.
+--
+-- 'infrastructureConfigurationArn', 'imagePipeline_infrastructureConfigurationArn' - The Amazon Resource Name (ARN) of the infrastructure configuration
+-- associated with this image pipeline.
+--
+-- 'name', 'imagePipeline_name' - The name of the image pipeline.
+--
+-- 'platform', 'imagePipeline_platform' - The platform of the image pipeline.
+--
+-- 'schedule', 'imagePipeline_schedule' - The schedule of the image pipeline.
+--
+-- 'status', 'imagePipeline_status' - The status of the image pipeline.
+--
+-- 'tags', 'imagePipeline_tags' - The tags of this image pipeline.
+newImagePipeline ::
+  ImagePipeline
+newImagePipeline =
+  ImagePipeline'
+    { arn = Prelude.Nothing,
+      containerRecipeArn = Prelude.Nothing,
+      dateCreated = Prelude.Nothing,
+      dateLastRun = Prelude.Nothing,
+      dateNextRun = Prelude.Nothing,
+      dateUpdated = Prelude.Nothing,
+      description = Prelude.Nothing,
+      distributionConfigurationArn = Prelude.Nothing,
+      enhancedImageMetadataEnabled = Prelude.Nothing,
+      imageRecipeArn = Prelude.Nothing,
+      imageTestsConfiguration = Prelude.Nothing,
+      infrastructureConfigurationArn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      schedule = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the image pipeline.
+imagePipeline_arn :: Lens.Lens' ImagePipeline (Prelude.Maybe Prelude.Text)
+imagePipeline_arn = Lens.lens (\ImagePipeline' {arn} -> arn) (\s@ImagePipeline' {} a -> s {arn = a} :: ImagePipeline)
+
+-- | The Amazon Resource Name (ARN) of the container recipe that is used for
+-- this pipeline.
+imagePipeline_containerRecipeArn :: Lens.Lens' ImagePipeline (Prelude.Maybe Prelude.Text)
+imagePipeline_containerRecipeArn = Lens.lens (\ImagePipeline' {containerRecipeArn} -> containerRecipeArn) (\s@ImagePipeline' {} a -> s {containerRecipeArn = a} :: ImagePipeline)
+
+-- | The date on which this image pipeline was created.
+imagePipeline_dateCreated :: Lens.Lens' ImagePipeline (Prelude.Maybe Prelude.Text)
+imagePipeline_dateCreated = Lens.lens (\ImagePipeline' {dateCreated} -> dateCreated) (\s@ImagePipeline' {} a -> s {dateCreated = a} :: ImagePipeline)
+
+-- | The date on which this image pipeline was last run.
+imagePipeline_dateLastRun :: Lens.Lens' ImagePipeline (Prelude.Maybe Prelude.Text)
+imagePipeline_dateLastRun = Lens.lens (\ImagePipeline' {dateLastRun} -> dateLastRun) (\s@ImagePipeline' {} a -> s {dateLastRun = a} :: ImagePipeline)
+
+-- | The date on which this image pipeline will next be run.
+imagePipeline_dateNextRun :: Lens.Lens' ImagePipeline (Prelude.Maybe Prelude.Text)
+imagePipeline_dateNextRun = Lens.lens (\ImagePipeline' {dateNextRun} -> dateNextRun) (\s@ImagePipeline' {} a -> s {dateNextRun = a} :: ImagePipeline)
+
+-- | The date on which this image pipeline was last updated.
+imagePipeline_dateUpdated :: Lens.Lens' ImagePipeline (Prelude.Maybe Prelude.Text)
+imagePipeline_dateUpdated = Lens.lens (\ImagePipeline' {dateUpdated} -> dateUpdated) (\s@ImagePipeline' {} a -> s {dateUpdated = a} :: ImagePipeline)
+
+-- | The description of the image pipeline.
+imagePipeline_description :: Lens.Lens' ImagePipeline (Prelude.Maybe Prelude.Text)
+imagePipeline_description = Lens.lens (\ImagePipeline' {description} -> description) (\s@ImagePipeline' {} a -> s {description = a} :: ImagePipeline)
+
+-- | The Amazon Resource Name (ARN) of the distribution configuration
+-- associated with this image pipeline.
+imagePipeline_distributionConfigurationArn :: Lens.Lens' ImagePipeline (Prelude.Maybe Prelude.Text)
+imagePipeline_distributionConfigurationArn = Lens.lens (\ImagePipeline' {distributionConfigurationArn} -> distributionConfigurationArn) (\s@ImagePipeline' {} a -> s {distributionConfigurationArn = a} :: ImagePipeline)
+
+-- | Collects additional information about the image being created, including
+-- the operating system (OS) version and package list. This information is
+-- used to enhance the overall experience of using EC2 Image Builder.
+-- Enabled by default.
+imagePipeline_enhancedImageMetadataEnabled :: Lens.Lens' ImagePipeline (Prelude.Maybe Prelude.Bool)
+imagePipeline_enhancedImageMetadataEnabled = Lens.lens (\ImagePipeline' {enhancedImageMetadataEnabled} -> enhancedImageMetadataEnabled) (\s@ImagePipeline' {} a -> s {enhancedImageMetadataEnabled = a} :: ImagePipeline)
+
+-- | The Amazon Resource Name (ARN) of the image recipe associated with this
+-- image pipeline.
+imagePipeline_imageRecipeArn :: Lens.Lens' ImagePipeline (Prelude.Maybe Prelude.Text)
+imagePipeline_imageRecipeArn = Lens.lens (\ImagePipeline' {imageRecipeArn} -> imageRecipeArn) (\s@ImagePipeline' {} a -> s {imageRecipeArn = a} :: ImagePipeline)
+
+-- | The image tests configuration of the image pipeline.
+imagePipeline_imageTestsConfiguration :: Lens.Lens' ImagePipeline (Prelude.Maybe ImageTestsConfiguration)
+imagePipeline_imageTestsConfiguration = Lens.lens (\ImagePipeline' {imageTestsConfiguration} -> imageTestsConfiguration) (\s@ImagePipeline' {} a -> s {imageTestsConfiguration = a} :: ImagePipeline)
+
+-- | The Amazon Resource Name (ARN) of the infrastructure configuration
+-- associated with this image pipeline.
+imagePipeline_infrastructureConfigurationArn :: Lens.Lens' ImagePipeline (Prelude.Maybe Prelude.Text)
+imagePipeline_infrastructureConfigurationArn = Lens.lens (\ImagePipeline' {infrastructureConfigurationArn} -> infrastructureConfigurationArn) (\s@ImagePipeline' {} a -> s {infrastructureConfigurationArn = a} :: ImagePipeline)
+
+-- | The name of the image pipeline.
+imagePipeline_name :: Lens.Lens' ImagePipeline (Prelude.Maybe Prelude.Text)
+imagePipeline_name = Lens.lens (\ImagePipeline' {name} -> name) (\s@ImagePipeline' {} a -> s {name = a} :: ImagePipeline)
+
+-- | The platform of the image pipeline.
+imagePipeline_platform :: Lens.Lens' ImagePipeline (Prelude.Maybe Platform)
+imagePipeline_platform = Lens.lens (\ImagePipeline' {platform} -> platform) (\s@ImagePipeline' {} a -> s {platform = a} :: ImagePipeline)
+
+-- | The schedule of the image pipeline.
+imagePipeline_schedule :: Lens.Lens' ImagePipeline (Prelude.Maybe Schedule)
+imagePipeline_schedule = Lens.lens (\ImagePipeline' {schedule} -> schedule) (\s@ImagePipeline' {} a -> s {schedule = a} :: ImagePipeline)
+
+-- | The status of the image pipeline.
+imagePipeline_status :: Lens.Lens' ImagePipeline (Prelude.Maybe PipelineStatus)
+imagePipeline_status = Lens.lens (\ImagePipeline' {status} -> status) (\s@ImagePipeline' {} a -> s {status = a} :: ImagePipeline)
+
+-- | The tags of this image pipeline.
+imagePipeline_tags :: Lens.Lens' ImagePipeline (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+imagePipeline_tags = Lens.lens (\ImagePipeline' {tags} -> tags) (\s@ImagePipeline' {} a -> s {tags = a} :: ImagePipeline) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ImagePipeline where
+  parseJSON =
+    Data.withObject
+      "ImagePipeline"
+      ( \x ->
+          ImagePipeline'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "containerRecipeArn")
+            Prelude.<*> (x Data..:? "dateCreated")
+            Prelude.<*> (x Data..:? "dateLastRun")
+            Prelude.<*> (x Data..:? "dateNextRun")
+            Prelude.<*> (x Data..:? "dateUpdated")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "distributionConfigurationArn")
+            Prelude.<*> (x Data..:? "enhancedImageMetadataEnabled")
+            Prelude.<*> (x Data..:? "imageRecipeArn")
+            Prelude.<*> (x Data..:? "imageTestsConfiguration")
+            Prelude.<*> (x Data..:? "infrastructureConfigurationArn")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "platform")
+            Prelude.<*> (x Data..:? "schedule")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ImagePipeline where
+  hashWithSalt _salt ImagePipeline' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` containerRecipeArn
+      `Prelude.hashWithSalt` dateCreated
+      `Prelude.hashWithSalt` dateLastRun
+      `Prelude.hashWithSalt` dateNextRun
+      `Prelude.hashWithSalt` dateUpdated
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` distributionConfigurationArn
+      `Prelude.hashWithSalt` enhancedImageMetadataEnabled
+      `Prelude.hashWithSalt` imageRecipeArn
+      `Prelude.hashWithSalt` imageTestsConfiguration
+      `Prelude.hashWithSalt` infrastructureConfigurationArn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` schedule
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData ImagePipeline where
+  rnf ImagePipeline' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf containerRecipeArn
+      `Prelude.seq` Prelude.rnf dateCreated
+      `Prelude.seq` Prelude.rnf dateLastRun
+      `Prelude.seq` Prelude.rnf dateNextRun
+      `Prelude.seq` Prelude.rnf dateUpdated
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf distributionConfigurationArn
+      `Prelude.seq` Prelude.rnf enhancedImageMetadataEnabled
+      `Prelude.seq` Prelude.rnf imageRecipeArn
+      `Prelude.seq` Prelude.rnf imageTestsConfiguration
+      `Prelude.seq` Prelude.rnf infrastructureConfigurationArn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf schedule
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/ImageBuilder/Types/ImageRecipe.hs b/gen/Amazonka/ImageBuilder/Types/ImageRecipe.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ImageRecipe.hs
@@ -0,0 +1,255 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.ImageRecipe
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ImageRecipe where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.AdditionalInstanceConfiguration
+import Amazonka.ImageBuilder.Types.ComponentConfiguration
+import Amazonka.ImageBuilder.Types.ImageType
+import Amazonka.ImageBuilder.Types.InstanceBlockDeviceMapping
+import Amazonka.ImageBuilder.Types.Platform
+import qualified Amazonka.Prelude as Prelude
+
+-- | An image recipe.
+--
+-- /See:/ 'newImageRecipe' smart constructor.
+data ImageRecipe = ImageRecipe'
+  { -- | Before you create a new AMI, Image Builder launches temporary Amazon EC2
+    -- instances to build and test your image configuration. Instance
+    -- configuration adds a layer of control over those instances. You can
+    -- define settings and add scripts to run when an instance is launched from
+    -- your AMI.
+    additionalInstanceConfiguration :: Prelude.Maybe AdditionalInstanceConfiguration,
+    -- | The Amazon Resource Name (ARN) of the image recipe.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The block device mappings to apply when creating images from this
+    -- recipe.
+    blockDeviceMappings :: Prelude.Maybe [InstanceBlockDeviceMapping],
+    -- | The components of the image recipe.
+    components :: Prelude.Maybe (Prelude.NonEmpty ComponentConfiguration),
+    -- | The date on which this image recipe was created.
+    dateCreated :: Prelude.Maybe Prelude.Text,
+    -- | The description of the image recipe.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the image recipe.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The owner of the image recipe.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The base image of the image recipe.
+    parentImage :: Prelude.Maybe Prelude.Text,
+    -- | The platform of the image recipe.
+    platform :: Prelude.Maybe Platform,
+    -- | The tags of the image recipe.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Specifies which type of image is created by the recipe - an AMI or a
+    -- container image.
+    type' :: Prelude.Maybe ImageType,
+    -- | The version of the image recipe.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The working directory to be used during build and test workflows.
+    workingDirectory :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageRecipe' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalInstanceConfiguration', 'imageRecipe_additionalInstanceConfiguration' - Before you create a new AMI, Image Builder launches temporary Amazon EC2
+-- instances to build and test your image configuration. Instance
+-- configuration adds a layer of control over those instances. You can
+-- define settings and add scripts to run when an instance is launched from
+-- your AMI.
+--
+-- 'arn', 'imageRecipe_arn' - The Amazon Resource Name (ARN) of the image recipe.
+--
+-- 'blockDeviceMappings', 'imageRecipe_blockDeviceMappings' - The block device mappings to apply when creating images from this
+-- recipe.
+--
+-- 'components', 'imageRecipe_components' - The components of the image recipe.
+--
+-- 'dateCreated', 'imageRecipe_dateCreated' - The date on which this image recipe was created.
+--
+-- 'description', 'imageRecipe_description' - The description of the image recipe.
+--
+-- 'name', 'imageRecipe_name' - The name of the image recipe.
+--
+-- 'owner', 'imageRecipe_owner' - The owner of the image recipe.
+--
+-- 'parentImage', 'imageRecipe_parentImage' - The base image of the image recipe.
+--
+-- 'platform', 'imageRecipe_platform' - The platform of the image recipe.
+--
+-- 'tags', 'imageRecipe_tags' - The tags of the image recipe.
+--
+-- 'type'', 'imageRecipe_type' - Specifies which type of image is created by the recipe - an AMI or a
+-- container image.
+--
+-- 'version', 'imageRecipe_version' - The version of the image recipe.
+--
+-- 'workingDirectory', 'imageRecipe_workingDirectory' - The working directory to be used during build and test workflows.
+newImageRecipe ::
+  ImageRecipe
+newImageRecipe =
+  ImageRecipe'
+    { additionalInstanceConfiguration =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      blockDeviceMappings = Prelude.Nothing,
+      components = Prelude.Nothing,
+      dateCreated = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      parentImage = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      version = Prelude.Nothing,
+      workingDirectory = Prelude.Nothing
+    }
+
+-- | Before you create a new AMI, Image Builder launches temporary Amazon EC2
+-- instances to build and test your image configuration. Instance
+-- configuration adds a layer of control over those instances. You can
+-- define settings and add scripts to run when an instance is launched from
+-- your AMI.
+imageRecipe_additionalInstanceConfiguration :: Lens.Lens' ImageRecipe (Prelude.Maybe AdditionalInstanceConfiguration)
+imageRecipe_additionalInstanceConfiguration = Lens.lens (\ImageRecipe' {additionalInstanceConfiguration} -> additionalInstanceConfiguration) (\s@ImageRecipe' {} a -> s {additionalInstanceConfiguration = a} :: ImageRecipe)
+
+-- | The Amazon Resource Name (ARN) of the image recipe.
+imageRecipe_arn :: Lens.Lens' ImageRecipe (Prelude.Maybe Prelude.Text)
+imageRecipe_arn = Lens.lens (\ImageRecipe' {arn} -> arn) (\s@ImageRecipe' {} a -> s {arn = a} :: ImageRecipe)
+
+-- | The block device mappings to apply when creating images from this
+-- recipe.
+imageRecipe_blockDeviceMappings :: Lens.Lens' ImageRecipe (Prelude.Maybe [InstanceBlockDeviceMapping])
+imageRecipe_blockDeviceMappings = Lens.lens (\ImageRecipe' {blockDeviceMappings} -> blockDeviceMappings) (\s@ImageRecipe' {} a -> s {blockDeviceMappings = a} :: ImageRecipe) Prelude.. Lens.mapping Lens.coerced
+
+-- | The components of the image recipe.
+imageRecipe_components :: Lens.Lens' ImageRecipe (Prelude.Maybe (Prelude.NonEmpty ComponentConfiguration))
+imageRecipe_components = Lens.lens (\ImageRecipe' {components} -> components) (\s@ImageRecipe' {} a -> s {components = a} :: ImageRecipe) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date on which this image recipe was created.
+imageRecipe_dateCreated :: Lens.Lens' ImageRecipe (Prelude.Maybe Prelude.Text)
+imageRecipe_dateCreated = Lens.lens (\ImageRecipe' {dateCreated} -> dateCreated) (\s@ImageRecipe' {} a -> s {dateCreated = a} :: ImageRecipe)
+
+-- | The description of the image recipe.
+imageRecipe_description :: Lens.Lens' ImageRecipe (Prelude.Maybe Prelude.Text)
+imageRecipe_description = Lens.lens (\ImageRecipe' {description} -> description) (\s@ImageRecipe' {} a -> s {description = a} :: ImageRecipe)
+
+-- | The name of the image recipe.
+imageRecipe_name :: Lens.Lens' ImageRecipe (Prelude.Maybe Prelude.Text)
+imageRecipe_name = Lens.lens (\ImageRecipe' {name} -> name) (\s@ImageRecipe' {} a -> s {name = a} :: ImageRecipe)
+
+-- | The owner of the image recipe.
+imageRecipe_owner :: Lens.Lens' ImageRecipe (Prelude.Maybe Prelude.Text)
+imageRecipe_owner = Lens.lens (\ImageRecipe' {owner} -> owner) (\s@ImageRecipe' {} a -> s {owner = a} :: ImageRecipe)
+
+-- | The base image of the image recipe.
+imageRecipe_parentImage :: Lens.Lens' ImageRecipe (Prelude.Maybe Prelude.Text)
+imageRecipe_parentImage = Lens.lens (\ImageRecipe' {parentImage} -> parentImage) (\s@ImageRecipe' {} a -> s {parentImage = a} :: ImageRecipe)
+
+-- | The platform of the image recipe.
+imageRecipe_platform :: Lens.Lens' ImageRecipe (Prelude.Maybe Platform)
+imageRecipe_platform = Lens.lens (\ImageRecipe' {platform} -> platform) (\s@ImageRecipe' {} a -> s {platform = a} :: ImageRecipe)
+
+-- | The tags of the image recipe.
+imageRecipe_tags :: Lens.Lens' ImageRecipe (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+imageRecipe_tags = Lens.lens (\ImageRecipe' {tags} -> tags) (\s@ImageRecipe' {} a -> s {tags = a} :: ImageRecipe) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies which type of image is created by the recipe - an AMI or a
+-- container image.
+imageRecipe_type :: Lens.Lens' ImageRecipe (Prelude.Maybe ImageType)
+imageRecipe_type = Lens.lens (\ImageRecipe' {type'} -> type') (\s@ImageRecipe' {} a -> s {type' = a} :: ImageRecipe)
+
+-- | The version of the image recipe.
+imageRecipe_version :: Lens.Lens' ImageRecipe (Prelude.Maybe Prelude.Text)
+imageRecipe_version = Lens.lens (\ImageRecipe' {version} -> version) (\s@ImageRecipe' {} a -> s {version = a} :: ImageRecipe)
+
+-- | The working directory to be used during build and test workflows.
+imageRecipe_workingDirectory :: Lens.Lens' ImageRecipe (Prelude.Maybe Prelude.Text)
+imageRecipe_workingDirectory = Lens.lens (\ImageRecipe' {workingDirectory} -> workingDirectory) (\s@ImageRecipe' {} a -> s {workingDirectory = a} :: ImageRecipe)
+
+instance Data.FromJSON ImageRecipe where
+  parseJSON =
+    Data.withObject
+      "ImageRecipe"
+      ( \x ->
+          ImageRecipe'
+            Prelude.<$> (x Data..:? "additionalInstanceConfiguration")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> ( x
+                            Data..:? "blockDeviceMappings"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "components")
+            Prelude.<*> (x Data..:? "dateCreated")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "parentImage")
+            Prelude.<*> (x Data..:? "platform")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..:? "version")
+            Prelude.<*> (x Data..:? "workingDirectory")
+      )
+
+instance Prelude.Hashable ImageRecipe where
+  hashWithSalt _salt ImageRecipe' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalInstanceConfiguration
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` blockDeviceMappings
+      `Prelude.hashWithSalt` components
+      `Prelude.hashWithSalt` dateCreated
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` parentImage
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` version
+      `Prelude.hashWithSalt` workingDirectory
+
+instance Prelude.NFData ImageRecipe where
+  rnf ImageRecipe' {..} =
+    Prelude.rnf additionalInstanceConfiguration
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf components
+      `Prelude.seq` Prelude.rnf dateCreated
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf parentImage
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf workingDirectory
diff --git a/gen/Amazonka/ImageBuilder/Types/ImageRecipeSummary.hs b/gen/Amazonka/ImageBuilder/Types/ImageRecipeSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ImageRecipeSummary.hs
@@ -0,0 +1,145 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.ImageRecipeSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ImageRecipeSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.Platform
+import qualified Amazonka.Prelude as Prelude
+
+-- | A summary of an image recipe.
+--
+-- /See:/ 'newImageRecipeSummary' smart constructor.
+data ImageRecipeSummary = ImageRecipeSummary'
+  { -- | The Amazon Resource Name (ARN) of the image recipe.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date on which this image recipe was created.
+    dateCreated :: Prelude.Maybe Prelude.Text,
+    -- | The name of the image recipe.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The owner of the image recipe.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The base image of the image recipe.
+    parentImage :: Prelude.Maybe Prelude.Text,
+    -- | The platform of the image recipe.
+    platform :: Prelude.Maybe Platform,
+    -- | The tags of the image recipe.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageRecipeSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'imageRecipeSummary_arn' - The Amazon Resource Name (ARN) of the image recipe.
+--
+-- 'dateCreated', 'imageRecipeSummary_dateCreated' - The date on which this image recipe was created.
+--
+-- 'name', 'imageRecipeSummary_name' - The name of the image recipe.
+--
+-- 'owner', 'imageRecipeSummary_owner' - The owner of the image recipe.
+--
+-- 'parentImage', 'imageRecipeSummary_parentImage' - The base image of the image recipe.
+--
+-- 'platform', 'imageRecipeSummary_platform' - The platform of the image recipe.
+--
+-- 'tags', 'imageRecipeSummary_tags' - The tags of the image recipe.
+newImageRecipeSummary ::
+  ImageRecipeSummary
+newImageRecipeSummary =
+  ImageRecipeSummary'
+    { arn = Prelude.Nothing,
+      dateCreated = Prelude.Nothing,
+      name = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      parentImage = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the image recipe.
+imageRecipeSummary_arn :: Lens.Lens' ImageRecipeSummary (Prelude.Maybe Prelude.Text)
+imageRecipeSummary_arn = Lens.lens (\ImageRecipeSummary' {arn} -> arn) (\s@ImageRecipeSummary' {} a -> s {arn = a} :: ImageRecipeSummary)
+
+-- | The date on which this image recipe was created.
+imageRecipeSummary_dateCreated :: Lens.Lens' ImageRecipeSummary (Prelude.Maybe Prelude.Text)
+imageRecipeSummary_dateCreated = Lens.lens (\ImageRecipeSummary' {dateCreated} -> dateCreated) (\s@ImageRecipeSummary' {} a -> s {dateCreated = a} :: ImageRecipeSummary)
+
+-- | The name of the image recipe.
+imageRecipeSummary_name :: Lens.Lens' ImageRecipeSummary (Prelude.Maybe Prelude.Text)
+imageRecipeSummary_name = Lens.lens (\ImageRecipeSummary' {name} -> name) (\s@ImageRecipeSummary' {} a -> s {name = a} :: ImageRecipeSummary)
+
+-- | The owner of the image recipe.
+imageRecipeSummary_owner :: Lens.Lens' ImageRecipeSummary (Prelude.Maybe Prelude.Text)
+imageRecipeSummary_owner = Lens.lens (\ImageRecipeSummary' {owner} -> owner) (\s@ImageRecipeSummary' {} a -> s {owner = a} :: ImageRecipeSummary)
+
+-- | The base image of the image recipe.
+imageRecipeSummary_parentImage :: Lens.Lens' ImageRecipeSummary (Prelude.Maybe Prelude.Text)
+imageRecipeSummary_parentImage = Lens.lens (\ImageRecipeSummary' {parentImage} -> parentImage) (\s@ImageRecipeSummary' {} a -> s {parentImage = a} :: ImageRecipeSummary)
+
+-- | The platform of the image recipe.
+imageRecipeSummary_platform :: Lens.Lens' ImageRecipeSummary (Prelude.Maybe Platform)
+imageRecipeSummary_platform = Lens.lens (\ImageRecipeSummary' {platform} -> platform) (\s@ImageRecipeSummary' {} a -> s {platform = a} :: ImageRecipeSummary)
+
+-- | The tags of the image recipe.
+imageRecipeSummary_tags :: Lens.Lens' ImageRecipeSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+imageRecipeSummary_tags = Lens.lens (\ImageRecipeSummary' {tags} -> tags) (\s@ImageRecipeSummary' {} a -> s {tags = a} :: ImageRecipeSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ImageRecipeSummary where
+  parseJSON =
+    Data.withObject
+      "ImageRecipeSummary"
+      ( \x ->
+          ImageRecipeSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "dateCreated")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "parentImage")
+            Prelude.<*> (x Data..:? "platform")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ImageRecipeSummary where
+  hashWithSalt _salt ImageRecipeSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` dateCreated
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` parentImage
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData ImageRecipeSummary where
+  rnf ImageRecipeSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf dateCreated
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf parentImage
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/ImageBuilder/Types/ImageState.hs b/gen/Amazonka/ImageBuilder/Types/ImageState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ImageState.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.ImageState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ImageState where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.ImageStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Image state shows the image status and the reason for that status.
+--
+-- /See:/ 'newImageState' smart constructor.
+data ImageState = ImageState'
+  { -- | The reason for the image\'s status.
+    reason :: Prelude.Maybe Prelude.Text,
+    -- | The status of the image.
+    status :: Prelude.Maybe ImageStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageState' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reason', 'imageState_reason' - The reason for the image\'s status.
+--
+-- 'status', 'imageState_status' - The status of the image.
+newImageState ::
+  ImageState
+newImageState =
+  ImageState'
+    { reason = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The reason for the image\'s status.
+imageState_reason :: Lens.Lens' ImageState (Prelude.Maybe Prelude.Text)
+imageState_reason = Lens.lens (\ImageState' {reason} -> reason) (\s@ImageState' {} a -> s {reason = a} :: ImageState)
+
+-- | The status of the image.
+imageState_status :: Lens.Lens' ImageState (Prelude.Maybe ImageStatus)
+imageState_status = Lens.lens (\ImageState' {status} -> status) (\s@ImageState' {} a -> s {status = a} :: ImageState)
+
+instance Data.FromJSON ImageState where
+  parseJSON =
+    Data.withObject
+      "ImageState"
+      ( \x ->
+          ImageState'
+            Prelude.<$> (x Data..:? "reason")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable ImageState where
+  hashWithSalt _salt ImageState' {..} =
+    _salt
+      `Prelude.hashWithSalt` reason
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ImageState where
+  rnf ImageState' {..} =
+    Prelude.rnf reason `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/ImageBuilder/Types/ImageStatus.hs b/gen/Amazonka/ImageBuilder/Types/ImageStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ImageStatus.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.ImageStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ImageStatus
+  ( ImageStatus
+      ( ..,
+        ImageStatus_AVAILABLE,
+        ImageStatus_BUILDING,
+        ImageStatus_CANCELLED,
+        ImageStatus_CREATING,
+        ImageStatus_DELETED,
+        ImageStatus_DEPRECATED,
+        ImageStatus_DISTRIBUTING,
+        ImageStatus_FAILED,
+        ImageStatus_INTEGRATING,
+        ImageStatus_PENDING,
+        ImageStatus_TESTING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImageStatus = ImageStatus'
+  { fromImageStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ImageStatus_AVAILABLE :: ImageStatus
+pattern ImageStatus_AVAILABLE = ImageStatus' "AVAILABLE"
+
+pattern ImageStatus_BUILDING :: ImageStatus
+pattern ImageStatus_BUILDING = ImageStatus' "BUILDING"
+
+pattern ImageStatus_CANCELLED :: ImageStatus
+pattern ImageStatus_CANCELLED = ImageStatus' "CANCELLED"
+
+pattern ImageStatus_CREATING :: ImageStatus
+pattern ImageStatus_CREATING = ImageStatus' "CREATING"
+
+pattern ImageStatus_DELETED :: ImageStatus
+pattern ImageStatus_DELETED = ImageStatus' "DELETED"
+
+pattern ImageStatus_DEPRECATED :: ImageStatus
+pattern ImageStatus_DEPRECATED = ImageStatus' "DEPRECATED"
+
+pattern ImageStatus_DISTRIBUTING :: ImageStatus
+pattern ImageStatus_DISTRIBUTING = ImageStatus' "DISTRIBUTING"
+
+pattern ImageStatus_FAILED :: ImageStatus
+pattern ImageStatus_FAILED = ImageStatus' "FAILED"
+
+pattern ImageStatus_INTEGRATING :: ImageStatus
+pattern ImageStatus_INTEGRATING = ImageStatus' "INTEGRATING"
+
+pattern ImageStatus_PENDING :: ImageStatus
+pattern ImageStatus_PENDING = ImageStatus' "PENDING"
+
+pattern ImageStatus_TESTING :: ImageStatus
+pattern ImageStatus_TESTING = ImageStatus' "TESTING"
+
+{-# COMPLETE
+  ImageStatus_AVAILABLE,
+  ImageStatus_BUILDING,
+  ImageStatus_CANCELLED,
+  ImageStatus_CREATING,
+  ImageStatus_DELETED,
+  ImageStatus_DEPRECATED,
+  ImageStatus_DISTRIBUTING,
+  ImageStatus_FAILED,
+  ImageStatus_INTEGRATING,
+  ImageStatus_PENDING,
+  ImageStatus_TESTING,
+  ImageStatus'
+  #-}
diff --git a/gen/Amazonka/ImageBuilder/Types/ImageSummary.hs b/gen/Amazonka/ImageBuilder/Types/ImageSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ImageSummary.hs
@@ -0,0 +1,239 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.ImageSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ImageSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.BuildType
+import Amazonka.ImageBuilder.Types.ImageState
+import Amazonka.ImageBuilder.Types.ImageType
+import Amazonka.ImageBuilder.Types.OutputResources
+import Amazonka.ImageBuilder.Types.Platform
+import qualified Amazonka.Prelude as Prelude
+
+-- | An image summary.
+--
+-- /See:/ 'newImageSummary' smart constructor.
+data ImageSummary = ImageSummary'
+  { -- | The Amazon Resource Name (ARN) of the image.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Indicates the type of build that created this image. The build can be
+    -- initiated in the following ways:
+    --
+    -- -   __USER_INITIATED__ – A manual pipeline build request.
+    --
+    -- -   __SCHEDULED__ – A pipeline build initiated by a cron expression in
+    --     the Image Builder pipeline, or from EventBridge.
+    --
+    -- -   __IMPORT__ – A VM import created the image to use as the base image
+    --     for the recipe.
+    buildType :: Prelude.Maybe BuildType,
+    -- | The date on which this image was created.
+    dateCreated :: Prelude.Maybe Prelude.Text,
+    -- | The name of the image.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The operating system version of the instance. For example, Amazon Linux
+    -- 2, Ubuntu 18, or Microsoft Windows Server 2019.
+    osVersion :: Prelude.Maybe Prelude.Text,
+    -- | The output resources produced when creating this image.
+    outputResources :: Prelude.Maybe OutputResources,
+    -- | The owner of the image.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The platform of the image.
+    platform :: Prelude.Maybe Platform,
+    -- | The state of the image.
+    state :: Prelude.Maybe ImageState,
+    -- | The tags of the image.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Specifies whether this is an AMI or container image.
+    type' :: Prelude.Maybe ImageType,
+    -- | The version of the image.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'imageSummary_arn' - The Amazon Resource Name (ARN) of the image.
+--
+-- 'buildType', 'imageSummary_buildType' - Indicates the type of build that created this image. The build can be
+-- initiated in the following ways:
+--
+-- -   __USER_INITIATED__ – A manual pipeline build request.
+--
+-- -   __SCHEDULED__ – A pipeline build initiated by a cron expression in
+--     the Image Builder pipeline, or from EventBridge.
+--
+-- -   __IMPORT__ – A VM import created the image to use as the base image
+--     for the recipe.
+--
+-- 'dateCreated', 'imageSummary_dateCreated' - The date on which this image was created.
+--
+-- 'name', 'imageSummary_name' - The name of the image.
+--
+-- 'osVersion', 'imageSummary_osVersion' - The operating system version of the instance. For example, Amazon Linux
+-- 2, Ubuntu 18, or Microsoft Windows Server 2019.
+--
+-- 'outputResources', 'imageSummary_outputResources' - The output resources produced when creating this image.
+--
+-- 'owner', 'imageSummary_owner' - The owner of the image.
+--
+-- 'platform', 'imageSummary_platform' - The platform of the image.
+--
+-- 'state', 'imageSummary_state' - The state of the image.
+--
+-- 'tags', 'imageSummary_tags' - The tags of the image.
+--
+-- 'type'', 'imageSummary_type' - Specifies whether this is an AMI or container image.
+--
+-- 'version', 'imageSummary_version' - The version of the image.
+newImageSummary ::
+  ImageSummary
+newImageSummary =
+  ImageSummary'
+    { arn = Prelude.Nothing,
+      buildType = Prelude.Nothing,
+      dateCreated = Prelude.Nothing,
+      name = Prelude.Nothing,
+      osVersion = Prelude.Nothing,
+      outputResources = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the image.
+imageSummary_arn :: Lens.Lens' ImageSummary (Prelude.Maybe Prelude.Text)
+imageSummary_arn = Lens.lens (\ImageSummary' {arn} -> arn) (\s@ImageSummary' {} a -> s {arn = a} :: ImageSummary)
+
+-- | Indicates the type of build that created this image. The build can be
+-- initiated in the following ways:
+--
+-- -   __USER_INITIATED__ – A manual pipeline build request.
+--
+-- -   __SCHEDULED__ – A pipeline build initiated by a cron expression in
+--     the Image Builder pipeline, or from EventBridge.
+--
+-- -   __IMPORT__ – A VM import created the image to use as the base image
+--     for the recipe.
+imageSummary_buildType :: Lens.Lens' ImageSummary (Prelude.Maybe BuildType)
+imageSummary_buildType = Lens.lens (\ImageSummary' {buildType} -> buildType) (\s@ImageSummary' {} a -> s {buildType = a} :: ImageSummary)
+
+-- | The date on which this image was created.
+imageSummary_dateCreated :: Lens.Lens' ImageSummary (Prelude.Maybe Prelude.Text)
+imageSummary_dateCreated = Lens.lens (\ImageSummary' {dateCreated} -> dateCreated) (\s@ImageSummary' {} a -> s {dateCreated = a} :: ImageSummary)
+
+-- | The name of the image.
+imageSummary_name :: Lens.Lens' ImageSummary (Prelude.Maybe Prelude.Text)
+imageSummary_name = Lens.lens (\ImageSummary' {name} -> name) (\s@ImageSummary' {} a -> s {name = a} :: ImageSummary)
+
+-- | The operating system version of the instance. For example, Amazon Linux
+-- 2, Ubuntu 18, or Microsoft Windows Server 2019.
+imageSummary_osVersion :: Lens.Lens' ImageSummary (Prelude.Maybe Prelude.Text)
+imageSummary_osVersion = Lens.lens (\ImageSummary' {osVersion} -> osVersion) (\s@ImageSummary' {} a -> s {osVersion = a} :: ImageSummary)
+
+-- | The output resources produced when creating this image.
+imageSummary_outputResources :: Lens.Lens' ImageSummary (Prelude.Maybe OutputResources)
+imageSummary_outputResources = Lens.lens (\ImageSummary' {outputResources} -> outputResources) (\s@ImageSummary' {} a -> s {outputResources = a} :: ImageSummary)
+
+-- | The owner of the image.
+imageSummary_owner :: Lens.Lens' ImageSummary (Prelude.Maybe Prelude.Text)
+imageSummary_owner = Lens.lens (\ImageSummary' {owner} -> owner) (\s@ImageSummary' {} a -> s {owner = a} :: ImageSummary)
+
+-- | The platform of the image.
+imageSummary_platform :: Lens.Lens' ImageSummary (Prelude.Maybe Platform)
+imageSummary_platform = Lens.lens (\ImageSummary' {platform} -> platform) (\s@ImageSummary' {} a -> s {platform = a} :: ImageSummary)
+
+-- | The state of the image.
+imageSummary_state :: Lens.Lens' ImageSummary (Prelude.Maybe ImageState)
+imageSummary_state = Lens.lens (\ImageSummary' {state} -> state) (\s@ImageSummary' {} a -> s {state = a} :: ImageSummary)
+
+-- | The tags of the image.
+imageSummary_tags :: Lens.Lens' ImageSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+imageSummary_tags = Lens.lens (\ImageSummary' {tags} -> tags) (\s@ImageSummary' {} a -> s {tags = a} :: ImageSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies whether this is an AMI or container image.
+imageSummary_type :: Lens.Lens' ImageSummary (Prelude.Maybe ImageType)
+imageSummary_type = Lens.lens (\ImageSummary' {type'} -> type') (\s@ImageSummary' {} a -> s {type' = a} :: ImageSummary)
+
+-- | The version of the image.
+imageSummary_version :: Lens.Lens' ImageSummary (Prelude.Maybe Prelude.Text)
+imageSummary_version = Lens.lens (\ImageSummary' {version} -> version) (\s@ImageSummary' {} a -> s {version = a} :: ImageSummary)
+
+instance Data.FromJSON ImageSummary where
+  parseJSON =
+    Data.withObject
+      "ImageSummary"
+      ( \x ->
+          ImageSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "buildType")
+            Prelude.<*> (x Data..:? "dateCreated")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "osVersion")
+            Prelude.<*> (x Data..:? "outputResources")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "platform")
+            Prelude.<*> (x Data..:? "state")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable ImageSummary where
+  hashWithSalt _salt ImageSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` buildType
+      `Prelude.hashWithSalt` dateCreated
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` osVersion
+      `Prelude.hashWithSalt` outputResources
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData ImageSummary where
+  rnf ImageSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf buildType
+      `Prelude.seq` Prelude.rnf dateCreated
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf osVersion
+      `Prelude.seq` Prelude.rnf outputResources
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/ImageBuilder/Types/ImageTestsConfiguration.hs b/gen/Amazonka/ImageBuilder/Types/ImageTestsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ImageTestsConfiguration.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.ImageTestsConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ImageTestsConfiguration 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
+
+-- | Configure image tests for your pipeline build. Tests run after building
+-- the image, to verify that the AMI or container image is valid before
+-- distributing it.
+--
+-- /See:/ 'newImageTestsConfiguration' smart constructor.
+data ImageTestsConfiguration = ImageTestsConfiguration'
+  { -- | Determines if tests should run after building the image. Image Builder
+    -- defaults to enable tests to run following the image build, before image
+    -- distribution.
+    imageTestsEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum time in minutes that tests are permitted to run.
+    timeoutMinutes :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageTestsConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageTestsEnabled', 'imageTestsConfiguration_imageTestsEnabled' - Determines if tests should run after building the image. Image Builder
+-- defaults to enable tests to run following the image build, before image
+-- distribution.
+--
+-- 'timeoutMinutes', 'imageTestsConfiguration_timeoutMinutes' - The maximum time in minutes that tests are permitted to run.
+newImageTestsConfiguration ::
+  ImageTestsConfiguration
+newImageTestsConfiguration =
+  ImageTestsConfiguration'
+    { imageTestsEnabled =
+        Prelude.Nothing,
+      timeoutMinutes = Prelude.Nothing
+    }
+
+-- | Determines if tests should run after building the image. Image Builder
+-- defaults to enable tests to run following the image build, before image
+-- distribution.
+imageTestsConfiguration_imageTestsEnabled :: Lens.Lens' ImageTestsConfiguration (Prelude.Maybe Prelude.Bool)
+imageTestsConfiguration_imageTestsEnabled = Lens.lens (\ImageTestsConfiguration' {imageTestsEnabled} -> imageTestsEnabled) (\s@ImageTestsConfiguration' {} a -> s {imageTestsEnabled = a} :: ImageTestsConfiguration)
+
+-- | The maximum time in minutes that tests are permitted to run.
+imageTestsConfiguration_timeoutMinutes :: Lens.Lens' ImageTestsConfiguration (Prelude.Maybe Prelude.Natural)
+imageTestsConfiguration_timeoutMinutes = Lens.lens (\ImageTestsConfiguration' {timeoutMinutes} -> timeoutMinutes) (\s@ImageTestsConfiguration' {} a -> s {timeoutMinutes = a} :: ImageTestsConfiguration)
+
+instance Data.FromJSON ImageTestsConfiguration where
+  parseJSON =
+    Data.withObject
+      "ImageTestsConfiguration"
+      ( \x ->
+          ImageTestsConfiguration'
+            Prelude.<$> (x Data..:? "imageTestsEnabled")
+            Prelude.<*> (x Data..:? "timeoutMinutes")
+      )
+
+instance Prelude.Hashable ImageTestsConfiguration where
+  hashWithSalt _salt ImageTestsConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` imageTestsEnabled
+      `Prelude.hashWithSalt` timeoutMinutes
+
+instance Prelude.NFData ImageTestsConfiguration where
+  rnf ImageTestsConfiguration' {..} =
+    Prelude.rnf imageTestsEnabled
+      `Prelude.seq` Prelude.rnf timeoutMinutes
+
+instance Data.ToJSON ImageTestsConfiguration where
+  toJSON ImageTestsConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("imageTestsEnabled" Data..=)
+              Prelude.<$> imageTestsEnabled,
+            ("timeoutMinutes" Data..=)
+              Prelude.<$> timeoutMinutes
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/ImageType.hs b/gen/Amazonka/ImageBuilder/Types/ImageType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ImageType.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.ImageBuilder.Types.ImageType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ImageType
+  ( ImageType
+      ( ..,
+        ImageType_AMI,
+        ImageType_DOCKER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImageType = ImageType'
+  { fromImageType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ImageType_AMI :: ImageType
+pattern ImageType_AMI = ImageType' "AMI"
+
+pattern ImageType_DOCKER :: ImageType
+pattern ImageType_DOCKER = ImageType' "DOCKER"
+
+{-# COMPLETE
+  ImageType_AMI,
+  ImageType_DOCKER,
+  ImageType'
+  #-}
diff --git a/gen/Amazonka/ImageBuilder/Types/ImageVersion.hs b/gen/Amazonka/ImageBuilder/Types/ImageVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/ImageVersion.hs
@@ -0,0 +1,310 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.ImageVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.ImageVersion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.BuildType
+import Amazonka.ImageBuilder.Types.ImageType
+import Amazonka.ImageBuilder.Types.Platform
+import qualified Amazonka.Prelude as Prelude
+
+-- | The defining characteristics of a specific version of an Image Builder
+-- image.
+--
+-- /See:/ 'newImageVersion' smart constructor.
+data ImageVersion = ImageVersion'
+  { -- | The Amazon Resource Name (ARN) of a specific version of an Image Builder
+    -- image.
+    --
+    -- Semantic versioning is included in each object\'s Amazon Resource Name
+    -- (ARN), at the level that applies to that object as follows:
+    --
+    -- 1.  Versionless ARNs and Name ARNs do not include specific values in any
+    --     of the nodes. The nodes are either left off entirely, or they are
+    --     specified as wildcards, for example: x.x.x.
+    --
+    -- 2.  Version ARNs have only the first three nodes:
+    --     \<major>.\<minor>.\<patch>
+    --
+    -- 3.  Build version ARNs have all four nodes, and point to a specific
+    --     build for a specific version of an object.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Indicates the type of build that created this image. The build can be
+    -- initiated in the following ways:
+    --
+    -- -   __USER_INITIATED__ – A manual pipeline build request.
+    --
+    -- -   __SCHEDULED__ – A pipeline build initiated by a cron expression in
+    --     the Image Builder pipeline, or from EventBridge.
+    --
+    -- -   __IMPORT__ – A VM import created the image to use as the base image
+    --     for the recipe.
+    buildType :: Prelude.Maybe BuildType,
+    -- | The date on which this specific version of the Image Builder image was
+    -- created.
+    dateCreated :: Prelude.Maybe Prelude.Text,
+    -- | The name of this specific version of an Image Builder image.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The operating system version of the Amazon EC2 build instance. For
+    -- example, Amazon Linux 2, Ubuntu 18, or Microsoft Windows Server 2019.
+    osVersion :: Prelude.Maybe Prelude.Text,
+    -- | The owner of the image version.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The platform of the image version, for example \"Windows\" or \"Linux\".
+    platform :: Prelude.Maybe Platform,
+    -- | Specifies whether this image is an AMI or a container image.
+    type' :: Prelude.Maybe ImageType,
+    -- | Details for a specific version of an Image Builder image. This version
+    -- follows the semantic version syntax.
+    --
+    -- The semantic version has four nodes:
+    -- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+    -- first three, and can filter on all of them.
+    --
+    -- __Assignment:__ For the first three nodes you can assign any positive
+    -- integer value, including zero, with an upper limit of 2^30-1, or
+    -- 1073741823 for each node. Image Builder automatically assigns the build
+    -- number to the fourth node.
+    --
+    -- __Patterns:__ You can use any numeric pattern that adheres to the
+    -- assignment requirements for the nodes that you can assign. For example,
+    -- you might choose a software version pattern, such as 1.0.0, or a date,
+    -- such as 2021.01.01.
+    --
+    -- __Filtering:__ With semantic versioning, you have the flexibility to use
+    -- wildcards (x) to specify the most recent versions or nodes when
+    -- selecting the base image or components for your recipe. When you use a
+    -- wildcard in any node, all nodes to the right of the first wildcard must
+    -- also be wildcards.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'imageVersion_arn' - The Amazon Resource Name (ARN) of a specific version of an Image Builder
+-- image.
+--
+-- Semantic versioning is included in each object\'s Amazon Resource Name
+-- (ARN), at the level that applies to that object as follows:
+--
+-- 1.  Versionless ARNs and Name ARNs do not include specific values in any
+--     of the nodes. The nodes are either left off entirely, or they are
+--     specified as wildcards, for example: x.x.x.
+--
+-- 2.  Version ARNs have only the first three nodes:
+--     \<major>.\<minor>.\<patch>
+--
+-- 3.  Build version ARNs have all four nodes, and point to a specific
+--     build for a specific version of an object.
+--
+-- 'buildType', 'imageVersion_buildType' - Indicates the type of build that created this image. The build can be
+-- initiated in the following ways:
+--
+-- -   __USER_INITIATED__ – A manual pipeline build request.
+--
+-- -   __SCHEDULED__ – A pipeline build initiated by a cron expression in
+--     the Image Builder pipeline, or from EventBridge.
+--
+-- -   __IMPORT__ – A VM import created the image to use as the base image
+--     for the recipe.
+--
+-- 'dateCreated', 'imageVersion_dateCreated' - The date on which this specific version of the Image Builder image was
+-- created.
+--
+-- 'name', 'imageVersion_name' - The name of this specific version of an Image Builder image.
+--
+-- 'osVersion', 'imageVersion_osVersion' - The operating system version of the Amazon EC2 build instance. For
+-- example, Amazon Linux 2, Ubuntu 18, or Microsoft Windows Server 2019.
+--
+-- 'owner', 'imageVersion_owner' - The owner of the image version.
+--
+-- 'platform', 'imageVersion_platform' - The platform of the image version, for example \"Windows\" or \"Linux\".
+--
+-- 'type'', 'imageVersion_type' - Specifies whether this image is an AMI or a container image.
+--
+-- 'version', 'imageVersion_version' - Details for a specific version of an Image Builder image. This version
+-- follows the semantic version syntax.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+--
+-- __Filtering:__ With semantic versioning, you have the flexibility to use
+-- wildcards (x) to specify the most recent versions or nodes when
+-- selecting the base image or components for your recipe. When you use a
+-- wildcard in any node, all nodes to the right of the first wildcard must
+-- also be wildcards.
+newImageVersion ::
+  ImageVersion
+newImageVersion =
+  ImageVersion'
+    { arn = Prelude.Nothing,
+      buildType = Prelude.Nothing,
+      dateCreated = Prelude.Nothing,
+      name = Prelude.Nothing,
+      osVersion = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of a specific version of an Image Builder
+-- image.
+--
+-- Semantic versioning is included in each object\'s Amazon Resource Name
+-- (ARN), at the level that applies to that object as follows:
+--
+-- 1.  Versionless ARNs and Name ARNs do not include specific values in any
+--     of the nodes. The nodes are either left off entirely, or they are
+--     specified as wildcards, for example: x.x.x.
+--
+-- 2.  Version ARNs have only the first three nodes:
+--     \<major>.\<minor>.\<patch>
+--
+-- 3.  Build version ARNs have all four nodes, and point to a specific
+--     build for a specific version of an object.
+imageVersion_arn :: Lens.Lens' ImageVersion (Prelude.Maybe Prelude.Text)
+imageVersion_arn = Lens.lens (\ImageVersion' {arn} -> arn) (\s@ImageVersion' {} a -> s {arn = a} :: ImageVersion)
+
+-- | Indicates the type of build that created this image. The build can be
+-- initiated in the following ways:
+--
+-- -   __USER_INITIATED__ – A manual pipeline build request.
+--
+-- -   __SCHEDULED__ – A pipeline build initiated by a cron expression in
+--     the Image Builder pipeline, or from EventBridge.
+--
+-- -   __IMPORT__ – A VM import created the image to use as the base image
+--     for the recipe.
+imageVersion_buildType :: Lens.Lens' ImageVersion (Prelude.Maybe BuildType)
+imageVersion_buildType = Lens.lens (\ImageVersion' {buildType} -> buildType) (\s@ImageVersion' {} a -> s {buildType = a} :: ImageVersion)
+
+-- | The date on which this specific version of the Image Builder image was
+-- created.
+imageVersion_dateCreated :: Lens.Lens' ImageVersion (Prelude.Maybe Prelude.Text)
+imageVersion_dateCreated = Lens.lens (\ImageVersion' {dateCreated} -> dateCreated) (\s@ImageVersion' {} a -> s {dateCreated = a} :: ImageVersion)
+
+-- | The name of this specific version of an Image Builder image.
+imageVersion_name :: Lens.Lens' ImageVersion (Prelude.Maybe Prelude.Text)
+imageVersion_name = Lens.lens (\ImageVersion' {name} -> name) (\s@ImageVersion' {} a -> s {name = a} :: ImageVersion)
+
+-- | The operating system version of the Amazon EC2 build instance. For
+-- example, Amazon Linux 2, Ubuntu 18, or Microsoft Windows Server 2019.
+imageVersion_osVersion :: Lens.Lens' ImageVersion (Prelude.Maybe Prelude.Text)
+imageVersion_osVersion = Lens.lens (\ImageVersion' {osVersion} -> osVersion) (\s@ImageVersion' {} a -> s {osVersion = a} :: ImageVersion)
+
+-- | The owner of the image version.
+imageVersion_owner :: Lens.Lens' ImageVersion (Prelude.Maybe Prelude.Text)
+imageVersion_owner = Lens.lens (\ImageVersion' {owner} -> owner) (\s@ImageVersion' {} a -> s {owner = a} :: ImageVersion)
+
+-- | The platform of the image version, for example \"Windows\" or \"Linux\".
+imageVersion_platform :: Lens.Lens' ImageVersion (Prelude.Maybe Platform)
+imageVersion_platform = Lens.lens (\ImageVersion' {platform} -> platform) (\s@ImageVersion' {} a -> s {platform = a} :: ImageVersion)
+
+-- | Specifies whether this image is an AMI or a container image.
+imageVersion_type :: Lens.Lens' ImageVersion (Prelude.Maybe ImageType)
+imageVersion_type = Lens.lens (\ImageVersion' {type'} -> type') (\s@ImageVersion' {} a -> s {type' = a} :: ImageVersion)
+
+-- | Details for a specific version of an Image Builder image. This version
+-- follows the semantic version syntax.
+--
+-- The semantic version has four nodes:
+-- \<major>.\<minor>.\<patch>\/\<build>. You can assign values for the
+-- first three, and can filter on all of them.
+--
+-- __Assignment:__ For the first three nodes you can assign any positive
+-- integer value, including zero, with an upper limit of 2^30-1, or
+-- 1073741823 for each node. Image Builder automatically assigns the build
+-- number to the fourth node.
+--
+-- __Patterns:__ You can use any numeric pattern that adheres to the
+-- assignment requirements for the nodes that you can assign. For example,
+-- you might choose a software version pattern, such as 1.0.0, or a date,
+-- such as 2021.01.01.
+--
+-- __Filtering:__ With semantic versioning, you have the flexibility to use
+-- wildcards (x) to specify the most recent versions or nodes when
+-- selecting the base image or components for your recipe. When you use a
+-- wildcard in any node, all nodes to the right of the first wildcard must
+-- also be wildcards.
+imageVersion_version :: Lens.Lens' ImageVersion (Prelude.Maybe Prelude.Text)
+imageVersion_version = Lens.lens (\ImageVersion' {version} -> version) (\s@ImageVersion' {} a -> s {version = a} :: ImageVersion)
+
+instance Data.FromJSON ImageVersion where
+  parseJSON =
+    Data.withObject
+      "ImageVersion"
+      ( \x ->
+          ImageVersion'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "buildType")
+            Prelude.<*> (x Data..:? "dateCreated")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "osVersion")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "platform")
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable ImageVersion where
+  hashWithSalt _salt ImageVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` buildType
+      `Prelude.hashWithSalt` dateCreated
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` osVersion
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData ImageVersion where
+  rnf ImageVersion' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf buildType
+      `Prelude.seq` Prelude.rnf dateCreated
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf osVersion
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/ImageBuilder/Types/InfrastructureConfiguration.hs b/gen/Amazonka/ImageBuilder/Types/InfrastructureConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/InfrastructureConfiguration.hs
@@ -0,0 +1,281 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.InfrastructureConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.InfrastructureConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.InstanceMetadataOptions
+import Amazonka.ImageBuilder.Types.Logging
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details of the infrastructure configuration.
+--
+-- /See:/ 'newInfrastructureConfiguration' smart constructor.
+data InfrastructureConfiguration = InfrastructureConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the infrastructure configuration.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date on which the infrastructure configuration was created.
+    dateCreated :: Prelude.Maybe Prelude.Text,
+    -- | The date on which the infrastructure configuration was last updated.
+    dateUpdated :: Prelude.Maybe Prelude.Text,
+    -- | The description of the infrastructure configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The instance metadata option settings for the infrastructure
+    -- configuration.
+    instanceMetadataOptions :: Prelude.Maybe InstanceMetadataOptions,
+    -- | The instance profile of the infrastructure configuration.
+    instanceProfileName :: Prelude.Maybe Prelude.Text,
+    -- | The instance types of the infrastructure configuration.
+    instanceTypes :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon EC2 key pair of the infrastructure configuration.
+    keyPair :: Prelude.Maybe Prelude.Text,
+    -- | The logging configuration of the infrastructure configuration.
+    logging :: Prelude.Maybe Logging,
+    -- | The name of the infrastructure configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The tags attached to the resource created by Image Builder.
+    resourceTags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The security group IDs of the infrastructure configuration.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) for the SNS topic to which we send image
+    -- build event notifications.
+    --
+    -- EC2 Image Builder is unable to send notifications to SNS topics that are
+    -- encrypted using keys from other accounts. The key that is used to
+    -- encrypt the SNS topic must reside in the account that the Image Builder
+    -- service runs under.
+    snsTopicArn :: Prelude.Maybe Prelude.Text,
+    -- | The subnet ID of the infrastructure configuration.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The tags of the infrastructure configuration.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The terminate instance on failure configuration of the infrastructure
+    -- configuration.
+    terminateInstanceOnFailure :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InfrastructureConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'infrastructureConfiguration_arn' - The Amazon Resource Name (ARN) of the infrastructure configuration.
+--
+-- 'dateCreated', 'infrastructureConfiguration_dateCreated' - The date on which the infrastructure configuration was created.
+--
+-- 'dateUpdated', 'infrastructureConfiguration_dateUpdated' - The date on which the infrastructure configuration was last updated.
+--
+-- 'description', 'infrastructureConfiguration_description' - The description of the infrastructure configuration.
+--
+-- 'instanceMetadataOptions', 'infrastructureConfiguration_instanceMetadataOptions' - The instance metadata option settings for the infrastructure
+-- configuration.
+--
+-- 'instanceProfileName', 'infrastructureConfiguration_instanceProfileName' - The instance profile of the infrastructure configuration.
+--
+-- 'instanceTypes', 'infrastructureConfiguration_instanceTypes' - The instance types of the infrastructure configuration.
+--
+-- 'keyPair', 'infrastructureConfiguration_keyPair' - The Amazon EC2 key pair of the infrastructure configuration.
+--
+-- 'logging', 'infrastructureConfiguration_logging' - The logging configuration of the infrastructure configuration.
+--
+-- 'name', 'infrastructureConfiguration_name' - The name of the infrastructure configuration.
+--
+-- 'resourceTags', 'infrastructureConfiguration_resourceTags' - The tags attached to the resource created by Image Builder.
+--
+-- 'securityGroupIds', 'infrastructureConfiguration_securityGroupIds' - The security group IDs of the infrastructure configuration.
+--
+-- 'snsTopicArn', 'infrastructureConfiguration_snsTopicArn' - The Amazon Resource Name (ARN) for the SNS topic to which we send image
+-- build event notifications.
+--
+-- EC2 Image Builder is unable to send notifications to SNS topics that are
+-- encrypted using keys from other accounts. The key that is used to
+-- encrypt the SNS topic must reside in the account that the Image Builder
+-- service runs under.
+--
+-- 'subnetId', 'infrastructureConfiguration_subnetId' - The subnet ID of the infrastructure configuration.
+--
+-- 'tags', 'infrastructureConfiguration_tags' - The tags of the infrastructure configuration.
+--
+-- 'terminateInstanceOnFailure', 'infrastructureConfiguration_terminateInstanceOnFailure' - The terminate instance on failure configuration of the infrastructure
+-- configuration.
+newInfrastructureConfiguration ::
+  InfrastructureConfiguration
+newInfrastructureConfiguration =
+  InfrastructureConfiguration'
+    { arn = Prelude.Nothing,
+      dateCreated = Prelude.Nothing,
+      dateUpdated = Prelude.Nothing,
+      description = Prelude.Nothing,
+      instanceMetadataOptions = Prelude.Nothing,
+      instanceProfileName = Prelude.Nothing,
+      instanceTypes = Prelude.Nothing,
+      keyPair = Prelude.Nothing,
+      logging = Prelude.Nothing,
+      name = Prelude.Nothing,
+      resourceTags = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      snsTopicArn = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      terminateInstanceOnFailure = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the infrastructure configuration.
+infrastructureConfiguration_arn :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+infrastructureConfiguration_arn = Lens.lens (\InfrastructureConfiguration' {arn} -> arn) (\s@InfrastructureConfiguration' {} a -> s {arn = a} :: InfrastructureConfiguration)
+
+-- | The date on which the infrastructure configuration was created.
+infrastructureConfiguration_dateCreated :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+infrastructureConfiguration_dateCreated = Lens.lens (\InfrastructureConfiguration' {dateCreated} -> dateCreated) (\s@InfrastructureConfiguration' {} a -> s {dateCreated = a} :: InfrastructureConfiguration)
+
+-- | The date on which the infrastructure configuration was last updated.
+infrastructureConfiguration_dateUpdated :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+infrastructureConfiguration_dateUpdated = Lens.lens (\InfrastructureConfiguration' {dateUpdated} -> dateUpdated) (\s@InfrastructureConfiguration' {} a -> s {dateUpdated = a} :: InfrastructureConfiguration)
+
+-- | The description of the infrastructure configuration.
+infrastructureConfiguration_description :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+infrastructureConfiguration_description = Lens.lens (\InfrastructureConfiguration' {description} -> description) (\s@InfrastructureConfiguration' {} a -> s {description = a} :: InfrastructureConfiguration)
+
+-- | The instance metadata option settings for the infrastructure
+-- configuration.
+infrastructureConfiguration_instanceMetadataOptions :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe InstanceMetadataOptions)
+infrastructureConfiguration_instanceMetadataOptions = Lens.lens (\InfrastructureConfiguration' {instanceMetadataOptions} -> instanceMetadataOptions) (\s@InfrastructureConfiguration' {} a -> s {instanceMetadataOptions = a} :: InfrastructureConfiguration)
+
+-- | The instance profile of the infrastructure configuration.
+infrastructureConfiguration_instanceProfileName :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+infrastructureConfiguration_instanceProfileName = Lens.lens (\InfrastructureConfiguration' {instanceProfileName} -> instanceProfileName) (\s@InfrastructureConfiguration' {} a -> s {instanceProfileName = a} :: InfrastructureConfiguration)
+
+-- | The instance types of the infrastructure configuration.
+infrastructureConfiguration_instanceTypes :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe [Prelude.Text])
+infrastructureConfiguration_instanceTypes = Lens.lens (\InfrastructureConfiguration' {instanceTypes} -> instanceTypes) (\s@InfrastructureConfiguration' {} a -> s {instanceTypes = a} :: InfrastructureConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon EC2 key pair of the infrastructure configuration.
+infrastructureConfiguration_keyPair :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+infrastructureConfiguration_keyPair = Lens.lens (\InfrastructureConfiguration' {keyPair} -> keyPair) (\s@InfrastructureConfiguration' {} a -> s {keyPair = a} :: InfrastructureConfiguration)
+
+-- | The logging configuration of the infrastructure configuration.
+infrastructureConfiguration_logging :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe Logging)
+infrastructureConfiguration_logging = Lens.lens (\InfrastructureConfiguration' {logging} -> logging) (\s@InfrastructureConfiguration' {} a -> s {logging = a} :: InfrastructureConfiguration)
+
+-- | The name of the infrastructure configuration.
+infrastructureConfiguration_name :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+infrastructureConfiguration_name = Lens.lens (\InfrastructureConfiguration' {name} -> name) (\s@InfrastructureConfiguration' {} a -> s {name = a} :: InfrastructureConfiguration)
+
+-- | The tags attached to the resource created by Image Builder.
+infrastructureConfiguration_resourceTags :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+infrastructureConfiguration_resourceTags = Lens.lens (\InfrastructureConfiguration' {resourceTags} -> resourceTags) (\s@InfrastructureConfiguration' {} a -> s {resourceTags = a} :: InfrastructureConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The security group IDs of the infrastructure configuration.
+infrastructureConfiguration_securityGroupIds :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe [Prelude.Text])
+infrastructureConfiguration_securityGroupIds = Lens.lens (\InfrastructureConfiguration' {securityGroupIds} -> securityGroupIds) (\s@InfrastructureConfiguration' {} a -> s {securityGroupIds = a} :: InfrastructureConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) for the SNS topic to which we send image
+-- build event notifications.
+--
+-- EC2 Image Builder is unable to send notifications to SNS topics that are
+-- encrypted using keys from other accounts. The key that is used to
+-- encrypt the SNS topic must reside in the account that the Image Builder
+-- service runs under.
+infrastructureConfiguration_snsTopicArn :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+infrastructureConfiguration_snsTopicArn = Lens.lens (\InfrastructureConfiguration' {snsTopicArn} -> snsTopicArn) (\s@InfrastructureConfiguration' {} a -> s {snsTopicArn = a} :: InfrastructureConfiguration)
+
+-- | The subnet ID of the infrastructure configuration.
+infrastructureConfiguration_subnetId :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+infrastructureConfiguration_subnetId = Lens.lens (\InfrastructureConfiguration' {subnetId} -> subnetId) (\s@InfrastructureConfiguration' {} a -> s {subnetId = a} :: InfrastructureConfiguration)
+
+-- | The tags of the infrastructure configuration.
+infrastructureConfiguration_tags :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+infrastructureConfiguration_tags = Lens.lens (\InfrastructureConfiguration' {tags} -> tags) (\s@InfrastructureConfiguration' {} a -> s {tags = a} :: InfrastructureConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The terminate instance on failure configuration of the infrastructure
+-- configuration.
+infrastructureConfiguration_terminateInstanceOnFailure :: Lens.Lens' InfrastructureConfiguration (Prelude.Maybe Prelude.Bool)
+infrastructureConfiguration_terminateInstanceOnFailure = Lens.lens (\InfrastructureConfiguration' {terminateInstanceOnFailure} -> terminateInstanceOnFailure) (\s@InfrastructureConfiguration' {} a -> s {terminateInstanceOnFailure = a} :: InfrastructureConfiguration)
+
+instance Data.FromJSON InfrastructureConfiguration where
+  parseJSON =
+    Data.withObject
+      "InfrastructureConfiguration"
+      ( \x ->
+          InfrastructureConfiguration'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "dateCreated")
+            Prelude.<*> (x Data..:? "dateUpdated")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "instanceMetadataOptions")
+            Prelude.<*> (x Data..:? "instanceProfileName")
+            Prelude.<*> (x Data..:? "instanceTypes" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "keyPair")
+            Prelude.<*> (x Data..:? "logging")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "resourceTags" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "securityGroupIds"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "snsTopicArn")
+            Prelude.<*> (x Data..:? "subnetId")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "terminateInstanceOnFailure")
+      )
+
+instance Prelude.Hashable InfrastructureConfiguration where
+  hashWithSalt _salt InfrastructureConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` dateCreated
+      `Prelude.hashWithSalt` dateUpdated
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` instanceMetadataOptions
+      `Prelude.hashWithSalt` instanceProfileName
+      `Prelude.hashWithSalt` instanceTypes
+      `Prelude.hashWithSalt` keyPair
+      `Prelude.hashWithSalt` logging
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` resourceTags
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` snsTopicArn
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` terminateInstanceOnFailure
+
+instance Prelude.NFData InfrastructureConfiguration where
+  rnf InfrastructureConfiguration' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf dateCreated
+      `Prelude.seq` Prelude.rnf dateUpdated
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf instanceMetadataOptions
+      `Prelude.seq` Prelude.rnf instanceProfileName
+      `Prelude.seq` Prelude.rnf instanceTypes
+      `Prelude.seq` Prelude.rnf keyPair
+      `Prelude.seq` Prelude.rnf logging
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf resourceTags
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf snsTopicArn
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf terminateInstanceOnFailure
diff --git a/gen/Amazonka/ImageBuilder/Types/InfrastructureConfigurationSummary.hs b/gen/Amazonka/ImageBuilder/Types/InfrastructureConfigurationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/InfrastructureConfigurationSummary.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.InfrastructureConfigurationSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.InfrastructureConfigurationSummary 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 infrastructure used when building Amazon EC2 AMIs.
+--
+-- /See:/ 'newInfrastructureConfigurationSummary' smart constructor.
+data InfrastructureConfigurationSummary = InfrastructureConfigurationSummary'
+  { -- | The Amazon Resource Name (ARN) of the infrastructure configuration.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date on which the infrastructure configuration was created.
+    dateCreated :: Prelude.Maybe Prelude.Text,
+    -- | The date on which the infrastructure configuration was last updated.
+    dateUpdated :: Prelude.Maybe Prelude.Text,
+    -- | The description of the infrastructure configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The instance profile of the infrastructure configuration.
+    instanceProfileName :: Prelude.Maybe Prelude.Text,
+    -- | The instance types of the infrastructure configuration.
+    instanceTypes :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the infrastructure configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The tags attached to the image created by Image Builder.
+    resourceTags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The tags of the infrastructure configuration.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InfrastructureConfigurationSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'infrastructureConfigurationSummary_arn' - The Amazon Resource Name (ARN) of the infrastructure configuration.
+--
+-- 'dateCreated', 'infrastructureConfigurationSummary_dateCreated' - The date on which the infrastructure configuration was created.
+--
+-- 'dateUpdated', 'infrastructureConfigurationSummary_dateUpdated' - The date on which the infrastructure configuration was last updated.
+--
+-- 'description', 'infrastructureConfigurationSummary_description' - The description of the infrastructure configuration.
+--
+-- 'instanceProfileName', 'infrastructureConfigurationSummary_instanceProfileName' - The instance profile of the infrastructure configuration.
+--
+-- 'instanceTypes', 'infrastructureConfigurationSummary_instanceTypes' - The instance types of the infrastructure configuration.
+--
+-- 'name', 'infrastructureConfigurationSummary_name' - The name of the infrastructure configuration.
+--
+-- 'resourceTags', 'infrastructureConfigurationSummary_resourceTags' - The tags attached to the image created by Image Builder.
+--
+-- 'tags', 'infrastructureConfigurationSummary_tags' - The tags of the infrastructure configuration.
+newInfrastructureConfigurationSummary ::
+  InfrastructureConfigurationSummary
+newInfrastructureConfigurationSummary =
+  InfrastructureConfigurationSummary'
+    { arn =
+        Prelude.Nothing,
+      dateCreated = Prelude.Nothing,
+      dateUpdated = Prelude.Nothing,
+      description = Prelude.Nothing,
+      instanceProfileName = Prelude.Nothing,
+      instanceTypes = Prelude.Nothing,
+      name = Prelude.Nothing,
+      resourceTags = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the infrastructure configuration.
+infrastructureConfigurationSummary_arn :: Lens.Lens' InfrastructureConfigurationSummary (Prelude.Maybe Prelude.Text)
+infrastructureConfigurationSummary_arn = Lens.lens (\InfrastructureConfigurationSummary' {arn} -> arn) (\s@InfrastructureConfigurationSummary' {} a -> s {arn = a} :: InfrastructureConfigurationSummary)
+
+-- | The date on which the infrastructure configuration was created.
+infrastructureConfigurationSummary_dateCreated :: Lens.Lens' InfrastructureConfigurationSummary (Prelude.Maybe Prelude.Text)
+infrastructureConfigurationSummary_dateCreated = Lens.lens (\InfrastructureConfigurationSummary' {dateCreated} -> dateCreated) (\s@InfrastructureConfigurationSummary' {} a -> s {dateCreated = a} :: InfrastructureConfigurationSummary)
+
+-- | The date on which the infrastructure configuration was last updated.
+infrastructureConfigurationSummary_dateUpdated :: Lens.Lens' InfrastructureConfigurationSummary (Prelude.Maybe Prelude.Text)
+infrastructureConfigurationSummary_dateUpdated = Lens.lens (\InfrastructureConfigurationSummary' {dateUpdated} -> dateUpdated) (\s@InfrastructureConfigurationSummary' {} a -> s {dateUpdated = a} :: InfrastructureConfigurationSummary)
+
+-- | The description of the infrastructure configuration.
+infrastructureConfigurationSummary_description :: Lens.Lens' InfrastructureConfigurationSummary (Prelude.Maybe Prelude.Text)
+infrastructureConfigurationSummary_description = Lens.lens (\InfrastructureConfigurationSummary' {description} -> description) (\s@InfrastructureConfigurationSummary' {} a -> s {description = a} :: InfrastructureConfigurationSummary)
+
+-- | The instance profile of the infrastructure configuration.
+infrastructureConfigurationSummary_instanceProfileName :: Lens.Lens' InfrastructureConfigurationSummary (Prelude.Maybe Prelude.Text)
+infrastructureConfigurationSummary_instanceProfileName = Lens.lens (\InfrastructureConfigurationSummary' {instanceProfileName} -> instanceProfileName) (\s@InfrastructureConfigurationSummary' {} a -> s {instanceProfileName = a} :: InfrastructureConfigurationSummary)
+
+-- | The instance types of the infrastructure configuration.
+infrastructureConfigurationSummary_instanceTypes :: Lens.Lens' InfrastructureConfigurationSummary (Prelude.Maybe [Prelude.Text])
+infrastructureConfigurationSummary_instanceTypes = Lens.lens (\InfrastructureConfigurationSummary' {instanceTypes} -> instanceTypes) (\s@InfrastructureConfigurationSummary' {} a -> s {instanceTypes = a} :: InfrastructureConfigurationSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the infrastructure configuration.
+infrastructureConfigurationSummary_name :: Lens.Lens' InfrastructureConfigurationSummary (Prelude.Maybe Prelude.Text)
+infrastructureConfigurationSummary_name = Lens.lens (\InfrastructureConfigurationSummary' {name} -> name) (\s@InfrastructureConfigurationSummary' {} a -> s {name = a} :: InfrastructureConfigurationSummary)
+
+-- | The tags attached to the image created by Image Builder.
+infrastructureConfigurationSummary_resourceTags :: Lens.Lens' InfrastructureConfigurationSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+infrastructureConfigurationSummary_resourceTags = Lens.lens (\InfrastructureConfigurationSummary' {resourceTags} -> resourceTags) (\s@InfrastructureConfigurationSummary' {} a -> s {resourceTags = a} :: InfrastructureConfigurationSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags of the infrastructure configuration.
+infrastructureConfigurationSummary_tags :: Lens.Lens' InfrastructureConfigurationSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+infrastructureConfigurationSummary_tags = Lens.lens (\InfrastructureConfigurationSummary' {tags} -> tags) (\s@InfrastructureConfigurationSummary' {} a -> s {tags = a} :: InfrastructureConfigurationSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromJSON
+    InfrastructureConfigurationSummary
+  where
+  parseJSON =
+    Data.withObject
+      "InfrastructureConfigurationSummary"
+      ( \x ->
+          InfrastructureConfigurationSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "dateCreated")
+            Prelude.<*> (x Data..:? "dateUpdated")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "instanceProfileName")
+            Prelude.<*> (x Data..:? "instanceTypes" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "resourceTags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance
+  Prelude.Hashable
+    InfrastructureConfigurationSummary
+  where
+  hashWithSalt
+    _salt
+    InfrastructureConfigurationSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` arn
+        `Prelude.hashWithSalt` dateCreated
+        `Prelude.hashWithSalt` dateUpdated
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` instanceProfileName
+        `Prelude.hashWithSalt` instanceTypes
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` resourceTags
+        `Prelude.hashWithSalt` tags
+
+instance
+  Prelude.NFData
+    InfrastructureConfigurationSummary
+  where
+  rnf InfrastructureConfigurationSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf dateCreated
+      `Prelude.seq` Prelude.rnf dateUpdated
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf instanceProfileName
+      `Prelude.seq` Prelude.rnf instanceTypes
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf resourceTags
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/ImageBuilder/Types/InstanceBlockDeviceMapping.hs b/gen/Amazonka/ImageBuilder/Types/InstanceBlockDeviceMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/InstanceBlockDeviceMapping.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.InstanceBlockDeviceMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.InstanceBlockDeviceMapping where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.EbsInstanceBlockDeviceSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines block device mappings for the instance used to configure your
+-- image.
+--
+-- /See:/ 'newInstanceBlockDeviceMapping' smart constructor.
+data InstanceBlockDeviceMapping = InstanceBlockDeviceMapping'
+  { -- | The device to which these mappings apply.
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | Use to manage Amazon EBS-specific configuration for this mapping.
+    ebs :: Prelude.Maybe EbsInstanceBlockDeviceSpecification,
+    -- | Use to remove a mapping from the base image.
+    noDevice :: Prelude.Maybe Prelude.Text,
+    -- | Use to manage instance ephemeral devices.
+    virtualName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceBlockDeviceMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceName', 'instanceBlockDeviceMapping_deviceName' - The device to which these mappings apply.
+--
+-- 'ebs', 'instanceBlockDeviceMapping_ebs' - Use to manage Amazon EBS-specific configuration for this mapping.
+--
+-- 'noDevice', 'instanceBlockDeviceMapping_noDevice' - Use to remove a mapping from the base image.
+--
+-- 'virtualName', 'instanceBlockDeviceMapping_virtualName' - Use to manage instance ephemeral devices.
+newInstanceBlockDeviceMapping ::
+  InstanceBlockDeviceMapping
+newInstanceBlockDeviceMapping =
+  InstanceBlockDeviceMapping'
+    { deviceName =
+        Prelude.Nothing,
+      ebs = Prelude.Nothing,
+      noDevice = Prelude.Nothing,
+      virtualName = Prelude.Nothing
+    }
+
+-- | The device to which these mappings apply.
+instanceBlockDeviceMapping_deviceName :: Lens.Lens' InstanceBlockDeviceMapping (Prelude.Maybe Prelude.Text)
+instanceBlockDeviceMapping_deviceName = Lens.lens (\InstanceBlockDeviceMapping' {deviceName} -> deviceName) (\s@InstanceBlockDeviceMapping' {} a -> s {deviceName = a} :: InstanceBlockDeviceMapping)
+
+-- | Use to manage Amazon EBS-specific configuration for this mapping.
+instanceBlockDeviceMapping_ebs :: Lens.Lens' InstanceBlockDeviceMapping (Prelude.Maybe EbsInstanceBlockDeviceSpecification)
+instanceBlockDeviceMapping_ebs = Lens.lens (\InstanceBlockDeviceMapping' {ebs} -> ebs) (\s@InstanceBlockDeviceMapping' {} a -> s {ebs = a} :: InstanceBlockDeviceMapping)
+
+-- | Use to remove a mapping from the base image.
+instanceBlockDeviceMapping_noDevice :: Lens.Lens' InstanceBlockDeviceMapping (Prelude.Maybe Prelude.Text)
+instanceBlockDeviceMapping_noDevice = Lens.lens (\InstanceBlockDeviceMapping' {noDevice} -> noDevice) (\s@InstanceBlockDeviceMapping' {} a -> s {noDevice = a} :: InstanceBlockDeviceMapping)
+
+-- | Use to manage instance ephemeral devices.
+instanceBlockDeviceMapping_virtualName :: Lens.Lens' InstanceBlockDeviceMapping (Prelude.Maybe Prelude.Text)
+instanceBlockDeviceMapping_virtualName = Lens.lens (\InstanceBlockDeviceMapping' {virtualName} -> virtualName) (\s@InstanceBlockDeviceMapping' {} a -> s {virtualName = a} :: InstanceBlockDeviceMapping)
+
+instance Data.FromJSON InstanceBlockDeviceMapping where
+  parseJSON =
+    Data.withObject
+      "InstanceBlockDeviceMapping"
+      ( \x ->
+          InstanceBlockDeviceMapping'
+            Prelude.<$> (x Data..:? "deviceName")
+            Prelude.<*> (x Data..:? "ebs")
+            Prelude.<*> (x Data..:? "noDevice")
+            Prelude.<*> (x Data..:? "virtualName")
+      )
+
+instance Prelude.Hashable InstanceBlockDeviceMapping where
+  hashWithSalt _salt InstanceBlockDeviceMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` deviceName
+      `Prelude.hashWithSalt` ebs
+      `Prelude.hashWithSalt` noDevice
+      `Prelude.hashWithSalt` virtualName
+
+instance Prelude.NFData InstanceBlockDeviceMapping where
+  rnf InstanceBlockDeviceMapping' {..} =
+    Prelude.rnf deviceName
+      `Prelude.seq` Prelude.rnf ebs
+      `Prelude.seq` Prelude.rnf noDevice
+      `Prelude.seq` Prelude.rnf virtualName
+
+instance Data.ToJSON InstanceBlockDeviceMapping where
+  toJSON InstanceBlockDeviceMapping' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("deviceName" Data..=) Prelude.<$> deviceName,
+            ("ebs" Data..=) Prelude.<$> ebs,
+            ("noDevice" Data..=) Prelude.<$> noDevice,
+            ("virtualName" Data..=) Prelude.<$> virtualName
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/InstanceConfiguration.hs b/gen/Amazonka/ImageBuilder/Types/InstanceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/InstanceConfiguration.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.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.ImageBuilder.Types.InstanceConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.InstanceBlockDeviceMapping
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines a custom base AMI and block device mapping configurations of an
+-- instance used for building and testing container images.
+--
+-- /See:/ 'newInstanceConfiguration' smart constructor.
+data InstanceConfiguration = InstanceConfiguration'
+  { -- | Defines the block devices to attach for building an instance from this
+    -- Image Builder AMI.
+    blockDeviceMappings :: Prelude.Maybe [InstanceBlockDeviceMapping],
+    -- | The AMI ID to use as the base image for a container build and test
+    -- instance. If not specified, Image Builder will use the appropriate
+    -- ECS-optimized AMI as a base image.
+    image :: 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:
+--
+-- 'blockDeviceMappings', 'instanceConfiguration_blockDeviceMappings' - Defines the block devices to attach for building an instance from this
+-- Image Builder AMI.
+--
+-- 'image', 'instanceConfiguration_image' - The AMI ID to use as the base image for a container build and test
+-- instance. If not specified, Image Builder will use the appropriate
+-- ECS-optimized AMI as a base image.
+newInstanceConfiguration ::
+  InstanceConfiguration
+newInstanceConfiguration =
+  InstanceConfiguration'
+    { blockDeviceMappings =
+        Prelude.Nothing,
+      image = Prelude.Nothing
+    }
+
+-- | Defines the block devices to attach for building an instance from this
+-- Image Builder AMI.
+instanceConfiguration_blockDeviceMappings :: Lens.Lens' InstanceConfiguration (Prelude.Maybe [InstanceBlockDeviceMapping])
+instanceConfiguration_blockDeviceMappings = Lens.lens (\InstanceConfiguration' {blockDeviceMappings} -> blockDeviceMappings) (\s@InstanceConfiguration' {} a -> s {blockDeviceMappings = a} :: InstanceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The AMI ID to use as the base image for a container build and test
+-- instance. If not specified, Image Builder will use the appropriate
+-- ECS-optimized AMI as a base image.
+instanceConfiguration_image :: Lens.Lens' InstanceConfiguration (Prelude.Maybe Prelude.Text)
+instanceConfiguration_image = Lens.lens (\InstanceConfiguration' {image} -> image) (\s@InstanceConfiguration' {} a -> s {image = a} :: InstanceConfiguration)
+
+instance Data.FromJSON InstanceConfiguration where
+  parseJSON =
+    Data.withObject
+      "InstanceConfiguration"
+      ( \x ->
+          InstanceConfiguration'
+            Prelude.<$> ( x
+                            Data..:? "blockDeviceMappings"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "image")
+      )
+
+instance Prelude.Hashable InstanceConfiguration where
+  hashWithSalt _salt InstanceConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` blockDeviceMappings
+      `Prelude.hashWithSalt` image
+
+instance Prelude.NFData InstanceConfiguration where
+  rnf InstanceConfiguration' {..} =
+    Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf image
+
+instance Data.ToJSON InstanceConfiguration where
+  toJSON InstanceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("blockDeviceMappings" Data..=)
+              Prelude.<$> blockDeviceMappings,
+            ("image" Data..=) Prelude.<$> image
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/InstanceMetadataOptions.hs b/gen/Amazonka/ImageBuilder/Types/InstanceMetadataOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/InstanceMetadataOptions.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.ImageBuilder.Types.InstanceMetadataOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.InstanceMetadataOptions 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 instance metadata options that apply to the HTTP requests that
+-- pipeline builds use to launch EC2 build and test instances. For more
+-- information about instance metadata options, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html Configure the instance metadata options>
+-- in the //Amazon EC2 User Guide// for Linux instances, or
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/configuring-instance-metadata-options.html Configure the instance metadata options>
+-- in the //Amazon EC2 Windows Guide// for Windows instances.
+--
+-- /See:/ 'newInstanceMetadataOptions' smart constructor.
+data InstanceMetadataOptions = InstanceMetadataOptions'
+  { -- | Limit the number of hops that an instance metadata request can traverse
+    -- to reach its destination.
+    httpPutResponseHopLimit :: Prelude.Maybe Prelude.Natural,
+    -- | Indicates whether a signed token header is required for instance
+    -- metadata retrieval requests. The values affect the response as follows:
+    --
+    -- -   __required__ – When you retrieve the IAM role credentials, version
+    --     2.0 credentials are returned in all cases.
+    --
+    -- -   __optional__ – You can include a signed token header in your request
+    --     to retrieve instance metadata, or you can leave it out. If you
+    --     include it, version 2.0 credentials are returned for the IAM role.
+    --     Otherwise, version 1.0 credentials are returned.
+    --
+    -- The default setting is __optional__.
+    httpTokens :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceMetadataOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpPutResponseHopLimit', 'instanceMetadataOptions_httpPutResponseHopLimit' - Limit the number of hops that an instance metadata request can traverse
+-- to reach its destination.
+--
+-- 'httpTokens', 'instanceMetadataOptions_httpTokens' - Indicates whether a signed token header is required for instance
+-- metadata retrieval requests. The values affect the response as follows:
+--
+-- -   __required__ – When you retrieve the IAM role credentials, version
+--     2.0 credentials are returned in all cases.
+--
+-- -   __optional__ – You can include a signed token header in your request
+--     to retrieve instance metadata, or you can leave it out. If you
+--     include it, version 2.0 credentials are returned for the IAM role.
+--     Otherwise, version 1.0 credentials are returned.
+--
+-- The default setting is __optional__.
+newInstanceMetadataOptions ::
+  InstanceMetadataOptions
+newInstanceMetadataOptions =
+  InstanceMetadataOptions'
+    { httpPutResponseHopLimit =
+        Prelude.Nothing,
+      httpTokens = Prelude.Nothing
+    }
+
+-- | Limit the number of hops that an instance metadata request can traverse
+-- to reach its destination.
+instanceMetadataOptions_httpPutResponseHopLimit :: Lens.Lens' InstanceMetadataOptions (Prelude.Maybe Prelude.Natural)
+instanceMetadataOptions_httpPutResponseHopLimit = Lens.lens (\InstanceMetadataOptions' {httpPutResponseHopLimit} -> httpPutResponseHopLimit) (\s@InstanceMetadataOptions' {} a -> s {httpPutResponseHopLimit = a} :: InstanceMetadataOptions)
+
+-- | Indicates whether a signed token header is required for instance
+-- metadata retrieval requests. The values affect the response as follows:
+--
+-- -   __required__ – When you retrieve the IAM role credentials, version
+--     2.0 credentials are returned in all cases.
+--
+-- -   __optional__ – You can include a signed token header in your request
+--     to retrieve instance metadata, or you can leave it out. If you
+--     include it, version 2.0 credentials are returned for the IAM role.
+--     Otherwise, version 1.0 credentials are returned.
+--
+-- The default setting is __optional__.
+instanceMetadataOptions_httpTokens :: Lens.Lens' InstanceMetadataOptions (Prelude.Maybe Prelude.Text)
+instanceMetadataOptions_httpTokens = Lens.lens (\InstanceMetadataOptions' {httpTokens} -> httpTokens) (\s@InstanceMetadataOptions' {} a -> s {httpTokens = a} :: InstanceMetadataOptions)
+
+instance Data.FromJSON InstanceMetadataOptions where
+  parseJSON =
+    Data.withObject
+      "InstanceMetadataOptions"
+      ( \x ->
+          InstanceMetadataOptions'
+            Prelude.<$> (x Data..:? "httpPutResponseHopLimit")
+            Prelude.<*> (x Data..:? "httpTokens")
+      )
+
+instance Prelude.Hashable InstanceMetadataOptions where
+  hashWithSalt _salt InstanceMetadataOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` httpPutResponseHopLimit
+      `Prelude.hashWithSalt` httpTokens
+
+instance Prelude.NFData InstanceMetadataOptions where
+  rnf InstanceMetadataOptions' {..} =
+    Prelude.rnf httpPutResponseHopLimit
+      `Prelude.seq` Prelude.rnf httpTokens
+
+instance Data.ToJSON InstanceMetadataOptions where
+  toJSON InstanceMetadataOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("httpPutResponseHopLimit" Data..=)
+              Prelude.<$> httpPutResponseHopLimit,
+            ("httpTokens" Data..=) Prelude.<$> httpTokens
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/LaunchPermissionConfiguration.hs b/gen/Amazonka/ImageBuilder/Types/LaunchPermissionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/LaunchPermissionConfiguration.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.LaunchPermissionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.LaunchPermissionConfiguration 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 for a launch permission. The launch
+-- permission modification request is sent to the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyImageAttribute.html Amazon EC2 ModifyImageAttribute>
+-- API on behalf of the user for each Region they have selected to
+-- distribute the AMI. To make an AMI public, set the launch permission
+-- authorized accounts to @all@. See the examples for making an AMI public
+-- at
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyImageAttribute.html Amazon EC2 ModifyImageAttribute>.
+--
+-- /See:/ 'newLaunchPermissionConfiguration' smart constructor.
+data LaunchPermissionConfiguration = LaunchPermissionConfiguration'
+  { -- | The ARN for an Amazon Web Services Organization that you want to share
+    -- your AMI with. For more information, see
+    -- <https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html What is Organizations?>.
+    organizationArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The ARN for an Organizations organizational unit (OU) that you want to
+    -- share your AMI with. For more information about key concepts for
+    -- Organizations, see
+    -- <https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html Organizations terminology and concepts>.
+    organizationalUnitArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The name of the group.
+    userGroups :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Web Services account ID.
+    userIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchPermissionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'organizationArns', 'launchPermissionConfiguration_organizationArns' - The ARN for an Amazon Web Services Organization that you want to share
+-- your AMI with. For more information, see
+-- <https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html What is Organizations?>.
+--
+-- 'organizationalUnitArns', 'launchPermissionConfiguration_organizationalUnitArns' - The ARN for an Organizations organizational unit (OU) that you want to
+-- share your AMI with. For more information about key concepts for
+-- Organizations, see
+-- <https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html Organizations terminology and concepts>.
+--
+-- 'userGroups', 'launchPermissionConfiguration_userGroups' - The name of the group.
+--
+-- 'userIds', 'launchPermissionConfiguration_userIds' - The Amazon Web Services account ID.
+newLaunchPermissionConfiguration ::
+  LaunchPermissionConfiguration
+newLaunchPermissionConfiguration =
+  LaunchPermissionConfiguration'
+    { organizationArns =
+        Prelude.Nothing,
+      organizationalUnitArns = Prelude.Nothing,
+      userGroups = Prelude.Nothing,
+      userIds = Prelude.Nothing
+    }
+
+-- | The ARN for an Amazon Web Services Organization that you want to share
+-- your AMI with. For more information, see
+-- <https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html What is Organizations?>.
+launchPermissionConfiguration_organizationArns :: Lens.Lens' LaunchPermissionConfiguration (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+launchPermissionConfiguration_organizationArns = Lens.lens (\LaunchPermissionConfiguration' {organizationArns} -> organizationArns) (\s@LaunchPermissionConfiguration' {} a -> s {organizationArns = a} :: LaunchPermissionConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN for an Organizations organizational unit (OU) that you want to
+-- share your AMI with. For more information about key concepts for
+-- Organizations, see
+-- <https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html Organizations terminology and concepts>.
+launchPermissionConfiguration_organizationalUnitArns :: Lens.Lens' LaunchPermissionConfiguration (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+launchPermissionConfiguration_organizationalUnitArns = Lens.lens (\LaunchPermissionConfiguration' {organizationalUnitArns} -> organizationalUnitArns) (\s@LaunchPermissionConfiguration' {} a -> s {organizationalUnitArns = a} :: LaunchPermissionConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the group.
+launchPermissionConfiguration_userGroups :: Lens.Lens' LaunchPermissionConfiguration (Prelude.Maybe [Prelude.Text])
+launchPermissionConfiguration_userGroups = Lens.lens (\LaunchPermissionConfiguration' {userGroups} -> userGroups) (\s@LaunchPermissionConfiguration' {} a -> s {userGroups = a} :: LaunchPermissionConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Web Services account ID.
+launchPermissionConfiguration_userIds :: Lens.Lens' LaunchPermissionConfiguration (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+launchPermissionConfiguration_userIds = Lens.lens (\LaunchPermissionConfiguration' {userIds} -> userIds) (\s@LaunchPermissionConfiguration' {} a -> s {userIds = a} :: LaunchPermissionConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON LaunchPermissionConfiguration where
+  parseJSON =
+    Data.withObject
+      "LaunchPermissionConfiguration"
+      ( \x ->
+          LaunchPermissionConfiguration'
+            Prelude.<$> (x Data..:? "organizationArns")
+            Prelude.<*> (x Data..:? "organizationalUnitArns")
+            Prelude.<*> (x Data..:? "userGroups" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "userIds")
+      )
+
+instance
+  Prelude.Hashable
+    LaunchPermissionConfiguration
+  where
+  hashWithSalt _salt LaunchPermissionConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` organizationArns
+      `Prelude.hashWithSalt` organizationalUnitArns
+      `Prelude.hashWithSalt` userGroups
+      `Prelude.hashWithSalt` userIds
+
+instance Prelude.NFData LaunchPermissionConfiguration where
+  rnf LaunchPermissionConfiguration' {..} =
+    Prelude.rnf organizationArns
+      `Prelude.seq` Prelude.rnf organizationalUnitArns
+      `Prelude.seq` Prelude.rnf userGroups
+      `Prelude.seq` Prelude.rnf userIds
+
+instance Data.ToJSON LaunchPermissionConfiguration where
+  toJSON LaunchPermissionConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("organizationArns" Data..=)
+              Prelude.<$> organizationArns,
+            ("organizationalUnitArns" Data..=)
+              Prelude.<$> organizationalUnitArns,
+            ("userGroups" Data..=) Prelude.<$> userGroups,
+            ("userIds" Data..=) Prelude.<$> userIds
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/LaunchTemplateConfiguration.hs b/gen/Amazonka/ImageBuilder/Types/LaunchTemplateConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/LaunchTemplateConfiguration.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.LaunchTemplateConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.LaunchTemplateConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Identifies an Amazon EC2 launch template to use for a specific account.
+--
+-- /See:/ 'newLaunchTemplateConfiguration' smart constructor.
+data LaunchTemplateConfiguration = LaunchTemplateConfiguration'
+  { -- | The account ID that this configuration applies to.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | Set the specified Amazon EC2 launch template as the default launch
+    -- template for the specified account.
+    setDefaultVersion :: Prelude.Maybe Prelude.Bool,
+    -- | Identifies the Amazon EC2 launch template to use.
+    launchTemplateId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'launchTemplateConfiguration_accountId' - The account ID that this configuration applies to.
+--
+-- 'setDefaultVersion', 'launchTemplateConfiguration_setDefaultVersion' - Set the specified Amazon EC2 launch template as the default launch
+-- template for the specified account.
+--
+-- 'launchTemplateId', 'launchTemplateConfiguration_launchTemplateId' - Identifies the Amazon EC2 launch template to use.
+newLaunchTemplateConfiguration ::
+  -- | 'launchTemplateId'
+  Prelude.Text ->
+  LaunchTemplateConfiguration
+newLaunchTemplateConfiguration pLaunchTemplateId_ =
+  LaunchTemplateConfiguration'
+    { accountId =
+        Prelude.Nothing,
+      setDefaultVersion = Prelude.Nothing,
+      launchTemplateId = pLaunchTemplateId_
+    }
+
+-- | The account ID that this configuration applies to.
+launchTemplateConfiguration_accountId :: Lens.Lens' LaunchTemplateConfiguration (Prelude.Maybe Prelude.Text)
+launchTemplateConfiguration_accountId = Lens.lens (\LaunchTemplateConfiguration' {accountId} -> accountId) (\s@LaunchTemplateConfiguration' {} a -> s {accountId = a} :: LaunchTemplateConfiguration)
+
+-- | Set the specified Amazon EC2 launch template as the default launch
+-- template for the specified account.
+launchTemplateConfiguration_setDefaultVersion :: Lens.Lens' LaunchTemplateConfiguration (Prelude.Maybe Prelude.Bool)
+launchTemplateConfiguration_setDefaultVersion = Lens.lens (\LaunchTemplateConfiguration' {setDefaultVersion} -> setDefaultVersion) (\s@LaunchTemplateConfiguration' {} a -> s {setDefaultVersion = a} :: LaunchTemplateConfiguration)
+
+-- | Identifies the Amazon EC2 launch template to use.
+launchTemplateConfiguration_launchTemplateId :: Lens.Lens' LaunchTemplateConfiguration Prelude.Text
+launchTemplateConfiguration_launchTemplateId = Lens.lens (\LaunchTemplateConfiguration' {launchTemplateId} -> launchTemplateId) (\s@LaunchTemplateConfiguration' {} a -> s {launchTemplateId = a} :: LaunchTemplateConfiguration)
+
+instance Data.FromJSON LaunchTemplateConfiguration where
+  parseJSON =
+    Data.withObject
+      "LaunchTemplateConfiguration"
+      ( \x ->
+          LaunchTemplateConfiguration'
+            Prelude.<$> (x Data..:? "accountId")
+            Prelude.<*> (x Data..:? "setDefaultVersion")
+            Prelude.<*> (x Data..: "launchTemplateId")
+      )
+
+instance Prelude.Hashable LaunchTemplateConfiguration where
+  hashWithSalt _salt LaunchTemplateConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` setDefaultVersion
+      `Prelude.hashWithSalt` launchTemplateId
+
+instance Prelude.NFData LaunchTemplateConfiguration where
+  rnf LaunchTemplateConfiguration' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf setDefaultVersion
+      `Prelude.seq` Prelude.rnf launchTemplateId
+
+instance Data.ToJSON LaunchTemplateConfiguration where
+  toJSON LaunchTemplateConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("accountId" Data..=) Prelude.<$> accountId,
+            ("setDefaultVersion" Data..=)
+              Prelude.<$> setDefaultVersion,
+            Prelude.Just
+              ("launchTemplateId" Data..= launchTemplateId)
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/Logging.hs b/gen/Amazonka/ImageBuilder/Types/Logging.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/Logging.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.Logging
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.Logging where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.S3Logs
+import qualified Amazonka.Prelude as Prelude
+
+-- | Logging configuration defines where Image Builder uploads your logs.
+--
+-- /See:/ 'newLogging' smart constructor.
+data Logging = Logging'
+  { -- | The Amazon S3 logging configuration.
+    s3Logs :: Prelude.Maybe S3Logs
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Logging' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Logs', 'logging_s3Logs' - The Amazon S3 logging configuration.
+newLogging ::
+  Logging
+newLogging = Logging' {s3Logs = Prelude.Nothing}
+
+-- | The Amazon S3 logging configuration.
+logging_s3Logs :: Lens.Lens' Logging (Prelude.Maybe S3Logs)
+logging_s3Logs = Lens.lens (\Logging' {s3Logs} -> s3Logs) (\s@Logging' {} a -> s {s3Logs = a} :: Logging)
+
+instance Data.FromJSON Logging where
+  parseJSON =
+    Data.withObject
+      "Logging"
+      (\x -> Logging' Prelude.<$> (x Data..:? "s3Logs"))
+
+instance Prelude.Hashable Logging where
+  hashWithSalt _salt Logging' {..} =
+    _salt `Prelude.hashWithSalt` s3Logs
+
+instance Prelude.NFData Logging where
+  rnf Logging' {..} = Prelude.rnf s3Logs
+
+instance Data.ToJSON Logging where
+  toJSON Logging' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("s3Logs" Data..=) Prelude.<$> s3Logs]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/OutputResources.hs b/gen/Amazonka/ImageBuilder/Types/OutputResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/OutputResources.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.ImageBuilder.Types.OutputResources
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.OutputResources where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.Ami
+import Amazonka.ImageBuilder.Types.Container
+import qualified Amazonka.Prelude as Prelude
+
+-- | The resources produced by this image.
+--
+-- /See:/ 'newOutputResources' smart constructor.
+data OutputResources = OutputResources'
+  { -- | The Amazon EC2 AMIs created by this image.
+    amis :: Prelude.Maybe [Ami],
+    -- | Container images that the pipeline has generated and stored in the
+    -- output repository.
+    containers :: Prelude.Maybe [Container]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OutputResources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'amis', 'outputResources_amis' - The Amazon EC2 AMIs created by this image.
+--
+-- 'containers', 'outputResources_containers' - Container images that the pipeline has generated and stored in the
+-- output repository.
+newOutputResources ::
+  OutputResources
+newOutputResources =
+  OutputResources'
+    { amis = Prelude.Nothing,
+      containers = Prelude.Nothing
+    }
+
+-- | The Amazon EC2 AMIs created by this image.
+outputResources_amis :: Lens.Lens' OutputResources (Prelude.Maybe [Ami])
+outputResources_amis = Lens.lens (\OutputResources' {amis} -> amis) (\s@OutputResources' {} a -> s {amis = a} :: OutputResources) Prelude.. Lens.mapping Lens.coerced
+
+-- | Container images that the pipeline has generated and stored in the
+-- output repository.
+outputResources_containers :: Lens.Lens' OutputResources (Prelude.Maybe [Container])
+outputResources_containers = Lens.lens (\OutputResources' {containers} -> containers) (\s@OutputResources' {} a -> s {containers = a} :: OutputResources) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON OutputResources where
+  parseJSON =
+    Data.withObject
+      "OutputResources"
+      ( \x ->
+          OutputResources'
+            Prelude.<$> (x Data..:? "amis" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "containers" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable OutputResources where
+  hashWithSalt _salt OutputResources' {..} =
+    _salt
+      `Prelude.hashWithSalt` amis
+      `Prelude.hashWithSalt` containers
+
+instance Prelude.NFData OutputResources where
+  rnf OutputResources' {..} =
+    Prelude.rnf amis
+      `Prelude.seq` Prelude.rnf containers
diff --git a/gen/Amazonka/ImageBuilder/Types/Ownership.hs b/gen/Amazonka/ImageBuilder/Types/Ownership.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/Ownership.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.ImageBuilder.Types.Ownership
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.Ownership
+  ( Ownership
+      ( ..,
+        Ownership_Amazon,
+        Ownership_Self,
+        Ownership_Shared
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Ownership = Ownership'
+  { fromOwnership ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Ownership_Amazon :: Ownership
+pattern Ownership_Amazon = Ownership' "Amazon"
+
+pattern Ownership_Self :: Ownership
+pattern Ownership_Self = Ownership' "Self"
+
+pattern Ownership_Shared :: Ownership
+pattern Ownership_Shared = Ownership' "Shared"
+
+{-# COMPLETE
+  Ownership_Amazon,
+  Ownership_Self,
+  Ownership_Shared,
+  Ownership'
+  #-}
diff --git a/gen/Amazonka/ImageBuilder/Types/PipelineExecutionStartCondition.hs b/gen/Amazonka/ImageBuilder/Types/PipelineExecutionStartCondition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/PipelineExecutionStartCondition.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.ImageBuilder.Types.PipelineExecutionStartCondition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.PipelineExecutionStartCondition
+  ( PipelineExecutionStartCondition
+      ( ..,
+        PipelineExecutionStartCondition_EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE,
+        PipelineExecutionStartCondition_EXPRESSION_MATCH_ONLY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PipelineExecutionStartCondition = PipelineExecutionStartCondition'
+  { fromPipelineExecutionStartCondition ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PipelineExecutionStartCondition_EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE :: PipelineExecutionStartCondition
+pattern PipelineExecutionStartCondition_EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE = PipelineExecutionStartCondition' "EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE"
+
+pattern PipelineExecutionStartCondition_EXPRESSION_MATCH_ONLY :: PipelineExecutionStartCondition
+pattern PipelineExecutionStartCondition_EXPRESSION_MATCH_ONLY = PipelineExecutionStartCondition' "EXPRESSION_MATCH_ONLY"
+
+{-# COMPLETE
+  PipelineExecutionStartCondition_EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE,
+  PipelineExecutionStartCondition_EXPRESSION_MATCH_ONLY,
+  PipelineExecutionStartCondition'
+  #-}
diff --git a/gen/Amazonka/ImageBuilder/Types/PipelineStatus.hs b/gen/Amazonka/ImageBuilder/Types/PipelineStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/PipelineStatus.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.ImageBuilder.Types.PipelineStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.PipelineStatus
+  ( PipelineStatus
+      ( ..,
+        PipelineStatus_DISABLED,
+        PipelineStatus_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PipelineStatus = PipelineStatus'
+  { fromPipelineStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PipelineStatus_DISABLED :: PipelineStatus
+pattern PipelineStatus_DISABLED = PipelineStatus' "DISABLED"
+
+pattern PipelineStatus_ENABLED :: PipelineStatus
+pattern PipelineStatus_ENABLED = PipelineStatus' "ENABLED"
+
+{-# COMPLETE
+  PipelineStatus_DISABLED,
+  PipelineStatus_ENABLED,
+  PipelineStatus'
+  #-}
diff --git a/gen/Amazonka/ImageBuilder/Types/Platform.hs b/gen/Amazonka/ImageBuilder/Types/Platform.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/Platform.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.ImageBuilder.Types.Platform
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.Platform
+  ( Platform
+      ( ..,
+        Platform_Linux,
+        Platform_Windows
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Platform = Platform'
+  { fromPlatform ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Platform_Linux :: Platform
+pattern Platform_Linux = Platform' "Linux"
+
+pattern Platform_Windows :: Platform
+pattern Platform_Windows = Platform' "Windows"
+
+{-# COMPLETE
+  Platform_Linux,
+  Platform_Windows,
+  Platform'
+  #-}
diff --git a/gen/Amazonka/ImageBuilder/Types/S3ExportConfiguration.hs b/gen/Amazonka/ImageBuilder/Types/S3ExportConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/S3ExportConfiguration.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.S3ExportConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.S3ExportConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.DiskImageFormat
+import qualified Amazonka.Prelude as Prelude
+
+-- | Properties that configure export from your build instance to a
+-- compatible file format for your VM.
+--
+-- /See:/ 'newS3ExportConfiguration' smart constructor.
+data S3ExportConfiguration = S3ExportConfiguration'
+  { -- | The Amazon S3 path for the bucket where the output disk images for your
+    -- VM are stored.
+    s3Prefix :: Prelude.Maybe Prelude.Text,
+    -- | The name of the role that grants VM Import\/Export permission to export
+    -- images to your S3 bucket.
+    roleName :: Prelude.Text,
+    -- | Export the updated image to one of the following supported disk image
+    -- formats:
+    --
+    -- -   __Virtual Hard Disk (VHD)__ – Compatible with Citrix Xen and
+    --     Microsoft Hyper-V virtualization products.
+    --
+    -- -   __Stream-optimized ESX Virtual Machine Disk (VMDK)__ – Compatible
+    --     with VMware ESX and VMware vSphere versions 4, 5, and 6.
+    --
+    -- -   __Raw__ – Raw format.
+    diskImageFormat :: DiskImageFormat,
+    -- | The S3 bucket in which to store the output disk images for your VM.
+    s3Bucket :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3ExportConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Prefix', 's3ExportConfiguration_s3Prefix' - The Amazon S3 path for the bucket where the output disk images for your
+-- VM are stored.
+--
+-- 'roleName', 's3ExportConfiguration_roleName' - The name of the role that grants VM Import\/Export permission to export
+-- images to your S3 bucket.
+--
+-- 'diskImageFormat', 's3ExportConfiguration_diskImageFormat' - Export the updated image to one of the following supported disk image
+-- formats:
+--
+-- -   __Virtual Hard Disk (VHD)__ – Compatible with Citrix Xen and
+--     Microsoft Hyper-V virtualization products.
+--
+-- -   __Stream-optimized ESX Virtual Machine Disk (VMDK)__ – Compatible
+--     with VMware ESX and VMware vSphere versions 4, 5, and 6.
+--
+-- -   __Raw__ – Raw format.
+--
+-- 's3Bucket', 's3ExportConfiguration_s3Bucket' - The S3 bucket in which to store the output disk images for your VM.
+newS3ExportConfiguration ::
+  -- | 'roleName'
+  Prelude.Text ->
+  -- | 'diskImageFormat'
+  DiskImageFormat ->
+  -- | 's3Bucket'
+  Prelude.Text ->
+  S3ExportConfiguration
+newS3ExportConfiguration
+  pRoleName_
+  pDiskImageFormat_
+  pS3Bucket_ =
+    S3ExportConfiguration'
+      { s3Prefix = Prelude.Nothing,
+        roleName = pRoleName_,
+        diskImageFormat = pDiskImageFormat_,
+        s3Bucket = pS3Bucket_
+      }
+
+-- | The Amazon S3 path for the bucket where the output disk images for your
+-- VM are stored.
+s3ExportConfiguration_s3Prefix :: Lens.Lens' S3ExportConfiguration (Prelude.Maybe Prelude.Text)
+s3ExportConfiguration_s3Prefix = Lens.lens (\S3ExportConfiguration' {s3Prefix} -> s3Prefix) (\s@S3ExportConfiguration' {} a -> s {s3Prefix = a} :: S3ExportConfiguration)
+
+-- | The name of the role that grants VM Import\/Export permission to export
+-- images to your S3 bucket.
+s3ExportConfiguration_roleName :: Lens.Lens' S3ExportConfiguration Prelude.Text
+s3ExportConfiguration_roleName = Lens.lens (\S3ExportConfiguration' {roleName} -> roleName) (\s@S3ExportConfiguration' {} a -> s {roleName = a} :: S3ExportConfiguration)
+
+-- | Export the updated image to one of the following supported disk image
+-- formats:
+--
+-- -   __Virtual Hard Disk (VHD)__ – Compatible with Citrix Xen and
+--     Microsoft Hyper-V virtualization products.
+--
+-- -   __Stream-optimized ESX Virtual Machine Disk (VMDK)__ – Compatible
+--     with VMware ESX and VMware vSphere versions 4, 5, and 6.
+--
+-- -   __Raw__ – Raw format.
+s3ExportConfiguration_diskImageFormat :: Lens.Lens' S3ExportConfiguration DiskImageFormat
+s3ExportConfiguration_diskImageFormat = Lens.lens (\S3ExportConfiguration' {diskImageFormat} -> diskImageFormat) (\s@S3ExportConfiguration' {} a -> s {diskImageFormat = a} :: S3ExportConfiguration)
+
+-- | The S3 bucket in which to store the output disk images for your VM.
+s3ExportConfiguration_s3Bucket :: Lens.Lens' S3ExportConfiguration Prelude.Text
+s3ExportConfiguration_s3Bucket = Lens.lens (\S3ExportConfiguration' {s3Bucket} -> s3Bucket) (\s@S3ExportConfiguration' {} a -> s {s3Bucket = a} :: S3ExportConfiguration)
+
+instance Data.FromJSON S3ExportConfiguration where
+  parseJSON =
+    Data.withObject
+      "S3ExportConfiguration"
+      ( \x ->
+          S3ExportConfiguration'
+            Prelude.<$> (x Data..:? "s3Prefix")
+            Prelude.<*> (x Data..: "roleName")
+            Prelude.<*> (x Data..: "diskImageFormat")
+            Prelude.<*> (x Data..: "s3Bucket")
+      )
+
+instance Prelude.Hashable S3ExportConfiguration where
+  hashWithSalt _salt S3ExportConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3Prefix
+      `Prelude.hashWithSalt` roleName
+      `Prelude.hashWithSalt` diskImageFormat
+      `Prelude.hashWithSalt` s3Bucket
+
+instance Prelude.NFData S3ExportConfiguration where
+  rnf S3ExportConfiguration' {..} =
+    Prelude.rnf s3Prefix
+      `Prelude.seq` Prelude.rnf roleName
+      `Prelude.seq` Prelude.rnf diskImageFormat
+      `Prelude.seq` Prelude.rnf s3Bucket
+
+instance Data.ToJSON S3ExportConfiguration where
+  toJSON S3ExportConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("s3Prefix" Data..=) Prelude.<$> s3Prefix,
+            Prelude.Just ("roleName" Data..= roleName),
+            Prelude.Just
+              ("diskImageFormat" Data..= diskImageFormat),
+            Prelude.Just ("s3Bucket" Data..= s3Bucket)
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/S3Logs.hs b/gen/Amazonka/ImageBuilder/Types/S3Logs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/S3Logs.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.ImageBuilder.Types.S3Logs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.S3Logs where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Amazon S3 logging configuration.
+--
+-- /See:/ 'newS3Logs' smart constructor.
+data S3Logs = S3Logs'
+  { -- | The S3 bucket in which to store the logs.
+    s3BucketName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 path to the bucket where the logs are stored.
+    s3KeyPrefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Logs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3BucketName', 's3Logs_s3BucketName' - The S3 bucket in which to store the logs.
+--
+-- 's3KeyPrefix', 's3Logs_s3KeyPrefix' - The Amazon S3 path to the bucket where the logs are stored.
+newS3Logs ::
+  S3Logs
+newS3Logs =
+  S3Logs'
+    { s3BucketName = Prelude.Nothing,
+      s3KeyPrefix = Prelude.Nothing
+    }
+
+-- | The S3 bucket in which to store the logs.
+s3Logs_s3BucketName :: Lens.Lens' S3Logs (Prelude.Maybe Prelude.Text)
+s3Logs_s3BucketName = Lens.lens (\S3Logs' {s3BucketName} -> s3BucketName) (\s@S3Logs' {} a -> s {s3BucketName = a} :: S3Logs)
+
+-- | The Amazon S3 path to the bucket where the logs are stored.
+s3Logs_s3KeyPrefix :: Lens.Lens' S3Logs (Prelude.Maybe Prelude.Text)
+s3Logs_s3KeyPrefix = Lens.lens (\S3Logs' {s3KeyPrefix} -> s3KeyPrefix) (\s@S3Logs' {} a -> s {s3KeyPrefix = a} :: S3Logs)
+
+instance Data.FromJSON S3Logs where
+  parseJSON =
+    Data.withObject
+      "S3Logs"
+      ( \x ->
+          S3Logs'
+            Prelude.<$> (x Data..:? "s3BucketName")
+            Prelude.<*> (x Data..:? "s3KeyPrefix")
+      )
+
+instance Prelude.Hashable S3Logs where
+  hashWithSalt _salt S3Logs' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3BucketName
+      `Prelude.hashWithSalt` s3KeyPrefix
+
+instance Prelude.NFData S3Logs where
+  rnf S3Logs' {..} =
+    Prelude.rnf s3BucketName
+      `Prelude.seq` Prelude.rnf s3KeyPrefix
+
+instance Data.ToJSON S3Logs where
+  toJSON S3Logs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("s3BucketName" Data..=) Prelude.<$> s3BucketName,
+            ("s3KeyPrefix" Data..=) Prelude.<$> s3KeyPrefix
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/Schedule.hs b/gen/Amazonka/ImageBuilder/Types/Schedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/Schedule.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.Schedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.Schedule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.PipelineExecutionStartCondition
+import qualified Amazonka.Prelude as Prelude
+
+-- | A schedule configures how often and when a pipeline will automatically
+-- create a new image.
+--
+-- /See:/ 'newSchedule' smart constructor.
+data Schedule = Schedule'
+  { -- | The condition configures when the pipeline should trigger a new image
+    -- build. When the @pipelineExecutionStartCondition@ is set to
+    -- @EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE@, and you use
+    -- semantic version filters on the base image or components in your image
+    -- recipe, EC2 Image Builder will build a new image only when there are new
+    -- versions of the image or components in your recipe that match the
+    -- semantic version filter. When it is set to @EXPRESSION_MATCH_ONLY@, it
+    -- will build a new image every time the CRON expression matches the
+    -- current time. For semantic version syntax, see
+    -- <https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_CreateComponent.html CreateComponent>
+    -- in the /EC2 Image Builder API Reference/.
+    pipelineExecutionStartCondition :: Prelude.Maybe PipelineExecutionStartCondition,
+    -- | The cron expression determines how often EC2 Image Builder evaluates
+    -- your @pipelineExecutionStartCondition@.
+    --
+    -- For information on how to format a cron expression in Image Builder, see
+    -- <https://docs.aws.amazon.com/imagebuilder/latest/userguide/image-builder-cron.html Use cron expressions in EC2 Image Builder>.
+    scheduleExpression :: Prelude.Maybe Prelude.Text,
+    -- | The timezone that applies to the scheduling expression. For example,
+    -- \"Etc\/UTC\", \"America\/Los_Angeles\" in the
+    -- <https://www.joda.org/joda-time/timezones.html IANA timezone format>. If
+    -- not specified this defaults to UTC.
+    timezone :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Schedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'pipelineExecutionStartCondition', 'schedule_pipelineExecutionStartCondition' - The condition configures when the pipeline should trigger a new image
+-- build. When the @pipelineExecutionStartCondition@ is set to
+-- @EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE@, and you use
+-- semantic version filters on the base image or components in your image
+-- recipe, EC2 Image Builder will build a new image only when there are new
+-- versions of the image or components in your recipe that match the
+-- semantic version filter. When it is set to @EXPRESSION_MATCH_ONLY@, it
+-- will build a new image every time the CRON expression matches the
+-- current time. For semantic version syntax, see
+-- <https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_CreateComponent.html CreateComponent>
+-- in the /EC2 Image Builder API Reference/.
+--
+-- 'scheduleExpression', 'schedule_scheduleExpression' - The cron expression determines how often EC2 Image Builder evaluates
+-- your @pipelineExecutionStartCondition@.
+--
+-- For information on how to format a cron expression in Image Builder, see
+-- <https://docs.aws.amazon.com/imagebuilder/latest/userguide/image-builder-cron.html Use cron expressions in EC2 Image Builder>.
+--
+-- 'timezone', 'schedule_timezone' - The timezone that applies to the scheduling expression. For example,
+-- \"Etc\/UTC\", \"America\/Los_Angeles\" in the
+-- <https://www.joda.org/joda-time/timezones.html IANA timezone format>. If
+-- not specified this defaults to UTC.
+newSchedule ::
+  Schedule
+newSchedule =
+  Schedule'
+    { pipelineExecutionStartCondition =
+        Prelude.Nothing,
+      scheduleExpression = Prelude.Nothing,
+      timezone = Prelude.Nothing
+    }
+
+-- | The condition configures when the pipeline should trigger a new image
+-- build. When the @pipelineExecutionStartCondition@ is set to
+-- @EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE@, and you use
+-- semantic version filters on the base image or components in your image
+-- recipe, EC2 Image Builder will build a new image only when there are new
+-- versions of the image or components in your recipe that match the
+-- semantic version filter. When it is set to @EXPRESSION_MATCH_ONLY@, it
+-- will build a new image every time the CRON expression matches the
+-- current time. For semantic version syntax, see
+-- <https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_CreateComponent.html CreateComponent>
+-- in the /EC2 Image Builder API Reference/.
+schedule_pipelineExecutionStartCondition :: Lens.Lens' Schedule (Prelude.Maybe PipelineExecutionStartCondition)
+schedule_pipelineExecutionStartCondition = Lens.lens (\Schedule' {pipelineExecutionStartCondition} -> pipelineExecutionStartCondition) (\s@Schedule' {} a -> s {pipelineExecutionStartCondition = a} :: Schedule)
+
+-- | The cron expression determines how often EC2 Image Builder evaluates
+-- your @pipelineExecutionStartCondition@.
+--
+-- For information on how to format a cron expression in Image Builder, see
+-- <https://docs.aws.amazon.com/imagebuilder/latest/userguide/image-builder-cron.html Use cron expressions in EC2 Image Builder>.
+schedule_scheduleExpression :: Lens.Lens' Schedule (Prelude.Maybe Prelude.Text)
+schedule_scheduleExpression = Lens.lens (\Schedule' {scheduleExpression} -> scheduleExpression) (\s@Schedule' {} a -> s {scheduleExpression = a} :: Schedule)
+
+-- | The timezone that applies to the scheduling expression. For example,
+-- \"Etc\/UTC\", \"America\/Los_Angeles\" in the
+-- <https://www.joda.org/joda-time/timezones.html IANA timezone format>. If
+-- not specified this defaults to UTC.
+schedule_timezone :: Lens.Lens' Schedule (Prelude.Maybe Prelude.Text)
+schedule_timezone = Lens.lens (\Schedule' {timezone} -> timezone) (\s@Schedule' {} a -> s {timezone = a} :: Schedule)
+
+instance Data.FromJSON Schedule where
+  parseJSON =
+    Data.withObject
+      "Schedule"
+      ( \x ->
+          Schedule'
+            Prelude.<$> (x Data..:? "pipelineExecutionStartCondition")
+            Prelude.<*> (x Data..:? "scheduleExpression")
+            Prelude.<*> (x Data..:? "timezone")
+      )
+
+instance Prelude.Hashable Schedule where
+  hashWithSalt _salt Schedule' {..} =
+    _salt
+      `Prelude.hashWithSalt` pipelineExecutionStartCondition
+      `Prelude.hashWithSalt` scheduleExpression
+      `Prelude.hashWithSalt` timezone
+
+instance Prelude.NFData Schedule where
+  rnf Schedule' {..} =
+    Prelude.rnf pipelineExecutionStartCondition
+      `Prelude.seq` Prelude.rnf scheduleExpression
+      `Prelude.seq` Prelude.rnf timezone
+
+instance Data.ToJSON Schedule where
+  toJSON Schedule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("pipelineExecutionStartCondition" Data..=)
+              Prelude.<$> pipelineExecutionStartCondition,
+            ("scheduleExpression" Data..=)
+              Prelude.<$> scheduleExpression,
+            ("timezone" Data..=) Prelude.<$> timezone
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/SystemsManagerAgent.hs b/gen/Amazonka/ImageBuilder/Types/SystemsManagerAgent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/SystemsManagerAgent.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.ImageBuilder.Types.SystemsManagerAgent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.SystemsManagerAgent 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
+
+-- | Contains settings for the Systems Manager agent on your build instance.
+--
+-- /See:/ 'newSystemsManagerAgent' smart constructor.
+data SystemsManagerAgent = SystemsManagerAgent'
+  { -- | Controls whether the Systems Manager agent is removed from your final
+    -- build image, prior to creating the new AMI. If this is set to true, then
+    -- the agent is removed from the final image. If it\'s set to false, then
+    -- the agent is left in, so that it is included in the new AMI. The default
+    -- value is false.
+    uninstallAfterBuild :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SystemsManagerAgent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'uninstallAfterBuild', 'systemsManagerAgent_uninstallAfterBuild' - Controls whether the Systems Manager agent is removed from your final
+-- build image, prior to creating the new AMI. If this is set to true, then
+-- the agent is removed from the final image. If it\'s set to false, then
+-- the agent is left in, so that it is included in the new AMI. The default
+-- value is false.
+newSystemsManagerAgent ::
+  SystemsManagerAgent
+newSystemsManagerAgent =
+  SystemsManagerAgent'
+    { uninstallAfterBuild =
+        Prelude.Nothing
+    }
+
+-- | Controls whether the Systems Manager agent is removed from your final
+-- build image, prior to creating the new AMI. If this is set to true, then
+-- the agent is removed from the final image. If it\'s set to false, then
+-- the agent is left in, so that it is included in the new AMI. The default
+-- value is false.
+systemsManagerAgent_uninstallAfterBuild :: Lens.Lens' SystemsManagerAgent (Prelude.Maybe Prelude.Bool)
+systemsManagerAgent_uninstallAfterBuild = Lens.lens (\SystemsManagerAgent' {uninstallAfterBuild} -> uninstallAfterBuild) (\s@SystemsManagerAgent' {} a -> s {uninstallAfterBuild = a} :: SystemsManagerAgent)
+
+instance Data.FromJSON SystemsManagerAgent where
+  parseJSON =
+    Data.withObject
+      "SystemsManagerAgent"
+      ( \x ->
+          SystemsManagerAgent'
+            Prelude.<$> (x Data..:? "uninstallAfterBuild")
+      )
+
+instance Prelude.Hashable SystemsManagerAgent where
+  hashWithSalt _salt SystemsManagerAgent' {..} =
+    _salt `Prelude.hashWithSalt` uninstallAfterBuild
+
+instance Prelude.NFData SystemsManagerAgent where
+  rnf SystemsManagerAgent' {..} =
+    Prelude.rnf uninstallAfterBuild
+
+instance Data.ToJSON SystemsManagerAgent where
+  toJSON SystemsManagerAgent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("uninstallAfterBuild" Data..=)
+              Prelude.<$> uninstallAfterBuild
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/Types/TargetContainerRepository.hs b/gen/Amazonka/ImageBuilder/Types/TargetContainerRepository.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/Types/TargetContainerRepository.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.Types.TargetContainerRepository
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ImageBuilder.Types.TargetContainerRepository where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types.ContainerRepositoryService
+import qualified Amazonka.Prelude as Prelude
+
+-- | The container repository where the output container image is stored.
+--
+-- /See:/ 'newTargetContainerRepository' smart constructor.
+data TargetContainerRepository = TargetContainerRepository'
+  { -- | Specifies the service in which this image was registered.
+    service :: ContainerRepositoryService,
+    -- | The name of the container repository where the output container image is
+    -- stored. This name is prefixed by the repository location.
+    repositoryName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TargetContainerRepository' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'service', 'targetContainerRepository_service' - Specifies the service in which this image was registered.
+--
+-- 'repositoryName', 'targetContainerRepository_repositoryName' - The name of the container repository where the output container image is
+-- stored. This name is prefixed by the repository location.
+newTargetContainerRepository ::
+  -- | 'service'
+  ContainerRepositoryService ->
+  -- | 'repositoryName'
+  Prelude.Text ->
+  TargetContainerRepository
+newTargetContainerRepository
+  pService_
+  pRepositoryName_ =
+    TargetContainerRepository'
+      { service = pService_,
+        repositoryName = pRepositoryName_
+      }
+
+-- | Specifies the service in which this image was registered.
+targetContainerRepository_service :: Lens.Lens' TargetContainerRepository ContainerRepositoryService
+targetContainerRepository_service = Lens.lens (\TargetContainerRepository' {service} -> service) (\s@TargetContainerRepository' {} a -> s {service = a} :: TargetContainerRepository)
+
+-- | The name of the container repository where the output container image is
+-- stored. This name is prefixed by the repository location.
+targetContainerRepository_repositoryName :: Lens.Lens' TargetContainerRepository Prelude.Text
+targetContainerRepository_repositoryName = Lens.lens (\TargetContainerRepository' {repositoryName} -> repositoryName) (\s@TargetContainerRepository' {} a -> s {repositoryName = a} :: TargetContainerRepository)
+
+instance Data.FromJSON TargetContainerRepository where
+  parseJSON =
+    Data.withObject
+      "TargetContainerRepository"
+      ( \x ->
+          TargetContainerRepository'
+            Prelude.<$> (x Data..: "service")
+            Prelude.<*> (x Data..: "repositoryName")
+      )
+
+instance Prelude.Hashable TargetContainerRepository where
+  hashWithSalt _salt TargetContainerRepository' {..} =
+    _salt
+      `Prelude.hashWithSalt` service
+      `Prelude.hashWithSalt` repositoryName
+
+instance Prelude.NFData TargetContainerRepository where
+  rnf TargetContainerRepository' {..} =
+    Prelude.rnf service
+      `Prelude.seq` Prelude.rnf repositoryName
+
+instance Data.ToJSON TargetContainerRepository where
+  toJSON TargetContainerRepository' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("service" Data..= service),
+            Prelude.Just
+              ("repositoryName" Data..= repositoryName)
+          ]
+      )
diff --git a/gen/Amazonka/ImageBuilder/UntagResource.hs b/gen/Amazonka/ImageBuilder/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/UntagResource.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.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)
+--
+-- Removes a tag from a resource.
+module Amazonka.ImageBuilder.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource that you want to untag.
+    resourceArn :: Prelude.Text,
+    -- | The tag keys to remove from the resource.
+    tagKeys :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource that you want to untag.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tag keys to remove from the resource.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pTagKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource that you want to untag.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The tag keys to remove from the resource.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty Prelude.Text)
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/UpdateDistributionConfiguration.hs b/gen/Amazonka/ImageBuilder/UpdateDistributionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/UpdateDistributionConfiguration.hs
@@ -0,0 +1,268 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.UpdateDistributionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a new distribution configuration. Distribution configurations
+-- define and configure the outputs of your pipeline.
+module Amazonka.ImageBuilder.UpdateDistributionConfiguration
+  ( -- * Creating a Request
+    UpdateDistributionConfiguration (..),
+    newUpdateDistributionConfiguration,
+
+    -- * Request Lenses
+    updateDistributionConfiguration_description,
+    updateDistributionConfiguration_distributionConfigurationArn,
+    updateDistributionConfiguration_distributions,
+    updateDistributionConfiguration_clientToken,
+
+    -- * Destructuring the Response
+    UpdateDistributionConfigurationResponse (..),
+    newUpdateDistributionConfigurationResponse,
+
+    -- * Response Lenses
+    updateDistributionConfigurationResponse_clientToken,
+    updateDistributionConfigurationResponse_distributionConfigurationArn,
+    updateDistributionConfigurationResponse_requestId,
+    updateDistributionConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDistributionConfiguration' smart constructor.
+data UpdateDistributionConfiguration = UpdateDistributionConfiguration'
+  { -- | The description of the distribution configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the distribution configuration that
+    -- you want to update.
+    distributionConfigurationArn :: Prelude.Text,
+    -- | The distributions of the distribution configuration.
+    distributions :: [Distribution],
+    -- | The idempotency token of the distribution configuration.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDistributionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateDistributionConfiguration_description' - The description of the distribution configuration.
+--
+-- 'distributionConfigurationArn', 'updateDistributionConfiguration_distributionConfigurationArn' - The Amazon Resource Name (ARN) of the distribution configuration that
+-- you want to update.
+--
+-- 'distributions', 'updateDistributionConfiguration_distributions' - The distributions of the distribution configuration.
+--
+-- 'clientToken', 'updateDistributionConfiguration_clientToken' - The idempotency token of the distribution configuration.
+newUpdateDistributionConfiguration ::
+  -- | 'distributionConfigurationArn'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  UpdateDistributionConfiguration
+newUpdateDistributionConfiguration
+  pDistributionConfigurationArn_
+  pClientToken_ =
+    UpdateDistributionConfiguration'
+      { description =
+          Prelude.Nothing,
+        distributionConfigurationArn =
+          pDistributionConfigurationArn_,
+        distributions = Prelude.mempty,
+        clientToken = pClientToken_
+      }
+
+-- | The description of the distribution configuration.
+updateDistributionConfiguration_description :: Lens.Lens' UpdateDistributionConfiguration (Prelude.Maybe Prelude.Text)
+updateDistributionConfiguration_description = Lens.lens (\UpdateDistributionConfiguration' {description} -> description) (\s@UpdateDistributionConfiguration' {} a -> s {description = a} :: UpdateDistributionConfiguration)
+
+-- | The Amazon Resource Name (ARN) of the distribution configuration that
+-- you want to update.
+updateDistributionConfiguration_distributionConfigurationArn :: Lens.Lens' UpdateDistributionConfiguration Prelude.Text
+updateDistributionConfiguration_distributionConfigurationArn = Lens.lens (\UpdateDistributionConfiguration' {distributionConfigurationArn} -> distributionConfigurationArn) (\s@UpdateDistributionConfiguration' {} a -> s {distributionConfigurationArn = a} :: UpdateDistributionConfiguration)
+
+-- | The distributions of the distribution configuration.
+updateDistributionConfiguration_distributions :: Lens.Lens' UpdateDistributionConfiguration [Distribution]
+updateDistributionConfiguration_distributions = Lens.lens (\UpdateDistributionConfiguration' {distributions} -> distributions) (\s@UpdateDistributionConfiguration' {} a -> s {distributions = a} :: UpdateDistributionConfiguration) Prelude.. Lens.coerced
+
+-- | The idempotency token of the distribution configuration.
+updateDistributionConfiguration_clientToken :: Lens.Lens' UpdateDistributionConfiguration Prelude.Text
+updateDistributionConfiguration_clientToken = Lens.lens (\UpdateDistributionConfiguration' {clientToken} -> clientToken) (\s@UpdateDistributionConfiguration' {} a -> s {clientToken = a} :: UpdateDistributionConfiguration)
+
+instance
+  Core.AWSRequest
+    UpdateDistributionConfiguration
+  where
+  type
+    AWSResponse UpdateDistributionConfiguration =
+      UpdateDistributionConfigurationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateDistributionConfigurationResponse'
+            Prelude.<$> (x Data..?> "clientToken")
+            Prelude.<*> (x Data..?> "distributionConfigurationArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateDistributionConfiguration
+  where
+  hashWithSalt
+    _salt
+    UpdateDistributionConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` distributionConfigurationArn
+        `Prelude.hashWithSalt` distributions
+        `Prelude.hashWithSalt` clientToken
+
+instance
+  Prelude.NFData
+    UpdateDistributionConfiguration
+  where
+  rnf UpdateDistributionConfiguration' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf distributionConfigurationArn
+      `Prelude.seq` Prelude.rnf distributions
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance
+  Data.ToHeaders
+    UpdateDistributionConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDistributionConfiguration where
+  toJSON UpdateDistributionConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            Prelude.Just
+              ( "distributionConfigurationArn"
+                  Data..= distributionConfigurationArn
+              ),
+            Prelude.Just ("distributions" Data..= distributions),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance Data.ToPath UpdateDistributionConfiguration where
+  toPath =
+    Prelude.const "/UpdateDistributionConfiguration"
+
+instance Data.ToQuery UpdateDistributionConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDistributionConfigurationResponse' smart constructor.
+data UpdateDistributionConfigurationResponse = UpdateDistributionConfigurationResponse'
+  { -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the distribution configuration that
+    -- was updated by this request.
+    distributionConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDistributionConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'updateDistributionConfigurationResponse_clientToken' - The idempotency token used to make this request idempotent.
+--
+-- 'distributionConfigurationArn', 'updateDistributionConfigurationResponse_distributionConfigurationArn' - The Amazon Resource Name (ARN) of the distribution configuration that
+-- was updated by this request.
+--
+-- 'requestId', 'updateDistributionConfigurationResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'updateDistributionConfigurationResponse_httpStatus' - The response's http status code.
+newUpdateDistributionConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateDistributionConfigurationResponse
+newUpdateDistributionConfigurationResponse
+  pHttpStatus_ =
+    UpdateDistributionConfigurationResponse'
+      { clientToken =
+          Prelude.Nothing,
+        distributionConfigurationArn =
+          Prelude.Nothing,
+        requestId = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The idempotency token used to make this request idempotent.
+updateDistributionConfigurationResponse_clientToken :: Lens.Lens' UpdateDistributionConfigurationResponse (Prelude.Maybe Prelude.Text)
+updateDistributionConfigurationResponse_clientToken = Lens.lens (\UpdateDistributionConfigurationResponse' {clientToken} -> clientToken) (\s@UpdateDistributionConfigurationResponse' {} a -> s {clientToken = a} :: UpdateDistributionConfigurationResponse)
+
+-- | The Amazon Resource Name (ARN) of the distribution configuration that
+-- was updated by this request.
+updateDistributionConfigurationResponse_distributionConfigurationArn :: Lens.Lens' UpdateDistributionConfigurationResponse (Prelude.Maybe Prelude.Text)
+updateDistributionConfigurationResponse_distributionConfigurationArn = Lens.lens (\UpdateDistributionConfigurationResponse' {distributionConfigurationArn} -> distributionConfigurationArn) (\s@UpdateDistributionConfigurationResponse' {} a -> s {distributionConfigurationArn = a} :: UpdateDistributionConfigurationResponse)
+
+-- | The request ID that uniquely identifies this request.
+updateDistributionConfigurationResponse_requestId :: Lens.Lens' UpdateDistributionConfigurationResponse (Prelude.Maybe Prelude.Text)
+updateDistributionConfigurationResponse_requestId = Lens.lens (\UpdateDistributionConfigurationResponse' {requestId} -> requestId) (\s@UpdateDistributionConfigurationResponse' {} a -> s {requestId = a} :: UpdateDistributionConfigurationResponse)
+
+-- | The response's http status code.
+updateDistributionConfigurationResponse_httpStatus :: Lens.Lens' UpdateDistributionConfigurationResponse Prelude.Int
+updateDistributionConfigurationResponse_httpStatus = Lens.lens (\UpdateDistributionConfigurationResponse' {httpStatus} -> httpStatus) (\s@UpdateDistributionConfigurationResponse' {} a -> s {httpStatus = a} :: UpdateDistributionConfigurationResponse)
+
+instance
+  Prelude.NFData
+    UpdateDistributionConfigurationResponse
+  where
+  rnf UpdateDistributionConfigurationResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf distributionConfigurationArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/UpdateImagePipeline.hs b/gen/Amazonka/ImageBuilder/UpdateImagePipeline.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/UpdateImagePipeline.hs
@@ -0,0 +1,373 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.UpdateImagePipeline
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an image pipeline. Image pipelines enable you to automate the
+-- creation and distribution of images.
+--
+-- UpdateImagePipeline does not support selective updates for the pipeline.
+-- You must specify all of the required properties in the update request,
+-- not just the properties that have changed.
+module Amazonka.ImageBuilder.UpdateImagePipeline
+  ( -- * Creating a Request
+    UpdateImagePipeline (..),
+    newUpdateImagePipeline,
+
+    -- * Request Lenses
+    updateImagePipeline_containerRecipeArn,
+    updateImagePipeline_description,
+    updateImagePipeline_distributionConfigurationArn,
+    updateImagePipeline_enhancedImageMetadataEnabled,
+    updateImagePipeline_imageRecipeArn,
+    updateImagePipeline_imageTestsConfiguration,
+    updateImagePipeline_schedule,
+    updateImagePipeline_status,
+    updateImagePipeline_imagePipelineArn,
+    updateImagePipeline_infrastructureConfigurationArn,
+    updateImagePipeline_clientToken,
+
+    -- * Destructuring the Response
+    UpdateImagePipelineResponse (..),
+    newUpdateImagePipelineResponse,
+
+    -- * Response Lenses
+    updateImagePipelineResponse_clientToken,
+    updateImagePipelineResponse_imagePipelineArn,
+    updateImagePipelineResponse_requestId,
+    updateImagePipelineResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateImagePipeline' smart constructor.
+data UpdateImagePipeline = UpdateImagePipeline'
+  { -- | The Amazon Resource Name (ARN) of the container pipeline to update.
+    containerRecipeArn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the image pipeline.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the distribution configuration that
+    -- will be used to configure and distribute images updated by this image
+    -- pipeline.
+    distributionConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | Collects additional information about the image being created, including
+    -- the operating system (OS) version and package list. This information is
+    -- used to enhance the overall experience of using EC2 Image Builder.
+    -- Enabled by default.
+    enhancedImageMetadataEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the image recipe that will be used to
+    -- configure images updated by this image pipeline.
+    imageRecipeArn :: Prelude.Maybe Prelude.Text,
+    -- | The image test configuration of the image pipeline.
+    imageTestsConfiguration :: Prelude.Maybe ImageTestsConfiguration,
+    -- | The schedule of the image pipeline.
+    schedule :: Prelude.Maybe Schedule,
+    -- | The status of the image pipeline.
+    status :: Prelude.Maybe PipelineStatus,
+    -- | The Amazon Resource Name (ARN) of the image pipeline that you want to
+    -- update.
+    imagePipelineArn :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+    -- will be used to build images updated by this image pipeline.
+    infrastructureConfigurationArn :: Prelude.Text,
+    -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateImagePipeline' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'containerRecipeArn', 'updateImagePipeline_containerRecipeArn' - The Amazon Resource Name (ARN) of the container pipeline to update.
+--
+-- 'description', 'updateImagePipeline_description' - The description of the image pipeline.
+--
+-- 'distributionConfigurationArn', 'updateImagePipeline_distributionConfigurationArn' - The Amazon Resource Name (ARN) of the distribution configuration that
+-- will be used to configure and distribute images updated by this image
+-- pipeline.
+--
+-- 'enhancedImageMetadataEnabled', 'updateImagePipeline_enhancedImageMetadataEnabled' - Collects additional information about the image being created, including
+-- the operating system (OS) version and package list. This information is
+-- used to enhance the overall experience of using EC2 Image Builder.
+-- Enabled by default.
+--
+-- 'imageRecipeArn', 'updateImagePipeline_imageRecipeArn' - The Amazon Resource Name (ARN) of the image recipe that will be used to
+-- configure images updated by this image pipeline.
+--
+-- 'imageTestsConfiguration', 'updateImagePipeline_imageTestsConfiguration' - The image test configuration of the image pipeline.
+--
+-- 'schedule', 'updateImagePipeline_schedule' - The schedule of the image pipeline.
+--
+-- 'status', 'updateImagePipeline_status' - The status of the image pipeline.
+--
+-- 'imagePipelineArn', 'updateImagePipeline_imagePipelineArn' - The Amazon Resource Name (ARN) of the image pipeline that you want to
+-- update.
+--
+-- 'infrastructureConfigurationArn', 'updateImagePipeline_infrastructureConfigurationArn' - The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- will be used to build images updated by this image pipeline.
+--
+-- 'clientToken', 'updateImagePipeline_clientToken' - The idempotency token used to make this request idempotent.
+newUpdateImagePipeline ::
+  -- | 'imagePipelineArn'
+  Prelude.Text ->
+  -- | 'infrastructureConfigurationArn'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  UpdateImagePipeline
+newUpdateImagePipeline
+  pImagePipelineArn_
+  pInfrastructureConfigurationArn_
+  pClientToken_ =
+    UpdateImagePipeline'
+      { containerRecipeArn =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        distributionConfigurationArn = Prelude.Nothing,
+        enhancedImageMetadataEnabled = Prelude.Nothing,
+        imageRecipeArn = Prelude.Nothing,
+        imageTestsConfiguration = Prelude.Nothing,
+        schedule = Prelude.Nothing,
+        status = Prelude.Nothing,
+        imagePipelineArn = pImagePipelineArn_,
+        infrastructureConfigurationArn =
+          pInfrastructureConfigurationArn_,
+        clientToken = pClientToken_
+      }
+
+-- | The Amazon Resource Name (ARN) of the container pipeline to update.
+updateImagePipeline_containerRecipeArn :: Lens.Lens' UpdateImagePipeline (Prelude.Maybe Prelude.Text)
+updateImagePipeline_containerRecipeArn = Lens.lens (\UpdateImagePipeline' {containerRecipeArn} -> containerRecipeArn) (\s@UpdateImagePipeline' {} a -> s {containerRecipeArn = a} :: UpdateImagePipeline)
+
+-- | The description of the image pipeline.
+updateImagePipeline_description :: Lens.Lens' UpdateImagePipeline (Prelude.Maybe Prelude.Text)
+updateImagePipeline_description = Lens.lens (\UpdateImagePipeline' {description} -> description) (\s@UpdateImagePipeline' {} a -> s {description = a} :: UpdateImagePipeline)
+
+-- | The Amazon Resource Name (ARN) of the distribution configuration that
+-- will be used to configure and distribute images updated by this image
+-- pipeline.
+updateImagePipeline_distributionConfigurationArn :: Lens.Lens' UpdateImagePipeline (Prelude.Maybe Prelude.Text)
+updateImagePipeline_distributionConfigurationArn = Lens.lens (\UpdateImagePipeline' {distributionConfigurationArn} -> distributionConfigurationArn) (\s@UpdateImagePipeline' {} a -> s {distributionConfigurationArn = a} :: UpdateImagePipeline)
+
+-- | Collects additional information about the image being created, including
+-- the operating system (OS) version and package list. This information is
+-- used to enhance the overall experience of using EC2 Image Builder.
+-- Enabled by default.
+updateImagePipeline_enhancedImageMetadataEnabled :: Lens.Lens' UpdateImagePipeline (Prelude.Maybe Prelude.Bool)
+updateImagePipeline_enhancedImageMetadataEnabled = Lens.lens (\UpdateImagePipeline' {enhancedImageMetadataEnabled} -> enhancedImageMetadataEnabled) (\s@UpdateImagePipeline' {} a -> s {enhancedImageMetadataEnabled = a} :: UpdateImagePipeline)
+
+-- | The Amazon Resource Name (ARN) of the image recipe that will be used to
+-- configure images updated by this image pipeline.
+updateImagePipeline_imageRecipeArn :: Lens.Lens' UpdateImagePipeline (Prelude.Maybe Prelude.Text)
+updateImagePipeline_imageRecipeArn = Lens.lens (\UpdateImagePipeline' {imageRecipeArn} -> imageRecipeArn) (\s@UpdateImagePipeline' {} a -> s {imageRecipeArn = a} :: UpdateImagePipeline)
+
+-- | The image test configuration of the image pipeline.
+updateImagePipeline_imageTestsConfiguration :: Lens.Lens' UpdateImagePipeline (Prelude.Maybe ImageTestsConfiguration)
+updateImagePipeline_imageTestsConfiguration = Lens.lens (\UpdateImagePipeline' {imageTestsConfiguration} -> imageTestsConfiguration) (\s@UpdateImagePipeline' {} a -> s {imageTestsConfiguration = a} :: UpdateImagePipeline)
+
+-- | The schedule of the image pipeline.
+updateImagePipeline_schedule :: Lens.Lens' UpdateImagePipeline (Prelude.Maybe Schedule)
+updateImagePipeline_schedule = Lens.lens (\UpdateImagePipeline' {schedule} -> schedule) (\s@UpdateImagePipeline' {} a -> s {schedule = a} :: UpdateImagePipeline)
+
+-- | The status of the image pipeline.
+updateImagePipeline_status :: Lens.Lens' UpdateImagePipeline (Prelude.Maybe PipelineStatus)
+updateImagePipeline_status = Lens.lens (\UpdateImagePipeline' {status} -> status) (\s@UpdateImagePipeline' {} a -> s {status = a} :: UpdateImagePipeline)
+
+-- | The Amazon Resource Name (ARN) of the image pipeline that you want to
+-- update.
+updateImagePipeline_imagePipelineArn :: Lens.Lens' UpdateImagePipeline Prelude.Text
+updateImagePipeline_imagePipelineArn = Lens.lens (\UpdateImagePipeline' {imagePipelineArn} -> imagePipelineArn) (\s@UpdateImagePipeline' {} a -> s {imagePipelineArn = a} :: UpdateImagePipeline)
+
+-- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- will be used to build images updated by this image pipeline.
+updateImagePipeline_infrastructureConfigurationArn :: Lens.Lens' UpdateImagePipeline Prelude.Text
+updateImagePipeline_infrastructureConfigurationArn = Lens.lens (\UpdateImagePipeline' {infrastructureConfigurationArn} -> infrastructureConfigurationArn) (\s@UpdateImagePipeline' {} a -> s {infrastructureConfigurationArn = a} :: UpdateImagePipeline)
+
+-- | The idempotency token used to make this request idempotent.
+updateImagePipeline_clientToken :: Lens.Lens' UpdateImagePipeline Prelude.Text
+updateImagePipeline_clientToken = Lens.lens (\UpdateImagePipeline' {clientToken} -> clientToken) (\s@UpdateImagePipeline' {} a -> s {clientToken = a} :: UpdateImagePipeline)
+
+instance Core.AWSRequest UpdateImagePipeline where
+  type
+    AWSResponse UpdateImagePipeline =
+      UpdateImagePipelineResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateImagePipelineResponse'
+            Prelude.<$> (x Data..?> "clientToken")
+            Prelude.<*> (x Data..?> "imagePipelineArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateImagePipeline where
+  hashWithSalt _salt UpdateImagePipeline' {..} =
+    _salt
+      `Prelude.hashWithSalt` containerRecipeArn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` distributionConfigurationArn
+      `Prelude.hashWithSalt` enhancedImageMetadataEnabled
+      `Prelude.hashWithSalt` imageRecipeArn
+      `Prelude.hashWithSalt` imageTestsConfiguration
+      `Prelude.hashWithSalt` schedule
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` imagePipelineArn
+      `Prelude.hashWithSalt` infrastructureConfigurationArn
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData UpdateImagePipeline where
+  rnf UpdateImagePipeline' {..} =
+    Prelude.rnf containerRecipeArn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf distributionConfigurationArn
+      `Prelude.seq` Prelude.rnf enhancedImageMetadataEnabled
+      `Prelude.seq` Prelude.rnf imageRecipeArn
+      `Prelude.seq` Prelude.rnf imageTestsConfiguration
+      `Prelude.seq` Prelude.rnf schedule
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf imagePipelineArn
+      `Prelude.seq` Prelude.rnf infrastructureConfigurationArn
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance Data.ToHeaders UpdateImagePipeline where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateImagePipeline where
+  toJSON UpdateImagePipeline' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("containerRecipeArn" Data..=)
+              Prelude.<$> containerRecipeArn,
+            ("description" Data..=) Prelude.<$> description,
+            ("distributionConfigurationArn" Data..=)
+              Prelude.<$> distributionConfigurationArn,
+            ("enhancedImageMetadataEnabled" Data..=)
+              Prelude.<$> enhancedImageMetadataEnabled,
+            ("imageRecipeArn" Data..=)
+              Prelude.<$> imageRecipeArn,
+            ("imageTestsConfiguration" Data..=)
+              Prelude.<$> imageTestsConfiguration,
+            ("schedule" Data..=) Prelude.<$> schedule,
+            ("status" Data..=) Prelude.<$> status,
+            Prelude.Just
+              ("imagePipelineArn" Data..= imagePipelineArn),
+            Prelude.Just
+              ( "infrastructureConfigurationArn"
+                  Data..= infrastructureConfigurationArn
+              ),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance Data.ToPath UpdateImagePipeline where
+  toPath = Prelude.const "/UpdateImagePipeline"
+
+instance Data.ToQuery UpdateImagePipeline where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateImagePipelineResponse' smart constructor.
+data UpdateImagePipelineResponse = UpdateImagePipelineResponse'
+  { -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the image pipeline that was updated by
+    -- this request.
+    imagePipelineArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateImagePipelineResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'updateImagePipelineResponse_clientToken' - The idempotency token used to make this request idempotent.
+--
+-- 'imagePipelineArn', 'updateImagePipelineResponse_imagePipelineArn' - The Amazon Resource Name (ARN) of the image pipeline that was updated by
+-- this request.
+--
+-- 'requestId', 'updateImagePipelineResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'updateImagePipelineResponse_httpStatus' - The response's http status code.
+newUpdateImagePipelineResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateImagePipelineResponse
+newUpdateImagePipelineResponse pHttpStatus_ =
+  UpdateImagePipelineResponse'
+    { clientToken =
+        Prelude.Nothing,
+      imagePipelineArn = Prelude.Nothing,
+      requestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The idempotency token used to make this request idempotent.
+updateImagePipelineResponse_clientToken :: Lens.Lens' UpdateImagePipelineResponse (Prelude.Maybe Prelude.Text)
+updateImagePipelineResponse_clientToken = Lens.lens (\UpdateImagePipelineResponse' {clientToken} -> clientToken) (\s@UpdateImagePipelineResponse' {} a -> s {clientToken = a} :: UpdateImagePipelineResponse)
+
+-- | The Amazon Resource Name (ARN) of the image pipeline that was updated by
+-- this request.
+updateImagePipelineResponse_imagePipelineArn :: Lens.Lens' UpdateImagePipelineResponse (Prelude.Maybe Prelude.Text)
+updateImagePipelineResponse_imagePipelineArn = Lens.lens (\UpdateImagePipelineResponse' {imagePipelineArn} -> imagePipelineArn) (\s@UpdateImagePipelineResponse' {} a -> s {imagePipelineArn = a} :: UpdateImagePipelineResponse)
+
+-- | The request ID that uniquely identifies this request.
+updateImagePipelineResponse_requestId :: Lens.Lens' UpdateImagePipelineResponse (Prelude.Maybe Prelude.Text)
+updateImagePipelineResponse_requestId = Lens.lens (\UpdateImagePipelineResponse' {requestId} -> requestId) (\s@UpdateImagePipelineResponse' {} a -> s {requestId = a} :: UpdateImagePipelineResponse)
+
+-- | The response's http status code.
+updateImagePipelineResponse_httpStatus :: Lens.Lens' UpdateImagePipelineResponse Prelude.Int
+updateImagePipelineResponse_httpStatus = Lens.lens (\UpdateImagePipelineResponse' {httpStatus} -> httpStatus) (\s@UpdateImagePipelineResponse' {} a -> s {httpStatus = a} :: UpdateImagePipelineResponse)
+
+instance Prelude.NFData UpdateImagePipelineResponse where
+  rnf UpdateImagePipelineResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf imagePipelineArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/UpdateInfrastructureConfiguration.hs b/gen/Amazonka/ImageBuilder/UpdateInfrastructureConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/UpdateInfrastructureConfiguration.hs
@@ -0,0 +1,477 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ImageBuilder.UpdateInfrastructureConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a new infrastructure configuration. An infrastructure
+-- configuration defines the environment in which your image will be built
+-- and tested.
+module Amazonka.ImageBuilder.UpdateInfrastructureConfiguration
+  ( -- * Creating a Request
+    UpdateInfrastructureConfiguration (..),
+    newUpdateInfrastructureConfiguration,
+
+    -- * Request Lenses
+    updateInfrastructureConfiguration_description,
+    updateInfrastructureConfiguration_instanceMetadataOptions,
+    updateInfrastructureConfiguration_instanceTypes,
+    updateInfrastructureConfiguration_keyPair,
+    updateInfrastructureConfiguration_logging,
+    updateInfrastructureConfiguration_resourceTags,
+    updateInfrastructureConfiguration_securityGroupIds,
+    updateInfrastructureConfiguration_snsTopicArn,
+    updateInfrastructureConfiguration_subnetId,
+    updateInfrastructureConfiguration_terminateInstanceOnFailure,
+    updateInfrastructureConfiguration_infrastructureConfigurationArn,
+    updateInfrastructureConfiguration_instanceProfileName,
+    updateInfrastructureConfiguration_clientToken,
+
+    -- * Destructuring the Response
+    UpdateInfrastructureConfigurationResponse (..),
+    newUpdateInfrastructureConfigurationResponse,
+
+    -- * Response Lenses
+    updateInfrastructureConfigurationResponse_clientToken,
+    updateInfrastructureConfigurationResponse_infrastructureConfigurationArn,
+    updateInfrastructureConfigurationResponse_requestId,
+    updateInfrastructureConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateInfrastructureConfiguration' smart constructor.
+data UpdateInfrastructureConfiguration = UpdateInfrastructureConfiguration'
+  { -- | The description of the infrastructure configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The instance metadata options that you can set for the HTTP requests
+    -- that pipeline builds use to launch EC2 build and test instances. For
+    -- more information about instance metadata options, see one of the
+    -- following links:
+    --
+    -- -   <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html Configure the instance metadata options>
+    --     in the //Amazon EC2 User Guide// for Linux instances.
+    --
+    -- -   <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/configuring-instance-metadata-options.html Configure the instance metadata options>
+    --     in the //Amazon EC2 Windows Guide// for Windows instances.
+    instanceMetadataOptions :: Prelude.Maybe InstanceMetadataOptions,
+    -- | The instance types of the infrastructure configuration. You can specify
+    -- one or more instance types to use for this build. The service will pick
+    -- one of these instance types based on availability.
+    instanceTypes :: Prelude.Maybe [Prelude.Text],
+    -- | The key pair of the infrastructure configuration. You can use this to
+    -- log on to and debug the instance used to create your image.
+    keyPair :: Prelude.Maybe Prelude.Text,
+    -- | The logging configuration of the infrastructure configuration.
+    logging :: Prelude.Maybe Logging,
+    -- | The tags attached to the resource created by Image Builder.
+    resourceTags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The security group IDs to associate with the instance used to customize
+    -- your Amazon EC2 AMI.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) for the SNS topic to which we send image
+    -- build event notifications.
+    --
+    -- EC2 Image Builder is unable to send notifications to SNS topics that are
+    -- encrypted using keys from other accounts. The key that is used to
+    -- encrypt the SNS topic must reside in the account that the Image Builder
+    -- service runs under.
+    snsTopicArn :: Prelude.Maybe Prelude.Text,
+    -- | The subnet ID to place the instance used to customize your Amazon EC2
+    -- AMI in.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The terminate instance on failure setting of the infrastructure
+    -- configuration. Set to false if you want Image Builder to retain the
+    -- instance used to configure your AMI if the build or test phase of your
+    -- workflow fails.
+    terminateInstanceOnFailure :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+    -- you want to update.
+    infrastructureConfigurationArn :: Prelude.Text,
+    -- | The instance profile to associate with the instance used to customize
+    -- your Amazon EC2 AMI.
+    instanceProfileName :: Prelude.Text,
+    -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateInfrastructureConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateInfrastructureConfiguration_description' - The description of the infrastructure configuration.
+--
+-- 'instanceMetadataOptions', 'updateInfrastructureConfiguration_instanceMetadataOptions' - The instance metadata options that you can set for the HTTP requests
+-- that pipeline builds use to launch EC2 build and test instances. For
+-- more information about instance metadata options, see one of the
+-- following links:
+--
+-- -   <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html Configure the instance metadata options>
+--     in the //Amazon EC2 User Guide// for Linux instances.
+--
+-- -   <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/configuring-instance-metadata-options.html Configure the instance metadata options>
+--     in the //Amazon EC2 Windows Guide// for Windows instances.
+--
+-- 'instanceTypes', 'updateInfrastructureConfiguration_instanceTypes' - The instance types of the infrastructure configuration. You can specify
+-- one or more instance types to use for this build. The service will pick
+-- one of these instance types based on availability.
+--
+-- 'keyPair', 'updateInfrastructureConfiguration_keyPair' - The key pair of the infrastructure configuration. You can use this to
+-- log on to and debug the instance used to create your image.
+--
+-- 'logging', 'updateInfrastructureConfiguration_logging' - The logging configuration of the infrastructure configuration.
+--
+-- 'resourceTags', 'updateInfrastructureConfiguration_resourceTags' - The tags attached to the resource created by Image Builder.
+--
+-- 'securityGroupIds', 'updateInfrastructureConfiguration_securityGroupIds' - The security group IDs to associate with the instance used to customize
+-- your Amazon EC2 AMI.
+--
+-- 'snsTopicArn', 'updateInfrastructureConfiguration_snsTopicArn' - The Amazon Resource Name (ARN) for the SNS topic to which we send image
+-- build event notifications.
+--
+-- EC2 Image Builder is unable to send notifications to SNS topics that are
+-- encrypted using keys from other accounts. The key that is used to
+-- encrypt the SNS topic must reside in the account that the Image Builder
+-- service runs under.
+--
+-- 'subnetId', 'updateInfrastructureConfiguration_subnetId' - The subnet ID to place the instance used to customize your Amazon EC2
+-- AMI in.
+--
+-- 'terminateInstanceOnFailure', 'updateInfrastructureConfiguration_terminateInstanceOnFailure' - The terminate instance on failure setting of the infrastructure
+-- configuration. Set to false if you want Image Builder to retain the
+-- instance used to configure your AMI if the build or test phase of your
+-- workflow fails.
+--
+-- 'infrastructureConfigurationArn', 'updateInfrastructureConfiguration_infrastructureConfigurationArn' - The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- you want to update.
+--
+-- 'instanceProfileName', 'updateInfrastructureConfiguration_instanceProfileName' - The instance profile to associate with the instance used to customize
+-- your Amazon EC2 AMI.
+--
+-- 'clientToken', 'updateInfrastructureConfiguration_clientToken' - The idempotency token used to make this request idempotent.
+newUpdateInfrastructureConfiguration ::
+  -- | 'infrastructureConfigurationArn'
+  Prelude.Text ->
+  -- | 'instanceProfileName'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  UpdateInfrastructureConfiguration
+newUpdateInfrastructureConfiguration
+  pInfrastructureConfigurationArn_
+  pInstanceProfileName_
+  pClientToken_ =
+    UpdateInfrastructureConfiguration'
+      { description =
+          Prelude.Nothing,
+        instanceMetadataOptions =
+          Prelude.Nothing,
+        instanceTypes = Prelude.Nothing,
+        keyPair = Prelude.Nothing,
+        logging = Prelude.Nothing,
+        resourceTags = Prelude.Nothing,
+        securityGroupIds = Prelude.Nothing,
+        snsTopicArn = Prelude.Nothing,
+        subnetId = Prelude.Nothing,
+        terminateInstanceOnFailure =
+          Prelude.Nothing,
+        infrastructureConfigurationArn =
+          pInfrastructureConfigurationArn_,
+        instanceProfileName =
+          pInstanceProfileName_,
+        clientToken = pClientToken_
+      }
+
+-- | The description of the infrastructure configuration.
+updateInfrastructureConfiguration_description :: Lens.Lens' UpdateInfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+updateInfrastructureConfiguration_description = Lens.lens (\UpdateInfrastructureConfiguration' {description} -> description) (\s@UpdateInfrastructureConfiguration' {} a -> s {description = a} :: UpdateInfrastructureConfiguration)
+
+-- | The instance metadata options that you can set for the HTTP requests
+-- that pipeline builds use to launch EC2 build and test instances. For
+-- more information about instance metadata options, see one of the
+-- following links:
+--
+-- -   <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html Configure the instance metadata options>
+--     in the //Amazon EC2 User Guide// for Linux instances.
+--
+-- -   <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/configuring-instance-metadata-options.html Configure the instance metadata options>
+--     in the //Amazon EC2 Windows Guide// for Windows instances.
+updateInfrastructureConfiguration_instanceMetadataOptions :: Lens.Lens' UpdateInfrastructureConfiguration (Prelude.Maybe InstanceMetadataOptions)
+updateInfrastructureConfiguration_instanceMetadataOptions = Lens.lens (\UpdateInfrastructureConfiguration' {instanceMetadataOptions} -> instanceMetadataOptions) (\s@UpdateInfrastructureConfiguration' {} a -> s {instanceMetadataOptions = a} :: UpdateInfrastructureConfiguration)
+
+-- | The instance types of the infrastructure configuration. You can specify
+-- one or more instance types to use for this build. The service will pick
+-- one of these instance types based on availability.
+updateInfrastructureConfiguration_instanceTypes :: Lens.Lens' UpdateInfrastructureConfiguration (Prelude.Maybe [Prelude.Text])
+updateInfrastructureConfiguration_instanceTypes = Lens.lens (\UpdateInfrastructureConfiguration' {instanceTypes} -> instanceTypes) (\s@UpdateInfrastructureConfiguration' {} a -> s {instanceTypes = a} :: UpdateInfrastructureConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The key pair of the infrastructure configuration. You can use this to
+-- log on to and debug the instance used to create your image.
+updateInfrastructureConfiguration_keyPair :: Lens.Lens' UpdateInfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+updateInfrastructureConfiguration_keyPair = Lens.lens (\UpdateInfrastructureConfiguration' {keyPair} -> keyPair) (\s@UpdateInfrastructureConfiguration' {} a -> s {keyPair = a} :: UpdateInfrastructureConfiguration)
+
+-- | The logging configuration of the infrastructure configuration.
+updateInfrastructureConfiguration_logging :: Lens.Lens' UpdateInfrastructureConfiguration (Prelude.Maybe Logging)
+updateInfrastructureConfiguration_logging = Lens.lens (\UpdateInfrastructureConfiguration' {logging} -> logging) (\s@UpdateInfrastructureConfiguration' {} a -> s {logging = a} :: UpdateInfrastructureConfiguration)
+
+-- | The tags attached to the resource created by Image Builder.
+updateInfrastructureConfiguration_resourceTags :: Lens.Lens' UpdateInfrastructureConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateInfrastructureConfiguration_resourceTags = Lens.lens (\UpdateInfrastructureConfiguration' {resourceTags} -> resourceTags) (\s@UpdateInfrastructureConfiguration' {} a -> s {resourceTags = a} :: UpdateInfrastructureConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The security group IDs to associate with the instance used to customize
+-- your Amazon EC2 AMI.
+updateInfrastructureConfiguration_securityGroupIds :: Lens.Lens' UpdateInfrastructureConfiguration (Prelude.Maybe [Prelude.Text])
+updateInfrastructureConfiguration_securityGroupIds = Lens.lens (\UpdateInfrastructureConfiguration' {securityGroupIds} -> securityGroupIds) (\s@UpdateInfrastructureConfiguration' {} a -> s {securityGroupIds = a} :: UpdateInfrastructureConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) for the SNS topic to which we send image
+-- build event notifications.
+--
+-- EC2 Image Builder is unable to send notifications to SNS topics that are
+-- encrypted using keys from other accounts. The key that is used to
+-- encrypt the SNS topic must reside in the account that the Image Builder
+-- service runs under.
+updateInfrastructureConfiguration_snsTopicArn :: Lens.Lens' UpdateInfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+updateInfrastructureConfiguration_snsTopicArn = Lens.lens (\UpdateInfrastructureConfiguration' {snsTopicArn} -> snsTopicArn) (\s@UpdateInfrastructureConfiguration' {} a -> s {snsTopicArn = a} :: UpdateInfrastructureConfiguration)
+
+-- | The subnet ID to place the instance used to customize your Amazon EC2
+-- AMI in.
+updateInfrastructureConfiguration_subnetId :: Lens.Lens' UpdateInfrastructureConfiguration (Prelude.Maybe Prelude.Text)
+updateInfrastructureConfiguration_subnetId = Lens.lens (\UpdateInfrastructureConfiguration' {subnetId} -> subnetId) (\s@UpdateInfrastructureConfiguration' {} a -> s {subnetId = a} :: UpdateInfrastructureConfiguration)
+
+-- | The terminate instance on failure setting of the infrastructure
+-- configuration. Set to false if you want Image Builder to retain the
+-- instance used to configure your AMI if the build or test phase of your
+-- workflow fails.
+updateInfrastructureConfiguration_terminateInstanceOnFailure :: Lens.Lens' UpdateInfrastructureConfiguration (Prelude.Maybe Prelude.Bool)
+updateInfrastructureConfiguration_terminateInstanceOnFailure = Lens.lens (\UpdateInfrastructureConfiguration' {terminateInstanceOnFailure} -> terminateInstanceOnFailure) (\s@UpdateInfrastructureConfiguration' {} a -> s {terminateInstanceOnFailure = a} :: UpdateInfrastructureConfiguration)
+
+-- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- you want to update.
+updateInfrastructureConfiguration_infrastructureConfigurationArn :: Lens.Lens' UpdateInfrastructureConfiguration Prelude.Text
+updateInfrastructureConfiguration_infrastructureConfigurationArn = Lens.lens (\UpdateInfrastructureConfiguration' {infrastructureConfigurationArn} -> infrastructureConfigurationArn) (\s@UpdateInfrastructureConfiguration' {} a -> s {infrastructureConfigurationArn = a} :: UpdateInfrastructureConfiguration)
+
+-- | The instance profile to associate with the instance used to customize
+-- your Amazon EC2 AMI.
+updateInfrastructureConfiguration_instanceProfileName :: Lens.Lens' UpdateInfrastructureConfiguration Prelude.Text
+updateInfrastructureConfiguration_instanceProfileName = Lens.lens (\UpdateInfrastructureConfiguration' {instanceProfileName} -> instanceProfileName) (\s@UpdateInfrastructureConfiguration' {} a -> s {instanceProfileName = a} :: UpdateInfrastructureConfiguration)
+
+-- | The idempotency token used to make this request idempotent.
+updateInfrastructureConfiguration_clientToken :: Lens.Lens' UpdateInfrastructureConfiguration Prelude.Text
+updateInfrastructureConfiguration_clientToken = Lens.lens (\UpdateInfrastructureConfiguration' {clientToken} -> clientToken) (\s@UpdateInfrastructureConfiguration' {} a -> s {clientToken = a} :: UpdateInfrastructureConfiguration)
+
+instance
+  Core.AWSRequest
+    UpdateInfrastructureConfiguration
+  where
+  type
+    AWSResponse UpdateInfrastructureConfiguration =
+      UpdateInfrastructureConfigurationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateInfrastructureConfigurationResponse'
+            Prelude.<$> (x Data..?> "clientToken")
+            Prelude.<*> (x Data..?> "infrastructureConfigurationArn")
+            Prelude.<*> (x Data..?> "requestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateInfrastructureConfiguration
+  where
+  hashWithSalt
+    _salt
+    UpdateInfrastructureConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` instanceMetadataOptions
+        `Prelude.hashWithSalt` instanceTypes
+        `Prelude.hashWithSalt` keyPair
+        `Prelude.hashWithSalt` logging
+        `Prelude.hashWithSalt` resourceTags
+        `Prelude.hashWithSalt` securityGroupIds
+        `Prelude.hashWithSalt` snsTopicArn
+        `Prelude.hashWithSalt` subnetId
+        `Prelude.hashWithSalt` terminateInstanceOnFailure
+        `Prelude.hashWithSalt` infrastructureConfigurationArn
+        `Prelude.hashWithSalt` instanceProfileName
+        `Prelude.hashWithSalt` clientToken
+
+instance
+  Prelude.NFData
+    UpdateInfrastructureConfiguration
+  where
+  rnf UpdateInfrastructureConfiguration' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf instanceMetadataOptions
+      `Prelude.seq` Prelude.rnf instanceTypes
+      `Prelude.seq` Prelude.rnf keyPair
+      `Prelude.seq` Prelude.rnf logging
+      `Prelude.seq` Prelude.rnf resourceTags
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf snsTopicArn
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf terminateInstanceOnFailure
+      `Prelude.seq` Prelude.rnf infrastructureConfigurationArn
+      `Prelude.seq` Prelude.rnf instanceProfileName
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance
+  Data.ToHeaders
+    UpdateInfrastructureConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    UpdateInfrastructureConfiguration
+  where
+  toJSON UpdateInfrastructureConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("instanceMetadataOptions" Data..=)
+              Prelude.<$> instanceMetadataOptions,
+            ("instanceTypes" Data..=) Prelude.<$> instanceTypes,
+            ("keyPair" Data..=) Prelude.<$> keyPair,
+            ("logging" Data..=) Prelude.<$> logging,
+            ("resourceTags" Data..=) Prelude.<$> resourceTags,
+            ("securityGroupIds" Data..=)
+              Prelude.<$> securityGroupIds,
+            ("snsTopicArn" Data..=) Prelude.<$> snsTopicArn,
+            ("subnetId" Data..=) Prelude.<$> subnetId,
+            ("terminateInstanceOnFailure" Data..=)
+              Prelude.<$> terminateInstanceOnFailure,
+            Prelude.Just
+              ( "infrastructureConfigurationArn"
+                  Data..= infrastructureConfigurationArn
+              ),
+            Prelude.Just
+              ("instanceProfileName" Data..= instanceProfileName),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance
+  Data.ToPath
+    UpdateInfrastructureConfiguration
+  where
+  toPath =
+    Prelude.const "/UpdateInfrastructureConfiguration"
+
+instance
+  Data.ToQuery
+    UpdateInfrastructureConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateInfrastructureConfigurationResponse' smart constructor.
+data UpdateInfrastructureConfigurationResponse = UpdateInfrastructureConfigurationResponse'
+  { -- | The idempotency token used to make this request idempotent.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+    -- was updated by this request.
+    infrastructureConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The request ID that uniquely identifies this request.
+    requestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateInfrastructureConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'updateInfrastructureConfigurationResponse_clientToken' - The idempotency token used to make this request idempotent.
+--
+-- 'infrastructureConfigurationArn', 'updateInfrastructureConfigurationResponse_infrastructureConfigurationArn' - The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- was updated by this request.
+--
+-- 'requestId', 'updateInfrastructureConfigurationResponse_requestId' - The request ID that uniquely identifies this request.
+--
+-- 'httpStatus', 'updateInfrastructureConfigurationResponse_httpStatus' - The response's http status code.
+newUpdateInfrastructureConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateInfrastructureConfigurationResponse
+newUpdateInfrastructureConfigurationResponse
+  pHttpStatus_ =
+    UpdateInfrastructureConfigurationResponse'
+      { clientToken =
+          Prelude.Nothing,
+        infrastructureConfigurationArn =
+          Prelude.Nothing,
+        requestId = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The idempotency token used to make this request idempotent.
+updateInfrastructureConfigurationResponse_clientToken :: Lens.Lens' UpdateInfrastructureConfigurationResponse (Prelude.Maybe Prelude.Text)
+updateInfrastructureConfigurationResponse_clientToken = Lens.lens (\UpdateInfrastructureConfigurationResponse' {clientToken} -> clientToken) (\s@UpdateInfrastructureConfigurationResponse' {} a -> s {clientToken = a} :: UpdateInfrastructureConfigurationResponse)
+
+-- | The Amazon Resource Name (ARN) of the infrastructure configuration that
+-- was updated by this request.
+updateInfrastructureConfigurationResponse_infrastructureConfigurationArn :: Lens.Lens' UpdateInfrastructureConfigurationResponse (Prelude.Maybe Prelude.Text)
+updateInfrastructureConfigurationResponse_infrastructureConfigurationArn = Lens.lens (\UpdateInfrastructureConfigurationResponse' {infrastructureConfigurationArn} -> infrastructureConfigurationArn) (\s@UpdateInfrastructureConfigurationResponse' {} a -> s {infrastructureConfigurationArn = a} :: UpdateInfrastructureConfigurationResponse)
+
+-- | The request ID that uniquely identifies this request.
+updateInfrastructureConfigurationResponse_requestId :: Lens.Lens' UpdateInfrastructureConfigurationResponse (Prelude.Maybe Prelude.Text)
+updateInfrastructureConfigurationResponse_requestId = Lens.lens (\UpdateInfrastructureConfigurationResponse' {requestId} -> requestId) (\s@UpdateInfrastructureConfigurationResponse' {} a -> s {requestId = a} :: UpdateInfrastructureConfigurationResponse)
+
+-- | The response's http status code.
+updateInfrastructureConfigurationResponse_httpStatus :: Lens.Lens' UpdateInfrastructureConfigurationResponse Prelude.Int
+updateInfrastructureConfigurationResponse_httpStatus = Lens.lens (\UpdateInfrastructureConfigurationResponse' {httpStatus} -> httpStatus) (\s@UpdateInfrastructureConfigurationResponse' {} a -> s {httpStatus = a} :: UpdateInfrastructureConfigurationResponse)
+
+instance
+  Prelude.NFData
+    UpdateInfrastructureConfigurationResponse
+  where
+  rnf UpdateInfrastructureConfigurationResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf infrastructureConfigurationArn
+      `Prelude.seq` Prelude.rnf requestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ImageBuilder/Waiters.hs b/gen/Amazonka/ImageBuilder/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ImageBuilder/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.ImageBuilder.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.ImageBuilder.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ImageBuilder.Lens
+import Amazonka.ImageBuilder.Types
+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.ImageBuilder
+import Test.Amazonka.ImageBuilder.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "ImageBuilder"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/ImageBuilder.hs b/test/Test/Amazonka/Gen/ImageBuilder.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/ImageBuilder.hs
@@ -0,0 +1,1038 @@
+{-# 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.ImageBuilder
+-- Copyright   : (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.ImageBuilder where
+
+import Amazonka.ImageBuilder
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.ImageBuilder.Internal
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestCancelImageCreation $
+--             newCancelImageCreation
+--
+--         , requestCreateComponent $
+--             newCreateComponent
+--
+--         , requestCreateContainerRecipe $
+--             newCreateContainerRecipe
+--
+--         , requestCreateDistributionConfiguration $
+--             newCreateDistributionConfiguration
+--
+--         , requestCreateImage $
+--             newCreateImage
+--
+--         , requestCreateImagePipeline $
+--             newCreateImagePipeline
+--
+--         , requestCreateImageRecipe $
+--             newCreateImageRecipe
+--
+--         , requestCreateInfrastructureConfiguration $
+--             newCreateInfrastructureConfiguration
+--
+--         , requestDeleteComponent $
+--             newDeleteComponent
+--
+--         , requestDeleteContainerRecipe $
+--             newDeleteContainerRecipe
+--
+--         , requestDeleteDistributionConfiguration $
+--             newDeleteDistributionConfiguration
+--
+--         , requestDeleteImage $
+--             newDeleteImage
+--
+--         , requestDeleteImagePipeline $
+--             newDeleteImagePipeline
+--
+--         , requestDeleteImageRecipe $
+--             newDeleteImageRecipe
+--
+--         , requestDeleteInfrastructureConfiguration $
+--             newDeleteInfrastructureConfiguration
+--
+--         , requestGetComponent $
+--             newGetComponent
+--
+--         , requestGetComponentPolicy $
+--             newGetComponentPolicy
+--
+--         , requestGetContainerRecipe $
+--             newGetContainerRecipe
+--
+--         , requestGetContainerRecipePolicy $
+--             newGetContainerRecipePolicy
+--
+--         , requestGetDistributionConfiguration $
+--             newGetDistributionConfiguration
+--
+--         , requestGetImage $
+--             newGetImage
+--
+--         , requestGetImagePipeline $
+--             newGetImagePipeline
+--
+--         , requestGetImagePolicy $
+--             newGetImagePolicy
+--
+--         , requestGetImageRecipe $
+--             newGetImageRecipe
+--
+--         , requestGetImageRecipePolicy $
+--             newGetImageRecipePolicy
+--
+--         , requestGetInfrastructureConfiguration $
+--             newGetInfrastructureConfiguration
+--
+--         , requestImportComponent $
+--             newImportComponent
+--
+--         , requestImportVmImage $
+--             newImportVmImage
+--
+--         , requestListComponentBuildVersions $
+--             newListComponentBuildVersions
+--
+--         , requestListComponents $
+--             newListComponents
+--
+--         , requestListContainerRecipes $
+--             newListContainerRecipes
+--
+--         , requestListDistributionConfigurations $
+--             newListDistributionConfigurations
+--
+--         , requestListImageBuildVersions $
+--             newListImageBuildVersions
+--
+--         , requestListImagePackages $
+--             newListImagePackages
+--
+--         , requestListImagePipelineImages $
+--             newListImagePipelineImages
+--
+--         , requestListImagePipelines $
+--             newListImagePipelines
+--
+--         , requestListImageRecipes $
+--             newListImageRecipes
+--
+--         , requestListImages $
+--             newListImages
+--
+--         , requestListInfrastructureConfigurations $
+--             newListInfrastructureConfigurations
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPutComponentPolicy $
+--             newPutComponentPolicy
+--
+--         , requestPutContainerRecipePolicy $
+--             newPutContainerRecipePolicy
+--
+--         , requestPutImagePolicy $
+--             newPutImagePolicy
+--
+--         , requestPutImageRecipePolicy $
+--             newPutImageRecipePolicy
+--
+--         , requestStartImagePipelineExecution $
+--             newStartImagePipelineExecution
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateDistributionConfiguration $
+--             newUpdateDistributionConfiguration
+--
+--         , requestUpdateImagePipeline $
+--             newUpdateImagePipeline
+--
+--         , requestUpdateInfrastructureConfiguration $
+--             newUpdateInfrastructureConfiguration
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCancelImageCreation $
+--             newCancelImageCreationResponse
+--
+--         , responseCreateComponent $
+--             newCreateComponentResponse
+--
+--         , responseCreateContainerRecipe $
+--             newCreateContainerRecipeResponse
+--
+--         , responseCreateDistributionConfiguration $
+--             newCreateDistributionConfigurationResponse
+--
+--         , responseCreateImage $
+--             newCreateImageResponse
+--
+--         , responseCreateImagePipeline $
+--             newCreateImagePipelineResponse
+--
+--         , responseCreateImageRecipe $
+--             newCreateImageRecipeResponse
+--
+--         , responseCreateInfrastructureConfiguration $
+--             newCreateInfrastructureConfigurationResponse
+--
+--         , responseDeleteComponent $
+--             newDeleteComponentResponse
+--
+--         , responseDeleteContainerRecipe $
+--             newDeleteContainerRecipeResponse
+--
+--         , responseDeleteDistributionConfiguration $
+--             newDeleteDistributionConfigurationResponse
+--
+--         , responseDeleteImage $
+--             newDeleteImageResponse
+--
+--         , responseDeleteImagePipeline $
+--             newDeleteImagePipelineResponse
+--
+--         , responseDeleteImageRecipe $
+--             newDeleteImageRecipeResponse
+--
+--         , responseDeleteInfrastructureConfiguration $
+--             newDeleteInfrastructureConfigurationResponse
+--
+--         , responseGetComponent $
+--             newGetComponentResponse
+--
+--         , responseGetComponentPolicy $
+--             newGetComponentPolicyResponse
+--
+--         , responseGetContainerRecipe $
+--             newGetContainerRecipeResponse
+--
+--         , responseGetContainerRecipePolicy $
+--             newGetContainerRecipePolicyResponse
+--
+--         , responseGetDistributionConfiguration $
+--             newGetDistributionConfigurationResponse
+--
+--         , responseGetImage $
+--             newGetImageResponse
+--
+--         , responseGetImagePipeline $
+--             newGetImagePipelineResponse
+--
+--         , responseGetImagePolicy $
+--             newGetImagePolicyResponse
+--
+--         , responseGetImageRecipe $
+--             newGetImageRecipeResponse
+--
+--         , responseGetImageRecipePolicy $
+--             newGetImageRecipePolicyResponse
+--
+--         , responseGetInfrastructureConfiguration $
+--             newGetInfrastructureConfigurationResponse
+--
+--         , responseImportComponent $
+--             newImportComponentResponse
+--
+--         , responseImportVmImage $
+--             newImportVmImageResponse
+--
+--         , responseListComponentBuildVersions $
+--             newListComponentBuildVersionsResponse
+--
+--         , responseListComponents $
+--             newListComponentsResponse
+--
+--         , responseListContainerRecipes $
+--             newListContainerRecipesResponse
+--
+--         , responseListDistributionConfigurations $
+--             newListDistributionConfigurationsResponse
+--
+--         , responseListImageBuildVersions $
+--             newListImageBuildVersionsResponse
+--
+--         , responseListImagePackages $
+--             newListImagePackagesResponse
+--
+--         , responseListImagePipelineImages $
+--             newListImagePipelineImagesResponse
+--
+--         , responseListImagePipelines $
+--             newListImagePipelinesResponse
+--
+--         , responseListImageRecipes $
+--             newListImageRecipesResponse
+--
+--         , responseListImages $
+--             newListImagesResponse
+--
+--         , responseListInfrastructureConfigurations $
+--             newListInfrastructureConfigurationsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePutComponentPolicy $
+--             newPutComponentPolicyResponse
+--
+--         , responsePutContainerRecipePolicy $
+--             newPutContainerRecipePolicyResponse
+--
+--         , responsePutImagePolicy $
+--             newPutImagePolicyResponse
+--
+--         , responsePutImageRecipePolicy $
+--             newPutImageRecipePolicyResponse
+--
+--         , responseStartImagePipelineExecution $
+--             newStartImagePipelineExecutionResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateDistributionConfiguration $
+--             newUpdateDistributionConfigurationResponse
+--
+--         , responseUpdateImagePipeline $
+--             newUpdateImagePipelineResponse
+--
+--         , responseUpdateInfrastructureConfiguration $
+--             newUpdateInfrastructureConfigurationResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCancelImageCreation :: CancelImageCreation -> TestTree
+requestCancelImageCreation =
+  req
+    "CancelImageCreation"
+    "fixture/CancelImageCreation.yaml"
+
+requestCreateComponent :: CreateComponent -> TestTree
+requestCreateComponent =
+  req
+    "CreateComponent"
+    "fixture/CreateComponent.yaml"
+
+requestCreateContainerRecipe :: CreateContainerRecipe -> TestTree
+requestCreateContainerRecipe =
+  req
+    "CreateContainerRecipe"
+    "fixture/CreateContainerRecipe.yaml"
+
+requestCreateDistributionConfiguration :: CreateDistributionConfiguration -> TestTree
+requestCreateDistributionConfiguration =
+  req
+    "CreateDistributionConfiguration"
+    "fixture/CreateDistributionConfiguration.yaml"
+
+requestCreateImage :: CreateImage -> TestTree
+requestCreateImage =
+  req
+    "CreateImage"
+    "fixture/CreateImage.yaml"
+
+requestCreateImagePipeline :: CreateImagePipeline -> TestTree
+requestCreateImagePipeline =
+  req
+    "CreateImagePipeline"
+    "fixture/CreateImagePipeline.yaml"
+
+requestCreateImageRecipe :: CreateImageRecipe -> TestTree
+requestCreateImageRecipe =
+  req
+    "CreateImageRecipe"
+    "fixture/CreateImageRecipe.yaml"
+
+requestCreateInfrastructureConfiguration :: CreateInfrastructureConfiguration -> TestTree
+requestCreateInfrastructureConfiguration =
+  req
+    "CreateInfrastructureConfiguration"
+    "fixture/CreateInfrastructureConfiguration.yaml"
+
+requestDeleteComponent :: DeleteComponent -> TestTree
+requestDeleteComponent =
+  req
+    "DeleteComponent"
+    "fixture/DeleteComponent.yaml"
+
+requestDeleteContainerRecipe :: DeleteContainerRecipe -> TestTree
+requestDeleteContainerRecipe =
+  req
+    "DeleteContainerRecipe"
+    "fixture/DeleteContainerRecipe.yaml"
+
+requestDeleteDistributionConfiguration :: DeleteDistributionConfiguration -> TestTree
+requestDeleteDistributionConfiguration =
+  req
+    "DeleteDistributionConfiguration"
+    "fixture/DeleteDistributionConfiguration.yaml"
+
+requestDeleteImage :: DeleteImage -> TestTree
+requestDeleteImage =
+  req
+    "DeleteImage"
+    "fixture/DeleteImage.yaml"
+
+requestDeleteImagePipeline :: DeleteImagePipeline -> TestTree
+requestDeleteImagePipeline =
+  req
+    "DeleteImagePipeline"
+    "fixture/DeleteImagePipeline.yaml"
+
+requestDeleteImageRecipe :: DeleteImageRecipe -> TestTree
+requestDeleteImageRecipe =
+  req
+    "DeleteImageRecipe"
+    "fixture/DeleteImageRecipe.yaml"
+
+requestDeleteInfrastructureConfiguration :: DeleteInfrastructureConfiguration -> TestTree
+requestDeleteInfrastructureConfiguration =
+  req
+    "DeleteInfrastructureConfiguration"
+    "fixture/DeleteInfrastructureConfiguration.yaml"
+
+requestGetComponent :: GetComponent -> TestTree
+requestGetComponent =
+  req
+    "GetComponent"
+    "fixture/GetComponent.yaml"
+
+requestGetComponentPolicy :: GetComponentPolicy -> TestTree
+requestGetComponentPolicy =
+  req
+    "GetComponentPolicy"
+    "fixture/GetComponentPolicy.yaml"
+
+requestGetContainerRecipe :: GetContainerRecipe -> TestTree
+requestGetContainerRecipe =
+  req
+    "GetContainerRecipe"
+    "fixture/GetContainerRecipe.yaml"
+
+requestGetContainerRecipePolicy :: GetContainerRecipePolicy -> TestTree
+requestGetContainerRecipePolicy =
+  req
+    "GetContainerRecipePolicy"
+    "fixture/GetContainerRecipePolicy.yaml"
+
+requestGetDistributionConfiguration :: GetDistributionConfiguration -> TestTree
+requestGetDistributionConfiguration =
+  req
+    "GetDistributionConfiguration"
+    "fixture/GetDistributionConfiguration.yaml"
+
+requestGetImage :: GetImage -> TestTree
+requestGetImage =
+  req
+    "GetImage"
+    "fixture/GetImage.yaml"
+
+requestGetImagePipeline :: GetImagePipeline -> TestTree
+requestGetImagePipeline =
+  req
+    "GetImagePipeline"
+    "fixture/GetImagePipeline.yaml"
+
+requestGetImagePolicy :: GetImagePolicy -> TestTree
+requestGetImagePolicy =
+  req
+    "GetImagePolicy"
+    "fixture/GetImagePolicy.yaml"
+
+requestGetImageRecipe :: GetImageRecipe -> TestTree
+requestGetImageRecipe =
+  req
+    "GetImageRecipe"
+    "fixture/GetImageRecipe.yaml"
+
+requestGetImageRecipePolicy :: GetImageRecipePolicy -> TestTree
+requestGetImageRecipePolicy =
+  req
+    "GetImageRecipePolicy"
+    "fixture/GetImageRecipePolicy.yaml"
+
+requestGetInfrastructureConfiguration :: GetInfrastructureConfiguration -> TestTree
+requestGetInfrastructureConfiguration =
+  req
+    "GetInfrastructureConfiguration"
+    "fixture/GetInfrastructureConfiguration.yaml"
+
+requestImportComponent :: ImportComponent -> TestTree
+requestImportComponent =
+  req
+    "ImportComponent"
+    "fixture/ImportComponent.yaml"
+
+requestImportVmImage :: ImportVmImage -> TestTree
+requestImportVmImage =
+  req
+    "ImportVmImage"
+    "fixture/ImportVmImage.yaml"
+
+requestListComponentBuildVersions :: ListComponentBuildVersions -> TestTree
+requestListComponentBuildVersions =
+  req
+    "ListComponentBuildVersions"
+    "fixture/ListComponentBuildVersions.yaml"
+
+requestListComponents :: ListComponents -> TestTree
+requestListComponents =
+  req
+    "ListComponents"
+    "fixture/ListComponents.yaml"
+
+requestListContainerRecipes :: ListContainerRecipes -> TestTree
+requestListContainerRecipes =
+  req
+    "ListContainerRecipes"
+    "fixture/ListContainerRecipes.yaml"
+
+requestListDistributionConfigurations :: ListDistributionConfigurations -> TestTree
+requestListDistributionConfigurations =
+  req
+    "ListDistributionConfigurations"
+    "fixture/ListDistributionConfigurations.yaml"
+
+requestListImageBuildVersions :: ListImageBuildVersions -> TestTree
+requestListImageBuildVersions =
+  req
+    "ListImageBuildVersions"
+    "fixture/ListImageBuildVersions.yaml"
+
+requestListImagePackages :: ListImagePackages -> TestTree
+requestListImagePackages =
+  req
+    "ListImagePackages"
+    "fixture/ListImagePackages.yaml"
+
+requestListImagePipelineImages :: ListImagePipelineImages -> TestTree
+requestListImagePipelineImages =
+  req
+    "ListImagePipelineImages"
+    "fixture/ListImagePipelineImages.yaml"
+
+requestListImagePipelines :: ListImagePipelines -> TestTree
+requestListImagePipelines =
+  req
+    "ListImagePipelines"
+    "fixture/ListImagePipelines.yaml"
+
+requestListImageRecipes :: ListImageRecipes -> TestTree
+requestListImageRecipes =
+  req
+    "ListImageRecipes"
+    "fixture/ListImageRecipes.yaml"
+
+requestListImages :: ListImages -> TestTree
+requestListImages =
+  req
+    "ListImages"
+    "fixture/ListImages.yaml"
+
+requestListInfrastructureConfigurations :: ListInfrastructureConfigurations -> TestTree
+requestListInfrastructureConfigurations =
+  req
+    "ListInfrastructureConfigurations"
+    "fixture/ListInfrastructureConfigurations.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPutComponentPolicy :: PutComponentPolicy -> TestTree
+requestPutComponentPolicy =
+  req
+    "PutComponentPolicy"
+    "fixture/PutComponentPolicy.yaml"
+
+requestPutContainerRecipePolicy :: PutContainerRecipePolicy -> TestTree
+requestPutContainerRecipePolicy =
+  req
+    "PutContainerRecipePolicy"
+    "fixture/PutContainerRecipePolicy.yaml"
+
+requestPutImagePolicy :: PutImagePolicy -> TestTree
+requestPutImagePolicy =
+  req
+    "PutImagePolicy"
+    "fixture/PutImagePolicy.yaml"
+
+requestPutImageRecipePolicy :: PutImageRecipePolicy -> TestTree
+requestPutImageRecipePolicy =
+  req
+    "PutImageRecipePolicy"
+    "fixture/PutImageRecipePolicy.yaml"
+
+requestStartImagePipelineExecution :: StartImagePipelineExecution -> TestTree
+requestStartImagePipelineExecution =
+  req
+    "StartImagePipelineExecution"
+    "fixture/StartImagePipelineExecution.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateDistributionConfiguration :: UpdateDistributionConfiguration -> TestTree
+requestUpdateDistributionConfiguration =
+  req
+    "UpdateDistributionConfiguration"
+    "fixture/UpdateDistributionConfiguration.yaml"
+
+requestUpdateImagePipeline :: UpdateImagePipeline -> TestTree
+requestUpdateImagePipeline =
+  req
+    "UpdateImagePipeline"
+    "fixture/UpdateImagePipeline.yaml"
+
+requestUpdateInfrastructureConfiguration :: UpdateInfrastructureConfiguration -> TestTree
+requestUpdateInfrastructureConfiguration =
+  req
+    "UpdateInfrastructureConfiguration"
+    "fixture/UpdateInfrastructureConfiguration.yaml"
+
+-- Responses
+
+responseCancelImageCreation :: CancelImageCreationResponse -> TestTree
+responseCancelImageCreation =
+  res
+    "CancelImageCreationResponse"
+    "fixture/CancelImageCreationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelImageCreation)
+
+responseCreateComponent :: CreateComponentResponse -> TestTree
+responseCreateComponent =
+  res
+    "CreateComponentResponse"
+    "fixture/CreateComponentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateComponent)
+
+responseCreateContainerRecipe :: CreateContainerRecipeResponse -> TestTree
+responseCreateContainerRecipe =
+  res
+    "CreateContainerRecipeResponse"
+    "fixture/CreateContainerRecipeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateContainerRecipe)
+
+responseCreateDistributionConfiguration :: CreateDistributionConfigurationResponse -> TestTree
+responseCreateDistributionConfiguration =
+  res
+    "CreateDistributionConfigurationResponse"
+    "fixture/CreateDistributionConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDistributionConfiguration)
+
+responseCreateImage :: CreateImageResponse -> TestTree
+responseCreateImage =
+  res
+    "CreateImageResponse"
+    "fixture/CreateImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateImage)
+
+responseCreateImagePipeline :: CreateImagePipelineResponse -> TestTree
+responseCreateImagePipeline =
+  res
+    "CreateImagePipelineResponse"
+    "fixture/CreateImagePipelineResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateImagePipeline)
+
+responseCreateImageRecipe :: CreateImageRecipeResponse -> TestTree
+responseCreateImageRecipe =
+  res
+    "CreateImageRecipeResponse"
+    "fixture/CreateImageRecipeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateImageRecipe)
+
+responseCreateInfrastructureConfiguration :: CreateInfrastructureConfigurationResponse -> TestTree
+responseCreateInfrastructureConfiguration =
+  res
+    "CreateInfrastructureConfigurationResponse"
+    "fixture/CreateInfrastructureConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateInfrastructureConfiguration)
+
+responseDeleteComponent :: DeleteComponentResponse -> TestTree
+responseDeleteComponent =
+  res
+    "DeleteComponentResponse"
+    "fixture/DeleteComponentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteComponent)
+
+responseDeleteContainerRecipe :: DeleteContainerRecipeResponse -> TestTree
+responseDeleteContainerRecipe =
+  res
+    "DeleteContainerRecipeResponse"
+    "fixture/DeleteContainerRecipeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteContainerRecipe)
+
+responseDeleteDistributionConfiguration :: DeleteDistributionConfigurationResponse -> TestTree
+responseDeleteDistributionConfiguration =
+  res
+    "DeleteDistributionConfigurationResponse"
+    "fixture/DeleteDistributionConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDistributionConfiguration)
+
+responseDeleteImage :: DeleteImageResponse -> TestTree
+responseDeleteImage =
+  res
+    "DeleteImageResponse"
+    "fixture/DeleteImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteImage)
+
+responseDeleteImagePipeline :: DeleteImagePipelineResponse -> TestTree
+responseDeleteImagePipeline =
+  res
+    "DeleteImagePipelineResponse"
+    "fixture/DeleteImagePipelineResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteImagePipeline)
+
+responseDeleteImageRecipe :: DeleteImageRecipeResponse -> TestTree
+responseDeleteImageRecipe =
+  res
+    "DeleteImageRecipeResponse"
+    "fixture/DeleteImageRecipeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteImageRecipe)
+
+responseDeleteInfrastructureConfiguration :: DeleteInfrastructureConfigurationResponse -> TestTree
+responseDeleteInfrastructureConfiguration =
+  res
+    "DeleteInfrastructureConfigurationResponse"
+    "fixture/DeleteInfrastructureConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteInfrastructureConfiguration)
+
+responseGetComponent :: GetComponentResponse -> TestTree
+responseGetComponent =
+  res
+    "GetComponentResponse"
+    "fixture/GetComponentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetComponent)
+
+responseGetComponentPolicy :: GetComponentPolicyResponse -> TestTree
+responseGetComponentPolicy =
+  res
+    "GetComponentPolicyResponse"
+    "fixture/GetComponentPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetComponentPolicy)
+
+responseGetContainerRecipe :: GetContainerRecipeResponse -> TestTree
+responseGetContainerRecipe =
+  res
+    "GetContainerRecipeResponse"
+    "fixture/GetContainerRecipeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetContainerRecipe)
+
+responseGetContainerRecipePolicy :: GetContainerRecipePolicyResponse -> TestTree
+responseGetContainerRecipePolicy =
+  res
+    "GetContainerRecipePolicyResponse"
+    "fixture/GetContainerRecipePolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetContainerRecipePolicy)
+
+responseGetDistributionConfiguration :: GetDistributionConfigurationResponse -> TestTree
+responseGetDistributionConfiguration =
+  res
+    "GetDistributionConfigurationResponse"
+    "fixture/GetDistributionConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDistributionConfiguration)
+
+responseGetImage :: GetImageResponse -> TestTree
+responseGetImage =
+  res
+    "GetImageResponse"
+    "fixture/GetImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetImage)
+
+responseGetImagePipeline :: GetImagePipelineResponse -> TestTree
+responseGetImagePipeline =
+  res
+    "GetImagePipelineResponse"
+    "fixture/GetImagePipelineResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetImagePipeline)
+
+responseGetImagePolicy :: GetImagePolicyResponse -> TestTree
+responseGetImagePolicy =
+  res
+    "GetImagePolicyResponse"
+    "fixture/GetImagePolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetImagePolicy)
+
+responseGetImageRecipe :: GetImageRecipeResponse -> TestTree
+responseGetImageRecipe =
+  res
+    "GetImageRecipeResponse"
+    "fixture/GetImageRecipeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetImageRecipe)
+
+responseGetImageRecipePolicy :: GetImageRecipePolicyResponse -> TestTree
+responseGetImageRecipePolicy =
+  res
+    "GetImageRecipePolicyResponse"
+    "fixture/GetImageRecipePolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetImageRecipePolicy)
+
+responseGetInfrastructureConfiguration :: GetInfrastructureConfigurationResponse -> TestTree
+responseGetInfrastructureConfiguration =
+  res
+    "GetInfrastructureConfigurationResponse"
+    "fixture/GetInfrastructureConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetInfrastructureConfiguration)
+
+responseImportComponent :: ImportComponentResponse -> TestTree
+responseImportComponent =
+  res
+    "ImportComponentResponse"
+    "fixture/ImportComponentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportComponent)
+
+responseImportVmImage :: ImportVmImageResponse -> TestTree
+responseImportVmImage =
+  res
+    "ImportVmImageResponse"
+    "fixture/ImportVmImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportVmImage)
+
+responseListComponentBuildVersions :: ListComponentBuildVersionsResponse -> TestTree
+responseListComponentBuildVersions =
+  res
+    "ListComponentBuildVersionsResponse"
+    "fixture/ListComponentBuildVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListComponentBuildVersions)
+
+responseListComponents :: ListComponentsResponse -> TestTree
+responseListComponents =
+  res
+    "ListComponentsResponse"
+    "fixture/ListComponentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListComponents)
+
+responseListContainerRecipes :: ListContainerRecipesResponse -> TestTree
+responseListContainerRecipes =
+  res
+    "ListContainerRecipesResponse"
+    "fixture/ListContainerRecipesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListContainerRecipes)
+
+responseListDistributionConfigurations :: ListDistributionConfigurationsResponse -> TestTree
+responseListDistributionConfigurations =
+  res
+    "ListDistributionConfigurationsResponse"
+    "fixture/ListDistributionConfigurationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDistributionConfigurations)
+
+responseListImageBuildVersions :: ListImageBuildVersionsResponse -> TestTree
+responseListImageBuildVersions =
+  res
+    "ListImageBuildVersionsResponse"
+    "fixture/ListImageBuildVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListImageBuildVersions)
+
+responseListImagePackages :: ListImagePackagesResponse -> TestTree
+responseListImagePackages =
+  res
+    "ListImagePackagesResponse"
+    "fixture/ListImagePackagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListImagePackages)
+
+responseListImagePipelineImages :: ListImagePipelineImagesResponse -> TestTree
+responseListImagePipelineImages =
+  res
+    "ListImagePipelineImagesResponse"
+    "fixture/ListImagePipelineImagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListImagePipelineImages)
+
+responseListImagePipelines :: ListImagePipelinesResponse -> TestTree
+responseListImagePipelines =
+  res
+    "ListImagePipelinesResponse"
+    "fixture/ListImagePipelinesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListImagePipelines)
+
+responseListImageRecipes :: ListImageRecipesResponse -> TestTree
+responseListImageRecipes =
+  res
+    "ListImageRecipesResponse"
+    "fixture/ListImageRecipesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListImageRecipes)
+
+responseListImages :: ListImagesResponse -> TestTree
+responseListImages =
+  res
+    "ListImagesResponse"
+    "fixture/ListImagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListImages)
+
+responseListInfrastructureConfigurations :: ListInfrastructureConfigurationsResponse -> TestTree
+responseListInfrastructureConfigurations =
+  res
+    "ListInfrastructureConfigurationsResponse"
+    "fixture/ListInfrastructureConfigurationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListInfrastructureConfigurations)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responsePutComponentPolicy :: PutComponentPolicyResponse -> TestTree
+responsePutComponentPolicy =
+  res
+    "PutComponentPolicyResponse"
+    "fixture/PutComponentPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutComponentPolicy)
+
+responsePutContainerRecipePolicy :: PutContainerRecipePolicyResponse -> TestTree
+responsePutContainerRecipePolicy =
+  res
+    "PutContainerRecipePolicyResponse"
+    "fixture/PutContainerRecipePolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutContainerRecipePolicy)
+
+responsePutImagePolicy :: PutImagePolicyResponse -> TestTree
+responsePutImagePolicy =
+  res
+    "PutImagePolicyResponse"
+    "fixture/PutImagePolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutImagePolicy)
+
+responsePutImageRecipePolicy :: PutImageRecipePolicyResponse -> TestTree
+responsePutImageRecipePolicy =
+  res
+    "PutImageRecipePolicyResponse"
+    "fixture/PutImageRecipePolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutImageRecipePolicy)
+
+responseStartImagePipelineExecution :: StartImagePipelineExecutionResponse -> TestTree
+responseStartImagePipelineExecution =
+  res
+    "StartImagePipelineExecutionResponse"
+    "fixture/StartImagePipelineExecutionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartImagePipelineExecution)
+
+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)
+
+responseUpdateDistributionConfiguration :: UpdateDistributionConfigurationResponse -> TestTree
+responseUpdateDistributionConfiguration =
+  res
+    "UpdateDistributionConfigurationResponse"
+    "fixture/UpdateDistributionConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDistributionConfiguration)
+
+responseUpdateImagePipeline :: UpdateImagePipelineResponse -> TestTree
+responseUpdateImagePipeline =
+  res
+    "UpdateImagePipelineResponse"
+    "fixture/UpdateImagePipelineResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateImagePipeline)
+
+responseUpdateInfrastructureConfiguration :: UpdateInfrastructureConfigurationResponse -> TestTree
+responseUpdateInfrastructureConfiguration =
+  res
+    "UpdateInfrastructureConfigurationResponse"
+    "fixture/UpdateInfrastructureConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateInfrastructureConfiguration)
diff --git a/test/Test/Amazonka/ImageBuilder.hs b/test/Test/Amazonka/ImageBuilder.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ImageBuilder.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.ImageBuilder
+-- Copyright   : (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.ImageBuilder
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/ImageBuilder/Internal.hs b/test/Test/Amazonka/ImageBuilder/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ImageBuilder/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.ImageBuilder.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.ImageBuilder.Internal where
