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 DataSync SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2018-11-09@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-datasync)
+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.DataSync](http://hackage.haskell.org/package/amazonka-datasync/docs/Amazonka-DataSync.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-datasync` 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-datasync.cabal b/amazonka-datasync.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-datasync.cabal
@@ -0,0 +1,180 @@
+cabal-version:      2.2
+name:               amazonka-datasync
+version:            2.0
+synopsis:           Amazon DataSync SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2018-11-09@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.DataSync.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.DataSync" 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-datasync
+
+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.DataSync
+    Amazonka.DataSync.CancelTaskExecution
+    Amazonka.DataSync.CreateAgent
+    Amazonka.DataSync.CreateLocationEfs
+    Amazonka.DataSync.CreateLocationFsxLustre
+    Amazonka.DataSync.CreateLocationFsxOntap
+    Amazonka.DataSync.CreateLocationFsxOpenZfs
+    Amazonka.DataSync.CreateLocationFsxWindows
+    Amazonka.DataSync.CreateLocationHdfs
+    Amazonka.DataSync.CreateLocationNfs
+    Amazonka.DataSync.CreateLocationObjectStorage
+    Amazonka.DataSync.CreateLocationS3
+    Amazonka.DataSync.CreateLocationSmb
+    Amazonka.DataSync.CreateTask
+    Amazonka.DataSync.DeleteAgent
+    Amazonka.DataSync.DeleteLocation
+    Amazonka.DataSync.DeleteTask
+    Amazonka.DataSync.DescribeAgent
+    Amazonka.DataSync.DescribeLocationEfs
+    Amazonka.DataSync.DescribeLocationFsxLustre
+    Amazonka.DataSync.DescribeLocationFsxOntap
+    Amazonka.DataSync.DescribeLocationFsxOpenZfs
+    Amazonka.DataSync.DescribeLocationFsxWindows
+    Amazonka.DataSync.DescribeLocationHdfs
+    Amazonka.DataSync.DescribeLocationNfs
+    Amazonka.DataSync.DescribeLocationObjectStorage
+    Amazonka.DataSync.DescribeLocationS3
+    Amazonka.DataSync.DescribeLocationSmb
+    Amazonka.DataSync.DescribeTask
+    Amazonka.DataSync.DescribeTaskExecution
+    Amazonka.DataSync.Lens
+    Amazonka.DataSync.ListAgents
+    Amazonka.DataSync.ListLocations
+    Amazonka.DataSync.ListTagsForResource
+    Amazonka.DataSync.ListTaskExecutions
+    Amazonka.DataSync.ListTasks
+    Amazonka.DataSync.StartTaskExecution
+    Amazonka.DataSync.TagResource
+    Amazonka.DataSync.Types
+    Amazonka.DataSync.Types.AgentListEntry
+    Amazonka.DataSync.Types.AgentStatus
+    Amazonka.DataSync.Types.Atime
+    Amazonka.DataSync.Types.Ec2Config
+    Amazonka.DataSync.Types.EfsInTransitEncryption
+    Amazonka.DataSync.Types.EndpointType
+    Amazonka.DataSync.Types.FilterRule
+    Amazonka.DataSync.Types.FilterType
+    Amazonka.DataSync.Types.FsxProtocol
+    Amazonka.DataSync.Types.FsxProtocolNfs
+    Amazonka.DataSync.Types.FsxProtocolSmb
+    Amazonka.DataSync.Types.Gid
+    Amazonka.DataSync.Types.HdfsAuthenticationType
+    Amazonka.DataSync.Types.HdfsDataTransferProtection
+    Amazonka.DataSync.Types.HdfsNameNode
+    Amazonka.DataSync.Types.HdfsRpcProtection
+    Amazonka.DataSync.Types.LocationFilter
+    Amazonka.DataSync.Types.LocationFilterName
+    Amazonka.DataSync.Types.LocationListEntry
+    Amazonka.DataSync.Types.LogLevel
+    Amazonka.DataSync.Types.Mtime
+    Amazonka.DataSync.Types.NfsMountOptions
+    Amazonka.DataSync.Types.NfsVersion
+    Amazonka.DataSync.Types.ObjectStorageServerProtocol
+    Amazonka.DataSync.Types.ObjectTags
+    Amazonka.DataSync.Types.OnPremConfig
+    Amazonka.DataSync.Types.Operator
+    Amazonka.DataSync.Types.Options
+    Amazonka.DataSync.Types.OverwriteMode
+    Amazonka.DataSync.Types.PhaseStatus
+    Amazonka.DataSync.Types.PosixPermissions
+    Amazonka.DataSync.Types.PreserveDeletedFiles
+    Amazonka.DataSync.Types.PreserveDevices
+    Amazonka.DataSync.Types.PrivateLinkConfig
+    Amazonka.DataSync.Types.QopConfiguration
+    Amazonka.DataSync.Types.S3Config
+    Amazonka.DataSync.Types.S3StorageClass
+    Amazonka.DataSync.Types.SmbMountOptions
+    Amazonka.DataSync.Types.SmbSecurityDescriptorCopyFlags
+    Amazonka.DataSync.Types.SmbVersion
+    Amazonka.DataSync.Types.TagListEntry
+    Amazonka.DataSync.Types.TaskExecutionListEntry
+    Amazonka.DataSync.Types.TaskExecutionResultDetail
+    Amazonka.DataSync.Types.TaskExecutionStatus
+    Amazonka.DataSync.Types.TaskFilter
+    Amazonka.DataSync.Types.TaskFilterName
+    Amazonka.DataSync.Types.TaskListEntry
+    Amazonka.DataSync.Types.TaskQueueing
+    Amazonka.DataSync.Types.TaskSchedule
+    Amazonka.DataSync.Types.TaskStatus
+    Amazonka.DataSync.Types.TransferMode
+    Amazonka.DataSync.Types.Uid
+    Amazonka.DataSync.Types.VerifyMode
+    Amazonka.DataSync.UntagResource
+    Amazonka.DataSync.UpdateAgent
+    Amazonka.DataSync.UpdateLocationHdfs
+    Amazonka.DataSync.UpdateLocationNfs
+    Amazonka.DataSync.UpdateLocationObjectStorage
+    Amazonka.DataSync.UpdateLocationSmb
+    Amazonka.DataSync.UpdateTask
+    Amazonka.DataSync.UpdateTaskExecution
+    Amazonka.DataSync.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-datasync-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.DataSync
+    Test.Amazonka.DataSync.Internal
+    Test.Amazonka.Gen.DataSync
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-datasync
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CancelTaskExecution.yaml b/fixture/CancelTaskExecution.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelTaskExecution.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/CancelTaskExecutionResponse.proto b/fixture/CancelTaskExecutionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelTaskExecutionResponse.proto
diff --git a/fixture/CreateAgent.yaml b/fixture/CreateAgent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAgent.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/CreateAgentResponse.proto b/fixture/CreateAgentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAgentResponse.proto
diff --git a/fixture/CreateLocationEfs.yaml b/fixture/CreateLocationEfs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationEfs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/CreateLocationEfsResponse.proto b/fixture/CreateLocationEfsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationEfsResponse.proto
diff --git a/fixture/CreateLocationFsxLustre.yaml b/fixture/CreateLocationFsxLustre.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationFsxLustre.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/CreateLocationFsxLustreResponse.proto b/fixture/CreateLocationFsxLustreResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationFsxLustreResponse.proto
diff --git a/fixture/CreateLocationFsxOntap.yaml b/fixture/CreateLocationFsxOntap.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationFsxOntap.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/CreateLocationFsxOntapResponse.proto b/fixture/CreateLocationFsxOntapResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationFsxOntapResponse.proto
diff --git a/fixture/CreateLocationFsxOpenZfs.yaml b/fixture/CreateLocationFsxOpenZfs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationFsxOpenZfs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/CreateLocationFsxOpenZfsResponse.proto b/fixture/CreateLocationFsxOpenZfsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationFsxOpenZfsResponse.proto
diff --git a/fixture/CreateLocationFsxWindows.yaml b/fixture/CreateLocationFsxWindows.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationFsxWindows.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/CreateLocationFsxWindowsResponse.proto b/fixture/CreateLocationFsxWindowsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationFsxWindowsResponse.proto
diff --git a/fixture/CreateLocationHdfs.yaml b/fixture/CreateLocationHdfs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationHdfs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/CreateLocationHdfsResponse.proto b/fixture/CreateLocationHdfsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationHdfsResponse.proto
diff --git a/fixture/CreateLocationNfs.yaml b/fixture/CreateLocationNfs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationNfs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/CreateLocationNfsResponse.proto b/fixture/CreateLocationNfsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationNfsResponse.proto
diff --git a/fixture/CreateLocationObjectStorage.yaml b/fixture/CreateLocationObjectStorage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationObjectStorage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/CreateLocationObjectStorageResponse.proto b/fixture/CreateLocationObjectStorageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationObjectStorageResponse.proto
diff --git a/fixture/CreateLocationS3.yaml b/fixture/CreateLocationS3.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationS3.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/CreateLocationS3Response.proto b/fixture/CreateLocationS3Response.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationS3Response.proto
diff --git a/fixture/CreateLocationSmb.yaml b/fixture/CreateLocationSmb.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationSmb.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/CreateLocationSmbResponse.proto b/fixture/CreateLocationSmbResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocationSmbResponse.proto
diff --git a/fixture/CreateTask.yaml b/fixture/CreateTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/CreateTaskResponse.proto b/fixture/CreateTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTaskResponse.proto
diff --git a/fixture/DeleteAgent.yaml b/fixture/DeleteAgent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAgent.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DeleteAgentResponse.proto b/fixture/DeleteAgentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAgentResponse.proto
diff --git a/fixture/DeleteLocation.yaml b/fixture/DeleteLocation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLocation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DeleteLocationResponse.proto b/fixture/DeleteLocationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLocationResponse.proto
diff --git a/fixture/DeleteTask.yaml b/fixture/DeleteTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DeleteTaskResponse.proto b/fixture/DeleteTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTaskResponse.proto
diff --git a/fixture/DescribeAgent.yaml b/fixture/DescribeAgent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAgent.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DescribeAgentResponse.proto b/fixture/DescribeAgentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAgentResponse.proto
diff --git a/fixture/DescribeLocationEfs.yaml b/fixture/DescribeLocationEfs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationEfs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DescribeLocationEfsResponse.proto b/fixture/DescribeLocationEfsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationEfsResponse.proto
diff --git a/fixture/DescribeLocationFsxLustre.yaml b/fixture/DescribeLocationFsxLustre.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationFsxLustre.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DescribeLocationFsxLustreResponse.proto b/fixture/DescribeLocationFsxLustreResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationFsxLustreResponse.proto
diff --git a/fixture/DescribeLocationFsxOntap.yaml b/fixture/DescribeLocationFsxOntap.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationFsxOntap.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DescribeLocationFsxOntapResponse.proto b/fixture/DescribeLocationFsxOntapResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationFsxOntapResponse.proto
diff --git a/fixture/DescribeLocationFsxOpenZfs.yaml b/fixture/DescribeLocationFsxOpenZfs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationFsxOpenZfs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DescribeLocationFsxOpenZfsResponse.proto b/fixture/DescribeLocationFsxOpenZfsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationFsxOpenZfsResponse.proto
diff --git a/fixture/DescribeLocationFsxWindows.yaml b/fixture/DescribeLocationFsxWindows.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationFsxWindows.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DescribeLocationFsxWindowsResponse.proto b/fixture/DescribeLocationFsxWindowsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationFsxWindowsResponse.proto
diff --git a/fixture/DescribeLocationHdfs.yaml b/fixture/DescribeLocationHdfs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationHdfs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DescribeLocationHdfsResponse.proto b/fixture/DescribeLocationHdfsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationHdfsResponse.proto
diff --git a/fixture/DescribeLocationNfs.yaml b/fixture/DescribeLocationNfs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationNfs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DescribeLocationNfsResponse.proto b/fixture/DescribeLocationNfsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationNfsResponse.proto
diff --git a/fixture/DescribeLocationObjectStorage.yaml b/fixture/DescribeLocationObjectStorage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationObjectStorage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DescribeLocationObjectStorageResponse.proto b/fixture/DescribeLocationObjectStorageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationObjectStorageResponse.proto
diff --git a/fixture/DescribeLocationS3.yaml b/fixture/DescribeLocationS3.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationS3.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DescribeLocationS3Response.proto b/fixture/DescribeLocationS3Response.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationS3Response.proto
diff --git a/fixture/DescribeLocationSmb.yaml b/fixture/DescribeLocationSmb.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationSmb.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DescribeLocationSmbResponse.proto b/fixture/DescribeLocationSmbResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocationSmbResponse.proto
diff --git a/fixture/DescribeTask.yaml b/fixture/DescribeTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DescribeTaskExecution.yaml b/fixture/DescribeTaskExecution.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTaskExecution.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/DescribeTaskExecutionResponse.proto b/fixture/DescribeTaskExecutionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTaskExecutionResponse.proto
diff --git a/fixture/DescribeTaskResponse.proto b/fixture/DescribeTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTaskResponse.proto
diff --git a/fixture/ListAgents.yaml b/fixture/ListAgents.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAgents.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/ListAgentsResponse.proto b/fixture/ListAgentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAgentsResponse.proto
diff --git a/fixture/ListLocations.yaml b/fixture/ListLocations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListLocations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/ListLocationsResponse.proto b/fixture/ListLocationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListLocationsResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/ListTaskExecutions.yaml b/fixture/ListTaskExecutions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTaskExecutions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/ListTaskExecutionsResponse.proto b/fixture/ListTaskExecutionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTaskExecutionsResponse.proto
diff --git a/fixture/ListTasks.yaml b/fixture/ListTasks.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTasks.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/ListTasksResponse.proto b/fixture/ListTasksResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTasksResponse.proto
diff --git a/fixture/StartTaskExecution.yaml b/fixture/StartTaskExecution.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartTaskExecution.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/StartTaskExecutionResponse.proto b/fixture/StartTaskExecutionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartTaskExecutionResponse.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/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/UpdateAgent.yaml b/fixture/UpdateAgent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAgent.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/UpdateAgentResponse.proto b/fixture/UpdateAgentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAgentResponse.proto
diff --git a/fixture/UpdateLocationHdfs.yaml b/fixture/UpdateLocationHdfs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLocationHdfs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/UpdateLocationHdfsResponse.proto b/fixture/UpdateLocationHdfsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLocationHdfsResponse.proto
diff --git a/fixture/UpdateLocationNfs.yaml b/fixture/UpdateLocationNfs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLocationNfs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/UpdateLocationNfsResponse.proto b/fixture/UpdateLocationNfsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLocationNfsResponse.proto
diff --git a/fixture/UpdateLocationObjectStorage.yaml b/fixture/UpdateLocationObjectStorage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLocationObjectStorage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/UpdateLocationObjectStorageResponse.proto b/fixture/UpdateLocationObjectStorageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLocationObjectStorageResponse.proto
diff --git a/fixture/UpdateLocationSmb.yaml b/fixture/UpdateLocationSmb.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLocationSmb.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/UpdateLocationSmbResponse.proto b/fixture/UpdateLocationSmbResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLocationSmbResponse.proto
diff --git a/fixture/UpdateTask.yaml b/fixture/UpdateTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/UpdateTaskExecution.yaml b/fixture/UpdateTaskExecution.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTaskExecution.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/datasync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  datasync.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/UpdateTaskExecutionResponse.proto b/fixture/UpdateTaskExecutionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTaskExecutionResponse.proto
diff --git a/fixture/UpdateTaskResponse.proto b/fixture/UpdateTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTaskResponse.proto
diff --git a/gen/Amazonka/DataSync.hs b/gen/Amazonka/DataSync.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync.hs
@@ -0,0 +1,566 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.DataSync
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2018-11-09@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- DataSync
+--
+-- DataSync is a managed data transfer service that makes it simpler for
+-- you to automate moving data between on-premises storage and Amazon Web
+-- Services storage services. You also can use DataSync to transfer data
+-- between other cloud providers and Amazon Web Services storage services.
+--
+-- This API interface reference includes documentation for using DataSync
+-- programmatically. For complete information, see the
+-- /<https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html DataSync User Guide>/
+-- .
+module Amazonka.DataSync
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** InternalException
+    _InternalException,
+
+    -- ** InvalidRequestException
+    _InvalidRequestException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CancelTaskExecution
+    CancelTaskExecution (CancelTaskExecution'),
+    newCancelTaskExecution,
+    CancelTaskExecutionResponse (CancelTaskExecutionResponse'),
+    newCancelTaskExecutionResponse,
+
+    -- ** CreateAgent
+    CreateAgent (CreateAgent'),
+    newCreateAgent,
+    CreateAgentResponse (CreateAgentResponse'),
+    newCreateAgentResponse,
+
+    -- ** CreateLocationEfs
+    CreateLocationEfs (CreateLocationEfs'),
+    newCreateLocationEfs,
+    CreateLocationEfsResponse (CreateLocationEfsResponse'),
+    newCreateLocationEfsResponse,
+
+    -- ** CreateLocationFsxLustre
+    CreateLocationFsxLustre (CreateLocationFsxLustre'),
+    newCreateLocationFsxLustre,
+    CreateLocationFsxLustreResponse (CreateLocationFsxLustreResponse'),
+    newCreateLocationFsxLustreResponse,
+
+    -- ** CreateLocationFsxOntap
+    CreateLocationFsxOntap (CreateLocationFsxOntap'),
+    newCreateLocationFsxOntap,
+    CreateLocationFsxOntapResponse (CreateLocationFsxOntapResponse'),
+    newCreateLocationFsxOntapResponse,
+
+    -- ** CreateLocationFsxOpenZfs
+    CreateLocationFsxOpenZfs (CreateLocationFsxOpenZfs'),
+    newCreateLocationFsxOpenZfs,
+    CreateLocationFsxOpenZfsResponse (CreateLocationFsxOpenZfsResponse'),
+    newCreateLocationFsxOpenZfsResponse,
+
+    -- ** CreateLocationFsxWindows
+    CreateLocationFsxWindows (CreateLocationFsxWindows'),
+    newCreateLocationFsxWindows,
+    CreateLocationFsxWindowsResponse (CreateLocationFsxWindowsResponse'),
+    newCreateLocationFsxWindowsResponse,
+
+    -- ** CreateLocationHdfs
+    CreateLocationHdfs (CreateLocationHdfs'),
+    newCreateLocationHdfs,
+    CreateLocationHdfsResponse (CreateLocationHdfsResponse'),
+    newCreateLocationHdfsResponse,
+
+    -- ** CreateLocationNfs
+    CreateLocationNfs (CreateLocationNfs'),
+    newCreateLocationNfs,
+    CreateLocationNfsResponse (CreateLocationNfsResponse'),
+    newCreateLocationNfsResponse,
+
+    -- ** CreateLocationObjectStorage
+    CreateLocationObjectStorage (CreateLocationObjectStorage'),
+    newCreateLocationObjectStorage,
+    CreateLocationObjectStorageResponse (CreateLocationObjectStorageResponse'),
+    newCreateLocationObjectStorageResponse,
+
+    -- ** CreateLocationS3
+    CreateLocationS3 (CreateLocationS3'),
+    newCreateLocationS3,
+    CreateLocationS3Response (CreateLocationS3Response'),
+    newCreateLocationS3Response,
+
+    -- ** CreateLocationSmb
+    CreateLocationSmb (CreateLocationSmb'),
+    newCreateLocationSmb,
+    CreateLocationSmbResponse (CreateLocationSmbResponse'),
+    newCreateLocationSmbResponse,
+
+    -- ** CreateTask
+    CreateTask (CreateTask'),
+    newCreateTask,
+    CreateTaskResponse (CreateTaskResponse'),
+    newCreateTaskResponse,
+
+    -- ** DeleteAgent
+    DeleteAgent (DeleteAgent'),
+    newDeleteAgent,
+    DeleteAgentResponse (DeleteAgentResponse'),
+    newDeleteAgentResponse,
+
+    -- ** DeleteLocation
+    DeleteLocation (DeleteLocation'),
+    newDeleteLocation,
+    DeleteLocationResponse (DeleteLocationResponse'),
+    newDeleteLocationResponse,
+
+    -- ** DeleteTask
+    DeleteTask (DeleteTask'),
+    newDeleteTask,
+    DeleteTaskResponse (DeleteTaskResponse'),
+    newDeleteTaskResponse,
+
+    -- ** DescribeAgent
+    DescribeAgent (DescribeAgent'),
+    newDescribeAgent,
+    DescribeAgentResponse (DescribeAgentResponse'),
+    newDescribeAgentResponse,
+
+    -- ** DescribeLocationEfs
+    DescribeLocationEfs (DescribeLocationEfs'),
+    newDescribeLocationEfs,
+    DescribeLocationEfsResponse (DescribeLocationEfsResponse'),
+    newDescribeLocationEfsResponse,
+
+    -- ** DescribeLocationFsxLustre
+    DescribeLocationFsxLustre (DescribeLocationFsxLustre'),
+    newDescribeLocationFsxLustre,
+    DescribeLocationFsxLustreResponse (DescribeLocationFsxLustreResponse'),
+    newDescribeLocationFsxLustreResponse,
+
+    -- ** DescribeLocationFsxOntap
+    DescribeLocationFsxOntap (DescribeLocationFsxOntap'),
+    newDescribeLocationFsxOntap,
+    DescribeLocationFsxOntapResponse (DescribeLocationFsxOntapResponse'),
+    newDescribeLocationFsxOntapResponse,
+
+    -- ** DescribeLocationFsxOpenZfs
+    DescribeLocationFsxOpenZfs (DescribeLocationFsxOpenZfs'),
+    newDescribeLocationFsxOpenZfs,
+    DescribeLocationFsxOpenZfsResponse (DescribeLocationFsxOpenZfsResponse'),
+    newDescribeLocationFsxOpenZfsResponse,
+
+    -- ** DescribeLocationFsxWindows
+    DescribeLocationFsxWindows (DescribeLocationFsxWindows'),
+    newDescribeLocationFsxWindows,
+    DescribeLocationFsxWindowsResponse (DescribeLocationFsxWindowsResponse'),
+    newDescribeLocationFsxWindowsResponse,
+
+    -- ** DescribeLocationHdfs
+    DescribeLocationHdfs (DescribeLocationHdfs'),
+    newDescribeLocationHdfs,
+    DescribeLocationHdfsResponse (DescribeLocationHdfsResponse'),
+    newDescribeLocationHdfsResponse,
+
+    -- ** DescribeLocationNfs
+    DescribeLocationNfs (DescribeLocationNfs'),
+    newDescribeLocationNfs,
+    DescribeLocationNfsResponse (DescribeLocationNfsResponse'),
+    newDescribeLocationNfsResponse,
+
+    -- ** DescribeLocationObjectStorage
+    DescribeLocationObjectStorage (DescribeLocationObjectStorage'),
+    newDescribeLocationObjectStorage,
+    DescribeLocationObjectStorageResponse (DescribeLocationObjectStorageResponse'),
+    newDescribeLocationObjectStorageResponse,
+
+    -- ** DescribeLocationS3
+    DescribeLocationS3 (DescribeLocationS3'),
+    newDescribeLocationS3,
+    DescribeLocationS3Response (DescribeLocationS3Response'),
+    newDescribeLocationS3Response,
+
+    -- ** DescribeLocationSmb
+    DescribeLocationSmb (DescribeLocationSmb'),
+    newDescribeLocationSmb,
+    DescribeLocationSmbResponse (DescribeLocationSmbResponse'),
+    newDescribeLocationSmbResponse,
+
+    -- ** DescribeTask
+    DescribeTask (DescribeTask'),
+    newDescribeTask,
+    DescribeTaskResponse (DescribeTaskResponse'),
+    newDescribeTaskResponse,
+
+    -- ** DescribeTaskExecution
+    DescribeTaskExecution (DescribeTaskExecution'),
+    newDescribeTaskExecution,
+    DescribeTaskExecutionResponse (DescribeTaskExecutionResponse'),
+    newDescribeTaskExecutionResponse,
+
+    -- ** ListAgents (Paginated)
+    ListAgents (ListAgents'),
+    newListAgents,
+    ListAgentsResponse (ListAgentsResponse'),
+    newListAgentsResponse,
+
+    -- ** ListLocations (Paginated)
+    ListLocations (ListLocations'),
+    newListLocations,
+    ListLocationsResponse (ListLocationsResponse'),
+    newListLocationsResponse,
+
+    -- ** ListTagsForResource (Paginated)
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListTaskExecutions (Paginated)
+    ListTaskExecutions (ListTaskExecutions'),
+    newListTaskExecutions,
+    ListTaskExecutionsResponse (ListTaskExecutionsResponse'),
+    newListTaskExecutionsResponse,
+
+    -- ** ListTasks (Paginated)
+    ListTasks (ListTasks'),
+    newListTasks,
+    ListTasksResponse (ListTasksResponse'),
+    newListTasksResponse,
+
+    -- ** StartTaskExecution
+    StartTaskExecution (StartTaskExecution'),
+    newStartTaskExecution,
+    StartTaskExecutionResponse (StartTaskExecutionResponse'),
+    newStartTaskExecutionResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateAgent
+    UpdateAgent (UpdateAgent'),
+    newUpdateAgent,
+    UpdateAgentResponse (UpdateAgentResponse'),
+    newUpdateAgentResponse,
+
+    -- ** UpdateLocationHdfs
+    UpdateLocationHdfs (UpdateLocationHdfs'),
+    newUpdateLocationHdfs,
+    UpdateLocationHdfsResponse (UpdateLocationHdfsResponse'),
+    newUpdateLocationHdfsResponse,
+
+    -- ** UpdateLocationNfs
+    UpdateLocationNfs (UpdateLocationNfs'),
+    newUpdateLocationNfs,
+    UpdateLocationNfsResponse (UpdateLocationNfsResponse'),
+    newUpdateLocationNfsResponse,
+
+    -- ** UpdateLocationObjectStorage
+    UpdateLocationObjectStorage (UpdateLocationObjectStorage'),
+    newUpdateLocationObjectStorage,
+    UpdateLocationObjectStorageResponse (UpdateLocationObjectStorageResponse'),
+    newUpdateLocationObjectStorageResponse,
+
+    -- ** UpdateLocationSmb
+    UpdateLocationSmb (UpdateLocationSmb'),
+    newUpdateLocationSmb,
+    UpdateLocationSmbResponse (UpdateLocationSmbResponse'),
+    newUpdateLocationSmbResponse,
+
+    -- ** UpdateTask
+    UpdateTask (UpdateTask'),
+    newUpdateTask,
+    UpdateTaskResponse (UpdateTaskResponse'),
+    newUpdateTaskResponse,
+
+    -- ** UpdateTaskExecution
+    UpdateTaskExecution (UpdateTaskExecution'),
+    newUpdateTaskExecution,
+    UpdateTaskExecutionResponse (UpdateTaskExecutionResponse'),
+    newUpdateTaskExecutionResponse,
+
+    -- * Types
+
+    -- ** AgentStatus
+    AgentStatus (..),
+
+    -- ** Atime
+    Atime (..),
+
+    -- ** EfsInTransitEncryption
+    EfsInTransitEncryption (..),
+
+    -- ** EndpointType
+    EndpointType (..),
+
+    -- ** FilterType
+    FilterType (..),
+
+    -- ** Gid
+    Gid (..),
+
+    -- ** HdfsAuthenticationType
+    HdfsAuthenticationType (..),
+
+    -- ** HdfsDataTransferProtection
+    HdfsDataTransferProtection (..),
+
+    -- ** HdfsRpcProtection
+    HdfsRpcProtection (..),
+
+    -- ** LocationFilterName
+    LocationFilterName (..),
+
+    -- ** LogLevel
+    LogLevel (..),
+
+    -- ** Mtime
+    Mtime (..),
+
+    -- ** NfsVersion
+    NfsVersion (..),
+
+    -- ** ObjectStorageServerProtocol
+    ObjectStorageServerProtocol (..),
+
+    -- ** ObjectTags
+    ObjectTags (..),
+
+    -- ** Operator
+    Operator (..),
+
+    -- ** OverwriteMode
+    OverwriteMode (..),
+
+    -- ** PhaseStatus
+    PhaseStatus (..),
+
+    -- ** PosixPermissions
+    PosixPermissions (..),
+
+    -- ** PreserveDeletedFiles
+    PreserveDeletedFiles (..),
+
+    -- ** PreserveDevices
+    PreserveDevices (..),
+
+    -- ** S3StorageClass
+    S3StorageClass (..),
+
+    -- ** SmbSecurityDescriptorCopyFlags
+    SmbSecurityDescriptorCopyFlags (..),
+
+    -- ** SmbVersion
+    SmbVersion (..),
+
+    -- ** TaskExecutionStatus
+    TaskExecutionStatus (..),
+
+    -- ** TaskFilterName
+    TaskFilterName (..),
+
+    -- ** TaskQueueing
+    TaskQueueing (..),
+
+    -- ** TaskStatus
+    TaskStatus (..),
+
+    -- ** TransferMode
+    TransferMode (..),
+
+    -- ** Uid
+    Uid (..),
+
+    -- ** VerifyMode
+    VerifyMode (..),
+
+    -- ** AgentListEntry
+    AgentListEntry (AgentListEntry'),
+    newAgentListEntry,
+
+    -- ** Ec2Config
+    Ec2Config (Ec2Config'),
+    newEc2Config,
+
+    -- ** FilterRule
+    FilterRule (FilterRule'),
+    newFilterRule,
+
+    -- ** FsxProtocol
+    FsxProtocol (FsxProtocol'),
+    newFsxProtocol,
+
+    -- ** FsxProtocolNfs
+    FsxProtocolNfs (FsxProtocolNfs'),
+    newFsxProtocolNfs,
+
+    -- ** FsxProtocolSmb
+    FsxProtocolSmb (FsxProtocolSmb'),
+    newFsxProtocolSmb,
+
+    -- ** HdfsNameNode
+    HdfsNameNode (HdfsNameNode'),
+    newHdfsNameNode,
+
+    -- ** LocationFilter
+    LocationFilter (LocationFilter'),
+    newLocationFilter,
+
+    -- ** LocationListEntry
+    LocationListEntry (LocationListEntry'),
+    newLocationListEntry,
+
+    -- ** NfsMountOptions
+    NfsMountOptions (NfsMountOptions'),
+    newNfsMountOptions,
+
+    -- ** OnPremConfig
+    OnPremConfig (OnPremConfig'),
+    newOnPremConfig,
+
+    -- ** Options
+    Options (Options'),
+    newOptions,
+
+    -- ** PrivateLinkConfig
+    PrivateLinkConfig (PrivateLinkConfig'),
+    newPrivateLinkConfig,
+
+    -- ** QopConfiguration
+    QopConfiguration (QopConfiguration'),
+    newQopConfiguration,
+
+    -- ** S3Config
+    S3Config (S3Config'),
+    newS3Config,
+
+    -- ** SmbMountOptions
+    SmbMountOptions (SmbMountOptions'),
+    newSmbMountOptions,
+
+    -- ** TagListEntry
+    TagListEntry (TagListEntry'),
+    newTagListEntry,
+
+    -- ** TaskExecutionListEntry
+    TaskExecutionListEntry (TaskExecutionListEntry'),
+    newTaskExecutionListEntry,
+
+    -- ** TaskExecutionResultDetail
+    TaskExecutionResultDetail (TaskExecutionResultDetail'),
+    newTaskExecutionResultDetail,
+
+    -- ** TaskFilter
+    TaskFilter (TaskFilter'),
+    newTaskFilter,
+
+    -- ** TaskListEntry
+    TaskListEntry (TaskListEntry'),
+    newTaskListEntry,
+
+    -- ** TaskSchedule
+    TaskSchedule (TaskSchedule'),
+    newTaskSchedule,
+  )
+where
+
+import Amazonka.DataSync.CancelTaskExecution
+import Amazonka.DataSync.CreateAgent
+import Amazonka.DataSync.CreateLocationEfs
+import Amazonka.DataSync.CreateLocationFsxLustre
+import Amazonka.DataSync.CreateLocationFsxOntap
+import Amazonka.DataSync.CreateLocationFsxOpenZfs
+import Amazonka.DataSync.CreateLocationFsxWindows
+import Amazonka.DataSync.CreateLocationHdfs
+import Amazonka.DataSync.CreateLocationNfs
+import Amazonka.DataSync.CreateLocationObjectStorage
+import Amazonka.DataSync.CreateLocationS3
+import Amazonka.DataSync.CreateLocationSmb
+import Amazonka.DataSync.CreateTask
+import Amazonka.DataSync.DeleteAgent
+import Amazonka.DataSync.DeleteLocation
+import Amazonka.DataSync.DeleteTask
+import Amazonka.DataSync.DescribeAgent
+import Amazonka.DataSync.DescribeLocationEfs
+import Amazonka.DataSync.DescribeLocationFsxLustre
+import Amazonka.DataSync.DescribeLocationFsxOntap
+import Amazonka.DataSync.DescribeLocationFsxOpenZfs
+import Amazonka.DataSync.DescribeLocationFsxWindows
+import Amazonka.DataSync.DescribeLocationHdfs
+import Amazonka.DataSync.DescribeLocationNfs
+import Amazonka.DataSync.DescribeLocationObjectStorage
+import Amazonka.DataSync.DescribeLocationS3
+import Amazonka.DataSync.DescribeLocationSmb
+import Amazonka.DataSync.DescribeTask
+import Amazonka.DataSync.DescribeTaskExecution
+import Amazonka.DataSync.Lens
+import Amazonka.DataSync.ListAgents
+import Amazonka.DataSync.ListLocations
+import Amazonka.DataSync.ListTagsForResource
+import Amazonka.DataSync.ListTaskExecutions
+import Amazonka.DataSync.ListTasks
+import Amazonka.DataSync.StartTaskExecution
+import Amazonka.DataSync.TagResource
+import Amazonka.DataSync.Types
+import Amazonka.DataSync.UntagResource
+import Amazonka.DataSync.UpdateAgent
+import Amazonka.DataSync.UpdateLocationHdfs
+import Amazonka.DataSync.UpdateLocationNfs
+import Amazonka.DataSync.UpdateLocationObjectStorage
+import Amazonka.DataSync.UpdateLocationSmb
+import Amazonka.DataSync.UpdateTask
+import Amazonka.DataSync.UpdateTaskExecution
+import Amazonka.DataSync.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 'DataSync'.
+
+-- $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/DataSync/CancelTaskExecution.hs b/gen/Amazonka/DataSync/CancelTaskExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/CancelTaskExecution.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.CancelTaskExecution
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops an DataSync task execution that\'s in progress. The transfer of
+-- some files are abruptly interrupted. File contents that\'re transferred
+-- to the destination might be incomplete or inconsistent with the source
+-- files.
+--
+-- However, if you start a new task execution using the same task and allow
+-- it to finish, file content on the destination will be complete and
+-- consistent. This applies to other unexpected failures that interrupt a
+-- task execution. In all of these cases, DataSync successfully completes
+-- the transfer when you start the next task execution.
+module Amazonka.DataSync.CancelTaskExecution
+  ( -- * Creating a Request
+    CancelTaskExecution (..),
+    newCancelTaskExecution,
+
+    -- * Request Lenses
+    cancelTaskExecution_taskExecutionArn,
+
+    -- * Destructuring the Response
+    CancelTaskExecutionResponse (..),
+    newCancelTaskExecutionResponse,
+
+    -- * Response Lenses
+    cancelTaskExecutionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | CancelTaskExecutionRequest
+--
+-- /See:/ 'newCancelTaskExecution' smart constructor.
+data CancelTaskExecution = CancelTaskExecution'
+  { -- | The Amazon Resource Name (ARN) of the task execution to stop.
+    taskExecutionArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelTaskExecution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'taskExecutionArn', 'cancelTaskExecution_taskExecutionArn' - The Amazon Resource Name (ARN) of the task execution to stop.
+newCancelTaskExecution ::
+  -- | 'taskExecutionArn'
+  Prelude.Text ->
+  CancelTaskExecution
+newCancelTaskExecution pTaskExecutionArn_ =
+  CancelTaskExecution'
+    { taskExecutionArn =
+        pTaskExecutionArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the task execution to stop.
+cancelTaskExecution_taskExecutionArn :: Lens.Lens' CancelTaskExecution Prelude.Text
+cancelTaskExecution_taskExecutionArn = Lens.lens (\CancelTaskExecution' {taskExecutionArn} -> taskExecutionArn) (\s@CancelTaskExecution' {} a -> s {taskExecutionArn = a} :: CancelTaskExecution)
+
+instance Core.AWSRequest CancelTaskExecution where
+  type
+    AWSResponse CancelTaskExecution =
+      CancelTaskExecutionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CancelTaskExecutionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelTaskExecution where
+  hashWithSalt _salt CancelTaskExecution' {..} =
+    _salt `Prelude.hashWithSalt` taskExecutionArn
+
+instance Prelude.NFData CancelTaskExecution where
+  rnf CancelTaskExecution' {..} =
+    Prelude.rnf taskExecutionArn
+
+instance Data.ToHeaders CancelTaskExecution where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.CancelTaskExecution" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CancelTaskExecution where
+  toJSON CancelTaskExecution' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("TaskExecutionArn" Data..= taskExecutionArn)
+          ]
+      )
+
+instance Data.ToPath CancelTaskExecution where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelTaskExecution where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelTaskExecutionResponse' smart constructor.
+data CancelTaskExecutionResponse = CancelTaskExecutionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelTaskExecutionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'cancelTaskExecutionResponse_httpStatus' - The response's http status code.
+newCancelTaskExecutionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelTaskExecutionResponse
+newCancelTaskExecutionResponse pHttpStatus_ =
+  CancelTaskExecutionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+cancelTaskExecutionResponse_httpStatus :: Lens.Lens' CancelTaskExecutionResponse Prelude.Int
+cancelTaskExecutionResponse_httpStatus = Lens.lens (\CancelTaskExecutionResponse' {httpStatus} -> httpStatus) (\s@CancelTaskExecutionResponse' {} a -> s {httpStatus = a} :: CancelTaskExecutionResponse)
+
+instance Prelude.NFData CancelTaskExecutionResponse where
+  rnf CancelTaskExecutionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/CreateAgent.hs b/gen/Amazonka/DataSync/CreateAgent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/CreateAgent.hs
@@ -0,0 +1,366 @@
+{-# 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.DataSync.CreateAgent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Activates an DataSync agent that you have deployed in your storage
+-- environment. The activation process associates your agent with your
+-- account. In the activation process, you specify information such as the
+-- Amazon Web Services Region that you want to activate the agent in. You
+-- activate the agent in the Amazon Web Services Region where your target
+-- locations (in Amazon S3 or Amazon EFS) reside. Your tasks are created in
+-- this Amazon Web Services Region.
+--
+-- You can activate the agent in a VPC (virtual private cloud) or provide
+-- the agent access to a VPC endpoint so you can run tasks without going
+-- over the public internet.
+--
+-- You can use an agent for more than one location. If a task uses multiple
+-- agents, all of them need to have status AVAILABLE for the task to run.
+-- If you use multiple agents for a source location, the status of all the
+-- agents must be AVAILABLE for the task to run.
+--
+-- Agents are automatically updated by Amazon Web Services on a regular
+-- basis, using a mechanism that ensures minimal interruption to your
+-- tasks.
+module Amazonka.DataSync.CreateAgent
+  ( -- * Creating a Request
+    CreateAgent (..),
+    newCreateAgent,
+
+    -- * Request Lenses
+    createAgent_agentName,
+    createAgent_securityGroupArns,
+    createAgent_subnetArns,
+    createAgent_tags,
+    createAgent_vpcEndpointId,
+    createAgent_activationKey,
+
+    -- * Destructuring the Response
+    CreateAgentResponse (..),
+    newCreateAgentResponse,
+
+    -- * Response Lenses
+    createAgentResponse_agentArn,
+    createAgentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | CreateAgentRequest
+--
+-- /See:/ 'newCreateAgent' smart constructor.
+data CreateAgent = CreateAgent'
+  { -- | The name you configured for your agent. This value is a text reference
+    -- that is used to identify the agent in the console.
+    agentName :: Prelude.Maybe Prelude.Text,
+    -- | The ARNs of the security groups used to protect your data transfer task
+    -- subnets. See
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/API_Ec2Config.html#DataSync-Type-Ec2Config-SecurityGroupArns SecurityGroupArns>.
+    securityGroupArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The Amazon Resource Names (ARNs) of the subnets in which DataSync will
+    -- create elastic network interfaces for each data transfer task. The agent
+    -- that runs a task must be private. When you start a task that is
+    -- associated with an agent created in a VPC, or one that has access to an
+    -- IP address in a VPC, then the task is also private. In this case,
+    -- DataSync creates four network interfaces for each task in your subnet.
+    -- For a data transfer to work, the agent must be able to route to all
+    -- these four network interfaces.
+    subnetArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The key-value pair that represents the tag that you want to associate
+    -- with the agent. The value can be an empty string. This value helps you
+    -- manage, filter, and search for your agents.
+    --
+    -- Valid characters for key and value are letters, spaces, and numbers
+    -- representable in UTF-8 format, and the following special characters: + -
+    -- = . _ : \/ \@.
+    tags :: Prelude.Maybe [TagListEntry],
+    -- | The ID of the VPC (virtual private cloud) endpoint that the agent has
+    -- access to. This is the client-side VPC endpoint, also called a
+    -- PrivateLink. If you don\'t have a PrivateLink VPC endpoint, see
+    -- <https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html#create-endpoint-service Creating a VPC Endpoint Service Configuration>
+    -- in the Amazon VPC User Guide.
+    --
+    -- VPC endpoint ID looks like this: @vpce-01234d5aff67890e1@.
+    vpcEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | Your agent activation key. You can get the activation key either by
+    -- sending an HTTP GET request with redirects that enable you to get the
+    -- agent IP address (port 80). Alternatively, you can get it from the
+    -- DataSync console.
+    --
+    -- The redirect URL returned in the response provides you the activation
+    -- key for your agent in the query string parameter @activationKey@. It
+    -- might also include other activation-related parameters; however, these
+    -- are merely defaults. The arguments you pass to this API call determine
+    -- the actual configuration of your agent.
+    --
+    -- For more information, see Activating an Agent in the /DataSync User
+    -- Guide./
+    activationKey :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAgent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'agentName', 'createAgent_agentName' - The name you configured for your agent. This value is a text reference
+-- that is used to identify the agent in the console.
+--
+-- 'securityGroupArns', 'createAgent_securityGroupArns' - The ARNs of the security groups used to protect your data transfer task
+-- subnets. See
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/API_Ec2Config.html#DataSync-Type-Ec2Config-SecurityGroupArns SecurityGroupArns>.
+--
+-- 'subnetArns', 'createAgent_subnetArns' - The Amazon Resource Names (ARNs) of the subnets in which DataSync will
+-- create elastic network interfaces for each data transfer task. The agent
+-- that runs a task must be private. When you start a task that is
+-- associated with an agent created in a VPC, or one that has access to an
+-- IP address in a VPC, then the task is also private. In this case,
+-- DataSync creates four network interfaces for each task in your subnet.
+-- For a data transfer to work, the agent must be able to route to all
+-- these four network interfaces.
+--
+-- 'tags', 'createAgent_tags' - The key-value pair that represents the tag that you want to associate
+-- with the agent. The value can be an empty string. This value helps you
+-- manage, filter, and search for your agents.
+--
+-- Valid characters for key and value are letters, spaces, and numbers
+-- representable in UTF-8 format, and the following special characters: + -
+-- = . _ : \/ \@.
+--
+-- 'vpcEndpointId', 'createAgent_vpcEndpointId' - The ID of the VPC (virtual private cloud) endpoint that the agent has
+-- access to. This is the client-side VPC endpoint, also called a
+-- PrivateLink. If you don\'t have a PrivateLink VPC endpoint, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html#create-endpoint-service Creating a VPC Endpoint Service Configuration>
+-- in the Amazon VPC User Guide.
+--
+-- VPC endpoint ID looks like this: @vpce-01234d5aff67890e1@.
+--
+-- 'activationKey', 'createAgent_activationKey' - Your agent activation key. You can get the activation key either by
+-- sending an HTTP GET request with redirects that enable you to get the
+-- agent IP address (port 80). Alternatively, you can get it from the
+-- DataSync console.
+--
+-- The redirect URL returned in the response provides you the activation
+-- key for your agent in the query string parameter @activationKey@. It
+-- might also include other activation-related parameters; however, these
+-- are merely defaults. The arguments you pass to this API call determine
+-- the actual configuration of your agent.
+--
+-- For more information, see Activating an Agent in the /DataSync User
+-- Guide./
+newCreateAgent ::
+  -- | 'activationKey'
+  Prelude.Text ->
+  CreateAgent
+newCreateAgent pActivationKey_ =
+  CreateAgent'
+    { agentName = Prelude.Nothing,
+      securityGroupArns = Prelude.Nothing,
+      subnetArns = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcEndpointId = Prelude.Nothing,
+      activationKey = pActivationKey_
+    }
+
+-- | The name you configured for your agent. This value is a text reference
+-- that is used to identify the agent in the console.
+createAgent_agentName :: Lens.Lens' CreateAgent (Prelude.Maybe Prelude.Text)
+createAgent_agentName = Lens.lens (\CreateAgent' {agentName} -> agentName) (\s@CreateAgent' {} a -> s {agentName = a} :: CreateAgent)
+
+-- | The ARNs of the security groups used to protect your data transfer task
+-- subnets. See
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/API_Ec2Config.html#DataSync-Type-Ec2Config-SecurityGroupArns SecurityGroupArns>.
+createAgent_securityGroupArns :: Lens.Lens' CreateAgent (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+createAgent_securityGroupArns = Lens.lens (\CreateAgent' {securityGroupArns} -> securityGroupArns) (\s@CreateAgent' {} a -> s {securityGroupArns = a} :: CreateAgent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Names (ARNs) of the subnets in which DataSync will
+-- create elastic network interfaces for each data transfer task. The agent
+-- that runs a task must be private. When you start a task that is
+-- associated with an agent created in a VPC, or one that has access to an
+-- IP address in a VPC, then the task is also private. In this case,
+-- DataSync creates four network interfaces for each task in your subnet.
+-- For a data transfer to work, the agent must be able to route to all
+-- these four network interfaces.
+createAgent_subnetArns :: Lens.Lens' CreateAgent (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+createAgent_subnetArns = Lens.lens (\CreateAgent' {subnetArns} -> subnetArns) (\s@CreateAgent' {} a -> s {subnetArns = a} :: CreateAgent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The key-value pair that represents the tag that you want to associate
+-- with the agent. The value can be an empty string. This value helps you
+-- manage, filter, and search for your agents.
+--
+-- Valid characters for key and value are letters, spaces, and numbers
+-- representable in UTF-8 format, and the following special characters: + -
+-- = . _ : \/ \@.
+createAgent_tags :: Lens.Lens' CreateAgent (Prelude.Maybe [TagListEntry])
+createAgent_tags = Lens.lens (\CreateAgent' {tags} -> tags) (\s@CreateAgent' {} a -> s {tags = a} :: CreateAgent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC (virtual private cloud) endpoint that the agent has
+-- access to. This is the client-side VPC endpoint, also called a
+-- PrivateLink. If you don\'t have a PrivateLink VPC endpoint, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html#create-endpoint-service Creating a VPC Endpoint Service Configuration>
+-- in the Amazon VPC User Guide.
+--
+-- VPC endpoint ID looks like this: @vpce-01234d5aff67890e1@.
+createAgent_vpcEndpointId :: Lens.Lens' CreateAgent (Prelude.Maybe Prelude.Text)
+createAgent_vpcEndpointId = Lens.lens (\CreateAgent' {vpcEndpointId} -> vpcEndpointId) (\s@CreateAgent' {} a -> s {vpcEndpointId = a} :: CreateAgent)
+
+-- | Your agent activation key. You can get the activation key either by
+-- sending an HTTP GET request with redirects that enable you to get the
+-- agent IP address (port 80). Alternatively, you can get it from the
+-- DataSync console.
+--
+-- The redirect URL returned in the response provides you the activation
+-- key for your agent in the query string parameter @activationKey@. It
+-- might also include other activation-related parameters; however, these
+-- are merely defaults. The arguments you pass to this API call determine
+-- the actual configuration of your agent.
+--
+-- For more information, see Activating an Agent in the /DataSync User
+-- Guide./
+createAgent_activationKey :: Lens.Lens' CreateAgent Prelude.Text
+createAgent_activationKey = Lens.lens (\CreateAgent' {activationKey} -> activationKey) (\s@CreateAgent' {} a -> s {activationKey = a} :: CreateAgent)
+
+instance Core.AWSRequest CreateAgent where
+  type AWSResponse CreateAgent = CreateAgentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAgentResponse'
+            Prelude.<$> (x Data..?> "AgentArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAgent where
+  hashWithSalt _salt CreateAgent' {..} =
+    _salt
+      `Prelude.hashWithSalt` agentName
+      `Prelude.hashWithSalt` securityGroupArns
+      `Prelude.hashWithSalt` subnetArns
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcEndpointId
+      `Prelude.hashWithSalt` activationKey
+
+instance Prelude.NFData CreateAgent where
+  rnf CreateAgent' {..} =
+    Prelude.rnf agentName
+      `Prelude.seq` Prelude.rnf securityGroupArns
+      `Prelude.seq` Prelude.rnf subnetArns
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcEndpointId
+      `Prelude.seq` Prelude.rnf activationKey
+
+instance Data.ToHeaders CreateAgent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("FmrsService.CreateAgent" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAgent where
+  toJSON CreateAgent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AgentName" Data..=) Prelude.<$> agentName,
+            ("SecurityGroupArns" Data..=)
+              Prelude.<$> securityGroupArns,
+            ("SubnetArns" Data..=) Prelude.<$> subnetArns,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("VpcEndpointId" Data..=) Prelude.<$> vpcEndpointId,
+            Prelude.Just
+              ("ActivationKey" Data..= activationKey)
+          ]
+      )
+
+instance Data.ToPath CreateAgent where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateAgent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | CreateAgentResponse
+--
+-- /See:/ 'newCreateAgentResponse' smart constructor.
+data CreateAgentResponse = CreateAgentResponse'
+  { -- | The Amazon Resource Name (ARN) of the agent. Use the @ListAgents@
+    -- operation to return a list of agents for your account and Amazon Web
+    -- Services Region.
+    agentArn :: 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 'CreateAgentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'agentArn', 'createAgentResponse_agentArn' - The Amazon Resource Name (ARN) of the agent. Use the @ListAgents@
+-- operation to return a list of agents for your account and Amazon Web
+-- Services Region.
+--
+-- 'httpStatus', 'createAgentResponse_httpStatus' - The response's http status code.
+newCreateAgentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAgentResponse
+newCreateAgentResponse pHttpStatus_ =
+  CreateAgentResponse'
+    { agentArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the agent. Use the @ListAgents@
+-- operation to return a list of agents for your account and Amazon Web
+-- Services Region.
+createAgentResponse_agentArn :: Lens.Lens' CreateAgentResponse (Prelude.Maybe Prelude.Text)
+createAgentResponse_agentArn = Lens.lens (\CreateAgentResponse' {agentArn} -> agentArn) (\s@CreateAgentResponse' {} a -> s {agentArn = a} :: CreateAgentResponse)
+
+-- | The response's http status code.
+createAgentResponse_httpStatus :: Lens.Lens' CreateAgentResponse Prelude.Int
+createAgentResponse_httpStatus = Lens.lens (\CreateAgentResponse' {httpStatus} -> httpStatus) (\s@CreateAgentResponse' {} a -> s {httpStatus = a} :: CreateAgentResponse)
+
+instance Prelude.NFData CreateAgentResponse where
+  rnf CreateAgentResponse' {..} =
+    Prelude.rnf agentArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/CreateLocationEfs.hs b/gen/Amazonka/DataSync/CreateLocationEfs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/CreateLocationEfs.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.DataSync.CreateLocationEfs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an endpoint for an Amazon EFS file system that DataSync can
+-- access for a transfer. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-efs-location.html Creating a location for Amazon EFS>.
+module Amazonka.DataSync.CreateLocationEfs
+  ( -- * Creating a Request
+    CreateLocationEfs (..),
+    newCreateLocationEfs,
+
+    -- * Request Lenses
+    createLocationEfs_accessPointArn,
+    createLocationEfs_fileSystemAccessRoleArn,
+    createLocationEfs_inTransitEncryption,
+    createLocationEfs_subdirectory,
+    createLocationEfs_tags,
+    createLocationEfs_efsFilesystemArn,
+    createLocationEfs_ec2Config,
+
+    -- * Destructuring the Response
+    CreateLocationEfsResponse (..),
+    newCreateLocationEfsResponse,
+
+    -- * Response Lenses
+    createLocationEfsResponse_locationArn,
+    createLocationEfsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | CreateLocationEfsRequest
+--
+-- /See:/ 'newCreateLocationEfs' smart constructor.
+data CreateLocationEfs = CreateLocationEfs'
+  { -- | Specifies the Amazon Resource Name (ARN) of the access point that
+    -- DataSync uses to access the Amazon EFS file system.
+    accessPointArn :: Prelude.Maybe Prelude.Text,
+    -- | Specifies an Identity and Access Management (IAM) role that DataSync
+    -- assumes when mounting the Amazon EFS file system.
+    fileSystemAccessRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether you want DataSync to use Transport Layer Security
+    -- (TLS) 1.2 encryption when it copies data to or from the Amazon EFS file
+    -- system.
+    --
+    -- If you specify an access point using @AccessPointArn@ or an IAM role
+    -- using @FileSystemAccessRoleArn@, you must set this parameter to
+    -- @TLS1_2@.
+    inTransitEncryption :: Prelude.Maybe EfsInTransitEncryption,
+    -- | Specifies a mount path for your Amazon EFS file system. This is where
+    -- DataSync reads or writes data (depending on if this is a source or
+    -- destination location). By default, DataSync uses the root directory, but
+    -- you can also include subdirectories.
+    --
+    -- You must specify a value with forward slashes (for example,
+    -- @\/path\/to\/folder@).
+    subdirectory :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the key-value pair that represents a tag that you want to add
+    -- to the resource. The value can be an empty string. This value helps you
+    -- manage, filter, and search for your resources. We recommend that you
+    -- create a name tag for your location.
+    tags :: Prelude.Maybe [TagListEntry],
+    -- | Specifies the ARN for the Amazon EFS file system.
+    efsFilesystemArn :: Prelude.Text,
+    -- | Specifies the subnet and security groups DataSync uses to access your
+    -- Amazon EFS file system.
+    ec2Config :: Ec2Config
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocationEfs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessPointArn', 'createLocationEfs_accessPointArn' - Specifies the Amazon Resource Name (ARN) of the access point that
+-- DataSync uses to access the Amazon EFS file system.
+--
+-- 'fileSystemAccessRoleArn', 'createLocationEfs_fileSystemAccessRoleArn' - Specifies an Identity and Access Management (IAM) role that DataSync
+-- assumes when mounting the Amazon EFS file system.
+--
+-- 'inTransitEncryption', 'createLocationEfs_inTransitEncryption' - Specifies whether you want DataSync to use Transport Layer Security
+-- (TLS) 1.2 encryption when it copies data to or from the Amazon EFS file
+-- system.
+--
+-- If you specify an access point using @AccessPointArn@ or an IAM role
+-- using @FileSystemAccessRoleArn@, you must set this parameter to
+-- @TLS1_2@.
+--
+-- 'subdirectory', 'createLocationEfs_subdirectory' - Specifies a mount path for your Amazon EFS file system. This is where
+-- DataSync reads or writes data (depending on if this is a source or
+-- destination location). By default, DataSync uses the root directory, but
+-- you can also include subdirectories.
+--
+-- You must specify a value with forward slashes (for example,
+-- @\/path\/to\/folder@).
+--
+-- 'tags', 'createLocationEfs_tags' - Specifies the key-value pair that represents a tag that you want to add
+-- to the resource. The value can be an empty string. This value helps you
+-- manage, filter, and search for your resources. We recommend that you
+-- create a name tag for your location.
+--
+-- 'efsFilesystemArn', 'createLocationEfs_efsFilesystemArn' - Specifies the ARN for the Amazon EFS file system.
+--
+-- 'ec2Config', 'createLocationEfs_ec2Config' - Specifies the subnet and security groups DataSync uses to access your
+-- Amazon EFS file system.
+newCreateLocationEfs ::
+  -- | 'efsFilesystemArn'
+  Prelude.Text ->
+  -- | 'ec2Config'
+  Ec2Config ->
+  CreateLocationEfs
+newCreateLocationEfs pEfsFilesystemArn_ pEc2Config_ =
+  CreateLocationEfs'
+    { accessPointArn =
+        Prelude.Nothing,
+      fileSystemAccessRoleArn = Prelude.Nothing,
+      inTransitEncryption = Prelude.Nothing,
+      subdirectory = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      efsFilesystemArn = pEfsFilesystemArn_,
+      ec2Config = pEc2Config_
+    }
+
+-- | Specifies the Amazon Resource Name (ARN) of the access point that
+-- DataSync uses to access the Amazon EFS file system.
+createLocationEfs_accessPointArn :: Lens.Lens' CreateLocationEfs (Prelude.Maybe Prelude.Text)
+createLocationEfs_accessPointArn = Lens.lens (\CreateLocationEfs' {accessPointArn} -> accessPointArn) (\s@CreateLocationEfs' {} a -> s {accessPointArn = a} :: CreateLocationEfs)
+
+-- | Specifies an Identity and Access Management (IAM) role that DataSync
+-- assumes when mounting the Amazon EFS file system.
+createLocationEfs_fileSystemAccessRoleArn :: Lens.Lens' CreateLocationEfs (Prelude.Maybe Prelude.Text)
+createLocationEfs_fileSystemAccessRoleArn = Lens.lens (\CreateLocationEfs' {fileSystemAccessRoleArn} -> fileSystemAccessRoleArn) (\s@CreateLocationEfs' {} a -> s {fileSystemAccessRoleArn = a} :: CreateLocationEfs)
+
+-- | Specifies whether you want DataSync to use Transport Layer Security
+-- (TLS) 1.2 encryption when it copies data to or from the Amazon EFS file
+-- system.
+--
+-- If you specify an access point using @AccessPointArn@ or an IAM role
+-- using @FileSystemAccessRoleArn@, you must set this parameter to
+-- @TLS1_2@.
+createLocationEfs_inTransitEncryption :: Lens.Lens' CreateLocationEfs (Prelude.Maybe EfsInTransitEncryption)
+createLocationEfs_inTransitEncryption = Lens.lens (\CreateLocationEfs' {inTransitEncryption} -> inTransitEncryption) (\s@CreateLocationEfs' {} a -> s {inTransitEncryption = a} :: CreateLocationEfs)
+
+-- | Specifies a mount path for your Amazon EFS file system. This is where
+-- DataSync reads or writes data (depending on if this is a source or
+-- destination location). By default, DataSync uses the root directory, but
+-- you can also include subdirectories.
+--
+-- You must specify a value with forward slashes (for example,
+-- @\/path\/to\/folder@).
+createLocationEfs_subdirectory :: Lens.Lens' CreateLocationEfs (Prelude.Maybe Prelude.Text)
+createLocationEfs_subdirectory = Lens.lens (\CreateLocationEfs' {subdirectory} -> subdirectory) (\s@CreateLocationEfs' {} a -> s {subdirectory = a} :: CreateLocationEfs)
+
+-- | Specifies the key-value pair that represents a tag that you want to add
+-- to the resource. The value can be an empty string. This value helps you
+-- manage, filter, and search for your resources. We recommend that you
+-- create a name tag for your location.
+createLocationEfs_tags :: Lens.Lens' CreateLocationEfs (Prelude.Maybe [TagListEntry])
+createLocationEfs_tags = Lens.lens (\CreateLocationEfs' {tags} -> tags) (\s@CreateLocationEfs' {} a -> s {tags = a} :: CreateLocationEfs) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the ARN for the Amazon EFS file system.
+createLocationEfs_efsFilesystemArn :: Lens.Lens' CreateLocationEfs Prelude.Text
+createLocationEfs_efsFilesystemArn = Lens.lens (\CreateLocationEfs' {efsFilesystemArn} -> efsFilesystemArn) (\s@CreateLocationEfs' {} a -> s {efsFilesystemArn = a} :: CreateLocationEfs)
+
+-- | Specifies the subnet and security groups DataSync uses to access your
+-- Amazon EFS file system.
+createLocationEfs_ec2Config :: Lens.Lens' CreateLocationEfs Ec2Config
+createLocationEfs_ec2Config = Lens.lens (\CreateLocationEfs' {ec2Config} -> ec2Config) (\s@CreateLocationEfs' {} a -> s {ec2Config = a} :: CreateLocationEfs)
+
+instance Core.AWSRequest CreateLocationEfs where
+  type
+    AWSResponse CreateLocationEfs =
+      CreateLocationEfsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateLocationEfsResponse'
+            Prelude.<$> (x Data..?> "LocationArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLocationEfs where
+  hashWithSalt _salt CreateLocationEfs' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessPointArn
+      `Prelude.hashWithSalt` fileSystemAccessRoleArn
+      `Prelude.hashWithSalt` inTransitEncryption
+      `Prelude.hashWithSalt` subdirectory
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` efsFilesystemArn
+      `Prelude.hashWithSalt` ec2Config
+
+instance Prelude.NFData CreateLocationEfs where
+  rnf CreateLocationEfs' {..} =
+    Prelude.rnf accessPointArn
+      `Prelude.seq` Prelude.rnf fileSystemAccessRoleArn
+      `Prelude.seq` Prelude.rnf inTransitEncryption
+      `Prelude.seq` Prelude.rnf subdirectory
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf efsFilesystemArn
+      `Prelude.seq` Prelude.rnf ec2Config
+
+instance Data.ToHeaders CreateLocationEfs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.CreateLocationEfs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateLocationEfs where
+  toJSON CreateLocationEfs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccessPointArn" Data..=)
+              Prelude.<$> accessPointArn,
+            ("FileSystemAccessRoleArn" Data..=)
+              Prelude.<$> fileSystemAccessRoleArn,
+            ("InTransitEncryption" Data..=)
+              Prelude.<$> inTransitEncryption,
+            ("Subdirectory" Data..=) Prelude.<$> subdirectory,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("EfsFilesystemArn" Data..= efsFilesystemArn),
+            Prelude.Just ("Ec2Config" Data..= ec2Config)
+          ]
+      )
+
+instance Data.ToPath CreateLocationEfs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLocationEfs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | CreateLocationEfs
+--
+-- /See:/ 'newCreateLocationEfsResponse' smart constructor.
+data CreateLocationEfsResponse = CreateLocationEfsResponse'
+  { -- | The Amazon Resource Name (ARN) of the Amazon EFS file system location
+    -- that you create.
+    locationArn :: 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 'CreateLocationEfsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'createLocationEfsResponse_locationArn' - The Amazon Resource Name (ARN) of the Amazon EFS file system location
+-- that you create.
+--
+-- 'httpStatus', 'createLocationEfsResponse_httpStatus' - The response's http status code.
+newCreateLocationEfsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLocationEfsResponse
+newCreateLocationEfsResponse pHttpStatus_ =
+  CreateLocationEfsResponse'
+    { locationArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the Amazon EFS file system location
+-- that you create.
+createLocationEfsResponse_locationArn :: Lens.Lens' CreateLocationEfsResponse (Prelude.Maybe Prelude.Text)
+createLocationEfsResponse_locationArn = Lens.lens (\CreateLocationEfsResponse' {locationArn} -> locationArn) (\s@CreateLocationEfsResponse' {} a -> s {locationArn = a} :: CreateLocationEfsResponse)
+
+-- | The response's http status code.
+createLocationEfsResponse_httpStatus :: Lens.Lens' CreateLocationEfsResponse Prelude.Int
+createLocationEfsResponse_httpStatus = Lens.lens (\CreateLocationEfsResponse' {httpStatus} -> httpStatus) (\s@CreateLocationEfsResponse' {} a -> s {httpStatus = a} :: CreateLocationEfsResponse)
+
+instance Prelude.NFData CreateLocationEfsResponse where
+  rnf CreateLocationEfsResponse' {..} =
+    Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/CreateLocationFsxLustre.hs b/gen/Amazonka/DataSync/CreateLocationFsxLustre.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/CreateLocationFsxLustre.hs
@@ -0,0 +1,244 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.CreateLocationFsxLustre
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an endpoint for an Amazon FSx for Lustre file system.
+module Amazonka.DataSync.CreateLocationFsxLustre
+  ( -- * Creating a Request
+    CreateLocationFsxLustre (..),
+    newCreateLocationFsxLustre,
+
+    -- * Request Lenses
+    createLocationFsxLustre_subdirectory,
+    createLocationFsxLustre_tags,
+    createLocationFsxLustre_fsxFilesystemArn,
+    createLocationFsxLustre_securityGroupArns,
+
+    -- * Destructuring the Response
+    CreateLocationFsxLustreResponse (..),
+    newCreateLocationFsxLustreResponse,
+
+    -- * Response Lenses
+    createLocationFsxLustreResponse_locationArn,
+    createLocationFsxLustreResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLocationFsxLustre' smart constructor.
+data CreateLocationFsxLustre = CreateLocationFsxLustre'
+  { -- | A subdirectory in the location\'s path. This subdirectory in the FSx for
+    -- Lustre file system is used to read data from the FSx for Lustre source
+    -- location or write data to the FSx for Lustre destination.
+    subdirectory :: Prelude.Maybe Prelude.Text,
+    -- | The key-value pair that represents a tag that you want to add to the
+    -- resource. The value can be an empty string. This value helps you manage,
+    -- filter, and search for your resources. We recommend that you create a
+    -- name tag for your location.
+    tags :: Prelude.Maybe [TagListEntry],
+    -- | The Amazon Resource Name (ARN) for the FSx for Lustre file system.
+    fsxFilesystemArn :: Prelude.Text,
+    -- | The Amazon Resource Names (ARNs) of the security groups that are used to
+    -- configure the FSx for Lustre file system.
+    securityGroupArns :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocationFsxLustre' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'subdirectory', 'createLocationFsxLustre_subdirectory' - A subdirectory in the location\'s path. This subdirectory in the FSx for
+-- Lustre file system is used to read data from the FSx for Lustre source
+-- location or write data to the FSx for Lustre destination.
+--
+-- 'tags', 'createLocationFsxLustre_tags' - The key-value pair that represents a tag that you want to add to the
+-- resource. The value can be an empty string. This value helps you manage,
+-- filter, and search for your resources. We recommend that you create a
+-- name tag for your location.
+--
+-- 'fsxFilesystemArn', 'createLocationFsxLustre_fsxFilesystemArn' - The Amazon Resource Name (ARN) for the FSx for Lustre file system.
+--
+-- 'securityGroupArns', 'createLocationFsxLustre_securityGroupArns' - The Amazon Resource Names (ARNs) of the security groups that are used to
+-- configure the FSx for Lustre file system.
+newCreateLocationFsxLustre ::
+  -- | 'fsxFilesystemArn'
+  Prelude.Text ->
+  -- | 'securityGroupArns'
+  Prelude.NonEmpty Prelude.Text ->
+  CreateLocationFsxLustre
+newCreateLocationFsxLustre
+  pFsxFilesystemArn_
+  pSecurityGroupArns_ =
+    CreateLocationFsxLustre'
+      { subdirectory =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        fsxFilesystemArn = pFsxFilesystemArn_,
+        securityGroupArns =
+          Lens.coerced Lens.# pSecurityGroupArns_
+      }
+
+-- | A subdirectory in the location\'s path. This subdirectory in the FSx for
+-- Lustre file system is used to read data from the FSx for Lustre source
+-- location or write data to the FSx for Lustre destination.
+createLocationFsxLustre_subdirectory :: Lens.Lens' CreateLocationFsxLustre (Prelude.Maybe Prelude.Text)
+createLocationFsxLustre_subdirectory = Lens.lens (\CreateLocationFsxLustre' {subdirectory} -> subdirectory) (\s@CreateLocationFsxLustre' {} a -> s {subdirectory = a} :: CreateLocationFsxLustre)
+
+-- | The key-value pair that represents a tag that you want to add to the
+-- resource. The value can be an empty string. This value helps you manage,
+-- filter, and search for your resources. We recommend that you create a
+-- name tag for your location.
+createLocationFsxLustre_tags :: Lens.Lens' CreateLocationFsxLustre (Prelude.Maybe [TagListEntry])
+createLocationFsxLustre_tags = Lens.lens (\CreateLocationFsxLustre' {tags} -> tags) (\s@CreateLocationFsxLustre' {} a -> s {tags = a} :: CreateLocationFsxLustre) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) for the FSx for Lustre file system.
+createLocationFsxLustre_fsxFilesystemArn :: Lens.Lens' CreateLocationFsxLustre Prelude.Text
+createLocationFsxLustre_fsxFilesystemArn = Lens.lens (\CreateLocationFsxLustre' {fsxFilesystemArn} -> fsxFilesystemArn) (\s@CreateLocationFsxLustre' {} a -> s {fsxFilesystemArn = a} :: CreateLocationFsxLustre)
+
+-- | The Amazon Resource Names (ARNs) of the security groups that are used to
+-- configure the FSx for Lustre file system.
+createLocationFsxLustre_securityGroupArns :: Lens.Lens' CreateLocationFsxLustre (Prelude.NonEmpty Prelude.Text)
+createLocationFsxLustre_securityGroupArns = Lens.lens (\CreateLocationFsxLustre' {securityGroupArns} -> securityGroupArns) (\s@CreateLocationFsxLustre' {} a -> s {securityGroupArns = a} :: CreateLocationFsxLustre) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateLocationFsxLustre where
+  type
+    AWSResponse CreateLocationFsxLustre =
+      CreateLocationFsxLustreResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateLocationFsxLustreResponse'
+            Prelude.<$> (x Data..?> "LocationArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLocationFsxLustre where
+  hashWithSalt _salt CreateLocationFsxLustre' {..} =
+    _salt
+      `Prelude.hashWithSalt` subdirectory
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` fsxFilesystemArn
+      `Prelude.hashWithSalt` securityGroupArns
+
+instance Prelude.NFData CreateLocationFsxLustre where
+  rnf CreateLocationFsxLustre' {..} =
+    Prelude.rnf subdirectory
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf fsxFilesystemArn
+      `Prelude.seq` Prelude.rnf securityGroupArns
+
+instance Data.ToHeaders CreateLocationFsxLustre where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.CreateLocationFsxLustre" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateLocationFsxLustre where
+  toJSON CreateLocationFsxLustre' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Subdirectory" Data..=) Prelude.<$> subdirectory,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("FsxFilesystemArn" Data..= fsxFilesystemArn),
+            Prelude.Just
+              ("SecurityGroupArns" Data..= securityGroupArns)
+          ]
+      )
+
+instance Data.ToPath CreateLocationFsxLustre where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLocationFsxLustre where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateLocationFsxLustreResponse' smart constructor.
+data CreateLocationFsxLustreResponse = CreateLocationFsxLustreResponse'
+  { -- | The Amazon Resource Name (ARN) of the FSx for Lustre file system
+    -- location that\'s created.
+    locationArn :: 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 'CreateLocationFsxLustreResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'createLocationFsxLustreResponse_locationArn' - The Amazon Resource Name (ARN) of the FSx for Lustre file system
+-- location that\'s created.
+--
+-- 'httpStatus', 'createLocationFsxLustreResponse_httpStatus' - The response's http status code.
+newCreateLocationFsxLustreResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLocationFsxLustreResponse
+newCreateLocationFsxLustreResponse pHttpStatus_ =
+  CreateLocationFsxLustreResponse'
+    { locationArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the FSx for Lustre file system
+-- location that\'s created.
+createLocationFsxLustreResponse_locationArn :: Lens.Lens' CreateLocationFsxLustreResponse (Prelude.Maybe Prelude.Text)
+createLocationFsxLustreResponse_locationArn = Lens.lens (\CreateLocationFsxLustreResponse' {locationArn} -> locationArn) (\s@CreateLocationFsxLustreResponse' {} a -> s {locationArn = a} :: CreateLocationFsxLustreResponse)
+
+-- | The response's http status code.
+createLocationFsxLustreResponse_httpStatus :: Lens.Lens' CreateLocationFsxLustreResponse Prelude.Int
+createLocationFsxLustreResponse_httpStatus = Lens.lens (\CreateLocationFsxLustreResponse' {httpStatus} -> httpStatus) (\s@CreateLocationFsxLustreResponse' {} a -> s {httpStatus = a} :: CreateLocationFsxLustreResponse)
+
+instance
+  Prelude.NFData
+    CreateLocationFsxLustreResponse
+  where
+  rnf CreateLocationFsxLustreResponse' {..} =
+    Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/CreateLocationFsxOntap.hs b/gen/Amazonka/DataSync/CreateLocationFsxOntap.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/CreateLocationFsxOntap.hs
@@ -0,0 +1,306 @@
+{-# 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.DataSync.CreateLocationFsxOntap
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an endpoint for an Amazon FSx for NetApp ONTAP file system that
+-- DataSync can access for a transfer. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-ontap-location.html Creating a location for FSx for ONTAP>.
+module Amazonka.DataSync.CreateLocationFsxOntap
+  ( -- * Creating a Request
+    CreateLocationFsxOntap (..),
+    newCreateLocationFsxOntap,
+
+    -- * Request Lenses
+    createLocationFsxOntap_subdirectory,
+    createLocationFsxOntap_tags,
+    createLocationFsxOntap_protocol,
+    createLocationFsxOntap_securityGroupArns,
+    createLocationFsxOntap_storageVirtualMachineArn,
+
+    -- * Destructuring the Response
+    CreateLocationFsxOntapResponse (..),
+    newCreateLocationFsxOntapResponse,
+
+    -- * Response Lenses
+    createLocationFsxOntapResponse_locationArn,
+    createLocationFsxOntapResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLocationFsxOntap' smart constructor.
+data CreateLocationFsxOntap = CreateLocationFsxOntap'
+  { -- | Specifies the junction path (also known as a mount point) in the SVM
+    -- volume where you\'re copying data to or from (for example, @\/vol1@).
+    --
+    -- Don\'t specify a junction path in the SVM\'s root volume. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/managing-svms.html Managing FSx for ONTAP storage virtual machines>
+    -- in the /Amazon FSx for NetApp ONTAP User Guide/.
+    subdirectory :: Prelude.Maybe Prelude.Text,
+    -- | Specifies labels that help you categorize, filter, and search for your
+    -- Amazon Web Services resources. We recommend creating at least a name tag
+    -- for your location.
+    tags :: Prelude.Maybe [TagListEntry],
+    protocol :: FsxProtocol,
+    -- | Specifies the Amazon EC2 security groups that provide access to your
+    -- file system\'s preferred subnet.
+    --
+    -- The security groups must allow outbound traffic on the following ports
+    -- (depending on the protocol you use):
+    --
+    -- -   __Network File System (NFS)__: TCP ports 111, 635, and 2049
+    --
+    -- -   __Server Message Block (SMB)__: TCP port 445
+    --
+    -- Your file system\'s security groups must also allow inbound traffic on
+    -- the same ports.
+    securityGroupArns :: Prelude.NonEmpty Prelude.Text,
+    -- | Specifies the ARN of the storage virtual machine (SVM) on your file
+    -- system where you\'re copying data to or from.
+    storageVirtualMachineArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocationFsxOntap' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'subdirectory', 'createLocationFsxOntap_subdirectory' - Specifies the junction path (also known as a mount point) in the SVM
+-- volume where you\'re copying data to or from (for example, @\/vol1@).
+--
+-- Don\'t specify a junction path in the SVM\'s root volume. For more
+-- information, see
+-- <https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/managing-svms.html Managing FSx for ONTAP storage virtual machines>
+-- in the /Amazon FSx for NetApp ONTAP User Guide/.
+--
+-- 'tags', 'createLocationFsxOntap_tags' - Specifies labels that help you categorize, filter, and search for your
+-- Amazon Web Services resources. We recommend creating at least a name tag
+-- for your location.
+--
+-- 'protocol', 'createLocationFsxOntap_protocol' - Undocumented member.
+--
+-- 'securityGroupArns', 'createLocationFsxOntap_securityGroupArns' - Specifies the Amazon EC2 security groups that provide access to your
+-- file system\'s preferred subnet.
+--
+-- The security groups must allow outbound traffic on the following ports
+-- (depending on the protocol you use):
+--
+-- -   __Network File System (NFS)__: TCP ports 111, 635, and 2049
+--
+-- -   __Server Message Block (SMB)__: TCP port 445
+--
+-- Your file system\'s security groups must also allow inbound traffic on
+-- the same ports.
+--
+-- 'storageVirtualMachineArn', 'createLocationFsxOntap_storageVirtualMachineArn' - Specifies the ARN of the storage virtual machine (SVM) on your file
+-- system where you\'re copying data to or from.
+newCreateLocationFsxOntap ::
+  -- | 'protocol'
+  FsxProtocol ->
+  -- | 'securityGroupArns'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'storageVirtualMachineArn'
+  Prelude.Text ->
+  CreateLocationFsxOntap
+newCreateLocationFsxOntap
+  pProtocol_
+  pSecurityGroupArns_
+  pStorageVirtualMachineArn_ =
+    CreateLocationFsxOntap'
+      { subdirectory =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        protocol = pProtocol_,
+        securityGroupArns =
+          Lens.coerced Lens.# pSecurityGroupArns_,
+        storageVirtualMachineArn =
+          pStorageVirtualMachineArn_
+      }
+
+-- | Specifies the junction path (also known as a mount point) in the SVM
+-- volume where you\'re copying data to or from (for example, @\/vol1@).
+--
+-- Don\'t specify a junction path in the SVM\'s root volume. For more
+-- information, see
+-- <https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/managing-svms.html Managing FSx for ONTAP storage virtual machines>
+-- in the /Amazon FSx for NetApp ONTAP User Guide/.
+createLocationFsxOntap_subdirectory :: Lens.Lens' CreateLocationFsxOntap (Prelude.Maybe Prelude.Text)
+createLocationFsxOntap_subdirectory = Lens.lens (\CreateLocationFsxOntap' {subdirectory} -> subdirectory) (\s@CreateLocationFsxOntap' {} a -> s {subdirectory = a} :: CreateLocationFsxOntap)
+
+-- | Specifies labels that help you categorize, filter, and search for your
+-- Amazon Web Services resources. We recommend creating at least a name tag
+-- for your location.
+createLocationFsxOntap_tags :: Lens.Lens' CreateLocationFsxOntap (Prelude.Maybe [TagListEntry])
+createLocationFsxOntap_tags = Lens.lens (\CreateLocationFsxOntap' {tags} -> tags) (\s@CreateLocationFsxOntap' {} a -> s {tags = a} :: CreateLocationFsxOntap) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+createLocationFsxOntap_protocol :: Lens.Lens' CreateLocationFsxOntap FsxProtocol
+createLocationFsxOntap_protocol = Lens.lens (\CreateLocationFsxOntap' {protocol} -> protocol) (\s@CreateLocationFsxOntap' {} a -> s {protocol = a} :: CreateLocationFsxOntap)
+
+-- | Specifies the Amazon EC2 security groups that provide access to your
+-- file system\'s preferred subnet.
+--
+-- The security groups must allow outbound traffic on the following ports
+-- (depending on the protocol you use):
+--
+-- -   __Network File System (NFS)__: TCP ports 111, 635, and 2049
+--
+-- -   __Server Message Block (SMB)__: TCP port 445
+--
+-- Your file system\'s security groups must also allow inbound traffic on
+-- the same ports.
+createLocationFsxOntap_securityGroupArns :: Lens.Lens' CreateLocationFsxOntap (Prelude.NonEmpty Prelude.Text)
+createLocationFsxOntap_securityGroupArns = Lens.lens (\CreateLocationFsxOntap' {securityGroupArns} -> securityGroupArns) (\s@CreateLocationFsxOntap' {} a -> s {securityGroupArns = a} :: CreateLocationFsxOntap) Prelude.. Lens.coerced
+
+-- | Specifies the ARN of the storage virtual machine (SVM) on your file
+-- system where you\'re copying data to or from.
+createLocationFsxOntap_storageVirtualMachineArn :: Lens.Lens' CreateLocationFsxOntap Prelude.Text
+createLocationFsxOntap_storageVirtualMachineArn = Lens.lens (\CreateLocationFsxOntap' {storageVirtualMachineArn} -> storageVirtualMachineArn) (\s@CreateLocationFsxOntap' {} a -> s {storageVirtualMachineArn = a} :: CreateLocationFsxOntap)
+
+instance Core.AWSRequest CreateLocationFsxOntap where
+  type
+    AWSResponse CreateLocationFsxOntap =
+      CreateLocationFsxOntapResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateLocationFsxOntapResponse'
+            Prelude.<$> (x Data..?> "LocationArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLocationFsxOntap where
+  hashWithSalt _salt CreateLocationFsxOntap' {..} =
+    _salt
+      `Prelude.hashWithSalt` subdirectory
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` securityGroupArns
+      `Prelude.hashWithSalt` storageVirtualMachineArn
+
+instance Prelude.NFData CreateLocationFsxOntap where
+  rnf CreateLocationFsxOntap' {..} =
+    Prelude.rnf subdirectory
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf securityGroupArns
+      `Prelude.seq` Prelude.rnf storageVirtualMachineArn
+
+instance Data.ToHeaders CreateLocationFsxOntap where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.CreateLocationFsxOntap" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateLocationFsxOntap where
+  toJSON CreateLocationFsxOntap' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Subdirectory" Data..=) Prelude.<$> subdirectory,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Protocol" Data..= protocol),
+            Prelude.Just
+              ("SecurityGroupArns" Data..= securityGroupArns),
+            Prelude.Just
+              ( "StorageVirtualMachineArn"
+                  Data..= storageVirtualMachineArn
+              )
+          ]
+      )
+
+instance Data.ToPath CreateLocationFsxOntap where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLocationFsxOntap where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateLocationFsxOntapResponse' smart constructor.
+data CreateLocationFsxOntapResponse = CreateLocationFsxOntapResponse'
+  { -- | Specifies the ARN of the FSx for ONTAP file system location that you
+    -- create.
+    locationArn :: 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 'CreateLocationFsxOntapResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'createLocationFsxOntapResponse_locationArn' - Specifies the ARN of the FSx for ONTAP file system location that you
+-- create.
+--
+-- 'httpStatus', 'createLocationFsxOntapResponse_httpStatus' - The response's http status code.
+newCreateLocationFsxOntapResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLocationFsxOntapResponse
+newCreateLocationFsxOntapResponse pHttpStatus_ =
+  CreateLocationFsxOntapResponse'
+    { locationArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Specifies the ARN of the FSx for ONTAP file system location that you
+-- create.
+createLocationFsxOntapResponse_locationArn :: Lens.Lens' CreateLocationFsxOntapResponse (Prelude.Maybe Prelude.Text)
+createLocationFsxOntapResponse_locationArn = Lens.lens (\CreateLocationFsxOntapResponse' {locationArn} -> locationArn) (\s@CreateLocationFsxOntapResponse' {} a -> s {locationArn = a} :: CreateLocationFsxOntapResponse)
+
+-- | The response's http status code.
+createLocationFsxOntapResponse_httpStatus :: Lens.Lens' CreateLocationFsxOntapResponse Prelude.Int
+createLocationFsxOntapResponse_httpStatus = Lens.lens (\CreateLocationFsxOntapResponse' {httpStatus} -> httpStatus) (\s@CreateLocationFsxOntapResponse' {} a -> s {httpStatus = a} :: CreateLocationFsxOntapResponse)
+
+instance
+  Prelude.NFData
+    CreateLocationFsxOntapResponse
+  where
+  rnf CreateLocationFsxOntapResponse' {..} =
+    Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/CreateLocationFsxOpenZfs.hs b/gen/Amazonka/DataSync/CreateLocationFsxOpenZfs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/CreateLocationFsxOpenZfs.hs
@@ -0,0 +1,262 @@
+{-# 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.DataSync.CreateLocationFsxOpenZfs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an endpoint for an Amazon FSx for OpenZFS file system that
+-- DataSync can access for a transfer. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-openzfs-location.html Creating a location for FSx for OpenZFS>.
+--
+-- Request parameters related to @SMB@ aren\'t supported with the
+-- @CreateLocationFsxOpenZfs@ operation.
+module Amazonka.DataSync.CreateLocationFsxOpenZfs
+  ( -- * Creating a Request
+    CreateLocationFsxOpenZfs (..),
+    newCreateLocationFsxOpenZfs,
+
+    -- * Request Lenses
+    createLocationFsxOpenZfs_subdirectory,
+    createLocationFsxOpenZfs_tags,
+    createLocationFsxOpenZfs_fsxFilesystemArn,
+    createLocationFsxOpenZfs_protocol,
+    createLocationFsxOpenZfs_securityGroupArns,
+
+    -- * Destructuring the Response
+    CreateLocationFsxOpenZfsResponse (..),
+    newCreateLocationFsxOpenZfsResponse,
+
+    -- * Response Lenses
+    createLocationFsxOpenZfsResponse_locationArn,
+    createLocationFsxOpenZfsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLocationFsxOpenZfs' smart constructor.
+data CreateLocationFsxOpenZfs = CreateLocationFsxOpenZfs'
+  { -- | A subdirectory in the location\'s path that must begin with @\/fsx@.
+    -- DataSync uses this subdirectory to read or write data (depending on
+    -- whether the file system is a source or destination location).
+    subdirectory :: Prelude.Maybe Prelude.Text,
+    -- | The key-value pair that represents a tag that you want to add to the
+    -- resource. The value can be an empty string. This value helps you manage,
+    -- filter, and search for your resources. We recommend that you create a
+    -- name tag for your location.
+    tags :: Prelude.Maybe [TagListEntry],
+    -- | The Amazon Resource Name (ARN) of the FSx for OpenZFS file system.
+    fsxFilesystemArn :: Prelude.Text,
+    -- | The type of protocol that DataSync uses to access your file system.
+    protocol :: FsxProtocol,
+    -- | The ARNs of the security groups that are used to configure the FSx for
+    -- OpenZFS file system.
+    securityGroupArns :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocationFsxOpenZfs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'subdirectory', 'createLocationFsxOpenZfs_subdirectory' - A subdirectory in the location\'s path that must begin with @\/fsx@.
+-- DataSync uses this subdirectory to read or write data (depending on
+-- whether the file system is a source or destination location).
+--
+-- 'tags', 'createLocationFsxOpenZfs_tags' - The key-value pair that represents a tag that you want to add to the
+-- resource. The value can be an empty string. This value helps you manage,
+-- filter, and search for your resources. We recommend that you create a
+-- name tag for your location.
+--
+-- 'fsxFilesystemArn', 'createLocationFsxOpenZfs_fsxFilesystemArn' - The Amazon Resource Name (ARN) of the FSx for OpenZFS file system.
+--
+-- 'protocol', 'createLocationFsxOpenZfs_protocol' - The type of protocol that DataSync uses to access your file system.
+--
+-- 'securityGroupArns', 'createLocationFsxOpenZfs_securityGroupArns' - The ARNs of the security groups that are used to configure the FSx for
+-- OpenZFS file system.
+newCreateLocationFsxOpenZfs ::
+  -- | 'fsxFilesystemArn'
+  Prelude.Text ->
+  -- | 'protocol'
+  FsxProtocol ->
+  -- | 'securityGroupArns'
+  Prelude.NonEmpty Prelude.Text ->
+  CreateLocationFsxOpenZfs
+newCreateLocationFsxOpenZfs
+  pFsxFilesystemArn_
+  pProtocol_
+  pSecurityGroupArns_ =
+    CreateLocationFsxOpenZfs'
+      { subdirectory =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        fsxFilesystemArn = pFsxFilesystemArn_,
+        protocol = pProtocol_,
+        securityGroupArns =
+          Lens.coerced Lens.# pSecurityGroupArns_
+      }
+
+-- | A subdirectory in the location\'s path that must begin with @\/fsx@.
+-- DataSync uses this subdirectory to read or write data (depending on
+-- whether the file system is a source or destination location).
+createLocationFsxOpenZfs_subdirectory :: Lens.Lens' CreateLocationFsxOpenZfs (Prelude.Maybe Prelude.Text)
+createLocationFsxOpenZfs_subdirectory = Lens.lens (\CreateLocationFsxOpenZfs' {subdirectory} -> subdirectory) (\s@CreateLocationFsxOpenZfs' {} a -> s {subdirectory = a} :: CreateLocationFsxOpenZfs)
+
+-- | The key-value pair that represents a tag that you want to add to the
+-- resource. The value can be an empty string. This value helps you manage,
+-- filter, and search for your resources. We recommend that you create a
+-- name tag for your location.
+createLocationFsxOpenZfs_tags :: Lens.Lens' CreateLocationFsxOpenZfs (Prelude.Maybe [TagListEntry])
+createLocationFsxOpenZfs_tags = Lens.lens (\CreateLocationFsxOpenZfs' {tags} -> tags) (\s@CreateLocationFsxOpenZfs' {} a -> s {tags = a} :: CreateLocationFsxOpenZfs) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the FSx for OpenZFS file system.
+createLocationFsxOpenZfs_fsxFilesystemArn :: Lens.Lens' CreateLocationFsxOpenZfs Prelude.Text
+createLocationFsxOpenZfs_fsxFilesystemArn = Lens.lens (\CreateLocationFsxOpenZfs' {fsxFilesystemArn} -> fsxFilesystemArn) (\s@CreateLocationFsxOpenZfs' {} a -> s {fsxFilesystemArn = a} :: CreateLocationFsxOpenZfs)
+
+-- | The type of protocol that DataSync uses to access your file system.
+createLocationFsxOpenZfs_protocol :: Lens.Lens' CreateLocationFsxOpenZfs FsxProtocol
+createLocationFsxOpenZfs_protocol = Lens.lens (\CreateLocationFsxOpenZfs' {protocol} -> protocol) (\s@CreateLocationFsxOpenZfs' {} a -> s {protocol = a} :: CreateLocationFsxOpenZfs)
+
+-- | The ARNs of the security groups that are used to configure the FSx for
+-- OpenZFS file system.
+createLocationFsxOpenZfs_securityGroupArns :: Lens.Lens' CreateLocationFsxOpenZfs (Prelude.NonEmpty Prelude.Text)
+createLocationFsxOpenZfs_securityGroupArns = Lens.lens (\CreateLocationFsxOpenZfs' {securityGroupArns} -> securityGroupArns) (\s@CreateLocationFsxOpenZfs' {} a -> s {securityGroupArns = a} :: CreateLocationFsxOpenZfs) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateLocationFsxOpenZfs where
+  type
+    AWSResponse CreateLocationFsxOpenZfs =
+      CreateLocationFsxOpenZfsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateLocationFsxOpenZfsResponse'
+            Prelude.<$> (x Data..?> "LocationArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLocationFsxOpenZfs where
+  hashWithSalt _salt CreateLocationFsxOpenZfs' {..} =
+    _salt
+      `Prelude.hashWithSalt` subdirectory
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` fsxFilesystemArn
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` securityGroupArns
+
+instance Prelude.NFData CreateLocationFsxOpenZfs where
+  rnf CreateLocationFsxOpenZfs' {..} =
+    Prelude.rnf subdirectory
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf fsxFilesystemArn
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf securityGroupArns
+
+instance Data.ToHeaders CreateLocationFsxOpenZfs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.CreateLocationFsxOpenZfs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateLocationFsxOpenZfs where
+  toJSON CreateLocationFsxOpenZfs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Subdirectory" Data..=) Prelude.<$> subdirectory,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("FsxFilesystemArn" Data..= fsxFilesystemArn),
+            Prelude.Just ("Protocol" Data..= protocol),
+            Prelude.Just
+              ("SecurityGroupArns" Data..= securityGroupArns)
+          ]
+      )
+
+instance Data.ToPath CreateLocationFsxOpenZfs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLocationFsxOpenZfs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateLocationFsxOpenZfsResponse' smart constructor.
+data CreateLocationFsxOpenZfsResponse = CreateLocationFsxOpenZfsResponse'
+  { -- | The ARN of the FSx for OpenZFS file system location that you created.
+    locationArn :: 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 'CreateLocationFsxOpenZfsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'createLocationFsxOpenZfsResponse_locationArn' - The ARN of the FSx for OpenZFS file system location that you created.
+--
+-- 'httpStatus', 'createLocationFsxOpenZfsResponse_httpStatus' - The response's http status code.
+newCreateLocationFsxOpenZfsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLocationFsxOpenZfsResponse
+newCreateLocationFsxOpenZfsResponse pHttpStatus_ =
+  CreateLocationFsxOpenZfsResponse'
+    { locationArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the FSx for OpenZFS file system location that you created.
+createLocationFsxOpenZfsResponse_locationArn :: Lens.Lens' CreateLocationFsxOpenZfsResponse (Prelude.Maybe Prelude.Text)
+createLocationFsxOpenZfsResponse_locationArn = Lens.lens (\CreateLocationFsxOpenZfsResponse' {locationArn} -> locationArn) (\s@CreateLocationFsxOpenZfsResponse' {} a -> s {locationArn = a} :: CreateLocationFsxOpenZfsResponse)
+
+-- | The response's http status code.
+createLocationFsxOpenZfsResponse_httpStatus :: Lens.Lens' CreateLocationFsxOpenZfsResponse Prelude.Int
+createLocationFsxOpenZfsResponse_httpStatus = Lens.lens (\CreateLocationFsxOpenZfsResponse' {httpStatus} -> httpStatus) (\s@CreateLocationFsxOpenZfsResponse' {} a -> s {httpStatus = a} :: CreateLocationFsxOpenZfsResponse)
+
+instance
+  Prelude.NFData
+    CreateLocationFsxOpenZfsResponse
+  where
+  rnf CreateLocationFsxOpenZfsResponse' {..} =
+    Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/CreateLocationFsxWindows.hs b/gen/Amazonka/DataSync/CreateLocationFsxWindows.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/CreateLocationFsxWindows.hs
@@ -0,0 +1,337 @@
+{-# 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.DataSync.CreateLocationFsxWindows
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an endpoint for an Amazon FSx for Windows File Server file
+-- system.
+module Amazonka.DataSync.CreateLocationFsxWindows
+  ( -- * Creating a Request
+    CreateLocationFsxWindows (..),
+    newCreateLocationFsxWindows,
+
+    -- * Request Lenses
+    createLocationFsxWindows_domain,
+    createLocationFsxWindows_subdirectory,
+    createLocationFsxWindows_tags,
+    createLocationFsxWindows_fsxFilesystemArn,
+    createLocationFsxWindows_securityGroupArns,
+    createLocationFsxWindows_user,
+    createLocationFsxWindows_password,
+
+    -- * Destructuring the Response
+    CreateLocationFsxWindowsResponse (..),
+    newCreateLocationFsxWindowsResponse,
+
+    -- * Response Lenses
+    createLocationFsxWindowsResponse_locationArn,
+    createLocationFsxWindowsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLocationFsxWindows' smart constructor.
+data CreateLocationFsxWindows = CreateLocationFsxWindows'
+  { -- | Specifies the name of the Windows domain that the FSx for Windows File
+    -- Server belongs to.
+    domain :: Prelude.Maybe Prelude.Text,
+    -- | Specifies a mount path for your file system using forward slashes. This
+    -- is where DataSync reads or writes data (depending on if this is a source
+    -- or destination location).
+    subdirectory :: Prelude.Maybe Prelude.Text,
+    -- | Specifies labels that help you categorize, filter, and search for your
+    -- Amazon Web Services resources. We recommend creating at least a name tag
+    -- for your location.
+    tags :: Prelude.Maybe [TagListEntry],
+    -- | Specifies the Amazon Resource Name (ARN) for the FSx for Windows File
+    -- Server file system.
+    fsxFilesystemArn :: Prelude.Text,
+    -- | Specifies the ARNs of the security groups that provide access to your
+    -- file system\'s preferred subnet.
+    --
+    -- If you choose a security group that doesn\'t allow connections from
+    -- within itself, do one of the following:
+    --
+    -- -   Configure the security group to allow it to communicate within
+    --     itself.
+    --
+    -- -   Choose a different security group that can communicate with the
+    --     mount target\'s security group.
+    securityGroupArns :: Prelude.NonEmpty Prelude.Text,
+    -- | Specifies the user who has the permissions to access files and folders
+    -- in the file system.
+    --
+    -- For information about choosing a user name that ensures sufficient
+    -- permissions to files, folders, and metadata, see
+    -- <create-fsx-location.html#FSxWuser user>.
+    user :: Prelude.Text,
+    -- | Specifies the password of the user who has the permissions to access
+    -- files and folders in the file system.
+    password :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocationFsxWindows' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domain', 'createLocationFsxWindows_domain' - Specifies the name of the Windows domain that the FSx for Windows File
+-- Server belongs to.
+--
+-- 'subdirectory', 'createLocationFsxWindows_subdirectory' - Specifies a mount path for your file system using forward slashes. This
+-- is where DataSync reads or writes data (depending on if this is a source
+-- or destination location).
+--
+-- 'tags', 'createLocationFsxWindows_tags' - Specifies labels that help you categorize, filter, and search for your
+-- Amazon Web Services resources. We recommend creating at least a name tag
+-- for your location.
+--
+-- 'fsxFilesystemArn', 'createLocationFsxWindows_fsxFilesystemArn' - Specifies the Amazon Resource Name (ARN) for the FSx for Windows File
+-- Server file system.
+--
+-- 'securityGroupArns', 'createLocationFsxWindows_securityGroupArns' - Specifies the ARNs of the security groups that provide access to your
+-- file system\'s preferred subnet.
+--
+-- If you choose a security group that doesn\'t allow connections from
+-- within itself, do one of the following:
+--
+-- -   Configure the security group to allow it to communicate within
+--     itself.
+--
+-- -   Choose a different security group that can communicate with the
+--     mount target\'s security group.
+--
+-- 'user', 'createLocationFsxWindows_user' - Specifies the user who has the permissions to access files and folders
+-- in the file system.
+--
+-- For information about choosing a user name that ensures sufficient
+-- permissions to files, folders, and metadata, see
+-- <create-fsx-location.html#FSxWuser user>.
+--
+-- 'password', 'createLocationFsxWindows_password' - Specifies the password of the user who has the permissions to access
+-- files and folders in the file system.
+newCreateLocationFsxWindows ::
+  -- | 'fsxFilesystemArn'
+  Prelude.Text ->
+  -- | 'securityGroupArns'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'user'
+  Prelude.Text ->
+  -- | 'password'
+  Prelude.Text ->
+  CreateLocationFsxWindows
+newCreateLocationFsxWindows
+  pFsxFilesystemArn_
+  pSecurityGroupArns_
+  pUser_
+  pPassword_ =
+    CreateLocationFsxWindows'
+      { domain = Prelude.Nothing,
+        subdirectory = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        fsxFilesystemArn = pFsxFilesystemArn_,
+        securityGroupArns =
+          Lens.coerced Lens.# pSecurityGroupArns_,
+        user = pUser_,
+        password = Data._Sensitive Lens.# pPassword_
+      }
+
+-- | Specifies the name of the Windows domain that the FSx for Windows File
+-- Server belongs to.
+createLocationFsxWindows_domain :: Lens.Lens' CreateLocationFsxWindows (Prelude.Maybe Prelude.Text)
+createLocationFsxWindows_domain = Lens.lens (\CreateLocationFsxWindows' {domain} -> domain) (\s@CreateLocationFsxWindows' {} a -> s {domain = a} :: CreateLocationFsxWindows)
+
+-- | Specifies a mount path for your file system using forward slashes. This
+-- is where DataSync reads or writes data (depending on if this is a source
+-- or destination location).
+createLocationFsxWindows_subdirectory :: Lens.Lens' CreateLocationFsxWindows (Prelude.Maybe Prelude.Text)
+createLocationFsxWindows_subdirectory = Lens.lens (\CreateLocationFsxWindows' {subdirectory} -> subdirectory) (\s@CreateLocationFsxWindows' {} a -> s {subdirectory = a} :: CreateLocationFsxWindows)
+
+-- | Specifies labels that help you categorize, filter, and search for your
+-- Amazon Web Services resources. We recommend creating at least a name tag
+-- for your location.
+createLocationFsxWindows_tags :: Lens.Lens' CreateLocationFsxWindows (Prelude.Maybe [TagListEntry])
+createLocationFsxWindows_tags = Lens.lens (\CreateLocationFsxWindows' {tags} -> tags) (\s@CreateLocationFsxWindows' {} a -> s {tags = a} :: CreateLocationFsxWindows) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the Amazon Resource Name (ARN) for the FSx for Windows File
+-- Server file system.
+createLocationFsxWindows_fsxFilesystemArn :: Lens.Lens' CreateLocationFsxWindows Prelude.Text
+createLocationFsxWindows_fsxFilesystemArn = Lens.lens (\CreateLocationFsxWindows' {fsxFilesystemArn} -> fsxFilesystemArn) (\s@CreateLocationFsxWindows' {} a -> s {fsxFilesystemArn = a} :: CreateLocationFsxWindows)
+
+-- | Specifies the ARNs of the security groups that provide access to your
+-- file system\'s preferred subnet.
+--
+-- If you choose a security group that doesn\'t allow connections from
+-- within itself, do one of the following:
+--
+-- -   Configure the security group to allow it to communicate within
+--     itself.
+--
+-- -   Choose a different security group that can communicate with the
+--     mount target\'s security group.
+createLocationFsxWindows_securityGroupArns :: Lens.Lens' CreateLocationFsxWindows (Prelude.NonEmpty Prelude.Text)
+createLocationFsxWindows_securityGroupArns = Lens.lens (\CreateLocationFsxWindows' {securityGroupArns} -> securityGroupArns) (\s@CreateLocationFsxWindows' {} a -> s {securityGroupArns = a} :: CreateLocationFsxWindows) Prelude.. Lens.coerced
+
+-- | Specifies the user who has the permissions to access files and folders
+-- in the file system.
+--
+-- For information about choosing a user name that ensures sufficient
+-- permissions to files, folders, and metadata, see
+-- <create-fsx-location.html#FSxWuser user>.
+createLocationFsxWindows_user :: Lens.Lens' CreateLocationFsxWindows Prelude.Text
+createLocationFsxWindows_user = Lens.lens (\CreateLocationFsxWindows' {user} -> user) (\s@CreateLocationFsxWindows' {} a -> s {user = a} :: CreateLocationFsxWindows)
+
+-- | Specifies the password of the user who has the permissions to access
+-- files and folders in the file system.
+createLocationFsxWindows_password :: Lens.Lens' CreateLocationFsxWindows Prelude.Text
+createLocationFsxWindows_password = Lens.lens (\CreateLocationFsxWindows' {password} -> password) (\s@CreateLocationFsxWindows' {} a -> s {password = a} :: CreateLocationFsxWindows) Prelude.. Data._Sensitive
+
+instance Core.AWSRequest CreateLocationFsxWindows where
+  type
+    AWSResponse CreateLocationFsxWindows =
+      CreateLocationFsxWindowsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateLocationFsxWindowsResponse'
+            Prelude.<$> (x Data..?> "LocationArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLocationFsxWindows where
+  hashWithSalt _salt CreateLocationFsxWindows' {..} =
+    _salt
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` subdirectory
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` fsxFilesystemArn
+      `Prelude.hashWithSalt` securityGroupArns
+      `Prelude.hashWithSalt` user
+      `Prelude.hashWithSalt` password
+
+instance Prelude.NFData CreateLocationFsxWindows where
+  rnf CreateLocationFsxWindows' {..} =
+    Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf subdirectory
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf fsxFilesystemArn
+      `Prelude.seq` Prelude.rnf securityGroupArns
+      `Prelude.seq` Prelude.rnf user
+      `Prelude.seq` Prelude.rnf password
+
+instance Data.ToHeaders CreateLocationFsxWindows where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.CreateLocationFsxWindows" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateLocationFsxWindows where
+  toJSON CreateLocationFsxWindows' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Domain" Data..=) Prelude.<$> domain,
+            ("Subdirectory" Data..=) Prelude.<$> subdirectory,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("FsxFilesystemArn" Data..= fsxFilesystemArn),
+            Prelude.Just
+              ("SecurityGroupArns" Data..= securityGroupArns),
+            Prelude.Just ("User" Data..= user),
+            Prelude.Just ("Password" Data..= password)
+          ]
+      )
+
+instance Data.ToPath CreateLocationFsxWindows where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLocationFsxWindows where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateLocationFsxWindowsResponse' smart constructor.
+data CreateLocationFsxWindowsResponse = CreateLocationFsxWindowsResponse'
+  { -- | The ARN of the FSx for Windows File Server file system location you
+    -- created.
+    locationArn :: 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 'CreateLocationFsxWindowsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'createLocationFsxWindowsResponse_locationArn' - The ARN of the FSx for Windows File Server file system location you
+-- created.
+--
+-- 'httpStatus', 'createLocationFsxWindowsResponse_httpStatus' - The response's http status code.
+newCreateLocationFsxWindowsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLocationFsxWindowsResponse
+newCreateLocationFsxWindowsResponse pHttpStatus_ =
+  CreateLocationFsxWindowsResponse'
+    { locationArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the FSx for Windows File Server file system location you
+-- created.
+createLocationFsxWindowsResponse_locationArn :: Lens.Lens' CreateLocationFsxWindowsResponse (Prelude.Maybe Prelude.Text)
+createLocationFsxWindowsResponse_locationArn = Lens.lens (\CreateLocationFsxWindowsResponse' {locationArn} -> locationArn) (\s@CreateLocationFsxWindowsResponse' {} a -> s {locationArn = a} :: CreateLocationFsxWindowsResponse)
+
+-- | The response's http status code.
+createLocationFsxWindowsResponse_httpStatus :: Lens.Lens' CreateLocationFsxWindowsResponse Prelude.Int
+createLocationFsxWindowsResponse_httpStatus = Lens.lens (\CreateLocationFsxWindowsResponse' {httpStatus} -> httpStatus) (\s@CreateLocationFsxWindowsResponse' {} a -> s {httpStatus = a} :: CreateLocationFsxWindowsResponse)
+
+instance
+  Prelude.NFData
+    CreateLocationFsxWindowsResponse
+  where
+  rnf CreateLocationFsxWindowsResponse' {..} =
+    Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/CreateLocationHdfs.hs b/gen/Amazonka/DataSync/CreateLocationHdfs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/CreateLocationHdfs.hs
@@ -0,0 +1,467 @@
+{-# 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.DataSync.CreateLocationHdfs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an endpoint for a Hadoop Distributed File System (HDFS).
+module Amazonka.DataSync.CreateLocationHdfs
+  ( -- * Creating a Request
+    CreateLocationHdfs (..),
+    newCreateLocationHdfs,
+
+    -- * Request Lenses
+    createLocationHdfs_blockSize,
+    createLocationHdfs_kerberosKeytab,
+    createLocationHdfs_kerberosKrb5Conf,
+    createLocationHdfs_kerberosPrincipal,
+    createLocationHdfs_kmsKeyProviderUri,
+    createLocationHdfs_qopConfiguration,
+    createLocationHdfs_replicationFactor,
+    createLocationHdfs_simpleUser,
+    createLocationHdfs_subdirectory,
+    createLocationHdfs_tags,
+    createLocationHdfs_nameNodes,
+    createLocationHdfs_authenticationType,
+    createLocationHdfs_agentArns,
+
+    -- * Destructuring the Response
+    CreateLocationHdfsResponse (..),
+    newCreateLocationHdfsResponse,
+
+    -- * Response Lenses
+    createLocationHdfsResponse_locationArn,
+    createLocationHdfsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLocationHdfs' smart constructor.
+data CreateLocationHdfs = CreateLocationHdfs'
+  { -- | The size of data blocks to write into the HDFS cluster. The block size
+    -- must be a multiple of 512 bytes. The default block size is 128 mebibytes
+    -- (MiB).
+    blockSize :: Prelude.Maybe Prelude.Natural,
+    -- | The Kerberos key table (keytab) that contains mappings between the
+    -- defined Kerberos principal and the encrypted keys. You can load the
+    -- keytab from a file by providing the file\'s address. If you\'re using
+    -- the CLI, it performs base64 encoding for you. Otherwise, provide the
+    -- base64-encoded text.
+    --
+    -- If @KERBEROS@ is specified for @AuthenticationType@, this parameter is
+    -- required.
+    kerberosKeytab :: Prelude.Maybe Data.Base64,
+    -- | The @krb5.conf@ file that contains the Kerberos configuration
+    -- information. You can load the @krb5.conf@ file by providing the file\'s
+    -- address. If you\'re using the CLI, it performs the base64 encoding for
+    -- you. Otherwise, provide the base64-encoded text.
+    --
+    -- If @KERBEROS@ is specified for @AuthenticationType@, this parameter is
+    -- required.
+    kerberosKrb5Conf :: Prelude.Maybe Data.Base64,
+    -- | The Kerberos principal with access to the files and folders on the HDFS
+    -- cluster.
+    --
+    -- If @KERBEROS@ is specified for @AuthenticationType@, this parameter is
+    -- required.
+    kerberosPrincipal :: Prelude.Maybe Prelude.Text,
+    -- | The URI of the HDFS cluster\'s Key Management Server (KMS).
+    kmsKeyProviderUri :: Prelude.Maybe Prelude.Text,
+    -- | The Quality of Protection (QOP) configuration specifies the Remote
+    -- Procedure Call (RPC) and data transfer protection settings configured on
+    -- the Hadoop Distributed File System (HDFS) cluster. If @QopConfiguration@
+    -- isn\'t specified, @RpcProtection@ and @DataTransferProtection@ default
+    -- to @PRIVACY@. If you set @RpcProtection@ or @DataTransferProtection@,
+    -- the other parameter assumes the same value.
+    qopConfiguration :: Prelude.Maybe QopConfiguration,
+    -- | The number of DataNodes to replicate the data to when writing to the
+    -- HDFS cluster. By default, data is replicated to three DataNodes.
+    replicationFactor :: Prelude.Maybe Prelude.Natural,
+    -- | The user name used to identify the client on the host operating system.
+    --
+    -- If @SIMPLE@ is specified for @AuthenticationType@, this parameter is
+    -- required.
+    simpleUser :: Prelude.Maybe Prelude.Text,
+    -- | A subdirectory in the HDFS cluster. This subdirectory is used to read
+    -- data from or write data to the HDFS cluster. If the subdirectory isn\'t
+    -- specified, it will default to @\/@.
+    subdirectory :: Prelude.Maybe Prelude.Text,
+    -- | The key-value pair that represents the tag that you want to add to the
+    -- location. The value can be an empty string. We recommend using tags to
+    -- name your resources.
+    tags :: Prelude.Maybe [TagListEntry],
+    -- | The NameNode that manages the HDFS namespace. The NameNode performs
+    -- operations such as opening, closing, and renaming files and directories.
+    -- The NameNode contains the information to map blocks of data to the
+    -- DataNodes. You can use only one NameNode.
+    nameNodes :: Prelude.NonEmpty HdfsNameNode,
+    -- | The type of authentication used to determine the identity of the user.
+    authenticationType :: HdfsAuthenticationType,
+    -- | The Amazon Resource Names (ARNs) of the agents that are used to connect
+    -- to the HDFS cluster.
+    agentArns :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocationHdfs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blockSize', 'createLocationHdfs_blockSize' - The size of data blocks to write into the HDFS cluster. The block size
+-- must be a multiple of 512 bytes. The default block size is 128 mebibytes
+-- (MiB).
+--
+-- 'kerberosKeytab', 'createLocationHdfs_kerberosKeytab' - The Kerberos key table (keytab) that contains mappings between the
+-- defined Kerberos principal and the encrypted keys. You can load the
+-- keytab from a file by providing the file\'s address. If you\'re using
+-- the CLI, it performs base64 encoding for you. Otherwise, provide the
+-- base64-encoded text.
+--
+-- If @KERBEROS@ is specified for @AuthenticationType@, this parameter is
+-- required.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+--
+-- 'kerberosKrb5Conf', 'createLocationHdfs_kerberosKrb5Conf' - The @krb5.conf@ file that contains the Kerberos configuration
+-- information. You can load the @krb5.conf@ file by providing the file\'s
+-- address. If you\'re using the CLI, it performs the base64 encoding for
+-- you. Otherwise, provide the base64-encoded text.
+--
+-- If @KERBEROS@ is specified for @AuthenticationType@, this parameter is
+-- required.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+--
+-- 'kerberosPrincipal', 'createLocationHdfs_kerberosPrincipal' - The Kerberos principal with access to the files and folders on the HDFS
+-- cluster.
+--
+-- If @KERBEROS@ is specified for @AuthenticationType@, this parameter is
+-- required.
+--
+-- 'kmsKeyProviderUri', 'createLocationHdfs_kmsKeyProviderUri' - The URI of the HDFS cluster\'s Key Management Server (KMS).
+--
+-- 'qopConfiguration', 'createLocationHdfs_qopConfiguration' - The Quality of Protection (QOP) configuration specifies the Remote
+-- Procedure Call (RPC) and data transfer protection settings configured on
+-- the Hadoop Distributed File System (HDFS) cluster. If @QopConfiguration@
+-- isn\'t specified, @RpcProtection@ and @DataTransferProtection@ default
+-- to @PRIVACY@. If you set @RpcProtection@ or @DataTransferProtection@,
+-- the other parameter assumes the same value.
+--
+-- 'replicationFactor', 'createLocationHdfs_replicationFactor' - The number of DataNodes to replicate the data to when writing to the
+-- HDFS cluster. By default, data is replicated to three DataNodes.
+--
+-- 'simpleUser', 'createLocationHdfs_simpleUser' - The user name used to identify the client on the host operating system.
+--
+-- If @SIMPLE@ is specified for @AuthenticationType@, this parameter is
+-- required.
+--
+-- 'subdirectory', 'createLocationHdfs_subdirectory' - A subdirectory in the HDFS cluster. This subdirectory is used to read
+-- data from or write data to the HDFS cluster. If the subdirectory isn\'t
+-- specified, it will default to @\/@.
+--
+-- 'tags', 'createLocationHdfs_tags' - The key-value pair that represents the tag that you want to add to the
+-- location. The value can be an empty string. We recommend using tags to
+-- name your resources.
+--
+-- 'nameNodes', 'createLocationHdfs_nameNodes' - The NameNode that manages the HDFS namespace. The NameNode performs
+-- operations such as opening, closing, and renaming files and directories.
+-- The NameNode contains the information to map blocks of data to the
+-- DataNodes. You can use only one NameNode.
+--
+-- 'authenticationType', 'createLocationHdfs_authenticationType' - The type of authentication used to determine the identity of the user.
+--
+-- 'agentArns', 'createLocationHdfs_agentArns' - The Amazon Resource Names (ARNs) of the agents that are used to connect
+-- to the HDFS cluster.
+newCreateLocationHdfs ::
+  -- | 'nameNodes'
+  Prelude.NonEmpty HdfsNameNode ->
+  -- | 'authenticationType'
+  HdfsAuthenticationType ->
+  -- | 'agentArns'
+  Prelude.NonEmpty Prelude.Text ->
+  CreateLocationHdfs
+newCreateLocationHdfs
+  pNameNodes_
+  pAuthenticationType_
+  pAgentArns_ =
+    CreateLocationHdfs'
+      { blockSize = Prelude.Nothing,
+        kerberosKeytab = Prelude.Nothing,
+        kerberosKrb5Conf = Prelude.Nothing,
+        kerberosPrincipal = Prelude.Nothing,
+        kmsKeyProviderUri = Prelude.Nothing,
+        qopConfiguration = Prelude.Nothing,
+        replicationFactor = Prelude.Nothing,
+        simpleUser = Prelude.Nothing,
+        subdirectory = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        nameNodes = Lens.coerced Lens.# pNameNodes_,
+        authenticationType = pAuthenticationType_,
+        agentArns = Lens.coerced Lens.# pAgentArns_
+      }
+
+-- | The size of data blocks to write into the HDFS cluster. The block size
+-- must be a multiple of 512 bytes. The default block size is 128 mebibytes
+-- (MiB).
+createLocationHdfs_blockSize :: Lens.Lens' CreateLocationHdfs (Prelude.Maybe Prelude.Natural)
+createLocationHdfs_blockSize = Lens.lens (\CreateLocationHdfs' {blockSize} -> blockSize) (\s@CreateLocationHdfs' {} a -> s {blockSize = a} :: CreateLocationHdfs)
+
+-- | The Kerberos key table (keytab) that contains mappings between the
+-- defined Kerberos principal and the encrypted keys. You can load the
+-- keytab from a file by providing the file\'s address. If you\'re using
+-- the CLI, it performs base64 encoding for you. Otherwise, provide the
+-- base64-encoded text.
+--
+-- If @KERBEROS@ is specified for @AuthenticationType@, this parameter is
+-- required.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+createLocationHdfs_kerberosKeytab :: Lens.Lens' CreateLocationHdfs (Prelude.Maybe Prelude.ByteString)
+createLocationHdfs_kerberosKeytab = Lens.lens (\CreateLocationHdfs' {kerberosKeytab} -> kerberosKeytab) (\s@CreateLocationHdfs' {} a -> s {kerberosKeytab = a} :: CreateLocationHdfs) Prelude.. Lens.mapping Data._Base64
+
+-- | The @krb5.conf@ file that contains the Kerberos configuration
+-- information. You can load the @krb5.conf@ file by providing the file\'s
+-- address. If you\'re using the CLI, it performs the base64 encoding for
+-- you. Otherwise, provide the base64-encoded text.
+--
+-- If @KERBEROS@ is specified for @AuthenticationType@, this parameter is
+-- required.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+createLocationHdfs_kerberosKrb5Conf :: Lens.Lens' CreateLocationHdfs (Prelude.Maybe Prelude.ByteString)
+createLocationHdfs_kerberosKrb5Conf = Lens.lens (\CreateLocationHdfs' {kerberosKrb5Conf} -> kerberosKrb5Conf) (\s@CreateLocationHdfs' {} a -> s {kerberosKrb5Conf = a} :: CreateLocationHdfs) Prelude.. Lens.mapping Data._Base64
+
+-- | The Kerberos principal with access to the files and folders on the HDFS
+-- cluster.
+--
+-- If @KERBEROS@ is specified for @AuthenticationType@, this parameter is
+-- required.
+createLocationHdfs_kerberosPrincipal :: Lens.Lens' CreateLocationHdfs (Prelude.Maybe Prelude.Text)
+createLocationHdfs_kerberosPrincipal = Lens.lens (\CreateLocationHdfs' {kerberosPrincipal} -> kerberosPrincipal) (\s@CreateLocationHdfs' {} a -> s {kerberosPrincipal = a} :: CreateLocationHdfs)
+
+-- | The URI of the HDFS cluster\'s Key Management Server (KMS).
+createLocationHdfs_kmsKeyProviderUri :: Lens.Lens' CreateLocationHdfs (Prelude.Maybe Prelude.Text)
+createLocationHdfs_kmsKeyProviderUri = Lens.lens (\CreateLocationHdfs' {kmsKeyProviderUri} -> kmsKeyProviderUri) (\s@CreateLocationHdfs' {} a -> s {kmsKeyProviderUri = a} :: CreateLocationHdfs)
+
+-- | The Quality of Protection (QOP) configuration specifies the Remote
+-- Procedure Call (RPC) and data transfer protection settings configured on
+-- the Hadoop Distributed File System (HDFS) cluster. If @QopConfiguration@
+-- isn\'t specified, @RpcProtection@ and @DataTransferProtection@ default
+-- to @PRIVACY@. If you set @RpcProtection@ or @DataTransferProtection@,
+-- the other parameter assumes the same value.
+createLocationHdfs_qopConfiguration :: Lens.Lens' CreateLocationHdfs (Prelude.Maybe QopConfiguration)
+createLocationHdfs_qopConfiguration = Lens.lens (\CreateLocationHdfs' {qopConfiguration} -> qopConfiguration) (\s@CreateLocationHdfs' {} a -> s {qopConfiguration = a} :: CreateLocationHdfs)
+
+-- | The number of DataNodes to replicate the data to when writing to the
+-- HDFS cluster. By default, data is replicated to three DataNodes.
+createLocationHdfs_replicationFactor :: Lens.Lens' CreateLocationHdfs (Prelude.Maybe Prelude.Natural)
+createLocationHdfs_replicationFactor = Lens.lens (\CreateLocationHdfs' {replicationFactor} -> replicationFactor) (\s@CreateLocationHdfs' {} a -> s {replicationFactor = a} :: CreateLocationHdfs)
+
+-- | The user name used to identify the client on the host operating system.
+--
+-- If @SIMPLE@ is specified for @AuthenticationType@, this parameter is
+-- required.
+createLocationHdfs_simpleUser :: Lens.Lens' CreateLocationHdfs (Prelude.Maybe Prelude.Text)
+createLocationHdfs_simpleUser = Lens.lens (\CreateLocationHdfs' {simpleUser} -> simpleUser) (\s@CreateLocationHdfs' {} a -> s {simpleUser = a} :: CreateLocationHdfs)
+
+-- | A subdirectory in the HDFS cluster. This subdirectory is used to read
+-- data from or write data to the HDFS cluster. If the subdirectory isn\'t
+-- specified, it will default to @\/@.
+createLocationHdfs_subdirectory :: Lens.Lens' CreateLocationHdfs (Prelude.Maybe Prelude.Text)
+createLocationHdfs_subdirectory = Lens.lens (\CreateLocationHdfs' {subdirectory} -> subdirectory) (\s@CreateLocationHdfs' {} a -> s {subdirectory = a} :: CreateLocationHdfs)
+
+-- | The key-value pair that represents the tag that you want to add to the
+-- location. The value can be an empty string. We recommend using tags to
+-- name your resources.
+createLocationHdfs_tags :: Lens.Lens' CreateLocationHdfs (Prelude.Maybe [TagListEntry])
+createLocationHdfs_tags = Lens.lens (\CreateLocationHdfs' {tags} -> tags) (\s@CreateLocationHdfs' {} a -> s {tags = a} :: CreateLocationHdfs) Prelude.. Lens.mapping Lens.coerced
+
+-- | The NameNode that manages the HDFS namespace. The NameNode performs
+-- operations such as opening, closing, and renaming files and directories.
+-- The NameNode contains the information to map blocks of data to the
+-- DataNodes. You can use only one NameNode.
+createLocationHdfs_nameNodes :: Lens.Lens' CreateLocationHdfs (Prelude.NonEmpty HdfsNameNode)
+createLocationHdfs_nameNodes = Lens.lens (\CreateLocationHdfs' {nameNodes} -> nameNodes) (\s@CreateLocationHdfs' {} a -> s {nameNodes = a} :: CreateLocationHdfs) Prelude.. Lens.coerced
+
+-- | The type of authentication used to determine the identity of the user.
+createLocationHdfs_authenticationType :: Lens.Lens' CreateLocationHdfs HdfsAuthenticationType
+createLocationHdfs_authenticationType = Lens.lens (\CreateLocationHdfs' {authenticationType} -> authenticationType) (\s@CreateLocationHdfs' {} a -> s {authenticationType = a} :: CreateLocationHdfs)
+
+-- | The Amazon Resource Names (ARNs) of the agents that are used to connect
+-- to the HDFS cluster.
+createLocationHdfs_agentArns :: Lens.Lens' CreateLocationHdfs (Prelude.NonEmpty Prelude.Text)
+createLocationHdfs_agentArns = Lens.lens (\CreateLocationHdfs' {agentArns} -> agentArns) (\s@CreateLocationHdfs' {} a -> s {agentArns = a} :: CreateLocationHdfs) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateLocationHdfs where
+  type
+    AWSResponse CreateLocationHdfs =
+      CreateLocationHdfsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateLocationHdfsResponse'
+            Prelude.<$> (x Data..?> "LocationArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLocationHdfs where
+  hashWithSalt _salt CreateLocationHdfs' {..} =
+    _salt
+      `Prelude.hashWithSalt` blockSize
+      `Prelude.hashWithSalt` kerberosKeytab
+      `Prelude.hashWithSalt` kerberosKrb5Conf
+      `Prelude.hashWithSalt` kerberosPrincipal
+      `Prelude.hashWithSalt` kmsKeyProviderUri
+      `Prelude.hashWithSalt` qopConfiguration
+      `Prelude.hashWithSalt` replicationFactor
+      `Prelude.hashWithSalt` simpleUser
+      `Prelude.hashWithSalt` subdirectory
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` nameNodes
+      `Prelude.hashWithSalt` authenticationType
+      `Prelude.hashWithSalt` agentArns
+
+instance Prelude.NFData CreateLocationHdfs where
+  rnf CreateLocationHdfs' {..} =
+    Prelude.rnf blockSize
+      `Prelude.seq` Prelude.rnf kerberosKeytab
+      `Prelude.seq` Prelude.rnf kerberosKrb5Conf
+      `Prelude.seq` Prelude.rnf kerberosPrincipal
+      `Prelude.seq` Prelude.rnf kmsKeyProviderUri
+      `Prelude.seq` Prelude.rnf qopConfiguration
+      `Prelude.seq` Prelude.rnf replicationFactor
+      `Prelude.seq` Prelude.rnf simpleUser
+      `Prelude.seq` Prelude.rnf subdirectory
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf nameNodes
+      `Prelude.seq` Prelude.rnf authenticationType
+      `Prelude.seq` Prelude.rnf agentArns
+
+instance Data.ToHeaders CreateLocationHdfs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.CreateLocationHdfs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateLocationHdfs where
+  toJSON CreateLocationHdfs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BlockSize" Data..=) Prelude.<$> blockSize,
+            ("KerberosKeytab" Data..=)
+              Prelude.<$> kerberosKeytab,
+            ("KerberosKrb5Conf" Data..=)
+              Prelude.<$> kerberosKrb5Conf,
+            ("KerberosPrincipal" Data..=)
+              Prelude.<$> kerberosPrincipal,
+            ("KmsKeyProviderUri" Data..=)
+              Prelude.<$> kmsKeyProviderUri,
+            ("QopConfiguration" Data..=)
+              Prelude.<$> qopConfiguration,
+            ("ReplicationFactor" Data..=)
+              Prelude.<$> replicationFactor,
+            ("SimpleUser" Data..=) Prelude.<$> simpleUser,
+            ("Subdirectory" Data..=) Prelude.<$> subdirectory,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("NameNodes" Data..= nameNodes),
+            Prelude.Just
+              ("AuthenticationType" Data..= authenticationType),
+            Prelude.Just ("AgentArns" Data..= agentArns)
+          ]
+      )
+
+instance Data.ToPath CreateLocationHdfs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLocationHdfs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateLocationHdfsResponse' smart constructor.
+data CreateLocationHdfsResponse = CreateLocationHdfsResponse'
+  { -- | The ARN of the source HDFS cluster location that\'s created.
+    locationArn :: 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 'CreateLocationHdfsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'createLocationHdfsResponse_locationArn' - The ARN of the source HDFS cluster location that\'s created.
+--
+-- 'httpStatus', 'createLocationHdfsResponse_httpStatus' - The response's http status code.
+newCreateLocationHdfsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLocationHdfsResponse
+newCreateLocationHdfsResponse pHttpStatus_ =
+  CreateLocationHdfsResponse'
+    { locationArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the source HDFS cluster location that\'s created.
+createLocationHdfsResponse_locationArn :: Lens.Lens' CreateLocationHdfsResponse (Prelude.Maybe Prelude.Text)
+createLocationHdfsResponse_locationArn = Lens.lens (\CreateLocationHdfsResponse' {locationArn} -> locationArn) (\s@CreateLocationHdfsResponse' {} a -> s {locationArn = a} :: CreateLocationHdfsResponse)
+
+-- | The response's http status code.
+createLocationHdfsResponse_httpStatus :: Lens.Lens' CreateLocationHdfsResponse Prelude.Int
+createLocationHdfsResponse_httpStatus = Lens.lens (\CreateLocationHdfsResponse' {httpStatus} -> httpStatus) (\s@CreateLocationHdfsResponse' {} a -> s {httpStatus = a} :: CreateLocationHdfsResponse)
+
+instance Prelude.NFData CreateLocationHdfsResponse where
+  rnf CreateLocationHdfsResponse' {..} =
+    Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/CreateLocationNfs.hs b/gen/Amazonka/DataSync/CreateLocationNfs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/CreateLocationNfs.hs
@@ -0,0 +1,364 @@
+{-# 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.DataSync.CreateLocationNfs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Defines a file system on a Network File System (NFS) server that can be
+-- read from or written to.
+module Amazonka.DataSync.CreateLocationNfs
+  ( -- * Creating a Request
+    CreateLocationNfs (..),
+    newCreateLocationNfs,
+
+    -- * Request Lenses
+    createLocationNfs_mountOptions,
+    createLocationNfs_tags,
+    createLocationNfs_subdirectory,
+    createLocationNfs_serverHostname,
+    createLocationNfs_onPremConfig,
+
+    -- * Destructuring the Response
+    CreateLocationNfsResponse (..),
+    newCreateLocationNfsResponse,
+
+    -- * Response Lenses
+    createLocationNfsResponse_locationArn,
+    createLocationNfsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | CreateLocationNfsRequest
+--
+-- /See:/ 'newCreateLocationNfs' smart constructor.
+data CreateLocationNfs = CreateLocationNfs'
+  { -- | The NFS mount options that DataSync can use to mount your NFS share.
+    mountOptions :: Prelude.Maybe NfsMountOptions,
+    -- | The key-value pair that represents the tag that you want to add to the
+    -- location. The value can be an empty string. We recommend using tags to
+    -- name your resources.
+    tags :: Prelude.Maybe [TagListEntry],
+    -- | The subdirectory in the NFS file system that is used to read data from
+    -- the NFS source location or write data to the NFS destination. The NFS
+    -- path should be a path that\'s exported by the NFS server, or a
+    -- subdirectory of that path. The path should be such that it can be
+    -- mounted by other NFS clients in your network.
+    --
+    -- To see all the paths exported by your NFS server, run
+    -- \"@showmount -e nfs-server-name@\" from an NFS client that has access to
+    -- your server. You can specify any directory that appears in the results,
+    -- and any subdirectory of that directory. Ensure that the NFS export is
+    -- accessible without Kerberos authentication.
+    --
+    -- To transfer all the data in the folder you specified, DataSync needs to
+    -- have permissions to read all the data. To ensure this, either configure
+    -- the NFS export with @no_root_squash,@ or ensure that the permissions for
+    -- all of the files that you want DataSync allow read access for all users.
+    -- Doing either enables the agent to read the files. For the agent to
+    -- access directories, you must additionally enable all execute access.
+    --
+    -- If you are copying data to or from your Snowcone device, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone NFS Server on Snowcone>
+    -- for more information.
+    --
+    -- For information about NFS export configuration, see 18.7. The
+    -- \/etc\/exports Configuration File in the Red Hat Enterprise Linux
+    -- documentation.
+    subdirectory :: Prelude.Text,
+    -- | The name of the NFS server. This value is the IP address or Domain Name
+    -- Service (DNS) name of the NFS server. An agent that is installed
+    -- on-premises uses this hostname to mount the NFS server in a network.
+    --
+    -- If you are copying data to or from your Snowcone device, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone NFS Server on Snowcone>
+    -- for more information.
+    --
+    -- This name must either be DNS-compliant or must be an IP version 4 (IPv4)
+    -- address.
+    serverHostname :: Prelude.Text,
+    -- | Contains a list of Amazon Resource Names (ARNs) of agents that are used
+    -- to connect to an NFS server.
+    --
+    -- If you are copying data to or from your Snowcone device, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone NFS Server on Snowcone>
+    -- for more information.
+    onPremConfig :: OnPremConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocationNfs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'mountOptions', 'createLocationNfs_mountOptions' - The NFS mount options that DataSync can use to mount your NFS share.
+--
+-- 'tags', 'createLocationNfs_tags' - The key-value pair that represents the tag that you want to add to the
+-- location. The value can be an empty string. We recommend using tags to
+-- name your resources.
+--
+-- 'subdirectory', 'createLocationNfs_subdirectory' - The subdirectory in the NFS file system that is used to read data from
+-- the NFS source location or write data to the NFS destination. The NFS
+-- path should be a path that\'s exported by the NFS server, or a
+-- subdirectory of that path. The path should be such that it can be
+-- mounted by other NFS clients in your network.
+--
+-- To see all the paths exported by your NFS server, run
+-- \"@showmount -e nfs-server-name@\" from an NFS client that has access to
+-- your server. You can specify any directory that appears in the results,
+-- and any subdirectory of that directory. Ensure that the NFS export is
+-- accessible without Kerberos authentication.
+--
+-- To transfer all the data in the folder you specified, DataSync needs to
+-- have permissions to read all the data. To ensure this, either configure
+-- the NFS export with @no_root_squash,@ or ensure that the permissions for
+-- all of the files that you want DataSync allow read access for all users.
+-- Doing either enables the agent to read the files. For the agent to
+-- access directories, you must additionally enable all execute access.
+--
+-- If you are copying data to or from your Snowcone device, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone NFS Server on Snowcone>
+-- for more information.
+--
+-- For information about NFS export configuration, see 18.7. The
+-- \/etc\/exports Configuration File in the Red Hat Enterprise Linux
+-- documentation.
+--
+-- 'serverHostname', 'createLocationNfs_serverHostname' - The name of the NFS server. This value is the IP address or Domain Name
+-- Service (DNS) name of the NFS server. An agent that is installed
+-- on-premises uses this hostname to mount the NFS server in a network.
+--
+-- If you are copying data to or from your Snowcone device, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone NFS Server on Snowcone>
+-- for more information.
+--
+-- This name must either be DNS-compliant or must be an IP version 4 (IPv4)
+-- address.
+--
+-- 'onPremConfig', 'createLocationNfs_onPremConfig' - Contains a list of Amazon Resource Names (ARNs) of agents that are used
+-- to connect to an NFS server.
+--
+-- If you are copying data to or from your Snowcone device, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone NFS Server on Snowcone>
+-- for more information.
+newCreateLocationNfs ::
+  -- | 'subdirectory'
+  Prelude.Text ->
+  -- | 'serverHostname'
+  Prelude.Text ->
+  -- | 'onPremConfig'
+  OnPremConfig ->
+  CreateLocationNfs
+newCreateLocationNfs
+  pSubdirectory_
+  pServerHostname_
+  pOnPremConfig_ =
+    CreateLocationNfs'
+      { mountOptions = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        subdirectory = pSubdirectory_,
+        serverHostname = pServerHostname_,
+        onPremConfig = pOnPremConfig_
+      }
+
+-- | The NFS mount options that DataSync can use to mount your NFS share.
+createLocationNfs_mountOptions :: Lens.Lens' CreateLocationNfs (Prelude.Maybe NfsMountOptions)
+createLocationNfs_mountOptions = Lens.lens (\CreateLocationNfs' {mountOptions} -> mountOptions) (\s@CreateLocationNfs' {} a -> s {mountOptions = a} :: CreateLocationNfs)
+
+-- | The key-value pair that represents the tag that you want to add to the
+-- location. The value can be an empty string. We recommend using tags to
+-- name your resources.
+createLocationNfs_tags :: Lens.Lens' CreateLocationNfs (Prelude.Maybe [TagListEntry])
+createLocationNfs_tags = Lens.lens (\CreateLocationNfs' {tags} -> tags) (\s@CreateLocationNfs' {} a -> s {tags = a} :: CreateLocationNfs) Prelude.. Lens.mapping Lens.coerced
+
+-- | The subdirectory in the NFS file system that is used to read data from
+-- the NFS source location or write data to the NFS destination. The NFS
+-- path should be a path that\'s exported by the NFS server, or a
+-- subdirectory of that path. The path should be such that it can be
+-- mounted by other NFS clients in your network.
+--
+-- To see all the paths exported by your NFS server, run
+-- \"@showmount -e nfs-server-name@\" from an NFS client that has access to
+-- your server. You can specify any directory that appears in the results,
+-- and any subdirectory of that directory. Ensure that the NFS export is
+-- accessible without Kerberos authentication.
+--
+-- To transfer all the data in the folder you specified, DataSync needs to
+-- have permissions to read all the data. To ensure this, either configure
+-- the NFS export with @no_root_squash,@ or ensure that the permissions for
+-- all of the files that you want DataSync allow read access for all users.
+-- Doing either enables the agent to read the files. For the agent to
+-- access directories, you must additionally enable all execute access.
+--
+-- If you are copying data to or from your Snowcone device, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone NFS Server on Snowcone>
+-- for more information.
+--
+-- For information about NFS export configuration, see 18.7. The
+-- \/etc\/exports Configuration File in the Red Hat Enterprise Linux
+-- documentation.
+createLocationNfs_subdirectory :: Lens.Lens' CreateLocationNfs Prelude.Text
+createLocationNfs_subdirectory = Lens.lens (\CreateLocationNfs' {subdirectory} -> subdirectory) (\s@CreateLocationNfs' {} a -> s {subdirectory = a} :: CreateLocationNfs)
+
+-- | The name of the NFS server. This value is the IP address or Domain Name
+-- Service (DNS) name of the NFS server. An agent that is installed
+-- on-premises uses this hostname to mount the NFS server in a network.
+--
+-- If you are copying data to or from your Snowcone device, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone NFS Server on Snowcone>
+-- for more information.
+--
+-- This name must either be DNS-compliant or must be an IP version 4 (IPv4)
+-- address.
+createLocationNfs_serverHostname :: Lens.Lens' CreateLocationNfs Prelude.Text
+createLocationNfs_serverHostname = Lens.lens (\CreateLocationNfs' {serverHostname} -> serverHostname) (\s@CreateLocationNfs' {} a -> s {serverHostname = a} :: CreateLocationNfs)
+
+-- | Contains a list of Amazon Resource Names (ARNs) of agents that are used
+-- to connect to an NFS server.
+--
+-- If you are copying data to or from your Snowcone device, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone NFS Server on Snowcone>
+-- for more information.
+createLocationNfs_onPremConfig :: Lens.Lens' CreateLocationNfs OnPremConfig
+createLocationNfs_onPremConfig = Lens.lens (\CreateLocationNfs' {onPremConfig} -> onPremConfig) (\s@CreateLocationNfs' {} a -> s {onPremConfig = a} :: CreateLocationNfs)
+
+instance Core.AWSRequest CreateLocationNfs where
+  type
+    AWSResponse CreateLocationNfs =
+      CreateLocationNfsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateLocationNfsResponse'
+            Prelude.<$> (x Data..?> "LocationArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLocationNfs where
+  hashWithSalt _salt CreateLocationNfs' {..} =
+    _salt
+      `Prelude.hashWithSalt` mountOptions
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` subdirectory
+      `Prelude.hashWithSalt` serverHostname
+      `Prelude.hashWithSalt` onPremConfig
+
+instance Prelude.NFData CreateLocationNfs where
+  rnf CreateLocationNfs' {..} =
+    Prelude.rnf mountOptions
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf subdirectory
+      `Prelude.seq` Prelude.rnf serverHostname
+      `Prelude.seq` Prelude.rnf onPremConfig
+
+instance Data.ToHeaders CreateLocationNfs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.CreateLocationNfs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateLocationNfs where
+  toJSON CreateLocationNfs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MountOptions" Data..=) Prelude.<$> mountOptions,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Subdirectory" Data..= subdirectory),
+            Prelude.Just
+              ("ServerHostname" Data..= serverHostname),
+            Prelude.Just ("OnPremConfig" Data..= onPremConfig)
+          ]
+      )
+
+instance Data.ToPath CreateLocationNfs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLocationNfs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | CreateLocationNfsResponse
+--
+-- /See:/ 'newCreateLocationNfsResponse' smart constructor.
+data CreateLocationNfsResponse = CreateLocationNfsResponse'
+  { -- | The Amazon Resource Name (ARN) of the source NFS file system location
+    -- that is created.
+    locationArn :: 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 'CreateLocationNfsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'createLocationNfsResponse_locationArn' - The Amazon Resource Name (ARN) of the source NFS file system location
+-- that is created.
+--
+-- 'httpStatus', 'createLocationNfsResponse_httpStatus' - The response's http status code.
+newCreateLocationNfsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLocationNfsResponse
+newCreateLocationNfsResponse pHttpStatus_ =
+  CreateLocationNfsResponse'
+    { locationArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the source NFS file system location
+-- that is created.
+createLocationNfsResponse_locationArn :: Lens.Lens' CreateLocationNfsResponse (Prelude.Maybe Prelude.Text)
+createLocationNfsResponse_locationArn = Lens.lens (\CreateLocationNfsResponse' {locationArn} -> locationArn) (\s@CreateLocationNfsResponse' {} a -> s {locationArn = a} :: CreateLocationNfsResponse)
+
+-- | The response's http status code.
+createLocationNfsResponse_httpStatus :: Lens.Lens' CreateLocationNfsResponse Prelude.Int
+createLocationNfsResponse_httpStatus = Lens.lens (\CreateLocationNfsResponse' {httpStatus} -> httpStatus) (\s@CreateLocationNfsResponse' {} a -> s {httpStatus = a} :: CreateLocationNfsResponse)
+
+instance Prelude.NFData CreateLocationNfsResponse where
+  rnf CreateLocationNfsResponse' {..} =
+    Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/CreateLocationObjectStorage.hs b/gen/Amazonka/DataSync/CreateLocationObjectStorage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/CreateLocationObjectStorage.hs
@@ -0,0 +1,372 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.CreateLocationObjectStorage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an endpoint for an object storage system that DataSync can
+-- access for a transfer. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-object-location.html Creating a location for object storage>.
+module Amazonka.DataSync.CreateLocationObjectStorage
+  ( -- * Creating a Request
+    CreateLocationObjectStorage (..),
+    newCreateLocationObjectStorage,
+
+    -- * Request Lenses
+    createLocationObjectStorage_accessKey,
+    createLocationObjectStorage_secretKey,
+    createLocationObjectStorage_serverCertificate,
+    createLocationObjectStorage_serverPort,
+    createLocationObjectStorage_serverProtocol,
+    createLocationObjectStorage_subdirectory,
+    createLocationObjectStorage_tags,
+    createLocationObjectStorage_serverHostname,
+    createLocationObjectStorage_bucketName,
+    createLocationObjectStorage_agentArns,
+
+    -- * Destructuring the Response
+    CreateLocationObjectStorageResponse (..),
+    newCreateLocationObjectStorageResponse,
+
+    -- * Response Lenses
+    createLocationObjectStorageResponse_locationArn,
+    createLocationObjectStorageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | CreateLocationObjectStorageRequest
+--
+-- /See:/ 'newCreateLocationObjectStorage' smart constructor.
+data CreateLocationObjectStorage = CreateLocationObjectStorage'
+  { -- | Specifies the access key (for example, a user name) if credentials are
+    -- required to authenticate with the object storage server.
+    accessKey :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the secret key (for example, a password) if credentials are
+    -- required to authenticate with the object storage server.
+    secretKey :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | Specifies a certificate to authenticate with an object storage system
+    -- that uses a private or self-signed certificate authority (CA). You must
+    -- specify a Base64-encoded @.pem@ file (for example,
+    -- @file:\/\/\/home\/user\/.ssh\/storage_sys_certificate.pem@). The
+    -- certificate can be up to 32768 bytes (before Base64 encoding).
+    --
+    -- To use this parameter, configure @ServerProtocol@ to @HTTPS@.
+    serverCertificate :: Prelude.Maybe Data.Base64,
+    -- | Specifies the port that your object storage server accepts inbound
+    -- network traffic on (for example, port 443).
+    serverPort :: Prelude.Maybe Prelude.Natural,
+    -- | Specifies the protocol that your object storage server uses to
+    -- communicate.
+    serverProtocol :: Prelude.Maybe ObjectStorageServerProtocol,
+    -- | Specifies the object prefix for your object storage server. If this is a
+    -- source location, DataSync only copies objects with this prefix. If this
+    -- is a destination location, DataSync writes all objects with this prefix.
+    subdirectory :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the key-value pair that represents a tag that you want to add
+    -- to the resource. Tags can help you manage, filter, and search for your
+    -- resources. We recommend creating a name tag for your location.
+    tags :: Prelude.Maybe [TagListEntry],
+    -- | Specifies the domain name or IP address of the object storage server. A
+    -- DataSync agent uses this hostname to mount the object storage server in
+    -- a network.
+    serverHostname :: Prelude.Text,
+    -- | Specifies the name of the object storage bucket involved in the
+    -- transfer.
+    bucketName :: Prelude.Text,
+    -- | Specifies the Amazon Resource Names (ARNs) of the DataSync agents that
+    -- can securely connect with your location.
+    agentArns :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocationObjectStorage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessKey', 'createLocationObjectStorage_accessKey' - Specifies the access key (for example, a user name) if credentials are
+-- required to authenticate with the object storage server.
+--
+-- 'secretKey', 'createLocationObjectStorage_secretKey' - Specifies the secret key (for example, a password) if credentials are
+-- required to authenticate with the object storage server.
+--
+-- 'serverCertificate', 'createLocationObjectStorage_serverCertificate' - Specifies a certificate to authenticate with an object storage system
+-- that uses a private or self-signed certificate authority (CA). You must
+-- specify a Base64-encoded @.pem@ file (for example,
+-- @file:\/\/\/home\/user\/.ssh\/storage_sys_certificate.pem@). The
+-- certificate can be up to 32768 bytes (before Base64 encoding).
+--
+-- To use this parameter, configure @ServerProtocol@ to @HTTPS@.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+--
+-- 'serverPort', 'createLocationObjectStorage_serverPort' - Specifies the port that your object storage server accepts inbound
+-- network traffic on (for example, port 443).
+--
+-- 'serverProtocol', 'createLocationObjectStorage_serverProtocol' - Specifies the protocol that your object storage server uses to
+-- communicate.
+--
+-- 'subdirectory', 'createLocationObjectStorage_subdirectory' - Specifies the object prefix for your object storage server. If this is a
+-- source location, DataSync only copies objects with this prefix. If this
+-- is a destination location, DataSync writes all objects with this prefix.
+--
+-- 'tags', 'createLocationObjectStorage_tags' - Specifies the key-value pair that represents a tag that you want to add
+-- to the resource. Tags can help you manage, filter, and search for your
+-- resources. We recommend creating a name tag for your location.
+--
+-- 'serverHostname', 'createLocationObjectStorage_serverHostname' - Specifies the domain name or IP address of the object storage server. A
+-- DataSync agent uses this hostname to mount the object storage server in
+-- a network.
+--
+-- 'bucketName', 'createLocationObjectStorage_bucketName' - Specifies the name of the object storage bucket involved in the
+-- transfer.
+--
+-- 'agentArns', 'createLocationObjectStorage_agentArns' - Specifies the Amazon Resource Names (ARNs) of the DataSync agents that
+-- can securely connect with your location.
+newCreateLocationObjectStorage ::
+  -- | 'serverHostname'
+  Prelude.Text ->
+  -- | 'bucketName'
+  Prelude.Text ->
+  -- | 'agentArns'
+  Prelude.NonEmpty Prelude.Text ->
+  CreateLocationObjectStorage
+newCreateLocationObjectStorage
+  pServerHostname_
+  pBucketName_
+  pAgentArns_ =
+    CreateLocationObjectStorage'
+      { accessKey =
+          Prelude.Nothing,
+        secretKey = Prelude.Nothing,
+        serverCertificate = Prelude.Nothing,
+        serverPort = Prelude.Nothing,
+        serverProtocol = Prelude.Nothing,
+        subdirectory = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        serverHostname = pServerHostname_,
+        bucketName = pBucketName_,
+        agentArns = Lens.coerced Lens.# pAgentArns_
+      }
+
+-- | Specifies the access key (for example, a user name) if credentials are
+-- required to authenticate with the object storage server.
+createLocationObjectStorage_accessKey :: Lens.Lens' CreateLocationObjectStorage (Prelude.Maybe Prelude.Text)
+createLocationObjectStorage_accessKey = Lens.lens (\CreateLocationObjectStorage' {accessKey} -> accessKey) (\s@CreateLocationObjectStorage' {} a -> s {accessKey = a} :: CreateLocationObjectStorage)
+
+-- | Specifies the secret key (for example, a password) if credentials are
+-- required to authenticate with the object storage server.
+createLocationObjectStorage_secretKey :: Lens.Lens' CreateLocationObjectStorage (Prelude.Maybe Prelude.Text)
+createLocationObjectStorage_secretKey = Lens.lens (\CreateLocationObjectStorage' {secretKey} -> secretKey) (\s@CreateLocationObjectStorage' {} a -> s {secretKey = a} :: CreateLocationObjectStorage) Prelude.. Lens.mapping Data._Sensitive
+
+-- | Specifies a certificate to authenticate with an object storage system
+-- that uses a private or self-signed certificate authority (CA). You must
+-- specify a Base64-encoded @.pem@ file (for example,
+-- @file:\/\/\/home\/user\/.ssh\/storage_sys_certificate.pem@). The
+-- certificate can be up to 32768 bytes (before Base64 encoding).
+--
+-- To use this parameter, configure @ServerProtocol@ to @HTTPS@.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+createLocationObjectStorage_serverCertificate :: Lens.Lens' CreateLocationObjectStorage (Prelude.Maybe Prelude.ByteString)
+createLocationObjectStorage_serverCertificate = Lens.lens (\CreateLocationObjectStorage' {serverCertificate} -> serverCertificate) (\s@CreateLocationObjectStorage' {} a -> s {serverCertificate = a} :: CreateLocationObjectStorage) Prelude.. Lens.mapping Data._Base64
+
+-- | Specifies the port that your object storage server accepts inbound
+-- network traffic on (for example, port 443).
+createLocationObjectStorage_serverPort :: Lens.Lens' CreateLocationObjectStorage (Prelude.Maybe Prelude.Natural)
+createLocationObjectStorage_serverPort = Lens.lens (\CreateLocationObjectStorage' {serverPort} -> serverPort) (\s@CreateLocationObjectStorage' {} a -> s {serverPort = a} :: CreateLocationObjectStorage)
+
+-- | Specifies the protocol that your object storage server uses to
+-- communicate.
+createLocationObjectStorage_serverProtocol :: Lens.Lens' CreateLocationObjectStorage (Prelude.Maybe ObjectStorageServerProtocol)
+createLocationObjectStorage_serverProtocol = Lens.lens (\CreateLocationObjectStorage' {serverProtocol} -> serverProtocol) (\s@CreateLocationObjectStorage' {} a -> s {serverProtocol = a} :: CreateLocationObjectStorage)
+
+-- | Specifies the object prefix for your object storage server. If this is a
+-- source location, DataSync only copies objects with this prefix. If this
+-- is a destination location, DataSync writes all objects with this prefix.
+createLocationObjectStorage_subdirectory :: Lens.Lens' CreateLocationObjectStorage (Prelude.Maybe Prelude.Text)
+createLocationObjectStorage_subdirectory = Lens.lens (\CreateLocationObjectStorage' {subdirectory} -> subdirectory) (\s@CreateLocationObjectStorage' {} a -> s {subdirectory = a} :: CreateLocationObjectStorage)
+
+-- | Specifies the key-value pair that represents a tag that you want to add
+-- to the resource. Tags can help you manage, filter, and search for your
+-- resources. We recommend creating a name tag for your location.
+createLocationObjectStorage_tags :: Lens.Lens' CreateLocationObjectStorage (Prelude.Maybe [TagListEntry])
+createLocationObjectStorage_tags = Lens.lens (\CreateLocationObjectStorage' {tags} -> tags) (\s@CreateLocationObjectStorage' {} a -> s {tags = a} :: CreateLocationObjectStorage) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the domain name or IP address of the object storage server. A
+-- DataSync agent uses this hostname to mount the object storage server in
+-- a network.
+createLocationObjectStorage_serverHostname :: Lens.Lens' CreateLocationObjectStorage Prelude.Text
+createLocationObjectStorage_serverHostname = Lens.lens (\CreateLocationObjectStorage' {serverHostname} -> serverHostname) (\s@CreateLocationObjectStorage' {} a -> s {serverHostname = a} :: CreateLocationObjectStorage)
+
+-- | Specifies the name of the object storage bucket involved in the
+-- transfer.
+createLocationObjectStorage_bucketName :: Lens.Lens' CreateLocationObjectStorage Prelude.Text
+createLocationObjectStorage_bucketName = Lens.lens (\CreateLocationObjectStorage' {bucketName} -> bucketName) (\s@CreateLocationObjectStorage' {} a -> s {bucketName = a} :: CreateLocationObjectStorage)
+
+-- | Specifies the Amazon Resource Names (ARNs) of the DataSync agents that
+-- can securely connect with your location.
+createLocationObjectStorage_agentArns :: Lens.Lens' CreateLocationObjectStorage (Prelude.NonEmpty Prelude.Text)
+createLocationObjectStorage_agentArns = Lens.lens (\CreateLocationObjectStorage' {agentArns} -> agentArns) (\s@CreateLocationObjectStorage' {} a -> s {agentArns = a} :: CreateLocationObjectStorage) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateLocationObjectStorage where
+  type
+    AWSResponse CreateLocationObjectStorage =
+      CreateLocationObjectStorageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateLocationObjectStorageResponse'
+            Prelude.<$> (x Data..?> "LocationArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLocationObjectStorage where
+  hashWithSalt _salt CreateLocationObjectStorage' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessKey
+      `Prelude.hashWithSalt` secretKey
+      `Prelude.hashWithSalt` serverCertificate
+      `Prelude.hashWithSalt` serverPort
+      `Prelude.hashWithSalt` serverProtocol
+      `Prelude.hashWithSalt` subdirectory
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` serverHostname
+      `Prelude.hashWithSalt` bucketName
+      `Prelude.hashWithSalt` agentArns
+
+instance Prelude.NFData CreateLocationObjectStorage where
+  rnf CreateLocationObjectStorage' {..} =
+    Prelude.rnf accessKey
+      `Prelude.seq` Prelude.rnf secretKey
+      `Prelude.seq` Prelude.rnf serverCertificate
+      `Prelude.seq` Prelude.rnf serverPort
+      `Prelude.seq` Prelude.rnf serverProtocol
+      `Prelude.seq` Prelude.rnf subdirectory
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf serverHostname
+      `Prelude.seq` Prelude.rnf bucketName
+      `Prelude.seq` Prelude.rnf agentArns
+
+instance Data.ToHeaders CreateLocationObjectStorage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.CreateLocationObjectStorage" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateLocationObjectStorage where
+  toJSON CreateLocationObjectStorage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccessKey" Data..=) Prelude.<$> accessKey,
+            ("SecretKey" Data..=) Prelude.<$> secretKey,
+            ("ServerCertificate" Data..=)
+              Prelude.<$> serverCertificate,
+            ("ServerPort" Data..=) Prelude.<$> serverPort,
+            ("ServerProtocol" Data..=)
+              Prelude.<$> serverProtocol,
+            ("Subdirectory" Data..=) Prelude.<$> subdirectory,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("ServerHostname" Data..= serverHostname),
+            Prelude.Just ("BucketName" Data..= bucketName),
+            Prelude.Just ("AgentArns" Data..= agentArns)
+          ]
+      )
+
+instance Data.ToPath CreateLocationObjectStorage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLocationObjectStorage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | CreateLocationObjectStorageResponse
+--
+-- /See:/ 'newCreateLocationObjectStorageResponse' smart constructor.
+data CreateLocationObjectStorageResponse = CreateLocationObjectStorageResponse'
+  { -- | Specifies the ARN of the object storage system location that you create.
+    locationArn :: 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 'CreateLocationObjectStorageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'createLocationObjectStorageResponse_locationArn' - Specifies the ARN of the object storage system location that you create.
+--
+-- 'httpStatus', 'createLocationObjectStorageResponse_httpStatus' - The response's http status code.
+newCreateLocationObjectStorageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLocationObjectStorageResponse
+newCreateLocationObjectStorageResponse pHttpStatus_ =
+  CreateLocationObjectStorageResponse'
+    { locationArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Specifies the ARN of the object storage system location that you create.
+createLocationObjectStorageResponse_locationArn :: Lens.Lens' CreateLocationObjectStorageResponse (Prelude.Maybe Prelude.Text)
+createLocationObjectStorageResponse_locationArn = Lens.lens (\CreateLocationObjectStorageResponse' {locationArn} -> locationArn) (\s@CreateLocationObjectStorageResponse' {} a -> s {locationArn = a} :: CreateLocationObjectStorageResponse)
+
+-- | The response's http status code.
+createLocationObjectStorageResponse_httpStatus :: Lens.Lens' CreateLocationObjectStorageResponse Prelude.Int
+createLocationObjectStorageResponse_httpStatus = Lens.lens (\CreateLocationObjectStorageResponse' {httpStatus} -> httpStatus) (\s@CreateLocationObjectStorageResponse' {} a -> s {httpStatus = a} :: CreateLocationObjectStorageResponse)
+
+instance
+  Prelude.NFData
+    CreateLocationObjectStorageResponse
+  where
+  rnf CreateLocationObjectStorageResponse' {..} =
+    Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/CreateLocationS3.hs b/gen/Amazonka/DataSync/CreateLocationS3.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/CreateLocationS3.hs
@@ -0,0 +1,306 @@
+{-# 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.DataSync.CreateLocationS3
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an endpoint for an Amazon S3 bucket that DataSync can access for
+-- a transfer.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-locations-cli.html#create-location-s3-cli Create an Amazon S3 location>
+-- in the /DataSync User Guide/.
+module Amazonka.DataSync.CreateLocationS3
+  ( -- * Creating a Request
+    CreateLocationS3 (..),
+    newCreateLocationS3,
+
+    -- * Request Lenses
+    createLocationS3_agentArns,
+    createLocationS3_s3StorageClass,
+    createLocationS3_subdirectory,
+    createLocationS3_tags,
+    createLocationS3_s3BucketArn,
+    createLocationS3_s3Config,
+
+    -- * Destructuring the Response
+    CreateLocationS3Response (..),
+    newCreateLocationS3Response,
+
+    -- * Response Lenses
+    createLocationS3Response_locationArn,
+    createLocationS3Response_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | CreateLocationS3Request
+--
+-- /See:/ 'newCreateLocationS3' smart constructor.
+data CreateLocationS3 = CreateLocationS3'
+  { -- | If you\'re using DataSync on an Amazon Web Services Outpost, specify the
+    -- Amazon Resource Names (ARNs) of the DataSync agents deployed on your
+    -- Outpost. For more information about launching a DataSync agent on an
+    -- Amazon Web Services Outpost, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/deploy-agents.html#outposts-agent Deploy your DataSync agent on Outposts>.
+    agentArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The Amazon S3 storage class that you want to store your files in when
+    -- this location is used as a task destination. For buckets in Amazon Web
+    -- Services Regions, the storage class defaults to Standard. For buckets on
+    -- Outposts, the storage class defaults to Amazon Web Services S3 Outposts.
+    --
+    -- For more information about S3 storage classes, see
+    -- <http://aws.amazon.com/s3/storage-classes/ Amazon S3 Storage Classes>.
+    -- Some storage classes have behaviors that can affect your S3 storage
+    -- cost. For detailed information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Considerations when working with S3 storage classes in DataSync>.
+    s3StorageClass :: Prelude.Maybe S3StorageClass,
+    -- | A subdirectory in the Amazon S3 bucket. This subdirectory in Amazon S3
+    -- is used to read data from the S3 source location or write data to the S3
+    -- destination.
+    subdirectory :: Prelude.Maybe Prelude.Text,
+    -- | The key-value pair that represents the tag that you want to add to the
+    -- location. The value can be an empty string. We recommend using tags to
+    -- name your resources.
+    tags :: Prelude.Maybe [TagListEntry],
+    -- | The ARN of the Amazon S3 bucket. If the bucket is on an Amazon Web
+    -- Services Outpost, this must be an access point ARN.
+    s3BucketArn :: Prelude.Text,
+    s3Config :: S3Config
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocationS3' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'agentArns', 'createLocationS3_agentArns' - If you\'re using DataSync on an Amazon Web Services Outpost, specify the
+-- Amazon Resource Names (ARNs) of the DataSync agents deployed on your
+-- Outpost. For more information about launching a DataSync agent on an
+-- Amazon Web Services Outpost, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/deploy-agents.html#outposts-agent Deploy your DataSync agent on Outposts>.
+--
+-- 's3StorageClass', 'createLocationS3_s3StorageClass' - The Amazon S3 storage class that you want to store your files in when
+-- this location is used as a task destination. For buckets in Amazon Web
+-- Services Regions, the storage class defaults to Standard. For buckets on
+-- Outposts, the storage class defaults to Amazon Web Services S3 Outposts.
+--
+-- For more information about S3 storage classes, see
+-- <http://aws.amazon.com/s3/storage-classes/ Amazon S3 Storage Classes>.
+-- Some storage classes have behaviors that can affect your S3 storage
+-- cost. For detailed information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Considerations when working with S3 storage classes in DataSync>.
+--
+-- 'subdirectory', 'createLocationS3_subdirectory' - A subdirectory in the Amazon S3 bucket. This subdirectory in Amazon S3
+-- is used to read data from the S3 source location or write data to the S3
+-- destination.
+--
+-- 'tags', 'createLocationS3_tags' - The key-value pair that represents the tag that you want to add to the
+-- location. The value can be an empty string. We recommend using tags to
+-- name your resources.
+--
+-- 's3BucketArn', 'createLocationS3_s3BucketArn' - The ARN of the Amazon S3 bucket. If the bucket is on an Amazon Web
+-- Services Outpost, this must be an access point ARN.
+--
+-- 's3Config', 'createLocationS3_s3Config' - Undocumented member.
+newCreateLocationS3 ::
+  -- | 's3BucketArn'
+  Prelude.Text ->
+  -- | 's3Config'
+  S3Config ->
+  CreateLocationS3
+newCreateLocationS3 pS3BucketArn_ pS3Config_ =
+  CreateLocationS3'
+    { agentArns = Prelude.Nothing,
+      s3StorageClass = Prelude.Nothing,
+      subdirectory = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      s3BucketArn = pS3BucketArn_,
+      s3Config = pS3Config_
+    }
+
+-- | If you\'re using DataSync on an Amazon Web Services Outpost, specify the
+-- Amazon Resource Names (ARNs) of the DataSync agents deployed on your
+-- Outpost. For more information about launching a DataSync agent on an
+-- Amazon Web Services Outpost, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/deploy-agents.html#outposts-agent Deploy your DataSync agent on Outposts>.
+createLocationS3_agentArns :: Lens.Lens' CreateLocationS3 (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+createLocationS3_agentArns = Lens.lens (\CreateLocationS3' {agentArns} -> agentArns) (\s@CreateLocationS3' {} a -> s {agentArns = a} :: CreateLocationS3) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon S3 storage class that you want to store your files in when
+-- this location is used as a task destination. For buckets in Amazon Web
+-- Services Regions, the storage class defaults to Standard. For buckets on
+-- Outposts, the storage class defaults to Amazon Web Services S3 Outposts.
+--
+-- For more information about S3 storage classes, see
+-- <http://aws.amazon.com/s3/storage-classes/ Amazon S3 Storage Classes>.
+-- Some storage classes have behaviors that can affect your S3 storage
+-- cost. For detailed information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Considerations when working with S3 storage classes in DataSync>.
+createLocationS3_s3StorageClass :: Lens.Lens' CreateLocationS3 (Prelude.Maybe S3StorageClass)
+createLocationS3_s3StorageClass = Lens.lens (\CreateLocationS3' {s3StorageClass} -> s3StorageClass) (\s@CreateLocationS3' {} a -> s {s3StorageClass = a} :: CreateLocationS3)
+
+-- | A subdirectory in the Amazon S3 bucket. This subdirectory in Amazon S3
+-- is used to read data from the S3 source location or write data to the S3
+-- destination.
+createLocationS3_subdirectory :: Lens.Lens' CreateLocationS3 (Prelude.Maybe Prelude.Text)
+createLocationS3_subdirectory = Lens.lens (\CreateLocationS3' {subdirectory} -> subdirectory) (\s@CreateLocationS3' {} a -> s {subdirectory = a} :: CreateLocationS3)
+
+-- | The key-value pair that represents the tag that you want to add to the
+-- location. The value can be an empty string. We recommend using tags to
+-- name your resources.
+createLocationS3_tags :: Lens.Lens' CreateLocationS3 (Prelude.Maybe [TagListEntry])
+createLocationS3_tags = Lens.lens (\CreateLocationS3' {tags} -> tags) (\s@CreateLocationS3' {} a -> s {tags = a} :: CreateLocationS3) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the Amazon S3 bucket. If the bucket is on an Amazon Web
+-- Services Outpost, this must be an access point ARN.
+createLocationS3_s3BucketArn :: Lens.Lens' CreateLocationS3 Prelude.Text
+createLocationS3_s3BucketArn = Lens.lens (\CreateLocationS3' {s3BucketArn} -> s3BucketArn) (\s@CreateLocationS3' {} a -> s {s3BucketArn = a} :: CreateLocationS3)
+
+-- | Undocumented member.
+createLocationS3_s3Config :: Lens.Lens' CreateLocationS3 S3Config
+createLocationS3_s3Config = Lens.lens (\CreateLocationS3' {s3Config} -> s3Config) (\s@CreateLocationS3' {} a -> s {s3Config = a} :: CreateLocationS3)
+
+instance Core.AWSRequest CreateLocationS3 where
+  type
+    AWSResponse CreateLocationS3 =
+      CreateLocationS3Response
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateLocationS3Response'
+            Prelude.<$> (x Data..?> "LocationArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLocationS3 where
+  hashWithSalt _salt CreateLocationS3' {..} =
+    _salt
+      `Prelude.hashWithSalt` agentArns
+      `Prelude.hashWithSalt` s3StorageClass
+      `Prelude.hashWithSalt` subdirectory
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` s3BucketArn
+      `Prelude.hashWithSalt` s3Config
+
+instance Prelude.NFData CreateLocationS3 where
+  rnf CreateLocationS3' {..} =
+    Prelude.rnf agentArns
+      `Prelude.seq` Prelude.rnf s3StorageClass
+      `Prelude.seq` Prelude.rnf subdirectory
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf s3BucketArn
+      `Prelude.seq` Prelude.rnf s3Config
+
+instance Data.ToHeaders CreateLocationS3 where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.CreateLocationS3" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateLocationS3 where
+  toJSON CreateLocationS3' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AgentArns" Data..=) Prelude.<$> agentArns,
+            ("S3StorageClass" Data..=)
+              Prelude.<$> s3StorageClass,
+            ("Subdirectory" Data..=) Prelude.<$> subdirectory,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("S3BucketArn" Data..= s3BucketArn),
+            Prelude.Just ("S3Config" Data..= s3Config)
+          ]
+      )
+
+instance Data.ToPath CreateLocationS3 where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLocationS3 where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | CreateLocationS3Response
+--
+-- /See:/ 'newCreateLocationS3Response' smart constructor.
+data CreateLocationS3Response = CreateLocationS3Response'
+  { -- | The Amazon Resource Name (ARN) of the source Amazon S3 bucket location
+    -- that is created.
+    locationArn :: 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 'CreateLocationS3Response' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'createLocationS3Response_locationArn' - The Amazon Resource Name (ARN) of the source Amazon S3 bucket location
+-- that is created.
+--
+-- 'httpStatus', 'createLocationS3Response_httpStatus' - The response's http status code.
+newCreateLocationS3Response ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLocationS3Response
+newCreateLocationS3Response pHttpStatus_ =
+  CreateLocationS3Response'
+    { locationArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the source Amazon S3 bucket location
+-- that is created.
+createLocationS3Response_locationArn :: Lens.Lens' CreateLocationS3Response (Prelude.Maybe Prelude.Text)
+createLocationS3Response_locationArn = Lens.lens (\CreateLocationS3Response' {locationArn} -> locationArn) (\s@CreateLocationS3Response' {} a -> s {locationArn = a} :: CreateLocationS3Response)
+
+-- | The response's http status code.
+createLocationS3Response_httpStatus :: Lens.Lens' CreateLocationS3Response Prelude.Int
+createLocationS3Response_httpStatus = Lens.lens (\CreateLocationS3Response' {httpStatus} -> httpStatus) (\s@CreateLocationS3Response' {} a -> s {httpStatus = a} :: CreateLocationS3Response)
+
+instance Prelude.NFData CreateLocationS3Response where
+  rnf CreateLocationS3Response' {..} =
+    Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/CreateLocationSmb.hs b/gen/Amazonka/DataSync/CreateLocationSmb.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/CreateLocationSmb.hs
@@ -0,0 +1,379 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.CreateLocationSmb
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Defines a file system on a Server Message Block (SMB) server that can be
+-- read from or written to.
+module Amazonka.DataSync.CreateLocationSmb
+  ( -- * Creating a Request
+    CreateLocationSmb (..),
+    newCreateLocationSmb,
+
+    -- * Request Lenses
+    createLocationSmb_domain,
+    createLocationSmb_mountOptions,
+    createLocationSmb_tags,
+    createLocationSmb_subdirectory,
+    createLocationSmb_serverHostname,
+    createLocationSmb_user,
+    createLocationSmb_password,
+    createLocationSmb_agentArns,
+
+    -- * Destructuring the Response
+    CreateLocationSmbResponse (..),
+    newCreateLocationSmbResponse,
+
+    -- * Response Lenses
+    createLocationSmbResponse_locationArn,
+    createLocationSmbResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | CreateLocationSmbRequest
+--
+-- /See:/ 'newCreateLocationSmb' smart constructor.
+data CreateLocationSmb = CreateLocationSmb'
+  { -- | The name of the Windows domain that the SMB server belongs to.
+    domain :: Prelude.Maybe Prelude.Text,
+    -- | The mount options used by DataSync to access the SMB server.
+    mountOptions :: Prelude.Maybe SmbMountOptions,
+    -- | The key-value pair that represents the tag that you want to add to the
+    -- location. The value can be an empty string. We recommend using tags to
+    -- name your resources.
+    tags :: Prelude.Maybe [TagListEntry],
+    -- | The subdirectory in the SMB file system that is used to read data from
+    -- the SMB source location or write data to the SMB destination. The SMB
+    -- path should be a path that\'s exported by the SMB server, or a
+    -- subdirectory of that path. The path should be such that it can be
+    -- mounted by other SMB clients in your network.
+    --
+    -- @Subdirectory@ must be specified with forward slashes. For example,
+    -- @\/path\/to\/folder@.
+    --
+    -- To transfer all the data in the folder you specified, DataSync needs to
+    -- have permissions to mount the SMB share, as well as to access all the
+    -- data in that share. To ensure this, either ensure that the
+    -- user\/password specified belongs to the user who can mount the share,
+    -- and who has the appropriate permissions for all of the files and
+    -- directories that you want DataSync to access, or use credentials of a
+    -- member of the Backup Operators group to mount the share. Doing either
+    -- enables the agent to access the data. For the agent to access
+    -- directories, you must additionally enable all execute access.
+    subdirectory :: Prelude.Text,
+    -- | The name of the SMB server. This value is the IP address or Domain Name
+    -- Service (DNS) name of the SMB server. An agent that is installed
+    -- on-premises uses this hostname to mount the SMB server in a network.
+    --
+    -- This name must either be DNS-compliant or must be an IP version 4 (IPv4)
+    -- address.
+    serverHostname :: Prelude.Text,
+    -- | The user who can mount the share, has the permissions to access files
+    -- and folders in the SMB share.
+    --
+    -- For information about choosing a user name that ensures sufficient
+    -- permissions to files, folders, and metadata, see the
+    -- <create-smb-location.html#SMBuser User setting> for SMB locations.
+    user :: Prelude.Text,
+    -- | The password of the user who can mount the share, has the permissions to
+    -- access files and folders in the SMB share.
+    password :: Data.Sensitive Prelude.Text,
+    -- | The Amazon Resource Names (ARNs) of agents to use for a Simple Message
+    -- Block (SMB) location.
+    agentArns :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocationSmb' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domain', 'createLocationSmb_domain' - The name of the Windows domain that the SMB server belongs to.
+--
+-- 'mountOptions', 'createLocationSmb_mountOptions' - The mount options used by DataSync to access the SMB server.
+--
+-- 'tags', 'createLocationSmb_tags' - The key-value pair that represents the tag that you want to add to the
+-- location. The value can be an empty string. We recommend using tags to
+-- name your resources.
+--
+-- 'subdirectory', 'createLocationSmb_subdirectory' - The subdirectory in the SMB file system that is used to read data from
+-- the SMB source location or write data to the SMB destination. The SMB
+-- path should be a path that\'s exported by the SMB server, or a
+-- subdirectory of that path. The path should be such that it can be
+-- mounted by other SMB clients in your network.
+--
+-- @Subdirectory@ must be specified with forward slashes. For example,
+-- @\/path\/to\/folder@.
+--
+-- To transfer all the data in the folder you specified, DataSync needs to
+-- have permissions to mount the SMB share, as well as to access all the
+-- data in that share. To ensure this, either ensure that the
+-- user\/password specified belongs to the user who can mount the share,
+-- and who has the appropriate permissions for all of the files and
+-- directories that you want DataSync to access, or use credentials of a
+-- member of the Backup Operators group to mount the share. Doing either
+-- enables the agent to access the data. For the agent to access
+-- directories, you must additionally enable all execute access.
+--
+-- 'serverHostname', 'createLocationSmb_serverHostname' - The name of the SMB server. This value is the IP address or Domain Name
+-- Service (DNS) name of the SMB server. An agent that is installed
+-- on-premises uses this hostname to mount the SMB server in a network.
+--
+-- This name must either be DNS-compliant or must be an IP version 4 (IPv4)
+-- address.
+--
+-- 'user', 'createLocationSmb_user' - The user who can mount the share, has the permissions to access files
+-- and folders in the SMB share.
+--
+-- For information about choosing a user name that ensures sufficient
+-- permissions to files, folders, and metadata, see the
+-- <create-smb-location.html#SMBuser User setting> for SMB locations.
+--
+-- 'password', 'createLocationSmb_password' - The password of the user who can mount the share, has the permissions to
+-- access files and folders in the SMB share.
+--
+-- 'agentArns', 'createLocationSmb_agentArns' - The Amazon Resource Names (ARNs) of agents to use for a Simple Message
+-- Block (SMB) location.
+newCreateLocationSmb ::
+  -- | 'subdirectory'
+  Prelude.Text ->
+  -- | 'serverHostname'
+  Prelude.Text ->
+  -- | 'user'
+  Prelude.Text ->
+  -- | 'password'
+  Prelude.Text ->
+  -- | 'agentArns'
+  Prelude.NonEmpty Prelude.Text ->
+  CreateLocationSmb
+newCreateLocationSmb
+  pSubdirectory_
+  pServerHostname_
+  pUser_
+  pPassword_
+  pAgentArns_ =
+    CreateLocationSmb'
+      { domain = Prelude.Nothing,
+        mountOptions = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        subdirectory = pSubdirectory_,
+        serverHostname = pServerHostname_,
+        user = pUser_,
+        password = Data._Sensitive Lens.# pPassword_,
+        agentArns = Lens.coerced Lens.# pAgentArns_
+      }
+
+-- | The name of the Windows domain that the SMB server belongs to.
+createLocationSmb_domain :: Lens.Lens' CreateLocationSmb (Prelude.Maybe Prelude.Text)
+createLocationSmb_domain = Lens.lens (\CreateLocationSmb' {domain} -> domain) (\s@CreateLocationSmb' {} a -> s {domain = a} :: CreateLocationSmb)
+
+-- | The mount options used by DataSync to access the SMB server.
+createLocationSmb_mountOptions :: Lens.Lens' CreateLocationSmb (Prelude.Maybe SmbMountOptions)
+createLocationSmb_mountOptions = Lens.lens (\CreateLocationSmb' {mountOptions} -> mountOptions) (\s@CreateLocationSmb' {} a -> s {mountOptions = a} :: CreateLocationSmb)
+
+-- | The key-value pair that represents the tag that you want to add to the
+-- location. The value can be an empty string. We recommend using tags to
+-- name your resources.
+createLocationSmb_tags :: Lens.Lens' CreateLocationSmb (Prelude.Maybe [TagListEntry])
+createLocationSmb_tags = Lens.lens (\CreateLocationSmb' {tags} -> tags) (\s@CreateLocationSmb' {} a -> s {tags = a} :: CreateLocationSmb) Prelude.. Lens.mapping Lens.coerced
+
+-- | The subdirectory in the SMB file system that is used to read data from
+-- the SMB source location or write data to the SMB destination. The SMB
+-- path should be a path that\'s exported by the SMB server, or a
+-- subdirectory of that path. The path should be such that it can be
+-- mounted by other SMB clients in your network.
+--
+-- @Subdirectory@ must be specified with forward slashes. For example,
+-- @\/path\/to\/folder@.
+--
+-- To transfer all the data in the folder you specified, DataSync needs to
+-- have permissions to mount the SMB share, as well as to access all the
+-- data in that share. To ensure this, either ensure that the
+-- user\/password specified belongs to the user who can mount the share,
+-- and who has the appropriate permissions for all of the files and
+-- directories that you want DataSync to access, or use credentials of a
+-- member of the Backup Operators group to mount the share. Doing either
+-- enables the agent to access the data. For the agent to access
+-- directories, you must additionally enable all execute access.
+createLocationSmb_subdirectory :: Lens.Lens' CreateLocationSmb Prelude.Text
+createLocationSmb_subdirectory = Lens.lens (\CreateLocationSmb' {subdirectory} -> subdirectory) (\s@CreateLocationSmb' {} a -> s {subdirectory = a} :: CreateLocationSmb)
+
+-- | The name of the SMB server. This value is the IP address or Domain Name
+-- Service (DNS) name of the SMB server. An agent that is installed
+-- on-premises uses this hostname to mount the SMB server in a network.
+--
+-- This name must either be DNS-compliant or must be an IP version 4 (IPv4)
+-- address.
+createLocationSmb_serverHostname :: Lens.Lens' CreateLocationSmb Prelude.Text
+createLocationSmb_serverHostname = Lens.lens (\CreateLocationSmb' {serverHostname} -> serverHostname) (\s@CreateLocationSmb' {} a -> s {serverHostname = a} :: CreateLocationSmb)
+
+-- | The user who can mount the share, has the permissions to access files
+-- and folders in the SMB share.
+--
+-- For information about choosing a user name that ensures sufficient
+-- permissions to files, folders, and metadata, see the
+-- <create-smb-location.html#SMBuser User setting> for SMB locations.
+createLocationSmb_user :: Lens.Lens' CreateLocationSmb Prelude.Text
+createLocationSmb_user = Lens.lens (\CreateLocationSmb' {user} -> user) (\s@CreateLocationSmb' {} a -> s {user = a} :: CreateLocationSmb)
+
+-- | The password of the user who can mount the share, has the permissions to
+-- access files and folders in the SMB share.
+createLocationSmb_password :: Lens.Lens' CreateLocationSmb Prelude.Text
+createLocationSmb_password = Lens.lens (\CreateLocationSmb' {password} -> password) (\s@CreateLocationSmb' {} a -> s {password = a} :: CreateLocationSmb) Prelude.. Data._Sensitive
+
+-- | The Amazon Resource Names (ARNs) of agents to use for a Simple Message
+-- Block (SMB) location.
+createLocationSmb_agentArns :: Lens.Lens' CreateLocationSmb (Prelude.NonEmpty Prelude.Text)
+createLocationSmb_agentArns = Lens.lens (\CreateLocationSmb' {agentArns} -> agentArns) (\s@CreateLocationSmb' {} a -> s {agentArns = a} :: CreateLocationSmb) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateLocationSmb where
+  type
+    AWSResponse CreateLocationSmb =
+      CreateLocationSmbResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateLocationSmbResponse'
+            Prelude.<$> (x Data..?> "LocationArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLocationSmb where
+  hashWithSalt _salt CreateLocationSmb' {..} =
+    _salt
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` mountOptions
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` subdirectory
+      `Prelude.hashWithSalt` serverHostname
+      `Prelude.hashWithSalt` user
+      `Prelude.hashWithSalt` password
+      `Prelude.hashWithSalt` agentArns
+
+instance Prelude.NFData CreateLocationSmb where
+  rnf CreateLocationSmb' {..} =
+    Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf mountOptions
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf subdirectory
+      `Prelude.seq` Prelude.rnf serverHostname
+      `Prelude.seq` Prelude.rnf user
+      `Prelude.seq` Prelude.rnf password
+      `Prelude.seq` Prelude.rnf agentArns
+
+instance Data.ToHeaders CreateLocationSmb where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.CreateLocationSmb" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateLocationSmb where
+  toJSON CreateLocationSmb' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Domain" Data..=) Prelude.<$> domain,
+            ("MountOptions" Data..=) Prelude.<$> mountOptions,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Subdirectory" Data..= subdirectory),
+            Prelude.Just
+              ("ServerHostname" Data..= serverHostname),
+            Prelude.Just ("User" Data..= user),
+            Prelude.Just ("Password" Data..= password),
+            Prelude.Just ("AgentArns" Data..= agentArns)
+          ]
+      )
+
+instance Data.ToPath CreateLocationSmb where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLocationSmb where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | CreateLocationSmbResponse
+--
+-- /See:/ 'newCreateLocationSmbResponse' smart constructor.
+data CreateLocationSmbResponse = CreateLocationSmbResponse'
+  { -- | The Amazon Resource Name (ARN) of the source SMB file system location
+    -- that is created.
+    locationArn :: 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 'CreateLocationSmbResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'createLocationSmbResponse_locationArn' - The Amazon Resource Name (ARN) of the source SMB file system location
+-- that is created.
+--
+-- 'httpStatus', 'createLocationSmbResponse_httpStatus' - The response's http status code.
+newCreateLocationSmbResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLocationSmbResponse
+newCreateLocationSmbResponse pHttpStatus_ =
+  CreateLocationSmbResponse'
+    { locationArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the source SMB file system location
+-- that is created.
+createLocationSmbResponse_locationArn :: Lens.Lens' CreateLocationSmbResponse (Prelude.Maybe Prelude.Text)
+createLocationSmbResponse_locationArn = Lens.lens (\CreateLocationSmbResponse' {locationArn} -> locationArn) (\s@CreateLocationSmbResponse' {} a -> s {locationArn = a} :: CreateLocationSmbResponse)
+
+-- | The response's http status code.
+createLocationSmbResponse_httpStatus :: Lens.Lens' CreateLocationSmbResponse Prelude.Int
+createLocationSmbResponse_httpStatus = Lens.lens (\CreateLocationSmbResponse' {httpStatus} -> httpStatus) (\s@CreateLocationSmbResponse' {} a -> s {httpStatus = a} :: CreateLocationSmbResponse)
+
+instance Prelude.NFData CreateLocationSmbResponse where
+  rnf CreateLocationSmbResponse' {..} =
+    Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/CreateTask.hs b/gen/Amazonka/DataSync/CreateTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/CreateTask.hs
@@ -0,0 +1,348 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.CreateTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Configures a task, which defines where and how DataSync transfers your
+-- data.
+--
+-- A task includes a source location, a destination location, and the
+-- preferences for how and when you want to transfer your data (such as
+-- bandwidth limits, scheduling, among other options).
+module Amazonka.DataSync.CreateTask
+  ( -- * Creating a Request
+    CreateTask (..),
+    newCreateTask,
+
+    -- * Request Lenses
+    createTask_cloudWatchLogGroupArn,
+    createTask_excludes,
+    createTask_includes,
+    createTask_name,
+    createTask_options,
+    createTask_schedule,
+    createTask_tags,
+    createTask_sourceLocationArn,
+    createTask_destinationLocationArn,
+
+    -- * Destructuring the Response
+    CreateTaskResponse (..),
+    newCreateTaskResponse,
+
+    -- * Response Lenses
+    createTaskResponse_taskArn,
+    createTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | CreateTaskRequest
+--
+-- /See:/ 'newCreateTask' smart constructor.
+data CreateTask = CreateTask'
+  { -- | The Amazon Resource Name (ARN) of the Amazon CloudWatch log group that
+    -- is used to monitor and log events in the task.
+    cloudWatchLogGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | Specifies a list of filter rules that exclude specific data during your
+    -- transfer. For more information and examples, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+    excludes :: Prelude.Maybe [FilterRule],
+    -- | Specifies a list of filter rules that include specific data during your
+    -- transfer. For more information and examples, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+    includes :: Prelude.Maybe [FilterRule],
+    -- | The name of a task. This value is a text reference that is used to
+    -- identify the task in the console.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the configuration options for a task. Some options include
+    -- preserving file or object metadata and verifying data integrity.
+    --
+    -- You can also override these options before starting an individual run of
+    -- a task (also known as a /task execution/). For more information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/API_StartTaskExecution.html StartTaskExecution>.
+    options :: Prelude.Maybe Options,
+    -- | Specifies a schedule used to periodically transfer files from a source
+    -- to a destination location. The schedule should be specified in UTC time.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/task-scheduling.html Scheduling your task>.
+    schedule :: Prelude.Maybe TaskSchedule,
+    -- | Specifies the tags that you want to apply to the Amazon Resource Name
+    -- (ARN) representing the task.
+    --
+    -- /Tags/ are key-value pairs that help you manage, filter, and search for
+    -- your DataSync resources.
+    tags :: Prelude.Maybe [TagListEntry],
+    -- | The Amazon Resource Name (ARN) of the source location for the task.
+    sourceLocationArn :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an Amazon Web Services storage
+    -- resource\'s location.
+    destinationLocationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cloudWatchLogGroupArn', 'createTask_cloudWatchLogGroupArn' - The Amazon Resource Name (ARN) of the Amazon CloudWatch log group that
+-- is used to monitor and log events in the task.
+--
+-- 'excludes', 'createTask_excludes' - Specifies a list of filter rules that exclude specific data during your
+-- transfer. For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+--
+-- 'includes', 'createTask_includes' - Specifies a list of filter rules that include specific data during your
+-- transfer. For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+--
+-- 'name', 'createTask_name' - The name of a task. This value is a text reference that is used to
+-- identify the task in the console.
+--
+-- 'options', 'createTask_options' - Specifies the configuration options for a task. Some options include
+-- preserving file or object metadata and verifying data integrity.
+--
+-- You can also override these options before starting an individual run of
+-- a task (also known as a /task execution/). For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/API_StartTaskExecution.html StartTaskExecution>.
+--
+-- 'schedule', 'createTask_schedule' - Specifies a schedule used to periodically transfer files from a source
+-- to a destination location. The schedule should be specified in UTC time.
+-- For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/task-scheduling.html Scheduling your task>.
+--
+-- 'tags', 'createTask_tags' - Specifies the tags that you want to apply to the Amazon Resource Name
+-- (ARN) representing the task.
+--
+-- /Tags/ are key-value pairs that help you manage, filter, and search for
+-- your DataSync resources.
+--
+-- 'sourceLocationArn', 'createTask_sourceLocationArn' - The Amazon Resource Name (ARN) of the source location for the task.
+--
+-- 'destinationLocationArn', 'createTask_destinationLocationArn' - The Amazon Resource Name (ARN) of an Amazon Web Services storage
+-- resource\'s location.
+newCreateTask ::
+  -- | 'sourceLocationArn'
+  Prelude.Text ->
+  -- | 'destinationLocationArn'
+  Prelude.Text ->
+  CreateTask
+newCreateTask
+  pSourceLocationArn_
+  pDestinationLocationArn_ =
+    CreateTask'
+      { cloudWatchLogGroupArn =
+          Prelude.Nothing,
+        excludes = Prelude.Nothing,
+        includes = Prelude.Nothing,
+        name = Prelude.Nothing,
+        options = Prelude.Nothing,
+        schedule = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        sourceLocationArn = pSourceLocationArn_,
+        destinationLocationArn = pDestinationLocationArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the Amazon CloudWatch log group that
+-- is used to monitor and log events in the task.
+createTask_cloudWatchLogGroupArn :: Lens.Lens' CreateTask (Prelude.Maybe Prelude.Text)
+createTask_cloudWatchLogGroupArn = Lens.lens (\CreateTask' {cloudWatchLogGroupArn} -> cloudWatchLogGroupArn) (\s@CreateTask' {} a -> s {cloudWatchLogGroupArn = a} :: CreateTask)
+
+-- | Specifies a list of filter rules that exclude specific data during your
+-- transfer. For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+createTask_excludes :: Lens.Lens' CreateTask (Prelude.Maybe [FilterRule])
+createTask_excludes = Lens.lens (\CreateTask' {excludes} -> excludes) (\s@CreateTask' {} a -> s {excludes = a} :: CreateTask) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies a list of filter rules that include specific data during your
+-- transfer. For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+createTask_includes :: Lens.Lens' CreateTask (Prelude.Maybe [FilterRule])
+createTask_includes = Lens.lens (\CreateTask' {includes} -> includes) (\s@CreateTask' {} a -> s {includes = a} :: CreateTask) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of a task. This value is a text reference that is used to
+-- identify the task in the console.
+createTask_name :: Lens.Lens' CreateTask (Prelude.Maybe Prelude.Text)
+createTask_name = Lens.lens (\CreateTask' {name} -> name) (\s@CreateTask' {} a -> s {name = a} :: CreateTask)
+
+-- | Specifies the configuration options for a task. Some options include
+-- preserving file or object metadata and verifying data integrity.
+--
+-- You can also override these options before starting an individual run of
+-- a task (also known as a /task execution/). For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/API_StartTaskExecution.html StartTaskExecution>.
+createTask_options :: Lens.Lens' CreateTask (Prelude.Maybe Options)
+createTask_options = Lens.lens (\CreateTask' {options} -> options) (\s@CreateTask' {} a -> s {options = a} :: CreateTask)
+
+-- | Specifies a schedule used to periodically transfer files from a source
+-- to a destination location. The schedule should be specified in UTC time.
+-- For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/task-scheduling.html Scheduling your task>.
+createTask_schedule :: Lens.Lens' CreateTask (Prelude.Maybe TaskSchedule)
+createTask_schedule = Lens.lens (\CreateTask' {schedule} -> schedule) (\s@CreateTask' {} a -> s {schedule = a} :: CreateTask)
+
+-- | Specifies the tags that you want to apply to the Amazon Resource Name
+-- (ARN) representing the task.
+--
+-- /Tags/ are key-value pairs that help you manage, filter, and search for
+-- your DataSync resources.
+createTask_tags :: Lens.Lens' CreateTask (Prelude.Maybe [TagListEntry])
+createTask_tags = Lens.lens (\CreateTask' {tags} -> tags) (\s@CreateTask' {} a -> s {tags = a} :: CreateTask) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the source location for the task.
+createTask_sourceLocationArn :: Lens.Lens' CreateTask Prelude.Text
+createTask_sourceLocationArn = Lens.lens (\CreateTask' {sourceLocationArn} -> sourceLocationArn) (\s@CreateTask' {} a -> s {sourceLocationArn = a} :: CreateTask)
+
+-- | The Amazon Resource Name (ARN) of an Amazon Web Services storage
+-- resource\'s location.
+createTask_destinationLocationArn :: Lens.Lens' CreateTask Prelude.Text
+createTask_destinationLocationArn = Lens.lens (\CreateTask' {destinationLocationArn} -> destinationLocationArn) (\s@CreateTask' {} a -> s {destinationLocationArn = a} :: CreateTask)
+
+instance Core.AWSRequest CreateTask where
+  type AWSResponse CreateTask = CreateTaskResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateTaskResponse'
+            Prelude.<$> (x Data..?> "TaskArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateTask where
+  hashWithSalt _salt CreateTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` cloudWatchLogGroupArn
+      `Prelude.hashWithSalt` excludes
+      `Prelude.hashWithSalt` includes
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` options
+      `Prelude.hashWithSalt` schedule
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` sourceLocationArn
+      `Prelude.hashWithSalt` destinationLocationArn
+
+instance Prelude.NFData CreateTask where
+  rnf CreateTask' {..} =
+    Prelude.rnf cloudWatchLogGroupArn
+      `Prelude.seq` Prelude.rnf excludes
+      `Prelude.seq` Prelude.rnf includes
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf schedule
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf sourceLocationArn
+      `Prelude.seq` Prelude.rnf destinationLocationArn
+
+instance Data.ToHeaders CreateTask where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("FmrsService.CreateTask" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateTask where
+  toJSON CreateTask' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CloudWatchLogGroupArn" Data..=)
+              Prelude.<$> cloudWatchLogGroupArn,
+            ("Excludes" Data..=) Prelude.<$> excludes,
+            ("Includes" Data..=) Prelude.<$> includes,
+            ("Name" Data..=) Prelude.<$> name,
+            ("Options" Data..=) Prelude.<$> options,
+            ("Schedule" Data..=) Prelude.<$> schedule,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("SourceLocationArn" Data..= sourceLocationArn),
+            Prelude.Just
+              ( "DestinationLocationArn"
+                  Data..= destinationLocationArn
+              )
+          ]
+      )
+
+instance Data.ToPath CreateTask where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | CreateTaskResponse
+--
+-- /See:/ 'newCreateTaskResponse' smart constructor.
+data CreateTaskResponse = CreateTaskResponse'
+  { -- | The Amazon Resource Name (ARN) of the task.
+    taskArn :: 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 'CreateTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'taskArn', 'createTaskResponse_taskArn' - The Amazon Resource Name (ARN) of the task.
+--
+-- 'httpStatus', 'createTaskResponse_httpStatus' - The response's http status code.
+newCreateTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTaskResponse
+newCreateTaskResponse pHttpStatus_ =
+  CreateTaskResponse'
+    { taskArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the task.
+createTaskResponse_taskArn :: Lens.Lens' CreateTaskResponse (Prelude.Maybe Prelude.Text)
+createTaskResponse_taskArn = Lens.lens (\CreateTaskResponse' {taskArn} -> taskArn) (\s@CreateTaskResponse' {} a -> s {taskArn = a} :: CreateTaskResponse)
+
+-- | The response's http status code.
+createTaskResponse_httpStatus :: Lens.Lens' CreateTaskResponse Prelude.Int
+createTaskResponse_httpStatus = Lens.lens (\CreateTaskResponse' {httpStatus} -> httpStatus) (\s@CreateTaskResponse' {} a -> s {httpStatus = a} :: CreateTaskResponse)
+
+instance Prelude.NFData CreateTaskResponse where
+  rnf CreateTaskResponse' {..} =
+    Prelude.rnf taskArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DeleteAgent.hs b/gen/Amazonka/DataSync/DeleteAgent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DeleteAgent.hs
@@ -0,0 +1,160 @@
+{-# 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.DataSync.DeleteAgent
+-- 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 agent. To specify which agent to delete, use the Amazon
+-- Resource Name (ARN) of the agent in your request. The operation
+-- disassociates the agent from your Amazon Web Services account. However,
+-- it doesn\'t delete the agent virtual machine (VM) from your on-premises
+-- environment.
+module Amazonka.DataSync.DeleteAgent
+  ( -- * Creating a Request
+    DeleteAgent (..),
+    newDeleteAgent,
+
+    -- * Request Lenses
+    deleteAgent_agentArn,
+
+    -- * Destructuring the Response
+    DeleteAgentResponse (..),
+    newDeleteAgentResponse,
+
+    -- * Response Lenses
+    deleteAgentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | DeleteAgentRequest
+--
+-- /See:/ 'newDeleteAgent' smart constructor.
+data DeleteAgent = DeleteAgent'
+  { -- | The Amazon Resource Name (ARN) of the agent to delete. Use the
+    -- @ListAgents@ operation to return a list of agents for your account and
+    -- Amazon Web Services Region.
+    agentArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAgent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'agentArn', 'deleteAgent_agentArn' - The Amazon Resource Name (ARN) of the agent to delete. Use the
+-- @ListAgents@ operation to return a list of agents for your account and
+-- Amazon Web Services Region.
+newDeleteAgent ::
+  -- | 'agentArn'
+  Prelude.Text ->
+  DeleteAgent
+newDeleteAgent pAgentArn_ =
+  DeleteAgent' {agentArn = pAgentArn_}
+
+-- | The Amazon Resource Name (ARN) of the agent to delete. Use the
+-- @ListAgents@ operation to return a list of agents for your account and
+-- Amazon Web Services Region.
+deleteAgent_agentArn :: Lens.Lens' DeleteAgent Prelude.Text
+deleteAgent_agentArn = Lens.lens (\DeleteAgent' {agentArn} -> agentArn) (\s@DeleteAgent' {} a -> s {agentArn = a} :: DeleteAgent)
+
+instance Core.AWSRequest DeleteAgent where
+  type AWSResponse DeleteAgent = DeleteAgentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAgentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteAgent where
+  hashWithSalt _salt DeleteAgent' {..} =
+    _salt `Prelude.hashWithSalt` agentArn
+
+instance Prelude.NFData DeleteAgent where
+  rnf DeleteAgent' {..} = Prelude.rnf agentArn
+
+instance Data.ToHeaders DeleteAgent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("FmrsService.DeleteAgent" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteAgent where
+  toJSON DeleteAgent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("AgentArn" Data..= agentArn)]
+      )
+
+instance Data.ToPath DeleteAgent where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteAgent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAgentResponse' smart constructor.
+data DeleteAgentResponse = DeleteAgentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAgentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteAgentResponse_httpStatus' - The response's http status code.
+newDeleteAgentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAgentResponse
+newDeleteAgentResponse pHttpStatus_ =
+  DeleteAgentResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteAgentResponse_httpStatus :: Lens.Lens' DeleteAgentResponse Prelude.Int
+deleteAgentResponse_httpStatus = Lens.lens (\DeleteAgentResponse' {httpStatus} -> httpStatus) (\s@DeleteAgentResponse' {} a -> s {httpStatus = a} :: DeleteAgentResponse)
+
+instance Prelude.NFData DeleteAgentResponse where
+  rnf DeleteAgentResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DeleteLocation.hs b/gen/Amazonka/DataSync/DeleteLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DeleteLocation.hs
@@ -0,0 +1,153 @@
+{-# 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.DataSync.DeleteLocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the configuration of a location used by DataSync.
+module Amazonka.DataSync.DeleteLocation
+  ( -- * Creating a Request
+    DeleteLocation (..),
+    newDeleteLocation,
+
+    -- * Request Lenses
+    deleteLocation_locationArn,
+
+    -- * Destructuring the Response
+    DeleteLocationResponse (..),
+    newDeleteLocationResponse,
+
+    -- * Response Lenses
+    deleteLocationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | DeleteLocation
+--
+-- /See:/ 'newDeleteLocation' smart constructor.
+data DeleteLocation = DeleteLocation'
+  { -- | The Amazon Resource Name (ARN) of the location to delete.
+    locationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLocation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'deleteLocation_locationArn' - The Amazon Resource Name (ARN) of the location to delete.
+newDeleteLocation ::
+  -- | 'locationArn'
+  Prelude.Text ->
+  DeleteLocation
+newDeleteLocation pLocationArn_ =
+  DeleteLocation' {locationArn = pLocationArn_}
+
+-- | The Amazon Resource Name (ARN) of the location to delete.
+deleteLocation_locationArn :: Lens.Lens' DeleteLocation Prelude.Text
+deleteLocation_locationArn = Lens.lens (\DeleteLocation' {locationArn} -> locationArn) (\s@DeleteLocation' {} a -> s {locationArn = a} :: DeleteLocation)
+
+instance Core.AWSRequest DeleteLocation where
+  type
+    AWSResponse DeleteLocation =
+      DeleteLocationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteLocationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteLocation where
+  hashWithSalt _salt DeleteLocation' {..} =
+    _salt `Prelude.hashWithSalt` locationArn
+
+instance Prelude.NFData DeleteLocation where
+  rnf DeleteLocation' {..} = Prelude.rnf locationArn
+
+instance Data.ToHeaders DeleteLocation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("FmrsService.DeleteLocation" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteLocation where
+  toJSON DeleteLocation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("LocationArn" Data..= locationArn)]
+      )
+
+instance Data.ToPath DeleteLocation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteLocation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteLocationResponse' smart constructor.
+data DeleteLocationResponse = DeleteLocationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLocationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteLocationResponse_httpStatus' - The response's http status code.
+newDeleteLocationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteLocationResponse
+newDeleteLocationResponse pHttpStatus_ =
+  DeleteLocationResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteLocationResponse_httpStatus :: Lens.Lens' DeleteLocationResponse Prelude.Int
+deleteLocationResponse_httpStatus = Lens.lens (\DeleteLocationResponse' {httpStatus} -> httpStatus) (\s@DeleteLocationResponse' {} a -> s {httpStatus = a} :: DeleteLocationResponse)
+
+instance Prelude.NFData DeleteLocationResponse where
+  rnf DeleteLocationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DeleteTask.hs b/gen/Amazonka/DataSync/DeleteTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DeleteTask.hs
@@ -0,0 +1,153 @@
+{-# 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.DataSync.DeleteTask
+-- 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 DataSync task.
+module Amazonka.DataSync.DeleteTask
+  ( -- * Creating a Request
+    DeleteTask (..),
+    newDeleteTask,
+
+    -- * Request Lenses
+    deleteTask_taskArn,
+
+    -- * Destructuring the Response
+    DeleteTaskResponse (..),
+    newDeleteTaskResponse,
+
+    -- * Response Lenses
+    deleteTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | DeleteTask
+--
+-- /See:/ 'newDeleteTask' smart constructor.
+data DeleteTask = DeleteTask'
+  { -- | Specifies the Amazon Resource Name (ARN) of the task that you want to
+    -- delete.
+    taskArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'taskArn', 'deleteTask_taskArn' - Specifies the Amazon Resource Name (ARN) of the task that you want to
+-- delete.
+newDeleteTask ::
+  -- | 'taskArn'
+  Prelude.Text ->
+  DeleteTask
+newDeleteTask pTaskArn_ =
+  DeleteTask' {taskArn = pTaskArn_}
+
+-- | Specifies the Amazon Resource Name (ARN) of the task that you want to
+-- delete.
+deleteTask_taskArn :: Lens.Lens' DeleteTask Prelude.Text
+deleteTask_taskArn = Lens.lens (\DeleteTask' {taskArn} -> taskArn) (\s@DeleteTask' {} a -> s {taskArn = a} :: DeleteTask)
+
+instance Core.AWSRequest DeleteTask where
+  type AWSResponse DeleteTask = DeleteTaskResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteTaskResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteTask where
+  hashWithSalt _salt DeleteTask' {..} =
+    _salt `Prelude.hashWithSalt` taskArn
+
+instance Prelude.NFData DeleteTask where
+  rnf DeleteTask' {..} = Prelude.rnf taskArn
+
+instance Data.ToHeaders DeleteTask where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("FmrsService.DeleteTask" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteTask where
+  toJSON DeleteTask' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("TaskArn" Data..= taskArn)]
+      )
+
+instance Data.ToPath DeleteTask where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteTaskResponse' smart constructor.
+data DeleteTaskResponse = DeleteTaskResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteTaskResponse_httpStatus' - The response's http status code.
+newDeleteTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTaskResponse
+newDeleteTaskResponse pHttpStatus_ =
+  DeleteTaskResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteTaskResponse_httpStatus :: Lens.Lens' DeleteTaskResponse Prelude.Int
+deleteTaskResponse_httpStatus = Lens.lens (\DeleteTaskResponse' {httpStatus} -> httpStatus) (\s@DeleteTaskResponse' {} a -> s {httpStatus = a} :: DeleteTaskResponse)
+
+instance Prelude.NFData DeleteTaskResponse where
+  rnf DeleteTaskResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DescribeAgent.hs b/gen/Amazonka/DataSync/DescribeAgent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DescribeAgent.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.DataSync.DescribeAgent
+-- 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 metadata such as the name, the network interfaces, and the
+-- status (that is, whether the agent is running or not) for an agent. To
+-- specify which agent to describe, use the Amazon Resource Name (ARN) of
+-- the agent in your request.
+module Amazonka.DataSync.DescribeAgent
+  ( -- * Creating a Request
+    DescribeAgent (..),
+    newDescribeAgent,
+
+    -- * Request Lenses
+    describeAgent_agentArn,
+
+    -- * Destructuring the Response
+    DescribeAgentResponse (..),
+    newDescribeAgentResponse,
+
+    -- * Response Lenses
+    describeAgentResponse_agentArn,
+    describeAgentResponse_creationTime,
+    describeAgentResponse_endpointType,
+    describeAgentResponse_lastConnectionTime,
+    describeAgentResponse_name,
+    describeAgentResponse_privateLinkConfig,
+    describeAgentResponse_status,
+    describeAgentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | DescribeAgent
+--
+-- /See:/ 'newDescribeAgent' smart constructor.
+data DescribeAgent = DescribeAgent'
+  { -- | The Amazon Resource Name (ARN) of the agent to describe.
+    agentArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAgent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'agentArn', 'describeAgent_agentArn' - The Amazon Resource Name (ARN) of the agent to describe.
+newDescribeAgent ::
+  -- | 'agentArn'
+  Prelude.Text ->
+  DescribeAgent
+newDescribeAgent pAgentArn_ =
+  DescribeAgent' {agentArn = pAgentArn_}
+
+-- | The Amazon Resource Name (ARN) of the agent to describe.
+describeAgent_agentArn :: Lens.Lens' DescribeAgent Prelude.Text
+describeAgent_agentArn = Lens.lens (\DescribeAgent' {agentArn} -> agentArn) (\s@DescribeAgent' {} a -> s {agentArn = a} :: DescribeAgent)
+
+instance Core.AWSRequest DescribeAgent where
+  type
+    AWSResponse DescribeAgent =
+      DescribeAgentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAgentResponse'
+            Prelude.<$> (x Data..?> "AgentArn")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "EndpointType")
+            Prelude.<*> (x Data..?> "LastConnectionTime")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "PrivateLinkConfig")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAgent where
+  hashWithSalt _salt DescribeAgent' {..} =
+    _salt `Prelude.hashWithSalt` agentArn
+
+instance Prelude.NFData DescribeAgent where
+  rnf DescribeAgent' {..} = Prelude.rnf agentArn
+
+instance Data.ToHeaders DescribeAgent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("FmrsService.DescribeAgent" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeAgent where
+  toJSON DescribeAgent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("AgentArn" Data..= agentArn)]
+      )
+
+instance Data.ToPath DescribeAgent where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeAgent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | DescribeAgentResponse
+--
+-- /See:/ 'newDescribeAgentResponse' smart constructor.
+data DescribeAgentResponse = DescribeAgentResponse'
+  { -- | The Amazon Resource Name (ARN) of the agent.
+    agentArn :: Prelude.Maybe Prelude.Text,
+    -- | The time that the agent was activated (that is, created in your
+    -- account).
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The type of endpoint that your agent is connected to. If the endpoint is
+    -- a VPC endpoint, the agent is not accessible over the public internet.
+    endpointType :: Prelude.Maybe EndpointType,
+    -- | The time that the agent last connected to DataSync.
+    lastConnectionTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the agent.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The subnet and the security group that DataSync used to access a VPC
+    -- endpoint.
+    privateLinkConfig :: Prelude.Maybe PrivateLinkConfig,
+    -- | The status of the agent. If the status is ONLINE, then the agent is
+    -- configured properly and is available to use. The Running status is the
+    -- normal running status for an agent. If the status is OFFLINE, the
+    -- agent\'s VM is turned off or the agent is in an unhealthy state. When
+    -- the issue that caused the unhealthy state is resolved, the agent returns
+    -- to ONLINE status.
+    status :: Prelude.Maybe AgentStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAgentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'agentArn', 'describeAgentResponse_agentArn' - The Amazon Resource Name (ARN) of the agent.
+--
+-- 'creationTime', 'describeAgentResponse_creationTime' - The time that the agent was activated (that is, created in your
+-- account).
+--
+-- 'endpointType', 'describeAgentResponse_endpointType' - The type of endpoint that your agent is connected to. If the endpoint is
+-- a VPC endpoint, the agent is not accessible over the public internet.
+--
+-- 'lastConnectionTime', 'describeAgentResponse_lastConnectionTime' - The time that the agent last connected to DataSync.
+--
+-- 'name', 'describeAgentResponse_name' - The name of the agent.
+--
+-- 'privateLinkConfig', 'describeAgentResponse_privateLinkConfig' - The subnet and the security group that DataSync used to access a VPC
+-- endpoint.
+--
+-- 'status', 'describeAgentResponse_status' - The status of the agent. If the status is ONLINE, then the agent is
+-- configured properly and is available to use. The Running status is the
+-- normal running status for an agent. If the status is OFFLINE, the
+-- agent\'s VM is turned off or the agent is in an unhealthy state. When
+-- the issue that caused the unhealthy state is resolved, the agent returns
+-- to ONLINE status.
+--
+-- 'httpStatus', 'describeAgentResponse_httpStatus' - The response's http status code.
+newDescribeAgentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAgentResponse
+newDescribeAgentResponse pHttpStatus_ =
+  DescribeAgentResponse'
+    { agentArn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      endpointType = Prelude.Nothing,
+      lastConnectionTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      privateLinkConfig = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the agent.
+describeAgentResponse_agentArn :: Lens.Lens' DescribeAgentResponse (Prelude.Maybe Prelude.Text)
+describeAgentResponse_agentArn = Lens.lens (\DescribeAgentResponse' {agentArn} -> agentArn) (\s@DescribeAgentResponse' {} a -> s {agentArn = a} :: DescribeAgentResponse)
+
+-- | The time that the agent was activated (that is, created in your
+-- account).
+describeAgentResponse_creationTime :: Lens.Lens' DescribeAgentResponse (Prelude.Maybe Prelude.UTCTime)
+describeAgentResponse_creationTime = Lens.lens (\DescribeAgentResponse' {creationTime} -> creationTime) (\s@DescribeAgentResponse' {} a -> s {creationTime = a} :: DescribeAgentResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The type of endpoint that your agent is connected to. If the endpoint is
+-- a VPC endpoint, the agent is not accessible over the public internet.
+describeAgentResponse_endpointType :: Lens.Lens' DescribeAgentResponse (Prelude.Maybe EndpointType)
+describeAgentResponse_endpointType = Lens.lens (\DescribeAgentResponse' {endpointType} -> endpointType) (\s@DescribeAgentResponse' {} a -> s {endpointType = a} :: DescribeAgentResponse)
+
+-- | The time that the agent last connected to DataSync.
+describeAgentResponse_lastConnectionTime :: Lens.Lens' DescribeAgentResponse (Prelude.Maybe Prelude.UTCTime)
+describeAgentResponse_lastConnectionTime = Lens.lens (\DescribeAgentResponse' {lastConnectionTime} -> lastConnectionTime) (\s@DescribeAgentResponse' {} a -> s {lastConnectionTime = a} :: DescribeAgentResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the agent.
+describeAgentResponse_name :: Lens.Lens' DescribeAgentResponse (Prelude.Maybe Prelude.Text)
+describeAgentResponse_name = Lens.lens (\DescribeAgentResponse' {name} -> name) (\s@DescribeAgentResponse' {} a -> s {name = a} :: DescribeAgentResponse)
+
+-- | The subnet and the security group that DataSync used to access a VPC
+-- endpoint.
+describeAgentResponse_privateLinkConfig :: Lens.Lens' DescribeAgentResponse (Prelude.Maybe PrivateLinkConfig)
+describeAgentResponse_privateLinkConfig = Lens.lens (\DescribeAgentResponse' {privateLinkConfig} -> privateLinkConfig) (\s@DescribeAgentResponse' {} a -> s {privateLinkConfig = a} :: DescribeAgentResponse)
+
+-- | The status of the agent. If the status is ONLINE, then the agent is
+-- configured properly and is available to use. The Running status is the
+-- normal running status for an agent. If the status is OFFLINE, the
+-- agent\'s VM is turned off or the agent is in an unhealthy state. When
+-- the issue that caused the unhealthy state is resolved, the agent returns
+-- to ONLINE status.
+describeAgentResponse_status :: Lens.Lens' DescribeAgentResponse (Prelude.Maybe AgentStatus)
+describeAgentResponse_status = Lens.lens (\DescribeAgentResponse' {status} -> status) (\s@DescribeAgentResponse' {} a -> s {status = a} :: DescribeAgentResponse)
+
+-- | The response's http status code.
+describeAgentResponse_httpStatus :: Lens.Lens' DescribeAgentResponse Prelude.Int
+describeAgentResponse_httpStatus = Lens.lens (\DescribeAgentResponse' {httpStatus} -> httpStatus) (\s@DescribeAgentResponse' {} a -> s {httpStatus = a} :: DescribeAgentResponse)
+
+instance Prelude.NFData DescribeAgentResponse where
+  rnf DescribeAgentResponse' {..} =
+    Prelude.rnf agentArn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf endpointType
+      `Prelude.seq` Prelude.rnf lastConnectionTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf privateLinkConfig
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DescribeLocationEfs.hs b/gen/Amazonka/DataSync/DescribeLocationEfs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DescribeLocationEfs.hs
@@ -0,0 +1,257 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.DescribeLocationEfs
+-- 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 metadata about your DataSync location for an Amazon EFS file
+-- system.
+module Amazonka.DataSync.DescribeLocationEfs
+  ( -- * Creating a Request
+    DescribeLocationEfs (..),
+    newDescribeLocationEfs,
+
+    -- * Request Lenses
+    describeLocationEfs_locationArn,
+
+    -- * Destructuring the Response
+    DescribeLocationEfsResponse (..),
+    newDescribeLocationEfsResponse,
+
+    -- * Response Lenses
+    describeLocationEfsResponse_accessPointArn,
+    describeLocationEfsResponse_creationTime,
+    describeLocationEfsResponse_ec2Config,
+    describeLocationEfsResponse_fileSystemAccessRoleArn,
+    describeLocationEfsResponse_inTransitEncryption,
+    describeLocationEfsResponse_locationArn,
+    describeLocationEfsResponse_locationUri,
+    describeLocationEfsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | DescribeLocationEfsRequest
+--
+-- /See:/ 'newDescribeLocationEfs' smart constructor.
+data DescribeLocationEfs = DescribeLocationEfs'
+  { -- | The Amazon Resource Name (ARN) of the Amazon EFS file system location
+    -- that you want information about.
+    locationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationEfs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'describeLocationEfs_locationArn' - The Amazon Resource Name (ARN) of the Amazon EFS file system location
+-- that you want information about.
+newDescribeLocationEfs ::
+  -- | 'locationArn'
+  Prelude.Text ->
+  DescribeLocationEfs
+newDescribeLocationEfs pLocationArn_ =
+  DescribeLocationEfs' {locationArn = pLocationArn_}
+
+-- | The Amazon Resource Name (ARN) of the Amazon EFS file system location
+-- that you want information about.
+describeLocationEfs_locationArn :: Lens.Lens' DescribeLocationEfs Prelude.Text
+describeLocationEfs_locationArn = Lens.lens (\DescribeLocationEfs' {locationArn} -> locationArn) (\s@DescribeLocationEfs' {} a -> s {locationArn = a} :: DescribeLocationEfs)
+
+instance Core.AWSRequest DescribeLocationEfs where
+  type
+    AWSResponse DescribeLocationEfs =
+      DescribeLocationEfsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeLocationEfsResponse'
+            Prelude.<$> (x Data..?> "AccessPointArn")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "Ec2Config")
+            Prelude.<*> (x Data..?> "FileSystemAccessRoleArn")
+            Prelude.<*> (x Data..?> "InTransitEncryption")
+            Prelude.<*> (x Data..?> "LocationArn")
+            Prelude.<*> (x Data..?> "LocationUri")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeLocationEfs where
+  hashWithSalt _salt DescribeLocationEfs' {..} =
+    _salt `Prelude.hashWithSalt` locationArn
+
+instance Prelude.NFData DescribeLocationEfs where
+  rnf DescribeLocationEfs' {..} =
+    Prelude.rnf locationArn
+
+instance Data.ToHeaders DescribeLocationEfs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.DescribeLocationEfs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeLocationEfs where
+  toJSON DescribeLocationEfs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("LocationArn" Data..= locationArn)]
+      )
+
+instance Data.ToPath DescribeLocationEfs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLocationEfs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | DescribeLocationEfsResponse
+--
+-- /See:/ 'newDescribeLocationEfsResponse' smart constructor.
+data DescribeLocationEfsResponse = DescribeLocationEfsResponse'
+  { -- | The ARN of the access point that DataSync uses to access the Amazon EFS
+    -- file system.
+    accessPointArn :: Prelude.Maybe Prelude.Text,
+    -- | The time that the location was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    ec2Config :: Prelude.Maybe Ec2Config,
+    -- | The Identity and Access Management (IAM) role that DataSync assumes when
+    -- mounting the Amazon EFS file system.
+    fileSystemAccessRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | Describes whether DataSync uses Transport Layer Security (TLS)
+    -- encryption when copying data to or from the Amazon EFS file system.
+    inTransitEncryption :: Prelude.Maybe EfsInTransitEncryption,
+    -- | The ARN of the Amazon EFS file system location.
+    locationArn :: Prelude.Maybe Prelude.Text,
+    -- | The URL of the Amazon EFS file system location.
+    locationUri :: 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 'DescribeLocationEfsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessPointArn', 'describeLocationEfsResponse_accessPointArn' - The ARN of the access point that DataSync uses to access the Amazon EFS
+-- file system.
+--
+-- 'creationTime', 'describeLocationEfsResponse_creationTime' - The time that the location was created.
+--
+-- 'ec2Config', 'describeLocationEfsResponse_ec2Config' - Undocumented member.
+--
+-- 'fileSystemAccessRoleArn', 'describeLocationEfsResponse_fileSystemAccessRoleArn' - The Identity and Access Management (IAM) role that DataSync assumes when
+-- mounting the Amazon EFS file system.
+--
+-- 'inTransitEncryption', 'describeLocationEfsResponse_inTransitEncryption' - Describes whether DataSync uses Transport Layer Security (TLS)
+-- encryption when copying data to or from the Amazon EFS file system.
+--
+-- 'locationArn', 'describeLocationEfsResponse_locationArn' - The ARN of the Amazon EFS file system location.
+--
+-- 'locationUri', 'describeLocationEfsResponse_locationUri' - The URL of the Amazon EFS file system location.
+--
+-- 'httpStatus', 'describeLocationEfsResponse_httpStatus' - The response's http status code.
+newDescribeLocationEfsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocationEfsResponse
+newDescribeLocationEfsResponse pHttpStatus_ =
+  DescribeLocationEfsResponse'
+    { accessPointArn =
+        Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      ec2Config = Prelude.Nothing,
+      fileSystemAccessRoleArn = Prelude.Nothing,
+      inTransitEncryption = Prelude.Nothing,
+      locationArn = Prelude.Nothing,
+      locationUri = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the access point that DataSync uses to access the Amazon EFS
+-- file system.
+describeLocationEfsResponse_accessPointArn :: Lens.Lens' DescribeLocationEfsResponse (Prelude.Maybe Prelude.Text)
+describeLocationEfsResponse_accessPointArn = Lens.lens (\DescribeLocationEfsResponse' {accessPointArn} -> accessPointArn) (\s@DescribeLocationEfsResponse' {} a -> s {accessPointArn = a} :: DescribeLocationEfsResponse)
+
+-- | The time that the location was created.
+describeLocationEfsResponse_creationTime :: Lens.Lens' DescribeLocationEfsResponse (Prelude.Maybe Prelude.UTCTime)
+describeLocationEfsResponse_creationTime = Lens.lens (\DescribeLocationEfsResponse' {creationTime} -> creationTime) (\s@DescribeLocationEfsResponse' {} a -> s {creationTime = a} :: DescribeLocationEfsResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Undocumented member.
+describeLocationEfsResponse_ec2Config :: Lens.Lens' DescribeLocationEfsResponse (Prelude.Maybe Ec2Config)
+describeLocationEfsResponse_ec2Config = Lens.lens (\DescribeLocationEfsResponse' {ec2Config} -> ec2Config) (\s@DescribeLocationEfsResponse' {} a -> s {ec2Config = a} :: DescribeLocationEfsResponse)
+
+-- | The Identity and Access Management (IAM) role that DataSync assumes when
+-- mounting the Amazon EFS file system.
+describeLocationEfsResponse_fileSystemAccessRoleArn :: Lens.Lens' DescribeLocationEfsResponse (Prelude.Maybe Prelude.Text)
+describeLocationEfsResponse_fileSystemAccessRoleArn = Lens.lens (\DescribeLocationEfsResponse' {fileSystemAccessRoleArn} -> fileSystemAccessRoleArn) (\s@DescribeLocationEfsResponse' {} a -> s {fileSystemAccessRoleArn = a} :: DescribeLocationEfsResponse)
+
+-- | Describes whether DataSync uses Transport Layer Security (TLS)
+-- encryption when copying data to or from the Amazon EFS file system.
+describeLocationEfsResponse_inTransitEncryption :: Lens.Lens' DescribeLocationEfsResponse (Prelude.Maybe EfsInTransitEncryption)
+describeLocationEfsResponse_inTransitEncryption = Lens.lens (\DescribeLocationEfsResponse' {inTransitEncryption} -> inTransitEncryption) (\s@DescribeLocationEfsResponse' {} a -> s {inTransitEncryption = a} :: DescribeLocationEfsResponse)
+
+-- | The ARN of the Amazon EFS file system location.
+describeLocationEfsResponse_locationArn :: Lens.Lens' DescribeLocationEfsResponse (Prelude.Maybe Prelude.Text)
+describeLocationEfsResponse_locationArn = Lens.lens (\DescribeLocationEfsResponse' {locationArn} -> locationArn) (\s@DescribeLocationEfsResponse' {} a -> s {locationArn = a} :: DescribeLocationEfsResponse)
+
+-- | The URL of the Amazon EFS file system location.
+describeLocationEfsResponse_locationUri :: Lens.Lens' DescribeLocationEfsResponse (Prelude.Maybe Prelude.Text)
+describeLocationEfsResponse_locationUri = Lens.lens (\DescribeLocationEfsResponse' {locationUri} -> locationUri) (\s@DescribeLocationEfsResponse' {} a -> s {locationUri = a} :: DescribeLocationEfsResponse)
+
+-- | The response's http status code.
+describeLocationEfsResponse_httpStatus :: Lens.Lens' DescribeLocationEfsResponse Prelude.Int
+describeLocationEfsResponse_httpStatus = Lens.lens (\DescribeLocationEfsResponse' {httpStatus} -> httpStatus) (\s@DescribeLocationEfsResponse' {} a -> s {httpStatus = a} :: DescribeLocationEfsResponse)
+
+instance Prelude.NFData DescribeLocationEfsResponse where
+  rnf DescribeLocationEfsResponse' {..} =
+    Prelude.rnf accessPointArn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf ec2Config
+      `Prelude.seq` Prelude.rnf fileSystemAccessRoleArn
+      `Prelude.seq` Prelude.rnf inTransitEncryption
+      `Prelude.seq` Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf locationUri
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DescribeLocationFsxLustre.hs b/gen/Amazonka/DataSync/DescribeLocationFsxLustre.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DescribeLocationFsxLustre.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.DataSync.DescribeLocationFsxLustre
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides details about how an DataSync location for an Amazon FSx for
+-- Lustre file system is configured.
+module Amazonka.DataSync.DescribeLocationFsxLustre
+  ( -- * Creating a Request
+    DescribeLocationFsxLustre (..),
+    newDescribeLocationFsxLustre,
+
+    -- * Request Lenses
+    describeLocationFsxLustre_locationArn,
+
+    -- * Destructuring the Response
+    DescribeLocationFsxLustreResponse (..),
+    newDescribeLocationFsxLustreResponse,
+
+    -- * Response Lenses
+    describeLocationFsxLustreResponse_creationTime,
+    describeLocationFsxLustreResponse_locationArn,
+    describeLocationFsxLustreResponse_locationUri,
+    describeLocationFsxLustreResponse_securityGroupArns,
+    describeLocationFsxLustreResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLocationFsxLustre' smart constructor.
+data DescribeLocationFsxLustre = DescribeLocationFsxLustre'
+  { -- | The Amazon Resource Name (ARN) of the FSx for Lustre location to
+    -- describe.
+    locationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationFsxLustre' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'describeLocationFsxLustre_locationArn' - The Amazon Resource Name (ARN) of the FSx for Lustre location to
+-- describe.
+newDescribeLocationFsxLustre ::
+  -- | 'locationArn'
+  Prelude.Text ->
+  DescribeLocationFsxLustre
+newDescribeLocationFsxLustre pLocationArn_ =
+  DescribeLocationFsxLustre'
+    { locationArn =
+        pLocationArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the FSx for Lustre location to
+-- describe.
+describeLocationFsxLustre_locationArn :: Lens.Lens' DescribeLocationFsxLustre Prelude.Text
+describeLocationFsxLustre_locationArn = Lens.lens (\DescribeLocationFsxLustre' {locationArn} -> locationArn) (\s@DescribeLocationFsxLustre' {} a -> s {locationArn = a} :: DescribeLocationFsxLustre)
+
+instance Core.AWSRequest DescribeLocationFsxLustre where
+  type
+    AWSResponse DescribeLocationFsxLustre =
+      DescribeLocationFsxLustreResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeLocationFsxLustreResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "LocationArn")
+            Prelude.<*> (x Data..?> "LocationUri")
+            Prelude.<*> (x Data..?> "SecurityGroupArns")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeLocationFsxLustre where
+  hashWithSalt _salt DescribeLocationFsxLustre' {..} =
+    _salt `Prelude.hashWithSalt` locationArn
+
+instance Prelude.NFData DescribeLocationFsxLustre where
+  rnf DescribeLocationFsxLustre' {..} =
+    Prelude.rnf locationArn
+
+instance Data.ToHeaders DescribeLocationFsxLustre where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.DescribeLocationFsxLustre" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeLocationFsxLustre where
+  toJSON DescribeLocationFsxLustre' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("LocationArn" Data..= locationArn)]
+      )
+
+instance Data.ToPath DescribeLocationFsxLustre where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLocationFsxLustre where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeLocationFsxLustreResponse' smart constructor.
+data DescribeLocationFsxLustreResponse = DescribeLocationFsxLustreResponse'
+  { -- | The time that the FSx for Lustre location was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the FSx for Lustre location that was
+    -- described.
+    locationArn :: Prelude.Maybe Prelude.Text,
+    -- | The URI of the FSx for Lustre location that was described.
+    locationUri :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Names (ARNs) of the security groups that are
+    -- configured for the FSx for Lustre file system.
+    securityGroupArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationFsxLustreResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeLocationFsxLustreResponse_creationTime' - The time that the FSx for Lustre location was created.
+--
+-- 'locationArn', 'describeLocationFsxLustreResponse_locationArn' - The Amazon Resource Name (ARN) of the FSx for Lustre location that was
+-- described.
+--
+-- 'locationUri', 'describeLocationFsxLustreResponse_locationUri' - The URI of the FSx for Lustre location that was described.
+--
+-- 'securityGroupArns', 'describeLocationFsxLustreResponse_securityGroupArns' - The Amazon Resource Names (ARNs) of the security groups that are
+-- configured for the FSx for Lustre file system.
+--
+-- 'httpStatus', 'describeLocationFsxLustreResponse_httpStatus' - The response's http status code.
+newDescribeLocationFsxLustreResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocationFsxLustreResponse
+newDescribeLocationFsxLustreResponse pHttpStatus_ =
+  DescribeLocationFsxLustreResponse'
+    { creationTime =
+        Prelude.Nothing,
+      locationArn = Prelude.Nothing,
+      locationUri = Prelude.Nothing,
+      securityGroupArns = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time that the FSx for Lustre location was created.
+describeLocationFsxLustreResponse_creationTime :: Lens.Lens' DescribeLocationFsxLustreResponse (Prelude.Maybe Prelude.UTCTime)
+describeLocationFsxLustreResponse_creationTime = Lens.lens (\DescribeLocationFsxLustreResponse' {creationTime} -> creationTime) (\s@DescribeLocationFsxLustreResponse' {} a -> s {creationTime = a} :: DescribeLocationFsxLustreResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the FSx for Lustre location that was
+-- described.
+describeLocationFsxLustreResponse_locationArn :: Lens.Lens' DescribeLocationFsxLustreResponse (Prelude.Maybe Prelude.Text)
+describeLocationFsxLustreResponse_locationArn = Lens.lens (\DescribeLocationFsxLustreResponse' {locationArn} -> locationArn) (\s@DescribeLocationFsxLustreResponse' {} a -> s {locationArn = a} :: DescribeLocationFsxLustreResponse)
+
+-- | The URI of the FSx for Lustre location that was described.
+describeLocationFsxLustreResponse_locationUri :: Lens.Lens' DescribeLocationFsxLustreResponse (Prelude.Maybe Prelude.Text)
+describeLocationFsxLustreResponse_locationUri = Lens.lens (\DescribeLocationFsxLustreResponse' {locationUri} -> locationUri) (\s@DescribeLocationFsxLustreResponse' {} a -> s {locationUri = a} :: DescribeLocationFsxLustreResponse)
+
+-- | The Amazon Resource Names (ARNs) of the security groups that are
+-- configured for the FSx for Lustre file system.
+describeLocationFsxLustreResponse_securityGroupArns :: Lens.Lens' DescribeLocationFsxLustreResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeLocationFsxLustreResponse_securityGroupArns = Lens.lens (\DescribeLocationFsxLustreResponse' {securityGroupArns} -> securityGroupArns) (\s@DescribeLocationFsxLustreResponse' {} a -> s {securityGroupArns = a} :: DescribeLocationFsxLustreResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeLocationFsxLustreResponse_httpStatus :: Lens.Lens' DescribeLocationFsxLustreResponse Prelude.Int
+describeLocationFsxLustreResponse_httpStatus = Lens.lens (\DescribeLocationFsxLustreResponse' {httpStatus} -> httpStatus) (\s@DescribeLocationFsxLustreResponse' {} a -> s {httpStatus = a} :: DescribeLocationFsxLustreResponse)
+
+instance
+  Prelude.NFData
+    DescribeLocationFsxLustreResponse
+  where
+  rnf DescribeLocationFsxLustreResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf locationUri
+      `Prelude.seq` Prelude.rnf securityGroupArns
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DescribeLocationFsxOntap.hs b/gen/Amazonka/DataSync/DescribeLocationFsxOntap.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DescribeLocationFsxOntap.hs
@@ -0,0 +1,263 @@
+{-# 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.DataSync.DescribeLocationFsxOntap
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides details about how an DataSync location for an Amazon FSx for
+-- NetApp ONTAP file system is configured.
+--
+-- If your location uses SMB, the @DescribeLocationFsxOntap@ operation
+-- doesn\'t actually return a @Password@.
+module Amazonka.DataSync.DescribeLocationFsxOntap
+  ( -- * Creating a Request
+    DescribeLocationFsxOntap (..),
+    newDescribeLocationFsxOntap,
+
+    -- * Request Lenses
+    describeLocationFsxOntap_locationArn,
+
+    -- * Destructuring the Response
+    DescribeLocationFsxOntapResponse (..),
+    newDescribeLocationFsxOntapResponse,
+
+    -- * Response Lenses
+    describeLocationFsxOntapResponse_creationTime,
+    describeLocationFsxOntapResponse_fsxFilesystemArn,
+    describeLocationFsxOntapResponse_locationArn,
+    describeLocationFsxOntapResponse_locationUri,
+    describeLocationFsxOntapResponse_protocol,
+    describeLocationFsxOntapResponse_securityGroupArns,
+    describeLocationFsxOntapResponse_storageVirtualMachineArn,
+    describeLocationFsxOntapResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLocationFsxOntap' smart constructor.
+data DescribeLocationFsxOntap = DescribeLocationFsxOntap'
+  { -- | Specifies the Amazon Resource Name (ARN) of the FSx for ONTAP file
+    -- system location that you want information about.
+    locationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationFsxOntap' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'describeLocationFsxOntap_locationArn' - Specifies the Amazon Resource Name (ARN) of the FSx for ONTAP file
+-- system location that you want information about.
+newDescribeLocationFsxOntap ::
+  -- | 'locationArn'
+  Prelude.Text ->
+  DescribeLocationFsxOntap
+newDescribeLocationFsxOntap pLocationArn_ =
+  DescribeLocationFsxOntap'
+    { locationArn =
+        pLocationArn_
+    }
+
+-- | Specifies the Amazon Resource Name (ARN) of the FSx for ONTAP file
+-- system location that you want information about.
+describeLocationFsxOntap_locationArn :: Lens.Lens' DescribeLocationFsxOntap Prelude.Text
+describeLocationFsxOntap_locationArn = Lens.lens (\DescribeLocationFsxOntap' {locationArn} -> locationArn) (\s@DescribeLocationFsxOntap' {} a -> s {locationArn = a} :: DescribeLocationFsxOntap)
+
+instance Core.AWSRequest DescribeLocationFsxOntap where
+  type
+    AWSResponse DescribeLocationFsxOntap =
+      DescribeLocationFsxOntapResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeLocationFsxOntapResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "FsxFilesystemArn")
+            Prelude.<*> (x Data..?> "LocationArn")
+            Prelude.<*> (x Data..?> "LocationUri")
+            Prelude.<*> (x Data..?> "Protocol")
+            Prelude.<*> (x Data..?> "SecurityGroupArns")
+            Prelude.<*> (x Data..?> "StorageVirtualMachineArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeLocationFsxOntap where
+  hashWithSalt _salt DescribeLocationFsxOntap' {..} =
+    _salt `Prelude.hashWithSalt` locationArn
+
+instance Prelude.NFData DescribeLocationFsxOntap where
+  rnf DescribeLocationFsxOntap' {..} =
+    Prelude.rnf locationArn
+
+instance Data.ToHeaders DescribeLocationFsxOntap where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.DescribeLocationFsxOntap" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeLocationFsxOntap where
+  toJSON DescribeLocationFsxOntap' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("LocationArn" Data..= locationArn)]
+      )
+
+instance Data.ToPath DescribeLocationFsxOntap where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLocationFsxOntap where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeLocationFsxOntapResponse' smart constructor.
+data DescribeLocationFsxOntapResponse = DescribeLocationFsxOntapResponse'
+  { -- | The time that the location was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of the FSx for ONTAP file system.
+    fsxFilesystemArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the FSx for ONTAP file system location.
+    locationArn :: Prelude.Maybe Prelude.Text,
+    -- | The uniform resource identifier (URI) of the FSx for ONTAP file system
+    -- location.
+    locationUri :: Prelude.Maybe Prelude.Text,
+    protocol :: Prelude.Maybe FsxProtocol,
+    -- | The security groups that DataSync uses to access your FSx for ONTAP file
+    -- system.
+    securityGroupArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The ARN of the storage virtual machine (SVM) on your FSx for ONTAP file
+    -- system where you\'re copying data to or from.
+    storageVirtualMachineArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationFsxOntapResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeLocationFsxOntapResponse_creationTime' - The time that the location was created.
+--
+-- 'fsxFilesystemArn', 'describeLocationFsxOntapResponse_fsxFilesystemArn' - The ARN of the FSx for ONTAP file system.
+--
+-- 'locationArn', 'describeLocationFsxOntapResponse_locationArn' - The ARN of the FSx for ONTAP file system location.
+--
+-- 'locationUri', 'describeLocationFsxOntapResponse_locationUri' - The uniform resource identifier (URI) of the FSx for ONTAP file system
+-- location.
+--
+-- 'protocol', 'describeLocationFsxOntapResponse_protocol' - Undocumented member.
+--
+-- 'securityGroupArns', 'describeLocationFsxOntapResponse_securityGroupArns' - The security groups that DataSync uses to access your FSx for ONTAP file
+-- system.
+--
+-- 'storageVirtualMachineArn', 'describeLocationFsxOntapResponse_storageVirtualMachineArn' - The ARN of the storage virtual machine (SVM) on your FSx for ONTAP file
+-- system where you\'re copying data to or from.
+--
+-- 'httpStatus', 'describeLocationFsxOntapResponse_httpStatus' - The response's http status code.
+newDescribeLocationFsxOntapResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocationFsxOntapResponse
+newDescribeLocationFsxOntapResponse pHttpStatus_ =
+  DescribeLocationFsxOntapResponse'
+    { creationTime =
+        Prelude.Nothing,
+      fsxFilesystemArn = Prelude.Nothing,
+      locationArn = Prelude.Nothing,
+      locationUri = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      securityGroupArns = Prelude.Nothing,
+      storageVirtualMachineArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time that the location was created.
+describeLocationFsxOntapResponse_creationTime :: Lens.Lens' DescribeLocationFsxOntapResponse (Prelude.Maybe Prelude.UTCTime)
+describeLocationFsxOntapResponse_creationTime = Lens.lens (\DescribeLocationFsxOntapResponse' {creationTime} -> creationTime) (\s@DescribeLocationFsxOntapResponse' {} a -> s {creationTime = a} :: DescribeLocationFsxOntapResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of the FSx for ONTAP file system.
+describeLocationFsxOntapResponse_fsxFilesystemArn :: Lens.Lens' DescribeLocationFsxOntapResponse (Prelude.Maybe Prelude.Text)
+describeLocationFsxOntapResponse_fsxFilesystemArn = Lens.lens (\DescribeLocationFsxOntapResponse' {fsxFilesystemArn} -> fsxFilesystemArn) (\s@DescribeLocationFsxOntapResponse' {} a -> s {fsxFilesystemArn = a} :: DescribeLocationFsxOntapResponse)
+
+-- | The ARN of the FSx for ONTAP file system location.
+describeLocationFsxOntapResponse_locationArn :: Lens.Lens' DescribeLocationFsxOntapResponse (Prelude.Maybe Prelude.Text)
+describeLocationFsxOntapResponse_locationArn = Lens.lens (\DescribeLocationFsxOntapResponse' {locationArn} -> locationArn) (\s@DescribeLocationFsxOntapResponse' {} a -> s {locationArn = a} :: DescribeLocationFsxOntapResponse)
+
+-- | The uniform resource identifier (URI) of the FSx for ONTAP file system
+-- location.
+describeLocationFsxOntapResponse_locationUri :: Lens.Lens' DescribeLocationFsxOntapResponse (Prelude.Maybe Prelude.Text)
+describeLocationFsxOntapResponse_locationUri = Lens.lens (\DescribeLocationFsxOntapResponse' {locationUri} -> locationUri) (\s@DescribeLocationFsxOntapResponse' {} a -> s {locationUri = a} :: DescribeLocationFsxOntapResponse)
+
+-- | Undocumented member.
+describeLocationFsxOntapResponse_protocol :: Lens.Lens' DescribeLocationFsxOntapResponse (Prelude.Maybe FsxProtocol)
+describeLocationFsxOntapResponse_protocol = Lens.lens (\DescribeLocationFsxOntapResponse' {protocol} -> protocol) (\s@DescribeLocationFsxOntapResponse' {} a -> s {protocol = a} :: DescribeLocationFsxOntapResponse)
+
+-- | The security groups that DataSync uses to access your FSx for ONTAP file
+-- system.
+describeLocationFsxOntapResponse_securityGroupArns :: Lens.Lens' DescribeLocationFsxOntapResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeLocationFsxOntapResponse_securityGroupArns = Lens.lens (\DescribeLocationFsxOntapResponse' {securityGroupArns} -> securityGroupArns) (\s@DescribeLocationFsxOntapResponse' {} a -> s {securityGroupArns = a} :: DescribeLocationFsxOntapResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the storage virtual machine (SVM) on your FSx for ONTAP file
+-- system where you\'re copying data to or from.
+describeLocationFsxOntapResponse_storageVirtualMachineArn :: Lens.Lens' DescribeLocationFsxOntapResponse (Prelude.Maybe Prelude.Text)
+describeLocationFsxOntapResponse_storageVirtualMachineArn = Lens.lens (\DescribeLocationFsxOntapResponse' {storageVirtualMachineArn} -> storageVirtualMachineArn) (\s@DescribeLocationFsxOntapResponse' {} a -> s {storageVirtualMachineArn = a} :: DescribeLocationFsxOntapResponse)
+
+-- | The response's http status code.
+describeLocationFsxOntapResponse_httpStatus :: Lens.Lens' DescribeLocationFsxOntapResponse Prelude.Int
+describeLocationFsxOntapResponse_httpStatus = Lens.lens (\DescribeLocationFsxOntapResponse' {httpStatus} -> httpStatus) (\s@DescribeLocationFsxOntapResponse' {} a -> s {httpStatus = a} :: DescribeLocationFsxOntapResponse)
+
+instance
+  Prelude.NFData
+    DescribeLocationFsxOntapResponse
+  where
+  rnf DescribeLocationFsxOntapResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf fsxFilesystemArn
+      `Prelude.seq` Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf locationUri
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf securityGroupArns
+      `Prelude.seq` Prelude.rnf storageVirtualMachineArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DescribeLocationFsxOpenZfs.hs b/gen/Amazonka/DataSync/DescribeLocationFsxOpenZfs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DescribeLocationFsxOpenZfs.hs
@@ -0,0 +1,245 @@
+{-# 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.DataSync.DescribeLocationFsxOpenZfs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides details about how an DataSync location for an Amazon FSx for
+-- OpenZFS file system is configured.
+--
+-- Response elements related to @SMB@ aren\'t supported with the
+-- @DescribeLocationFsxOpenZfs@ operation.
+module Amazonka.DataSync.DescribeLocationFsxOpenZfs
+  ( -- * Creating a Request
+    DescribeLocationFsxOpenZfs (..),
+    newDescribeLocationFsxOpenZfs,
+
+    -- * Request Lenses
+    describeLocationFsxOpenZfs_locationArn,
+
+    -- * Destructuring the Response
+    DescribeLocationFsxOpenZfsResponse (..),
+    newDescribeLocationFsxOpenZfsResponse,
+
+    -- * Response Lenses
+    describeLocationFsxOpenZfsResponse_creationTime,
+    describeLocationFsxOpenZfsResponse_locationArn,
+    describeLocationFsxOpenZfsResponse_locationUri,
+    describeLocationFsxOpenZfsResponse_protocol,
+    describeLocationFsxOpenZfsResponse_securityGroupArns,
+    describeLocationFsxOpenZfsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLocationFsxOpenZfs' smart constructor.
+data DescribeLocationFsxOpenZfs = DescribeLocationFsxOpenZfs'
+  { -- | The Amazon Resource Name (ARN) of the FSx for OpenZFS location to
+    -- describe.
+    locationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationFsxOpenZfs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'describeLocationFsxOpenZfs_locationArn' - The Amazon Resource Name (ARN) of the FSx for OpenZFS location to
+-- describe.
+newDescribeLocationFsxOpenZfs ::
+  -- | 'locationArn'
+  Prelude.Text ->
+  DescribeLocationFsxOpenZfs
+newDescribeLocationFsxOpenZfs pLocationArn_ =
+  DescribeLocationFsxOpenZfs'
+    { locationArn =
+        pLocationArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the FSx for OpenZFS location to
+-- describe.
+describeLocationFsxOpenZfs_locationArn :: Lens.Lens' DescribeLocationFsxOpenZfs Prelude.Text
+describeLocationFsxOpenZfs_locationArn = Lens.lens (\DescribeLocationFsxOpenZfs' {locationArn} -> locationArn) (\s@DescribeLocationFsxOpenZfs' {} a -> s {locationArn = a} :: DescribeLocationFsxOpenZfs)
+
+instance Core.AWSRequest DescribeLocationFsxOpenZfs where
+  type
+    AWSResponse DescribeLocationFsxOpenZfs =
+      DescribeLocationFsxOpenZfsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeLocationFsxOpenZfsResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "LocationArn")
+            Prelude.<*> (x Data..?> "LocationUri")
+            Prelude.<*> (x Data..?> "Protocol")
+            Prelude.<*> (x Data..?> "SecurityGroupArns")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeLocationFsxOpenZfs where
+  hashWithSalt _salt DescribeLocationFsxOpenZfs' {..} =
+    _salt `Prelude.hashWithSalt` locationArn
+
+instance Prelude.NFData DescribeLocationFsxOpenZfs where
+  rnf DescribeLocationFsxOpenZfs' {..} =
+    Prelude.rnf locationArn
+
+instance Data.ToHeaders DescribeLocationFsxOpenZfs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.DescribeLocationFsxOpenZfs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeLocationFsxOpenZfs where
+  toJSON DescribeLocationFsxOpenZfs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("LocationArn" Data..= locationArn)]
+      )
+
+instance Data.ToPath DescribeLocationFsxOpenZfs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLocationFsxOpenZfs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeLocationFsxOpenZfsResponse' smart constructor.
+data DescribeLocationFsxOpenZfsResponse = DescribeLocationFsxOpenZfsResponse'
+  { -- | The time that the FSx for OpenZFS location was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of the FSx for OpenZFS location that was described.
+    locationArn :: Prelude.Maybe Prelude.Text,
+    -- | The uniform resource identifier (URI) of the FSx for OpenZFS location
+    -- that was described.
+    --
+    -- Example:
+    -- @fsxz:\/\/us-west-2.fs-1234567890abcdef02\/fsx\/folderA\/folder@
+    locationUri :: Prelude.Maybe Prelude.Text,
+    -- | The type of protocol that DataSync uses to access your file system.
+    protocol :: Prelude.Maybe FsxProtocol,
+    -- | The ARNs of the security groups that are configured for the FSx for
+    -- OpenZFS file system.
+    securityGroupArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationFsxOpenZfsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeLocationFsxOpenZfsResponse_creationTime' - The time that the FSx for OpenZFS location was created.
+--
+-- 'locationArn', 'describeLocationFsxOpenZfsResponse_locationArn' - The ARN of the FSx for OpenZFS location that was described.
+--
+-- 'locationUri', 'describeLocationFsxOpenZfsResponse_locationUri' - The uniform resource identifier (URI) of the FSx for OpenZFS location
+-- that was described.
+--
+-- Example:
+-- @fsxz:\/\/us-west-2.fs-1234567890abcdef02\/fsx\/folderA\/folder@
+--
+-- 'protocol', 'describeLocationFsxOpenZfsResponse_protocol' - The type of protocol that DataSync uses to access your file system.
+--
+-- 'securityGroupArns', 'describeLocationFsxOpenZfsResponse_securityGroupArns' - The ARNs of the security groups that are configured for the FSx for
+-- OpenZFS file system.
+--
+-- 'httpStatus', 'describeLocationFsxOpenZfsResponse_httpStatus' - The response's http status code.
+newDescribeLocationFsxOpenZfsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocationFsxOpenZfsResponse
+newDescribeLocationFsxOpenZfsResponse pHttpStatus_ =
+  DescribeLocationFsxOpenZfsResponse'
+    { creationTime =
+        Prelude.Nothing,
+      locationArn = Prelude.Nothing,
+      locationUri = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      securityGroupArns = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time that the FSx for OpenZFS location was created.
+describeLocationFsxOpenZfsResponse_creationTime :: Lens.Lens' DescribeLocationFsxOpenZfsResponse (Prelude.Maybe Prelude.UTCTime)
+describeLocationFsxOpenZfsResponse_creationTime = Lens.lens (\DescribeLocationFsxOpenZfsResponse' {creationTime} -> creationTime) (\s@DescribeLocationFsxOpenZfsResponse' {} a -> s {creationTime = a} :: DescribeLocationFsxOpenZfsResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of the FSx for OpenZFS location that was described.
+describeLocationFsxOpenZfsResponse_locationArn :: Lens.Lens' DescribeLocationFsxOpenZfsResponse (Prelude.Maybe Prelude.Text)
+describeLocationFsxOpenZfsResponse_locationArn = Lens.lens (\DescribeLocationFsxOpenZfsResponse' {locationArn} -> locationArn) (\s@DescribeLocationFsxOpenZfsResponse' {} a -> s {locationArn = a} :: DescribeLocationFsxOpenZfsResponse)
+
+-- | The uniform resource identifier (URI) of the FSx for OpenZFS location
+-- that was described.
+--
+-- Example:
+-- @fsxz:\/\/us-west-2.fs-1234567890abcdef02\/fsx\/folderA\/folder@
+describeLocationFsxOpenZfsResponse_locationUri :: Lens.Lens' DescribeLocationFsxOpenZfsResponse (Prelude.Maybe Prelude.Text)
+describeLocationFsxOpenZfsResponse_locationUri = Lens.lens (\DescribeLocationFsxOpenZfsResponse' {locationUri} -> locationUri) (\s@DescribeLocationFsxOpenZfsResponse' {} a -> s {locationUri = a} :: DescribeLocationFsxOpenZfsResponse)
+
+-- | The type of protocol that DataSync uses to access your file system.
+describeLocationFsxOpenZfsResponse_protocol :: Lens.Lens' DescribeLocationFsxOpenZfsResponse (Prelude.Maybe FsxProtocol)
+describeLocationFsxOpenZfsResponse_protocol = Lens.lens (\DescribeLocationFsxOpenZfsResponse' {protocol} -> protocol) (\s@DescribeLocationFsxOpenZfsResponse' {} a -> s {protocol = a} :: DescribeLocationFsxOpenZfsResponse)
+
+-- | The ARNs of the security groups that are configured for the FSx for
+-- OpenZFS file system.
+describeLocationFsxOpenZfsResponse_securityGroupArns :: Lens.Lens' DescribeLocationFsxOpenZfsResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeLocationFsxOpenZfsResponse_securityGroupArns = Lens.lens (\DescribeLocationFsxOpenZfsResponse' {securityGroupArns} -> securityGroupArns) (\s@DescribeLocationFsxOpenZfsResponse' {} a -> s {securityGroupArns = a} :: DescribeLocationFsxOpenZfsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeLocationFsxOpenZfsResponse_httpStatus :: Lens.Lens' DescribeLocationFsxOpenZfsResponse Prelude.Int
+describeLocationFsxOpenZfsResponse_httpStatus = Lens.lens (\DescribeLocationFsxOpenZfsResponse' {httpStatus} -> httpStatus) (\s@DescribeLocationFsxOpenZfsResponse' {} a -> s {httpStatus = a} :: DescribeLocationFsxOpenZfsResponse)
+
+instance
+  Prelude.NFData
+    DescribeLocationFsxOpenZfsResponse
+  where
+  rnf DescribeLocationFsxOpenZfsResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf locationUri
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf securityGroupArns
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DescribeLocationFsxWindows.hs b/gen/Amazonka/DataSync/DescribeLocationFsxWindows.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DescribeLocationFsxWindows.hs
@@ -0,0 +1,251 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.DescribeLocationFsxWindows
+-- 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 metadata about an Amazon FSx for Windows File Server location,
+-- such as information about its path.
+module Amazonka.DataSync.DescribeLocationFsxWindows
+  ( -- * Creating a Request
+    DescribeLocationFsxWindows (..),
+    newDescribeLocationFsxWindows,
+
+    -- * Request Lenses
+    describeLocationFsxWindows_locationArn,
+
+    -- * Destructuring the Response
+    DescribeLocationFsxWindowsResponse (..),
+    newDescribeLocationFsxWindowsResponse,
+
+    -- * Response Lenses
+    describeLocationFsxWindowsResponse_creationTime,
+    describeLocationFsxWindowsResponse_domain,
+    describeLocationFsxWindowsResponse_locationArn,
+    describeLocationFsxWindowsResponse_locationUri,
+    describeLocationFsxWindowsResponse_securityGroupArns,
+    describeLocationFsxWindowsResponse_user,
+    describeLocationFsxWindowsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLocationFsxWindows' smart constructor.
+data DescribeLocationFsxWindows = DescribeLocationFsxWindows'
+  { -- | The Amazon Resource Name (ARN) of the FSx for Windows File Server
+    -- location to describe.
+    locationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationFsxWindows' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'describeLocationFsxWindows_locationArn' - The Amazon Resource Name (ARN) of the FSx for Windows File Server
+-- location to describe.
+newDescribeLocationFsxWindows ::
+  -- | 'locationArn'
+  Prelude.Text ->
+  DescribeLocationFsxWindows
+newDescribeLocationFsxWindows pLocationArn_ =
+  DescribeLocationFsxWindows'
+    { locationArn =
+        pLocationArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the FSx for Windows File Server
+-- location to describe.
+describeLocationFsxWindows_locationArn :: Lens.Lens' DescribeLocationFsxWindows Prelude.Text
+describeLocationFsxWindows_locationArn = Lens.lens (\DescribeLocationFsxWindows' {locationArn} -> locationArn) (\s@DescribeLocationFsxWindows' {} a -> s {locationArn = a} :: DescribeLocationFsxWindows)
+
+instance Core.AWSRequest DescribeLocationFsxWindows where
+  type
+    AWSResponse DescribeLocationFsxWindows =
+      DescribeLocationFsxWindowsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeLocationFsxWindowsResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "Domain")
+            Prelude.<*> (x Data..?> "LocationArn")
+            Prelude.<*> (x Data..?> "LocationUri")
+            Prelude.<*> (x Data..?> "SecurityGroupArns")
+            Prelude.<*> (x Data..?> "User")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeLocationFsxWindows where
+  hashWithSalt _salt DescribeLocationFsxWindows' {..} =
+    _salt `Prelude.hashWithSalt` locationArn
+
+instance Prelude.NFData DescribeLocationFsxWindows where
+  rnf DescribeLocationFsxWindows' {..} =
+    Prelude.rnf locationArn
+
+instance Data.ToHeaders DescribeLocationFsxWindows where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.DescribeLocationFsxWindows" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeLocationFsxWindows where
+  toJSON DescribeLocationFsxWindows' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("LocationArn" Data..= locationArn)]
+      )
+
+instance Data.ToPath DescribeLocationFsxWindows where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLocationFsxWindows where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeLocationFsxWindowsResponse' smart constructor.
+data DescribeLocationFsxWindowsResponse = DescribeLocationFsxWindowsResponse'
+  { -- | The time that the FSx for Windows File Server location was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the Windows domain that the FSx for Windows File Server
+    -- belongs to.
+    domain :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the FSx for Windows File Server
+    -- location that was described.
+    locationArn :: Prelude.Maybe Prelude.Text,
+    -- | The URL of the FSx for Windows File Server location that was described.
+    locationUri :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Names (ARNs) of the security groups that are
+    -- configured for the FSx for Windows File Server file system.
+    securityGroupArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The user who has the permissions to access files and folders in the FSx
+    -- for Windows File Server file system.
+    user :: 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 'DescribeLocationFsxWindowsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeLocationFsxWindowsResponse_creationTime' - The time that the FSx for Windows File Server location was created.
+--
+-- 'domain', 'describeLocationFsxWindowsResponse_domain' - The name of the Windows domain that the FSx for Windows File Server
+-- belongs to.
+--
+-- 'locationArn', 'describeLocationFsxWindowsResponse_locationArn' - The Amazon Resource Name (ARN) of the FSx for Windows File Server
+-- location that was described.
+--
+-- 'locationUri', 'describeLocationFsxWindowsResponse_locationUri' - The URL of the FSx for Windows File Server location that was described.
+--
+-- 'securityGroupArns', 'describeLocationFsxWindowsResponse_securityGroupArns' - The Amazon Resource Names (ARNs) of the security groups that are
+-- configured for the FSx for Windows File Server file system.
+--
+-- 'user', 'describeLocationFsxWindowsResponse_user' - The user who has the permissions to access files and folders in the FSx
+-- for Windows File Server file system.
+--
+-- 'httpStatus', 'describeLocationFsxWindowsResponse_httpStatus' - The response's http status code.
+newDescribeLocationFsxWindowsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocationFsxWindowsResponse
+newDescribeLocationFsxWindowsResponse pHttpStatus_ =
+  DescribeLocationFsxWindowsResponse'
+    { creationTime =
+        Prelude.Nothing,
+      domain = Prelude.Nothing,
+      locationArn = Prelude.Nothing,
+      locationUri = Prelude.Nothing,
+      securityGroupArns = Prelude.Nothing,
+      user = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time that the FSx for Windows File Server location was created.
+describeLocationFsxWindowsResponse_creationTime :: Lens.Lens' DescribeLocationFsxWindowsResponse (Prelude.Maybe Prelude.UTCTime)
+describeLocationFsxWindowsResponse_creationTime = Lens.lens (\DescribeLocationFsxWindowsResponse' {creationTime} -> creationTime) (\s@DescribeLocationFsxWindowsResponse' {} a -> s {creationTime = a} :: DescribeLocationFsxWindowsResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the Windows domain that the FSx for Windows File Server
+-- belongs to.
+describeLocationFsxWindowsResponse_domain :: Lens.Lens' DescribeLocationFsxWindowsResponse (Prelude.Maybe Prelude.Text)
+describeLocationFsxWindowsResponse_domain = Lens.lens (\DescribeLocationFsxWindowsResponse' {domain} -> domain) (\s@DescribeLocationFsxWindowsResponse' {} a -> s {domain = a} :: DescribeLocationFsxWindowsResponse)
+
+-- | The Amazon Resource Name (ARN) of the FSx for Windows File Server
+-- location that was described.
+describeLocationFsxWindowsResponse_locationArn :: Lens.Lens' DescribeLocationFsxWindowsResponse (Prelude.Maybe Prelude.Text)
+describeLocationFsxWindowsResponse_locationArn = Lens.lens (\DescribeLocationFsxWindowsResponse' {locationArn} -> locationArn) (\s@DescribeLocationFsxWindowsResponse' {} a -> s {locationArn = a} :: DescribeLocationFsxWindowsResponse)
+
+-- | The URL of the FSx for Windows File Server location that was described.
+describeLocationFsxWindowsResponse_locationUri :: Lens.Lens' DescribeLocationFsxWindowsResponse (Prelude.Maybe Prelude.Text)
+describeLocationFsxWindowsResponse_locationUri = Lens.lens (\DescribeLocationFsxWindowsResponse' {locationUri} -> locationUri) (\s@DescribeLocationFsxWindowsResponse' {} a -> s {locationUri = a} :: DescribeLocationFsxWindowsResponse)
+
+-- | The Amazon Resource Names (ARNs) of the security groups that are
+-- configured for the FSx for Windows File Server file system.
+describeLocationFsxWindowsResponse_securityGroupArns :: Lens.Lens' DescribeLocationFsxWindowsResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeLocationFsxWindowsResponse_securityGroupArns = Lens.lens (\DescribeLocationFsxWindowsResponse' {securityGroupArns} -> securityGroupArns) (\s@DescribeLocationFsxWindowsResponse' {} a -> s {securityGroupArns = a} :: DescribeLocationFsxWindowsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The user who has the permissions to access files and folders in the FSx
+-- for Windows File Server file system.
+describeLocationFsxWindowsResponse_user :: Lens.Lens' DescribeLocationFsxWindowsResponse (Prelude.Maybe Prelude.Text)
+describeLocationFsxWindowsResponse_user = Lens.lens (\DescribeLocationFsxWindowsResponse' {user} -> user) (\s@DescribeLocationFsxWindowsResponse' {} a -> s {user = a} :: DescribeLocationFsxWindowsResponse)
+
+-- | The response's http status code.
+describeLocationFsxWindowsResponse_httpStatus :: Lens.Lens' DescribeLocationFsxWindowsResponse Prelude.Int
+describeLocationFsxWindowsResponse_httpStatus = Lens.lens (\DescribeLocationFsxWindowsResponse' {httpStatus} -> httpStatus) (\s@DescribeLocationFsxWindowsResponse' {} a -> s {httpStatus = a} :: DescribeLocationFsxWindowsResponse)
+
+instance
+  Prelude.NFData
+    DescribeLocationFsxWindowsResponse
+  where
+  rnf DescribeLocationFsxWindowsResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf locationUri
+      `Prelude.seq` Prelude.rnf securityGroupArns
+      `Prelude.seq` Prelude.rnf user
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DescribeLocationHdfs.hs b/gen/Amazonka/DataSync/DescribeLocationHdfs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DescribeLocationHdfs.hs
@@ -0,0 +1,323 @@
+{-# 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.DataSync.DescribeLocationHdfs
+-- 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 metadata, such as the authentication information about the
+-- Hadoop Distributed File System (HDFS) location.
+module Amazonka.DataSync.DescribeLocationHdfs
+  ( -- * Creating a Request
+    DescribeLocationHdfs (..),
+    newDescribeLocationHdfs,
+
+    -- * Request Lenses
+    describeLocationHdfs_locationArn,
+
+    -- * Destructuring the Response
+    DescribeLocationHdfsResponse (..),
+    newDescribeLocationHdfsResponse,
+
+    -- * Response Lenses
+    describeLocationHdfsResponse_agentArns,
+    describeLocationHdfsResponse_authenticationType,
+    describeLocationHdfsResponse_blockSize,
+    describeLocationHdfsResponse_creationTime,
+    describeLocationHdfsResponse_kerberosPrincipal,
+    describeLocationHdfsResponse_kmsKeyProviderUri,
+    describeLocationHdfsResponse_locationArn,
+    describeLocationHdfsResponse_locationUri,
+    describeLocationHdfsResponse_nameNodes,
+    describeLocationHdfsResponse_qopConfiguration,
+    describeLocationHdfsResponse_replicationFactor,
+    describeLocationHdfsResponse_simpleUser,
+    describeLocationHdfsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLocationHdfs' smart constructor.
+data DescribeLocationHdfs = DescribeLocationHdfs'
+  { -- | The Amazon Resource Name (ARN) of the HDFS cluster location to describe.
+    locationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationHdfs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'describeLocationHdfs_locationArn' - The Amazon Resource Name (ARN) of the HDFS cluster location to describe.
+newDescribeLocationHdfs ::
+  -- | 'locationArn'
+  Prelude.Text ->
+  DescribeLocationHdfs
+newDescribeLocationHdfs pLocationArn_ =
+  DescribeLocationHdfs' {locationArn = pLocationArn_}
+
+-- | The Amazon Resource Name (ARN) of the HDFS cluster location to describe.
+describeLocationHdfs_locationArn :: Lens.Lens' DescribeLocationHdfs Prelude.Text
+describeLocationHdfs_locationArn = Lens.lens (\DescribeLocationHdfs' {locationArn} -> locationArn) (\s@DescribeLocationHdfs' {} a -> s {locationArn = a} :: DescribeLocationHdfs)
+
+instance Core.AWSRequest DescribeLocationHdfs where
+  type
+    AWSResponse DescribeLocationHdfs =
+      DescribeLocationHdfsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeLocationHdfsResponse'
+            Prelude.<$> (x Data..?> "AgentArns")
+            Prelude.<*> (x Data..?> "AuthenticationType")
+            Prelude.<*> (x Data..?> "BlockSize")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "KerberosPrincipal")
+            Prelude.<*> (x Data..?> "KmsKeyProviderUri")
+            Prelude.<*> (x Data..?> "LocationArn")
+            Prelude.<*> (x Data..?> "LocationUri")
+            Prelude.<*> (x Data..?> "NameNodes")
+            Prelude.<*> (x Data..?> "QopConfiguration")
+            Prelude.<*> (x Data..?> "ReplicationFactor")
+            Prelude.<*> (x Data..?> "SimpleUser")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeLocationHdfs where
+  hashWithSalt _salt DescribeLocationHdfs' {..} =
+    _salt `Prelude.hashWithSalt` locationArn
+
+instance Prelude.NFData DescribeLocationHdfs where
+  rnf DescribeLocationHdfs' {..} =
+    Prelude.rnf locationArn
+
+instance Data.ToHeaders DescribeLocationHdfs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.DescribeLocationHdfs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeLocationHdfs where
+  toJSON DescribeLocationHdfs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("LocationArn" Data..= locationArn)]
+      )
+
+instance Data.ToPath DescribeLocationHdfs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLocationHdfs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeLocationHdfsResponse' smart constructor.
+data DescribeLocationHdfsResponse = DescribeLocationHdfsResponse'
+  { -- | The ARNs of the agents that are used to connect to the HDFS cluster.
+    agentArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The type of authentication used to determine the identity of the user.
+    authenticationType :: Prelude.Maybe HdfsAuthenticationType,
+    -- | The size of the data blocks to write into the HDFS cluster.
+    blockSize :: Prelude.Maybe Prelude.Natural,
+    -- | The time that the HDFS location was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The Kerberos principal with access to the files and folders on the HDFS
+    -- cluster. This parameter is used if the @AuthenticationType@ is defined
+    -- as @KERBEROS@.
+    kerberosPrincipal :: Prelude.Maybe Prelude.Text,
+    -- | The URI of the HDFS cluster\'s Key Management Server (KMS).
+    kmsKeyProviderUri :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the HDFS cluster location.
+    locationArn :: Prelude.Maybe Prelude.Text,
+    -- | The URI of the HDFS cluster location.
+    locationUri :: Prelude.Maybe Prelude.Text,
+    -- | The NameNode that manage the HDFS namespace.
+    nameNodes :: Prelude.Maybe (Prelude.NonEmpty HdfsNameNode),
+    -- | The Quality of Protection (QOP) configuration specifies the Remote
+    -- Procedure Call (RPC) and data transfer protection settings configured on
+    -- the Hadoop Distributed File System (HDFS) cluster.
+    qopConfiguration :: Prelude.Maybe QopConfiguration,
+    -- | The number of DataNodes to replicate the data to when writing to the
+    -- HDFS cluster.
+    replicationFactor :: Prelude.Maybe Prelude.Natural,
+    -- | The user name used to identify the client on the host operating system.
+    -- This parameter is used if the @AuthenticationType@ is defined as
+    -- @SIMPLE@.
+    simpleUser :: 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 'DescribeLocationHdfsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'agentArns', 'describeLocationHdfsResponse_agentArns' - The ARNs of the agents that are used to connect to the HDFS cluster.
+--
+-- 'authenticationType', 'describeLocationHdfsResponse_authenticationType' - The type of authentication used to determine the identity of the user.
+--
+-- 'blockSize', 'describeLocationHdfsResponse_blockSize' - The size of the data blocks to write into the HDFS cluster.
+--
+-- 'creationTime', 'describeLocationHdfsResponse_creationTime' - The time that the HDFS location was created.
+--
+-- 'kerberosPrincipal', 'describeLocationHdfsResponse_kerberosPrincipal' - The Kerberos principal with access to the files and folders on the HDFS
+-- cluster. This parameter is used if the @AuthenticationType@ is defined
+-- as @KERBEROS@.
+--
+-- 'kmsKeyProviderUri', 'describeLocationHdfsResponse_kmsKeyProviderUri' - The URI of the HDFS cluster\'s Key Management Server (KMS).
+--
+-- 'locationArn', 'describeLocationHdfsResponse_locationArn' - The ARN of the HDFS cluster location.
+--
+-- 'locationUri', 'describeLocationHdfsResponse_locationUri' - The URI of the HDFS cluster location.
+--
+-- 'nameNodes', 'describeLocationHdfsResponse_nameNodes' - The NameNode that manage the HDFS namespace.
+--
+-- 'qopConfiguration', 'describeLocationHdfsResponse_qopConfiguration' - The Quality of Protection (QOP) configuration specifies the Remote
+-- Procedure Call (RPC) and data transfer protection settings configured on
+-- the Hadoop Distributed File System (HDFS) cluster.
+--
+-- 'replicationFactor', 'describeLocationHdfsResponse_replicationFactor' - The number of DataNodes to replicate the data to when writing to the
+-- HDFS cluster.
+--
+-- 'simpleUser', 'describeLocationHdfsResponse_simpleUser' - The user name used to identify the client on the host operating system.
+-- This parameter is used if the @AuthenticationType@ is defined as
+-- @SIMPLE@.
+--
+-- 'httpStatus', 'describeLocationHdfsResponse_httpStatus' - The response's http status code.
+newDescribeLocationHdfsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocationHdfsResponse
+newDescribeLocationHdfsResponse pHttpStatus_ =
+  DescribeLocationHdfsResponse'
+    { agentArns =
+        Prelude.Nothing,
+      authenticationType = Prelude.Nothing,
+      blockSize = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      kerberosPrincipal = Prelude.Nothing,
+      kmsKeyProviderUri = Prelude.Nothing,
+      locationArn = Prelude.Nothing,
+      locationUri = Prelude.Nothing,
+      nameNodes = Prelude.Nothing,
+      qopConfiguration = Prelude.Nothing,
+      replicationFactor = Prelude.Nothing,
+      simpleUser = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARNs of the agents that are used to connect to the HDFS cluster.
+describeLocationHdfsResponse_agentArns :: Lens.Lens' DescribeLocationHdfsResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeLocationHdfsResponse_agentArns = Lens.lens (\DescribeLocationHdfsResponse' {agentArns} -> agentArns) (\s@DescribeLocationHdfsResponse' {} a -> s {agentArns = a} :: DescribeLocationHdfsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of authentication used to determine the identity of the user.
+describeLocationHdfsResponse_authenticationType :: Lens.Lens' DescribeLocationHdfsResponse (Prelude.Maybe HdfsAuthenticationType)
+describeLocationHdfsResponse_authenticationType = Lens.lens (\DescribeLocationHdfsResponse' {authenticationType} -> authenticationType) (\s@DescribeLocationHdfsResponse' {} a -> s {authenticationType = a} :: DescribeLocationHdfsResponse)
+
+-- | The size of the data blocks to write into the HDFS cluster.
+describeLocationHdfsResponse_blockSize :: Lens.Lens' DescribeLocationHdfsResponse (Prelude.Maybe Prelude.Natural)
+describeLocationHdfsResponse_blockSize = Lens.lens (\DescribeLocationHdfsResponse' {blockSize} -> blockSize) (\s@DescribeLocationHdfsResponse' {} a -> s {blockSize = a} :: DescribeLocationHdfsResponse)
+
+-- | The time that the HDFS location was created.
+describeLocationHdfsResponse_creationTime :: Lens.Lens' DescribeLocationHdfsResponse (Prelude.Maybe Prelude.UTCTime)
+describeLocationHdfsResponse_creationTime = Lens.lens (\DescribeLocationHdfsResponse' {creationTime} -> creationTime) (\s@DescribeLocationHdfsResponse' {} a -> s {creationTime = a} :: DescribeLocationHdfsResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The Kerberos principal with access to the files and folders on the HDFS
+-- cluster. This parameter is used if the @AuthenticationType@ is defined
+-- as @KERBEROS@.
+describeLocationHdfsResponse_kerberosPrincipal :: Lens.Lens' DescribeLocationHdfsResponse (Prelude.Maybe Prelude.Text)
+describeLocationHdfsResponse_kerberosPrincipal = Lens.lens (\DescribeLocationHdfsResponse' {kerberosPrincipal} -> kerberosPrincipal) (\s@DescribeLocationHdfsResponse' {} a -> s {kerberosPrincipal = a} :: DescribeLocationHdfsResponse)
+
+-- | The URI of the HDFS cluster\'s Key Management Server (KMS).
+describeLocationHdfsResponse_kmsKeyProviderUri :: Lens.Lens' DescribeLocationHdfsResponse (Prelude.Maybe Prelude.Text)
+describeLocationHdfsResponse_kmsKeyProviderUri = Lens.lens (\DescribeLocationHdfsResponse' {kmsKeyProviderUri} -> kmsKeyProviderUri) (\s@DescribeLocationHdfsResponse' {} a -> s {kmsKeyProviderUri = a} :: DescribeLocationHdfsResponse)
+
+-- | The ARN of the HDFS cluster location.
+describeLocationHdfsResponse_locationArn :: Lens.Lens' DescribeLocationHdfsResponse (Prelude.Maybe Prelude.Text)
+describeLocationHdfsResponse_locationArn = Lens.lens (\DescribeLocationHdfsResponse' {locationArn} -> locationArn) (\s@DescribeLocationHdfsResponse' {} a -> s {locationArn = a} :: DescribeLocationHdfsResponse)
+
+-- | The URI of the HDFS cluster location.
+describeLocationHdfsResponse_locationUri :: Lens.Lens' DescribeLocationHdfsResponse (Prelude.Maybe Prelude.Text)
+describeLocationHdfsResponse_locationUri = Lens.lens (\DescribeLocationHdfsResponse' {locationUri} -> locationUri) (\s@DescribeLocationHdfsResponse' {} a -> s {locationUri = a} :: DescribeLocationHdfsResponse)
+
+-- | The NameNode that manage the HDFS namespace.
+describeLocationHdfsResponse_nameNodes :: Lens.Lens' DescribeLocationHdfsResponse (Prelude.Maybe (Prelude.NonEmpty HdfsNameNode))
+describeLocationHdfsResponse_nameNodes = Lens.lens (\DescribeLocationHdfsResponse' {nameNodes} -> nameNodes) (\s@DescribeLocationHdfsResponse' {} a -> s {nameNodes = a} :: DescribeLocationHdfsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Quality of Protection (QOP) configuration specifies the Remote
+-- Procedure Call (RPC) and data transfer protection settings configured on
+-- the Hadoop Distributed File System (HDFS) cluster.
+describeLocationHdfsResponse_qopConfiguration :: Lens.Lens' DescribeLocationHdfsResponse (Prelude.Maybe QopConfiguration)
+describeLocationHdfsResponse_qopConfiguration = Lens.lens (\DescribeLocationHdfsResponse' {qopConfiguration} -> qopConfiguration) (\s@DescribeLocationHdfsResponse' {} a -> s {qopConfiguration = a} :: DescribeLocationHdfsResponse)
+
+-- | The number of DataNodes to replicate the data to when writing to the
+-- HDFS cluster.
+describeLocationHdfsResponse_replicationFactor :: Lens.Lens' DescribeLocationHdfsResponse (Prelude.Maybe Prelude.Natural)
+describeLocationHdfsResponse_replicationFactor = Lens.lens (\DescribeLocationHdfsResponse' {replicationFactor} -> replicationFactor) (\s@DescribeLocationHdfsResponse' {} a -> s {replicationFactor = a} :: DescribeLocationHdfsResponse)
+
+-- | The user name used to identify the client on the host operating system.
+-- This parameter is used if the @AuthenticationType@ is defined as
+-- @SIMPLE@.
+describeLocationHdfsResponse_simpleUser :: Lens.Lens' DescribeLocationHdfsResponse (Prelude.Maybe Prelude.Text)
+describeLocationHdfsResponse_simpleUser = Lens.lens (\DescribeLocationHdfsResponse' {simpleUser} -> simpleUser) (\s@DescribeLocationHdfsResponse' {} a -> s {simpleUser = a} :: DescribeLocationHdfsResponse)
+
+-- | The response's http status code.
+describeLocationHdfsResponse_httpStatus :: Lens.Lens' DescribeLocationHdfsResponse Prelude.Int
+describeLocationHdfsResponse_httpStatus = Lens.lens (\DescribeLocationHdfsResponse' {httpStatus} -> httpStatus) (\s@DescribeLocationHdfsResponse' {} a -> s {httpStatus = a} :: DescribeLocationHdfsResponse)
+
+instance Prelude.NFData DescribeLocationHdfsResponse where
+  rnf DescribeLocationHdfsResponse' {..} =
+    Prelude.rnf agentArns
+      `Prelude.seq` Prelude.rnf authenticationType
+      `Prelude.seq` Prelude.rnf blockSize
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf kerberosPrincipal
+      `Prelude.seq` Prelude.rnf kmsKeyProviderUri
+      `Prelude.seq` Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf locationUri
+      `Prelude.seq` Prelude.rnf nameNodes
+      `Prelude.seq` Prelude.rnf qopConfiguration
+      `Prelude.seq` Prelude.rnf replicationFactor
+      `Prelude.seq` Prelude.rnf simpleUser
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DescribeLocationNfs.hs b/gen/Amazonka/DataSync/DescribeLocationNfs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DescribeLocationNfs.hs
@@ -0,0 +1,220 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.DescribeLocationNfs
+-- 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 metadata, such as the path information, about an NFS location.
+module Amazonka.DataSync.DescribeLocationNfs
+  ( -- * Creating a Request
+    DescribeLocationNfs (..),
+    newDescribeLocationNfs,
+
+    -- * Request Lenses
+    describeLocationNfs_locationArn,
+
+    -- * Destructuring the Response
+    DescribeLocationNfsResponse (..),
+    newDescribeLocationNfsResponse,
+
+    -- * Response Lenses
+    describeLocationNfsResponse_creationTime,
+    describeLocationNfsResponse_locationArn,
+    describeLocationNfsResponse_locationUri,
+    describeLocationNfsResponse_mountOptions,
+    describeLocationNfsResponse_onPremConfig,
+    describeLocationNfsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | DescribeLocationNfsRequest
+--
+-- /See:/ 'newDescribeLocationNfs' smart constructor.
+data DescribeLocationNfs = DescribeLocationNfs'
+  { -- | The Amazon Resource Name (ARN) of the NFS location to describe.
+    locationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationNfs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'describeLocationNfs_locationArn' - The Amazon Resource Name (ARN) of the NFS location to describe.
+newDescribeLocationNfs ::
+  -- | 'locationArn'
+  Prelude.Text ->
+  DescribeLocationNfs
+newDescribeLocationNfs pLocationArn_ =
+  DescribeLocationNfs' {locationArn = pLocationArn_}
+
+-- | The Amazon Resource Name (ARN) of the NFS location to describe.
+describeLocationNfs_locationArn :: Lens.Lens' DescribeLocationNfs Prelude.Text
+describeLocationNfs_locationArn = Lens.lens (\DescribeLocationNfs' {locationArn} -> locationArn) (\s@DescribeLocationNfs' {} a -> s {locationArn = a} :: DescribeLocationNfs)
+
+instance Core.AWSRequest DescribeLocationNfs where
+  type
+    AWSResponse DescribeLocationNfs =
+      DescribeLocationNfsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeLocationNfsResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "LocationArn")
+            Prelude.<*> (x Data..?> "LocationUri")
+            Prelude.<*> (x Data..?> "MountOptions")
+            Prelude.<*> (x Data..?> "OnPremConfig")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeLocationNfs where
+  hashWithSalt _salt DescribeLocationNfs' {..} =
+    _salt `Prelude.hashWithSalt` locationArn
+
+instance Prelude.NFData DescribeLocationNfs where
+  rnf DescribeLocationNfs' {..} =
+    Prelude.rnf locationArn
+
+instance Data.ToHeaders DescribeLocationNfs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.DescribeLocationNfs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeLocationNfs where
+  toJSON DescribeLocationNfs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("LocationArn" Data..= locationArn)]
+      )
+
+instance Data.ToPath DescribeLocationNfs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLocationNfs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | DescribeLocationNfsResponse
+--
+-- /See:/ 'newDescribeLocationNfsResponse' smart constructor.
+data DescribeLocationNfsResponse = DescribeLocationNfsResponse'
+  { -- | The time that the NFS location was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the NFS location that was described.
+    locationArn :: Prelude.Maybe Prelude.Text,
+    -- | The URL of the source NFS location that was described.
+    locationUri :: Prelude.Maybe Prelude.Text,
+    -- | The NFS mount options that DataSync used to mount your NFS share.
+    mountOptions :: Prelude.Maybe NfsMountOptions,
+    onPremConfig :: Prelude.Maybe OnPremConfig,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationNfsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeLocationNfsResponse_creationTime' - The time that the NFS location was created.
+--
+-- 'locationArn', 'describeLocationNfsResponse_locationArn' - The Amazon Resource Name (ARN) of the NFS location that was described.
+--
+-- 'locationUri', 'describeLocationNfsResponse_locationUri' - The URL of the source NFS location that was described.
+--
+-- 'mountOptions', 'describeLocationNfsResponse_mountOptions' - The NFS mount options that DataSync used to mount your NFS share.
+--
+-- 'onPremConfig', 'describeLocationNfsResponse_onPremConfig' - Undocumented member.
+--
+-- 'httpStatus', 'describeLocationNfsResponse_httpStatus' - The response's http status code.
+newDescribeLocationNfsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocationNfsResponse
+newDescribeLocationNfsResponse pHttpStatus_ =
+  DescribeLocationNfsResponse'
+    { creationTime =
+        Prelude.Nothing,
+      locationArn = Prelude.Nothing,
+      locationUri = Prelude.Nothing,
+      mountOptions = Prelude.Nothing,
+      onPremConfig = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time that the NFS location was created.
+describeLocationNfsResponse_creationTime :: Lens.Lens' DescribeLocationNfsResponse (Prelude.Maybe Prelude.UTCTime)
+describeLocationNfsResponse_creationTime = Lens.lens (\DescribeLocationNfsResponse' {creationTime} -> creationTime) (\s@DescribeLocationNfsResponse' {} a -> s {creationTime = a} :: DescribeLocationNfsResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the NFS location that was described.
+describeLocationNfsResponse_locationArn :: Lens.Lens' DescribeLocationNfsResponse (Prelude.Maybe Prelude.Text)
+describeLocationNfsResponse_locationArn = Lens.lens (\DescribeLocationNfsResponse' {locationArn} -> locationArn) (\s@DescribeLocationNfsResponse' {} a -> s {locationArn = a} :: DescribeLocationNfsResponse)
+
+-- | The URL of the source NFS location that was described.
+describeLocationNfsResponse_locationUri :: Lens.Lens' DescribeLocationNfsResponse (Prelude.Maybe Prelude.Text)
+describeLocationNfsResponse_locationUri = Lens.lens (\DescribeLocationNfsResponse' {locationUri} -> locationUri) (\s@DescribeLocationNfsResponse' {} a -> s {locationUri = a} :: DescribeLocationNfsResponse)
+
+-- | The NFS mount options that DataSync used to mount your NFS share.
+describeLocationNfsResponse_mountOptions :: Lens.Lens' DescribeLocationNfsResponse (Prelude.Maybe NfsMountOptions)
+describeLocationNfsResponse_mountOptions = Lens.lens (\DescribeLocationNfsResponse' {mountOptions} -> mountOptions) (\s@DescribeLocationNfsResponse' {} a -> s {mountOptions = a} :: DescribeLocationNfsResponse)
+
+-- | Undocumented member.
+describeLocationNfsResponse_onPremConfig :: Lens.Lens' DescribeLocationNfsResponse (Prelude.Maybe OnPremConfig)
+describeLocationNfsResponse_onPremConfig = Lens.lens (\DescribeLocationNfsResponse' {onPremConfig} -> onPremConfig) (\s@DescribeLocationNfsResponse' {} a -> s {onPremConfig = a} :: DescribeLocationNfsResponse)
+
+-- | The response's http status code.
+describeLocationNfsResponse_httpStatus :: Lens.Lens' DescribeLocationNfsResponse Prelude.Int
+describeLocationNfsResponse_httpStatus = Lens.lens (\DescribeLocationNfsResponse' {httpStatus} -> httpStatus) (\s@DescribeLocationNfsResponse' {} a -> s {httpStatus = a} :: DescribeLocationNfsResponse)
+
+instance Prelude.NFData DescribeLocationNfsResponse where
+  rnf DescribeLocationNfsResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf locationUri
+      `Prelude.seq` Prelude.rnf mountOptions
+      `Prelude.seq` Prelude.rnf onPremConfig
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DescribeLocationObjectStorage.hs b/gen/Amazonka/DataSync/DescribeLocationObjectStorage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DescribeLocationObjectStorage.hs
@@ -0,0 +1,293 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.DescribeLocationObjectStorage
+-- 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 metadata about your DataSync location for an object storage
+-- system.
+module Amazonka.DataSync.DescribeLocationObjectStorage
+  ( -- * Creating a Request
+    DescribeLocationObjectStorage (..),
+    newDescribeLocationObjectStorage,
+
+    -- * Request Lenses
+    describeLocationObjectStorage_locationArn,
+
+    -- * Destructuring the Response
+    DescribeLocationObjectStorageResponse (..),
+    newDescribeLocationObjectStorageResponse,
+
+    -- * Response Lenses
+    describeLocationObjectStorageResponse_accessKey,
+    describeLocationObjectStorageResponse_agentArns,
+    describeLocationObjectStorageResponse_creationTime,
+    describeLocationObjectStorageResponse_locationArn,
+    describeLocationObjectStorageResponse_locationUri,
+    describeLocationObjectStorageResponse_serverCertificate,
+    describeLocationObjectStorageResponse_serverPort,
+    describeLocationObjectStorageResponse_serverProtocol,
+    describeLocationObjectStorageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | DescribeLocationObjectStorageRequest
+--
+-- /See:/ 'newDescribeLocationObjectStorage' smart constructor.
+data DescribeLocationObjectStorage = DescribeLocationObjectStorage'
+  { -- | The Amazon Resource Name (ARN) of the object storage system location
+    -- that you want information about.
+    locationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationObjectStorage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'describeLocationObjectStorage_locationArn' - The Amazon Resource Name (ARN) of the object storage system location
+-- that you want information about.
+newDescribeLocationObjectStorage ::
+  -- | 'locationArn'
+  Prelude.Text ->
+  DescribeLocationObjectStorage
+newDescribeLocationObjectStorage pLocationArn_ =
+  DescribeLocationObjectStorage'
+    { locationArn =
+        pLocationArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the object storage system location
+-- that you want information about.
+describeLocationObjectStorage_locationArn :: Lens.Lens' DescribeLocationObjectStorage Prelude.Text
+describeLocationObjectStorage_locationArn = Lens.lens (\DescribeLocationObjectStorage' {locationArn} -> locationArn) (\s@DescribeLocationObjectStorage' {} a -> s {locationArn = a} :: DescribeLocationObjectStorage)
+
+instance
+  Core.AWSRequest
+    DescribeLocationObjectStorage
+  where
+  type
+    AWSResponse DescribeLocationObjectStorage =
+      DescribeLocationObjectStorageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeLocationObjectStorageResponse'
+            Prelude.<$> (x Data..?> "AccessKey")
+            Prelude.<*> (x Data..?> "AgentArns")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "LocationArn")
+            Prelude.<*> (x Data..?> "LocationUri")
+            Prelude.<*> (x Data..?> "ServerCertificate")
+            Prelude.<*> (x Data..?> "ServerPort")
+            Prelude.<*> (x Data..?> "ServerProtocol")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeLocationObjectStorage
+  where
+  hashWithSalt _salt DescribeLocationObjectStorage' {..} =
+    _salt `Prelude.hashWithSalt` locationArn
+
+instance Prelude.NFData DescribeLocationObjectStorage where
+  rnf DescribeLocationObjectStorage' {..} =
+    Prelude.rnf locationArn
+
+instance Data.ToHeaders DescribeLocationObjectStorage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.DescribeLocationObjectStorage" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeLocationObjectStorage where
+  toJSON DescribeLocationObjectStorage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("LocationArn" Data..= locationArn)]
+      )
+
+instance Data.ToPath DescribeLocationObjectStorage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLocationObjectStorage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | DescribeLocationObjectStorageResponse
+--
+-- /See:/ 'newDescribeLocationObjectStorageResponse' smart constructor.
+data DescribeLocationObjectStorageResponse = DescribeLocationObjectStorageResponse'
+  { -- | The access key (for example, a user name) required to authenticate with
+    -- the object storage system.
+    accessKey :: Prelude.Maybe Prelude.Text,
+    -- | The ARNs of the DataSync agents that can securely connect with your
+    -- location.
+    agentArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The time that the location was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of the object storage system location.
+    locationArn :: Prelude.Maybe Prelude.Text,
+    -- | The URL of the object storage system location.
+    locationUri :: Prelude.Maybe Prelude.Text,
+    -- | The self-signed certificate that DataSync uses to securely authenticate
+    -- with your object storage system.
+    serverCertificate :: Prelude.Maybe Data.Base64,
+    -- | The port that your object storage server accepts inbound network traffic
+    -- on (for example, port 443).
+    serverPort :: Prelude.Maybe Prelude.Natural,
+    -- | The protocol that your object storage system uses to communicate.
+    serverProtocol :: Prelude.Maybe ObjectStorageServerProtocol,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationObjectStorageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessKey', 'describeLocationObjectStorageResponse_accessKey' - The access key (for example, a user name) required to authenticate with
+-- the object storage system.
+--
+-- 'agentArns', 'describeLocationObjectStorageResponse_agentArns' - The ARNs of the DataSync agents that can securely connect with your
+-- location.
+--
+-- 'creationTime', 'describeLocationObjectStorageResponse_creationTime' - The time that the location was created.
+--
+-- 'locationArn', 'describeLocationObjectStorageResponse_locationArn' - The ARN of the object storage system location.
+--
+-- 'locationUri', 'describeLocationObjectStorageResponse_locationUri' - The URL of the object storage system location.
+--
+-- 'serverCertificate', 'describeLocationObjectStorageResponse_serverCertificate' - The self-signed certificate that DataSync uses to securely authenticate
+-- with your object storage system.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+--
+-- 'serverPort', 'describeLocationObjectStorageResponse_serverPort' - The port that your object storage server accepts inbound network traffic
+-- on (for example, port 443).
+--
+-- 'serverProtocol', 'describeLocationObjectStorageResponse_serverProtocol' - The protocol that your object storage system uses to communicate.
+--
+-- 'httpStatus', 'describeLocationObjectStorageResponse_httpStatus' - The response's http status code.
+newDescribeLocationObjectStorageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocationObjectStorageResponse
+newDescribeLocationObjectStorageResponse pHttpStatus_ =
+  DescribeLocationObjectStorageResponse'
+    { accessKey =
+        Prelude.Nothing,
+      agentArns = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      locationArn = Prelude.Nothing,
+      locationUri = Prelude.Nothing,
+      serverCertificate = Prelude.Nothing,
+      serverPort = Prelude.Nothing,
+      serverProtocol = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The access key (for example, a user name) required to authenticate with
+-- the object storage system.
+describeLocationObjectStorageResponse_accessKey :: Lens.Lens' DescribeLocationObjectStorageResponse (Prelude.Maybe Prelude.Text)
+describeLocationObjectStorageResponse_accessKey = Lens.lens (\DescribeLocationObjectStorageResponse' {accessKey} -> accessKey) (\s@DescribeLocationObjectStorageResponse' {} a -> s {accessKey = a} :: DescribeLocationObjectStorageResponse)
+
+-- | The ARNs of the DataSync agents that can securely connect with your
+-- location.
+describeLocationObjectStorageResponse_agentArns :: Lens.Lens' DescribeLocationObjectStorageResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeLocationObjectStorageResponse_agentArns = Lens.lens (\DescribeLocationObjectStorageResponse' {agentArns} -> agentArns) (\s@DescribeLocationObjectStorageResponse' {} a -> s {agentArns = a} :: DescribeLocationObjectStorageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time that the location was created.
+describeLocationObjectStorageResponse_creationTime :: Lens.Lens' DescribeLocationObjectStorageResponse (Prelude.Maybe Prelude.UTCTime)
+describeLocationObjectStorageResponse_creationTime = Lens.lens (\DescribeLocationObjectStorageResponse' {creationTime} -> creationTime) (\s@DescribeLocationObjectStorageResponse' {} a -> s {creationTime = a} :: DescribeLocationObjectStorageResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of the object storage system location.
+describeLocationObjectStorageResponse_locationArn :: Lens.Lens' DescribeLocationObjectStorageResponse (Prelude.Maybe Prelude.Text)
+describeLocationObjectStorageResponse_locationArn = Lens.lens (\DescribeLocationObjectStorageResponse' {locationArn} -> locationArn) (\s@DescribeLocationObjectStorageResponse' {} a -> s {locationArn = a} :: DescribeLocationObjectStorageResponse)
+
+-- | The URL of the object storage system location.
+describeLocationObjectStorageResponse_locationUri :: Lens.Lens' DescribeLocationObjectStorageResponse (Prelude.Maybe Prelude.Text)
+describeLocationObjectStorageResponse_locationUri = Lens.lens (\DescribeLocationObjectStorageResponse' {locationUri} -> locationUri) (\s@DescribeLocationObjectStorageResponse' {} a -> s {locationUri = a} :: DescribeLocationObjectStorageResponse)
+
+-- | The self-signed certificate that DataSync uses to securely authenticate
+-- with your object storage system.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+describeLocationObjectStorageResponse_serverCertificate :: Lens.Lens' DescribeLocationObjectStorageResponse (Prelude.Maybe Prelude.ByteString)
+describeLocationObjectStorageResponse_serverCertificate = Lens.lens (\DescribeLocationObjectStorageResponse' {serverCertificate} -> serverCertificate) (\s@DescribeLocationObjectStorageResponse' {} a -> s {serverCertificate = a} :: DescribeLocationObjectStorageResponse) Prelude.. Lens.mapping Data._Base64
+
+-- | The port that your object storage server accepts inbound network traffic
+-- on (for example, port 443).
+describeLocationObjectStorageResponse_serverPort :: Lens.Lens' DescribeLocationObjectStorageResponse (Prelude.Maybe Prelude.Natural)
+describeLocationObjectStorageResponse_serverPort = Lens.lens (\DescribeLocationObjectStorageResponse' {serverPort} -> serverPort) (\s@DescribeLocationObjectStorageResponse' {} a -> s {serverPort = a} :: DescribeLocationObjectStorageResponse)
+
+-- | The protocol that your object storage system uses to communicate.
+describeLocationObjectStorageResponse_serverProtocol :: Lens.Lens' DescribeLocationObjectStorageResponse (Prelude.Maybe ObjectStorageServerProtocol)
+describeLocationObjectStorageResponse_serverProtocol = Lens.lens (\DescribeLocationObjectStorageResponse' {serverProtocol} -> serverProtocol) (\s@DescribeLocationObjectStorageResponse' {} a -> s {serverProtocol = a} :: DescribeLocationObjectStorageResponse)
+
+-- | The response's http status code.
+describeLocationObjectStorageResponse_httpStatus :: Lens.Lens' DescribeLocationObjectStorageResponse Prelude.Int
+describeLocationObjectStorageResponse_httpStatus = Lens.lens (\DescribeLocationObjectStorageResponse' {httpStatus} -> httpStatus) (\s@DescribeLocationObjectStorageResponse' {} a -> s {httpStatus = a} :: DescribeLocationObjectStorageResponse)
+
+instance
+  Prelude.NFData
+    DescribeLocationObjectStorageResponse
+  where
+  rnf DescribeLocationObjectStorageResponse' {..} =
+    Prelude.rnf accessKey
+      `Prelude.seq` Prelude.rnf agentArns
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf locationUri
+      `Prelude.seq` Prelude.rnf serverCertificate
+      `Prelude.seq` Prelude.rnf serverPort
+      `Prelude.seq` Prelude.rnf serverProtocol
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DescribeLocationS3.hs b/gen/Amazonka/DataSync/DescribeLocationS3.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DescribeLocationS3.hs
@@ -0,0 +1,265 @@
+{-# 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.DataSync.DescribeLocationS3
+-- 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 metadata, such as bucket name, about an Amazon S3 bucket
+-- location.
+module Amazonka.DataSync.DescribeLocationS3
+  ( -- * Creating a Request
+    DescribeLocationS3 (..),
+    newDescribeLocationS3,
+
+    -- * Request Lenses
+    describeLocationS3_locationArn,
+
+    -- * Destructuring the Response
+    DescribeLocationS3Response (..),
+    newDescribeLocationS3Response,
+
+    -- * Response Lenses
+    describeLocationS3Response_agentArns,
+    describeLocationS3Response_creationTime,
+    describeLocationS3Response_locationArn,
+    describeLocationS3Response_locationUri,
+    describeLocationS3Response_s3Config,
+    describeLocationS3Response_s3StorageClass,
+    describeLocationS3Response_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | DescribeLocationS3Request
+--
+-- /See:/ 'newDescribeLocationS3' smart constructor.
+data DescribeLocationS3 = DescribeLocationS3'
+  { -- | The Amazon Resource Name (ARN) of the Amazon S3 bucket location to
+    -- describe.
+    locationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationS3' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'describeLocationS3_locationArn' - The Amazon Resource Name (ARN) of the Amazon S3 bucket location to
+-- describe.
+newDescribeLocationS3 ::
+  -- | 'locationArn'
+  Prelude.Text ->
+  DescribeLocationS3
+newDescribeLocationS3 pLocationArn_ =
+  DescribeLocationS3' {locationArn = pLocationArn_}
+
+-- | The Amazon Resource Name (ARN) of the Amazon S3 bucket location to
+-- describe.
+describeLocationS3_locationArn :: Lens.Lens' DescribeLocationS3 Prelude.Text
+describeLocationS3_locationArn = Lens.lens (\DescribeLocationS3' {locationArn} -> locationArn) (\s@DescribeLocationS3' {} a -> s {locationArn = a} :: DescribeLocationS3)
+
+instance Core.AWSRequest DescribeLocationS3 where
+  type
+    AWSResponse DescribeLocationS3 =
+      DescribeLocationS3Response
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeLocationS3Response'
+            Prelude.<$> (x Data..?> "AgentArns")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "LocationArn")
+            Prelude.<*> (x Data..?> "LocationUri")
+            Prelude.<*> (x Data..?> "S3Config")
+            Prelude.<*> (x Data..?> "S3StorageClass")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeLocationS3 where
+  hashWithSalt _salt DescribeLocationS3' {..} =
+    _salt `Prelude.hashWithSalt` locationArn
+
+instance Prelude.NFData DescribeLocationS3 where
+  rnf DescribeLocationS3' {..} = Prelude.rnf locationArn
+
+instance Data.ToHeaders DescribeLocationS3 where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.DescribeLocationS3" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeLocationS3 where
+  toJSON DescribeLocationS3' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("LocationArn" Data..= locationArn)]
+      )
+
+instance Data.ToPath DescribeLocationS3 where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLocationS3 where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | DescribeLocationS3Response
+--
+-- /See:/ 'newDescribeLocationS3Response' smart constructor.
+data DescribeLocationS3Response = DescribeLocationS3Response'
+  { -- | If you are using DataSync on an Amazon Web Services Outpost, the Amazon
+    -- Resource Name (ARNs) of the EC2 agents deployed on your Outpost. For
+    -- more information about launching a DataSync agent on an Amazon Web
+    -- Services Outpost, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/deploy-agents.html#outposts-agent Deploy your DataSync agent on Outposts>.
+    agentArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The time that the Amazon S3 bucket location was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the Amazon S3 bucket or access point.
+    locationArn :: Prelude.Maybe Prelude.Text,
+    -- | The URL of the Amazon S3 location that was described.
+    locationUri :: Prelude.Maybe Prelude.Text,
+    s3Config :: Prelude.Maybe S3Config,
+    -- | The Amazon S3 storage class that you chose to store your files in when
+    -- this location is used as a task destination. For more information about
+    -- S3 storage classes, see
+    -- <http://aws.amazon.com/s3/storage-classes/ Amazon S3 Storage Classes>.
+    -- Some storage classes have behaviors that can affect your S3 storage
+    -- cost. For detailed information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Considerations when working with S3 storage classes in DataSync>.
+    s3StorageClass :: Prelude.Maybe S3StorageClass,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationS3Response' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'agentArns', 'describeLocationS3Response_agentArns' - If you are using DataSync on an Amazon Web Services Outpost, the Amazon
+-- Resource Name (ARNs) of the EC2 agents deployed on your Outpost. For
+-- more information about launching a DataSync agent on an Amazon Web
+-- Services Outpost, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/deploy-agents.html#outposts-agent Deploy your DataSync agent on Outposts>.
+--
+-- 'creationTime', 'describeLocationS3Response_creationTime' - The time that the Amazon S3 bucket location was created.
+--
+-- 'locationArn', 'describeLocationS3Response_locationArn' - The Amazon Resource Name (ARN) of the Amazon S3 bucket or access point.
+--
+-- 'locationUri', 'describeLocationS3Response_locationUri' - The URL of the Amazon S3 location that was described.
+--
+-- 's3Config', 'describeLocationS3Response_s3Config' - Undocumented member.
+--
+-- 's3StorageClass', 'describeLocationS3Response_s3StorageClass' - The Amazon S3 storage class that you chose to store your files in when
+-- this location is used as a task destination. For more information about
+-- S3 storage classes, see
+-- <http://aws.amazon.com/s3/storage-classes/ Amazon S3 Storage Classes>.
+-- Some storage classes have behaviors that can affect your S3 storage
+-- cost. For detailed information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Considerations when working with S3 storage classes in DataSync>.
+--
+-- 'httpStatus', 'describeLocationS3Response_httpStatus' - The response's http status code.
+newDescribeLocationS3Response ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocationS3Response
+newDescribeLocationS3Response pHttpStatus_ =
+  DescribeLocationS3Response'
+    { agentArns =
+        Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      locationArn = Prelude.Nothing,
+      locationUri = Prelude.Nothing,
+      s3Config = Prelude.Nothing,
+      s3StorageClass = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If you are using DataSync on an Amazon Web Services Outpost, the Amazon
+-- Resource Name (ARNs) of the EC2 agents deployed on your Outpost. For
+-- more information about launching a DataSync agent on an Amazon Web
+-- Services Outpost, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/deploy-agents.html#outposts-agent Deploy your DataSync agent on Outposts>.
+describeLocationS3Response_agentArns :: Lens.Lens' DescribeLocationS3Response (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeLocationS3Response_agentArns = Lens.lens (\DescribeLocationS3Response' {agentArns} -> agentArns) (\s@DescribeLocationS3Response' {} a -> s {agentArns = a} :: DescribeLocationS3Response) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time that the Amazon S3 bucket location was created.
+describeLocationS3Response_creationTime :: Lens.Lens' DescribeLocationS3Response (Prelude.Maybe Prelude.UTCTime)
+describeLocationS3Response_creationTime = Lens.lens (\DescribeLocationS3Response' {creationTime} -> creationTime) (\s@DescribeLocationS3Response' {} a -> s {creationTime = a} :: DescribeLocationS3Response) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the Amazon S3 bucket or access point.
+describeLocationS3Response_locationArn :: Lens.Lens' DescribeLocationS3Response (Prelude.Maybe Prelude.Text)
+describeLocationS3Response_locationArn = Lens.lens (\DescribeLocationS3Response' {locationArn} -> locationArn) (\s@DescribeLocationS3Response' {} a -> s {locationArn = a} :: DescribeLocationS3Response)
+
+-- | The URL of the Amazon S3 location that was described.
+describeLocationS3Response_locationUri :: Lens.Lens' DescribeLocationS3Response (Prelude.Maybe Prelude.Text)
+describeLocationS3Response_locationUri = Lens.lens (\DescribeLocationS3Response' {locationUri} -> locationUri) (\s@DescribeLocationS3Response' {} a -> s {locationUri = a} :: DescribeLocationS3Response)
+
+-- | Undocumented member.
+describeLocationS3Response_s3Config :: Lens.Lens' DescribeLocationS3Response (Prelude.Maybe S3Config)
+describeLocationS3Response_s3Config = Lens.lens (\DescribeLocationS3Response' {s3Config} -> s3Config) (\s@DescribeLocationS3Response' {} a -> s {s3Config = a} :: DescribeLocationS3Response)
+
+-- | The Amazon S3 storage class that you chose to store your files in when
+-- this location is used as a task destination. For more information about
+-- S3 storage classes, see
+-- <http://aws.amazon.com/s3/storage-classes/ Amazon S3 Storage Classes>.
+-- Some storage classes have behaviors that can affect your S3 storage
+-- cost. For detailed information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Considerations when working with S3 storage classes in DataSync>.
+describeLocationS3Response_s3StorageClass :: Lens.Lens' DescribeLocationS3Response (Prelude.Maybe S3StorageClass)
+describeLocationS3Response_s3StorageClass = Lens.lens (\DescribeLocationS3Response' {s3StorageClass} -> s3StorageClass) (\s@DescribeLocationS3Response' {} a -> s {s3StorageClass = a} :: DescribeLocationS3Response)
+
+-- | The response's http status code.
+describeLocationS3Response_httpStatus :: Lens.Lens' DescribeLocationS3Response Prelude.Int
+describeLocationS3Response_httpStatus = Lens.lens (\DescribeLocationS3Response' {httpStatus} -> httpStatus) (\s@DescribeLocationS3Response' {} a -> s {httpStatus = a} :: DescribeLocationS3Response)
+
+instance Prelude.NFData DescribeLocationS3Response where
+  rnf DescribeLocationS3Response' {..} =
+    Prelude.rnf agentArns
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf locationUri
+      `Prelude.seq` Prelude.rnf s3Config
+      `Prelude.seq` Prelude.rnf s3StorageClass
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DescribeLocationSmb.hs b/gen/Amazonka/DataSync/DescribeLocationSmb.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DescribeLocationSmb.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.DataSync.DescribeLocationSmb
+-- 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 metadata, such as the path and user information about an SMB
+-- location.
+module Amazonka.DataSync.DescribeLocationSmb
+  ( -- * Creating a Request
+    DescribeLocationSmb (..),
+    newDescribeLocationSmb,
+
+    -- * Request Lenses
+    describeLocationSmb_locationArn,
+
+    -- * Destructuring the Response
+    DescribeLocationSmbResponse (..),
+    newDescribeLocationSmbResponse,
+
+    -- * Response Lenses
+    describeLocationSmbResponse_agentArns,
+    describeLocationSmbResponse_creationTime,
+    describeLocationSmbResponse_domain,
+    describeLocationSmbResponse_locationArn,
+    describeLocationSmbResponse_locationUri,
+    describeLocationSmbResponse_mountOptions,
+    describeLocationSmbResponse_user,
+    describeLocationSmbResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | DescribeLocationSmbRequest
+--
+-- /See:/ 'newDescribeLocationSmb' smart constructor.
+data DescribeLocationSmb = DescribeLocationSmb'
+  { -- | The Amazon Resource Name (ARN) of the SMB location to describe.
+    locationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocationSmb' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'describeLocationSmb_locationArn' - The Amazon Resource Name (ARN) of the SMB location to describe.
+newDescribeLocationSmb ::
+  -- | 'locationArn'
+  Prelude.Text ->
+  DescribeLocationSmb
+newDescribeLocationSmb pLocationArn_ =
+  DescribeLocationSmb' {locationArn = pLocationArn_}
+
+-- | The Amazon Resource Name (ARN) of the SMB location to describe.
+describeLocationSmb_locationArn :: Lens.Lens' DescribeLocationSmb Prelude.Text
+describeLocationSmb_locationArn = Lens.lens (\DescribeLocationSmb' {locationArn} -> locationArn) (\s@DescribeLocationSmb' {} a -> s {locationArn = a} :: DescribeLocationSmb)
+
+instance Core.AWSRequest DescribeLocationSmb where
+  type
+    AWSResponse DescribeLocationSmb =
+      DescribeLocationSmbResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeLocationSmbResponse'
+            Prelude.<$> (x Data..?> "AgentArns")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "Domain")
+            Prelude.<*> (x Data..?> "LocationArn")
+            Prelude.<*> (x Data..?> "LocationUri")
+            Prelude.<*> (x Data..?> "MountOptions")
+            Prelude.<*> (x Data..?> "User")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeLocationSmb where
+  hashWithSalt _salt DescribeLocationSmb' {..} =
+    _salt `Prelude.hashWithSalt` locationArn
+
+instance Prelude.NFData DescribeLocationSmb where
+  rnf DescribeLocationSmb' {..} =
+    Prelude.rnf locationArn
+
+instance Data.ToHeaders DescribeLocationSmb where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.DescribeLocationSmb" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeLocationSmb where
+  toJSON DescribeLocationSmb' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("LocationArn" Data..= locationArn)]
+      )
+
+instance Data.ToPath DescribeLocationSmb where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLocationSmb where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | DescribeLocationSmbResponse
+--
+-- /See:/ 'newDescribeLocationSmbResponse' smart constructor.
+data DescribeLocationSmbResponse = DescribeLocationSmbResponse'
+  { -- | The Amazon Resource Name (ARN) of the source SMB file system location
+    -- that is created.
+    agentArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The time that the SMB location was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the Windows domain that the SMB server belongs to.
+    domain :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the SMB location that was described.
+    locationArn :: Prelude.Maybe Prelude.Text,
+    -- | The URL of the source SMB location that was described.
+    locationUri :: Prelude.Maybe Prelude.Text,
+    -- | The mount options that are available for DataSync to use to access an
+    -- SMB location.
+    mountOptions :: Prelude.Maybe SmbMountOptions,
+    -- | The user who can mount the share, has the permissions to access files
+    -- and folders in the SMB share.
+    user :: 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 'DescribeLocationSmbResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'agentArns', 'describeLocationSmbResponse_agentArns' - The Amazon Resource Name (ARN) of the source SMB file system location
+-- that is created.
+--
+-- 'creationTime', 'describeLocationSmbResponse_creationTime' - The time that the SMB location was created.
+--
+-- 'domain', 'describeLocationSmbResponse_domain' - The name of the Windows domain that the SMB server belongs to.
+--
+-- 'locationArn', 'describeLocationSmbResponse_locationArn' - The Amazon Resource Name (ARN) of the SMB location that was described.
+--
+-- 'locationUri', 'describeLocationSmbResponse_locationUri' - The URL of the source SMB location that was described.
+--
+-- 'mountOptions', 'describeLocationSmbResponse_mountOptions' - The mount options that are available for DataSync to use to access an
+-- SMB location.
+--
+-- 'user', 'describeLocationSmbResponse_user' - The user who can mount the share, has the permissions to access files
+-- and folders in the SMB share.
+--
+-- 'httpStatus', 'describeLocationSmbResponse_httpStatus' - The response's http status code.
+newDescribeLocationSmbResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocationSmbResponse
+newDescribeLocationSmbResponse pHttpStatus_ =
+  DescribeLocationSmbResponse'
+    { agentArns =
+        Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      domain = Prelude.Nothing,
+      locationArn = Prelude.Nothing,
+      locationUri = Prelude.Nothing,
+      mountOptions = Prelude.Nothing,
+      user = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the source SMB file system location
+-- that is created.
+describeLocationSmbResponse_agentArns :: Lens.Lens' DescribeLocationSmbResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeLocationSmbResponse_agentArns = Lens.lens (\DescribeLocationSmbResponse' {agentArns} -> agentArns) (\s@DescribeLocationSmbResponse' {} a -> s {agentArns = a} :: DescribeLocationSmbResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time that the SMB location was created.
+describeLocationSmbResponse_creationTime :: Lens.Lens' DescribeLocationSmbResponse (Prelude.Maybe Prelude.UTCTime)
+describeLocationSmbResponse_creationTime = Lens.lens (\DescribeLocationSmbResponse' {creationTime} -> creationTime) (\s@DescribeLocationSmbResponse' {} a -> s {creationTime = a} :: DescribeLocationSmbResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the Windows domain that the SMB server belongs to.
+describeLocationSmbResponse_domain :: Lens.Lens' DescribeLocationSmbResponse (Prelude.Maybe Prelude.Text)
+describeLocationSmbResponse_domain = Lens.lens (\DescribeLocationSmbResponse' {domain} -> domain) (\s@DescribeLocationSmbResponse' {} a -> s {domain = a} :: DescribeLocationSmbResponse)
+
+-- | The Amazon Resource Name (ARN) of the SMB location that was described.
+describeLocationSmbResponse_locationArn :: Lens.Lens' DescribeLocationSmbResponse (Prelude.Maybe Prelude.Text)
+describeLocationSmbResponse_locationArn = Lens.lens (\DescribeLocationSmbResponse' {locationArn} -> locationArn) (\s@DescribeLocationSmbResponse' {} a -> s {locationArn = a} :: DescribeLocationSmbResponse)
+
+-- | The URL of the source SMB location that was described.
+describeLocationSmbResponse_locationUri :: Lens.Lens' DescribeLocationSmbResponse (Prelude.Maybe Prelude.Text)
+describeLocationSmbResponse_locationUri = Lens.lens (\DescribeLocationSmbResponse' {locationUri} -> locationUri) (\s@DescribeLocationSmbResponse' {} a -> s {locationUri = a} :: DescribeLocationSmbResponse)
+
+-- | The mount options that are available for DataSync to use to access an
+-- SMB location.
+describeLocationSmbResponse_mountOptions :: Lens.Lens' DescribeLocationSmbResponse (Prelude.Maybe SmbMountOptions)
+describeLocationSmbResponse_mountOptions = Lens.lens (\DescribeLocationSmbResponse' {mountOptions} -> mountOptions) (\s@DescribeLocationSmbResponse' {} a -> s {mountOptions = a} :: DescribeLocationSmbResponse)
+
+-- | The user who can mount the share, has the permissions to access files
+-- and folders in the SMB share.
+describeLocationSmbResponse_user :: Lens.Lens' DescribeLocationSmbResponse (Prelude.Maybe Prelude.Text)
+describeLocationSmbResponse_user = Lens.lens (\DescribeLocationSmbResponse' {user} -> user) (\s@DescribeLocationSmbResponse' {} a -> s {user = a} :: DescribeLocationSmbResponse)
+
+-- | The response's http status code.
+describeLocationSmbResponse_httpStatus :: Lens.Lens' DescribeLocationSmbResponse Prelude.Int
+describeLocationSmbResponse_httpStatus = Lens.lens (\DescribeLocationSmbResponse' {httpStatus} -> httpStatus) (\s@DescribeLocationSmbResponse' {} a -> s {httpStatus = a} :: DescribeLocationSmbResponse)
+
+instance Prelude.NFData DescribeLocationSmbResponse where
+  rnf DescribeLocationSmbResponse' {..} =
+    Prelude.rnf agentArns
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf locationUri
+      `Prelude.seq` Prelude.rnf mountOptions
+      `Prelude.seq` Prelude.rnf user
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DescribeTask.hs b/gen/Amazonka/DataSync/DescribeTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DescribeTask.hs
@@ -0,0 +1,432 @@
+{-# 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.DataSync.DescribeTask
+-- 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 metadata about a task.
+module Amazonka.DataSync.DescribeTask
+  ( -- * Creating a Request
+    DescribeTask (..),
+    newDescribeTask,
+
+    -- * Request Lenses
+    describeTask_taskArn,
+
+    -- * Destructuring the Response
+    DescribeTaskResponse (..),
+    newDescribeTaskResponse,
+
+    -- * Response Lenses
+    describeTaskResponse_cloudWatchLogGroupArn,
+    describeTaskResponse_creationTime,
+    describeTaskResponse_currentTaskExecutionArn,
+    describeTaskResponse_destinationLocationArn,
+    describeTaskResponse_destinationNetworkInterfaceArns,
+    describeTaskResponse_errorCode,
+    describeTaskResponse_errorDetail,
+    describeTaskResponse_excludes,
+    describeTaskResponse_includes,
+    describeTaskResponse_name,
+    describeTaskResponse_options,
+    describeTaskResponse_schedule,
+    describeTaskResponse_sourceLocationArn,
+    describeTaskResponse_sourceNetworkInterfaceArns,
+    describeTaskResponse_status,
+    describeTaskResponse_taskArn,
+    describeTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | DescribeTaskRequest
+--
+-- /See:/ 'newDescribeTask' smart constructor.
+data DescribeTask = DescribeTask'
+  { -- | The Amazon Resource Name (ARN) of the task to describe.
+    taskArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'taskArn', 'describeTask_taskArn' - The Amazon Resource Name (ARN) of the task to describe.
+newDescribeTask ::
+  -- | 'taskArn'
+  Prelude.Text ->
+  DescribeTask
+newDescribeTask pTaskArn_ =
+  DescribeTask' {taskArn = pTaskArn_}
+
+-- | The Amazon Resource Name (ARN) of the task to describe.
+describeTask_taskArn :: Lens.Lens' DescribeTask Prelude.Text
+describeTask_taskArn = Lens.lens (\DescribeTask' {taskArn} -> taskArn) (\s@DescribeTask' {} a -> s {taskArn = a} :: DescribeTask)
+
+instance Core.AWSRequest DescribeTask where
+  type AWSResponse DescribeTask = DescribeTaskResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeTaskResponse'
+            Prelude.<$> (x Data..?> "CloudWatchLogGroupArn")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "CurrentTaskExecutionArn")
+            Prelude.<*> (x Data..?> "DestinationLocationArn")
+            Prelude.<*> ( x
+                            Data..?> "DestinationNetworkInterfaceArns"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "ErrorCode")
+            Prelude.<*> (x Data..?> "ErrorDetail")
+            Prelude.<*> (x Data..?> "Excludes" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Includes" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "Options")
+            Prelude.<*> (x Data..?> "Schedule")
+            Prelude.<*> (x Data..?> "SourceLocationArn")
+            Prelude.<*> ( x
+                            Data..?> "SourceNetworkInterfaceArns"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "TaskArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeTask where
+  hashWithSalt _salt DescribeTask' {..} =
+    _salt `Prelude.hashWithSalt` taskArn
+
+instance Prelude.NFData DescribeTask where
+  rnf DescribeTask' {..} = Prelude.rnf taskArn
+
+instance Data.ToHeaders DescribeTask where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("FmrsService.DescribeTask" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeTask where
+  toJSON DescribeTask' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("TaskArn" Data..= taskArn)]
+      )
+
+instance Data.ToPath DescribeTask where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | DescribeTaskResponse
+--
+-- /See:/ 'newDescribeTaskResponse' smart constructor.
+data DescribeTaskResponse = DescribeTaskResponse'
+  { -- | The Amazon Resource Name (ARN) of the Amazon CloudWatch log group that
+    -- was used to monitor and log events in the task.
+    --
+    -- For more information on these groups, see Working with Log Groups and
+    -- Log Streams in the /Amazon CloudWatch User Guide/.
+    cloudWatchLogGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The time that the task was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the task execution that is
+    -- transferring files.
+    currentTaskExecutionArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Amazon Web Services storage
+    -- resource\'s location.
+    destinationLocationArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Names (ARNs) of the network interfaces created for
+    -- your destination location. For more information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/datasync-network.html#required-network-interfaces Network interface requirements>.
+    destinationNetworkInterfaceArns :: Prelude.Maybe [Prelude.Text],
+    -- | Errors that DataSync encountered during execution of the task. You can
+    -- use this error code to help troubleshoot issues.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | Detailed description of an error that was encountered during the task
+    -- execution. You can use this information to help troubleshoot issues.
+    errorDetail :: Prelude.Maybe Prelude.Text,
+    -- | A list of filter rules that exclude specific data during your transfer.
+    -- For more information and examples, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+    excludes :: Prelude.Maybe [FilterRule],
+    -- | A list of filter rules that include specific data during your transfer.
+    -- For more information and examples, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+    includes :: Prelude.Maybe [FilterRule],
+    -- | The name of the task that was described.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The configuration options that control the behavior of the
+    -- @StartTaskExecution@ operation. Some options include preserving file or
+    -- object metadata and verifying data integrity.
+    --
+    -- You can override these options for each task execution. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/API_StartTaskExecution.html StartTaskExecution>.
+    options :: Prelude.Maybe Options,
+    -- | The schedule used to periodically transfer files from a source to a
+    -- destination location.
+    schedule :: Prelude.Maybe TaskSchedule,
+    -- | The Amazon Resource Name (ARN) of the source file system\'s location.
+    sourceLocationArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Names (ARNs) of the network interfaces created for
+    -- your source location. For more information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/datasync-network.html#required-network-interfaces Network interface requirements>.
+    sourceNetworkInterfaceArns :: Prelude.Maybe [Prelude.Text],
+    -- | The status of the task that was described.
+    --
+    -- For detailed information about task execution statuses, see
+    -- Understanding Task Statuses in the /DataSync User Guide/.
+    status :: Prelude.Maybe TaskStatus,
+    -- | The Amazon Resource Name (ARN) of the task that was described.
+    taskArn :: 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 'DescribeTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cloudWatchLogGroupArn', 'describeTaskResponse_cloudWatchLogGroupArn' - The Amazon Resource Name (ARN) of the Amazon CloudWatch log group that
+-- was used to monitor and log events in the task.
+--
+-- For more information on these groups, see Working with Log Groups and
+-- Log Streams in the /Amazon CloudWatch User Guide/.
+--
+-- 'creationTime', 'describeTaskResponse_creationTime' - The time that the task was created.
+--
+-- 'currentTaskExecutionArn', 'describeTaskResponse_currentTaskExecutionArn' - The Amazon Resource Name (ARN) of the task execution that is
+-- transferring files.
+--
+-- 'destinationLocationArn', 'describeTaskResponse_destinationLocationArn' - The Amazon Resource Name (ARN) of the Amazon Web Services storage
+-- resource\'s location.
+--
+-- 'destinationNetworkInterfaceArns', 'describeTaskResponse_destinationNetworkInterfaceArns' - The Amazon Resource Names (ARNs) of the network interfaces created for
+-- your destination location. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/datasync-network.html#required-network-interfaces Network interface requirements>.
+--
+-- 'errorCode', 'describeTaskResponse_errorCode' - Errors that DataSync encountered during execution of the task. You can
+-- use this error code to help troubleshoot issues.
+--
+-- 'errorDetail', 'describeTaskResponse_errorDetail' - Detailed description of an error that was encountered during the task
+-- execution. You can use this information to help troubleshoot issues.
+--
+-- 'excludes', 'describeTaskResponse_excludes' - A list of filter rules that exclude specific data during your transfer.
+-- For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+--
+-- 'includes', 'describeTaskResponse_includes' - A list of filter rules that include specific data during your transfer.
+-- For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+--
+-- 'name', 'describeTaskResponse_name' - The name of the task that was described.
+--
+-- 'options', 'describeTaskResponse_options' - The configuration options that control the behavior of the
+-- @StartTaskExecution@ operation. Some options include preserving file or
+-- object metadata and verifying data integrity.
+--
+-- You can override these options for each task execution. For more
+-- information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/API_StartTaskExecution.html StartTaskExecution>.
+--
+-- 'schedule', 'describeTaskResponse_schedule' - The schedule used to periodically transfer files from a source to a
+-- destination location.
+--
+-- 'sourceLocationArn', 'describeTaskResponse_sourceLocationArn' - The Amazon Resource Name (ARN) of the source file system\'s location.
+--
+-- 'sourceNetworkInterfaceArns', 'describeTaskResponse_sourceNetworkInterfaceArns' - The Amazon Resource Names (ARNs) of the network interfaces created for
+-- your source location. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/datasync-network.html#required-network-interfaces Network interface requirements>.
+--
+-- 'status', 'describeTaskResponse_status' - The status of the task that was described.
+--
+-- For detailed information about task execution statuses, see
+-- Understanding Task Statuses in the /DataSync User Guide/.
+--
+-- 'taskArn', 'describeTaskResponse_taskArn' - The Amazon Resource Name (ARN) of the task that was described.
+--
+-- 'httpStatus', 'describeTaskResponse_httpStatus' - The response's http status code.
+newDescribeTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTaskResponse
+newDescribeTaskResponse pHttpStatus_ =
+  DescribeTaskResponse'
+    { cloudWatchLogGroupArn =
+        Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      currentTaskExecutionArn = Prelude.Nothing,
+      destinationLocationArn = Prelude.Nothing,
+      destinationNetworkInterfaceArns = Prelude.Nothing,
+      errorCode = Prelude.Nothing,
+      errorDetail = Prelude.Nothing,
+      excludes = Prelude.Nothing,
+      includes = Prelude.Nothing,
+      name = Prelude.Nothing,
+      options = Prelude.Nothing,
+      schedule = Prelude.Nothing,
+      sourceLocationArn = Prelude.Nothing,
+      sourceNetworkInterfaceArns = Prelude.Nothing,
+      status = Prelude.Nothing,
+      taskArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the Amazon CloudWatch log group that
+-- was used to monitor and log events in the task.
+--
+-- For more information on these groups, see Working with Log Groups and
+-- Log Streams in the /Amazon CloudWatch User Guide/.
+describeTaskResponse_cloudWatchLogGroupArn :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe Prelude.Text)
+describeTaskResponse_cloudWatchLogGroupArn = Lens.lens (\DescribeTaskResponse' {cloudWatchLogGroupArn} -> cloudWatchLogGroupArn) (\s@DescribeTaskResponse' {} a -> s {cloudWatchLogGroupArn = a} :: DescribeTaskResponse)
+
+-- | The time that the task was created.
+describeTaskResponse_creationTime :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe Prelude.UTCTime)
+describeTaskResponse_creationTime = Lens.lens (\DescribeTaskResponse' {creationTime} -> creationTime) (\s@DescribeTaskResponse' {} a -> s {creationTime = a} :: DescribeTaskResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the task execution that is
+-- transferring files.
+describeTaskResponse_currentTaskExecutionArn :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe Prelude.Text)
+describeTaskResponse_currentTaskExecutionArn = Lens.lens (\DescribeTaskResponse' {currentTaskExecutionArn} -> currentTaskExecutionArn) (\s@DescribeTaskResponse' {} a -> s {currentTaskExecutionArn = a} :: DescribeTaskResponse)
+
+-- | The Amazon Resource Name (ARN) of the Amazon Web Services storage
+-- resource\'s location.
+describeTaskResponse_destinationLocationArn :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe Prelude.Text)
+describeTaskResponse_destinationLocationArn = Lens.lens (\DescribeTaskResponse' {destinationLocationArn} -> destinationLocationArn) (\s@DescribeTaskResponse' {} a -> s {destinationLocationArn = a} :: DescribeTaskResponse)
+
+-- | The Amazon Resource Names (ARNs) of the network interfaces created for
+-- your destination location. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/datasync-network.html#required-network-interfaces Network interface requirements>.
+describeTaskResponse_destinationNetworkInterfaceArns :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe [Prelude.Text])
+describeTaskResponse_destinationNetworkInterfaceArns = Lens.lens (\DescribeTaskResponse' {destinationNetworkInterfaceArns} -> destinationNetworkInterfaceArns) (\s@DescribeTaskResponse' {} a -> s {destinationNetworkInterfaceArns = a} :: DescribeTaskResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Errors that DataSync encountered during execution of the task. You can
+-- use this error code to help troubleshoot issues.
+describeTaskResponse_errorCode :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe Prelude.Text)
+describeTaskResponse_errorCode = Lens.lens (\DescribeTaskResponse' {errorCode} -> errorCode) (\s@DescribeTaskResponse' {} a -> s {errorCode = a} :: DescribeTaskResponse)
+
+-- | Detailed description of an error that was encountered during the task
+-- execution. You can use this information to help troubleshoot issues.
+describeTaskResponse_errorDetail :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe Prelude.Text)
+describeTaskResponse_errorDetail = Lens.lens (\DescribeTaskResponse' {errorDetail} -> errorDetail) (\s@DescribeTaskResponse' {} a -> s {errorDetail = a} :: DescribeTaskResponse)
+
+-- | A list of filter rules that exclude specific data during your transfer.
+-- For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+describeTaskResponse_excludes :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe [FilterRule])
+describeTaskResponse_excludes = Lens.lens (\DescribeTaskResponse' {excludes} -> excludes) (\s@DescribeTaskResponse' {} a -> s {excludes = a} :: DescribeTaskResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of filter rules that include specific data during your transfer.
+-- For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+describeTaskResponse_includes :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe [FilterRule])
+describeTaskResponse_includes = Lens.lens (\DescribeTaskResponse' {includes} -> includes) (\s@DescribeTaskResponse' {} a -> s {includes = a} :: DescribeTaskResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the task that was described.
+describeTaskResponse_name :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe Prelude.Text)
+describeTaskResponse_name = Lens.lens (\DescribeTaskResponse' {name} -> name) (\s@DescribeTaskResponse' {} a -> s {name = a} :: DescribeTaskResponse)
+
+-- | The configuration options that control the behavior of the
+-- @StartTaskExecution@ operation. Some options include preserving file or
+-- object metadata and verifying data integrity.
+--
+-- You can override these options for each task execution. For more
+-- information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/API_StartTaskExecution.html StartTaskExecution>.
+describeTaskResponse_options :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe Options)
+describeTaskResponse_options = Lens.lens (\DescribeTaskResponse' {options} -> options) (\s@DescribeTaskResponse' {} a -> s {options = a} :: DescribeTaskResponse)
+
+-- | The schedule used to periodically transfer files from a source to a
+-- destination location.
+describeTaskResponse_schedule :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe TaskSchedule)
+describeTaskResponse_schedule = Lens.lens (\DescribeTaskResponse' {schedule} -> schedule) (\s@DescribeTaskResponse' {} a -> s {schedule = a} :: DescribeTaskResponse)
+
+-- | The Amazon Resource Name (ARN) of the source file system\'s location.
+describeTaskResponse_sourceLocationArn :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe Prelude.Text)
+describeTaskResponse_sourceLocationArn = Lens.lens (\DescribeTaskResponse' {sourceLocationArn} -> sourceLocationArn) (\s@DescribeTaskResponse' {} a -> s {sourceLocationArn = a} :: DescribeTaskResponse)
+
+-- | The Amazon Resource Names (ARNs) of the network interfaces created for
+-- your source location. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/datasync-network.html#required-network-interfaces Network interface requirements>.
+describeTaskResponse_sourceNetworkInterfaceArns :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe [Prelude.Text])
+describeTaskResponse_sourceNetworkInterfaceArns = Lens.lens (\DescribeTaskResponse' {sourceNetworkInterfaceArns} -> sourceNetworkInterfaceArns) (\s@DescribeTaskResponse' {} a -> s {sourceNetworkInterfaceArns = a} :: DescribeTaskResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the task that was described.
+--
+-- For detailed information about task execution statuses, see
+-- Understanding Task Statuses in the /DataSync User Guide/.
+describeTaskResponse_status :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe TaskStatus)
+describeTaskResponse_status = Lens.lens (\DescribeTaskResponse' {status} -> status) (\s@DescribeTaskResponse' {} a -> s {status = a} :: DescribeTaskResponse)
+
+-- | The Amazon Resource Name (ARN) of the task that was described.
+describeTaskResponse_taskArn :: Lens.Lens' DescribeTaskResponse (Prelude.Maybe Prelude.Text)
+describeTaskResponse_taskArn = Lens.lens (\DescribeTaskResponse' {taskArn} -> taskArn) (\s@DescribeTaskResponse' {} a -> s {taskArn = a} :: DescribeTaskResponse)
+
+-- | The response's http status code.
+describeTaskResponse_httpStatus :: Lens.Lens' DescribeTaskResponse Prelude.Int
+describeTaskResponse_httpStatus = Lens.lens (\DescribeTaskResponse' {httpStatus} -> httpStatus) (\s@DescribeTaskResponse' {} a -> s {httpStatus = a} :: DescribeTaskResponse)
+
+instance Prelude.NFData DescribeTaskResponse where
+  rnf DescribeTaskResponse' {..} =
+    Prelude.rnf cloudWatchLogGroupArn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf currentTaskExecutionArn
+      `Prelude.seq` Prelude.rnf destinationLocationArn
+      `Prelude.seq` Prelude.rnf destinationNetworkInterfaceArns
+      `Prelude.seq` Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorDetail
+      `Prelude.seq` Prelude.rnf excludes
+      `Prelude.seq` Prelude.rnf includes
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf schedule
+      `Prelude.seq` Prelude.rnf sourceLocationArn
+      `Prelude.seq` Prelude.rnf sourceNetworkInterfaceArns
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf taskArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/DescribeTaskExecution.hs b/gen/Amazonka/DataSync/DescribeTaskExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/DescribeTaskExecution.hs
@@ -0,0 +1,420 @@
+{-# 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.DataSync.DescribeTaskExecution
+-- 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 detailed metadata about a task that is being executed.
+module Amazonka.DataSync.DescribeTaskExecution
+  ( -- * Creating a Request
+    DescribeTaskExecution (..),
+    newDescribeTaskExecution,
+
+    -- * Request Lenses
+    describeTaskExecution_taskExecutionArn,
+
+    -- * Destructuring the Response
+    DescribeTaskExecutionResponse (..),
+    newDescribeTaskExecutionResponse,
+
+    -- * Response Lenses
+    describeTaskExecutionResponse_bytesCompressed,
+    describeTaskExecutionResponse_bytesTransferred,
+    describeTaskExecutionResponse_bytesWritten,
+    describeTaskExecutionResponse_estimatedBytesToTransfer,
+    describeTaskExecutionResponse_estimatedFilesToTransfer,
+    describeTaskExecutionResponse_excludes,
+    describeTaskExecutionResponse_filesTransferred,
+    describeTaskExecutionResponse_includes,
+    describeTaskExecutionResponse_options,
+    describeTaskExecutionResponse_result,
+    describeTaskExecutionResponse_startTime,
+    describeTaskExecutionResponse_status,
+    describeTaskExecutionResponse_taskExecutionArn,
+    describeTaskExecutionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | DescribeTaskExecutionRequest
+--
+-- /See:/ 'newDescribeTaskExecution' smart constructor.
+data DescribeTaskExecution = DescribeTaskExecution'
+  { -- | The Amazon Resource Name (ARN) of the task that is being executed.
+    taskExecutionArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTaskExecution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'taskExecutionArn', 'describeTaskExecution_taskExecutionArn' - The Amazon Resource Name (ARN) of the task that is being executed.
+newDescribeTaskExecution ::
+  -- | 'taskExecutionArn'
+  Prelude.Text ->
+  DescribeTaskExecution
+newDescribeTaskExecution pTaskExecutionArn_ =
+  DescribeTaskExecution'
+    { taskExecutionArn =
+        pTaskExecutionArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the task that is being executed.
+describeTaskExecution_taskExecutionArn :: Lens.Lens' DescribeTaskExecution Prelude.Text
+describeTaskExecution_taskExecutionArn = Lens.lens (\DescribeTaskExecution' {taskExecutionArn} -> taskExecutionArn) (\s@DescribeTaskExecution' {} a -> s {taskExecutionArn = a} :: DescribeTaskExecution)
+
+instance Core.AWSRequest DescribeTaskExecution where
+  type
+    AWSResponse DescribeTaskExecution =
+      DescribeTaskExecutionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeTaskExecutionResponse'
+            Prelude.<$> (x Data..?> "BytesCompressed")
+            Prelude.<*> (x Data..?> "BytesTransferred")
+            Prelude.<*> (x Data..?> "BytesWritten")
+            Prelude.<*> (x Data..?> "EstimatedBytesToTransfer")
+            Prelude.<*> (x Data..?> "EstimatedFilesToTransfer")
+            Prelude.<*> (x Data..?> "Excludes" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "FilesTransferred")
+            Prelude.<*> (x Data..?> "Includes" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Options")
+            Prelude.<*> (x Data..?> "Result")
+            Prelude.<*> (x Data..?> "StartTime")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "TaskExecutionArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeTaskExecution where
+  hashWithSalt _salt DescribeTaskExecution' {..} =
+    _salt `Prelude.hashWithSalt` taskExecutionArn
+
+instance Prelude.NFData DescribeTaskExecution where
+  rnf DescribeTaskExecution' {..} =
+    Prelude.rnf taskExecutionArn
+
+instance Data.ToHeaders DescribeTaskExecution where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.DescribeTaskExecution" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeTaskExecution where
+  toJSON DescribeTaskExecution' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("TaskExecutionArn" Data..= taskExecutionArn)
+          ]
+      )
+
+instance Data.ToPath DescribeTaskExecution where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeTaskExecution where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | DescribeTaskExecutionResponse
+--
+-- /See:/ 'newDescribeTaskExecutionResponse' smart constructor.
+data DescribeTaskExecutionResponse = DescribeTaskExecutionResponse'
+  { -- | The physical number of bytes transferred over the network after
+    -- compression was applied. In most cases, this number is less than
+    -- @BytesTransferred@ unless the data isn\'t compressible.
+    bytesCompressed :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of bytes that are involved in the transfer. For the
+    -- number of bytes sent over the network, see @BytesCompressed@.
+    bytesTransferred :: Prelude.Maybe Prelude.Integer,
+    -- | The number of logical bytes written to the destination Amazon Web
+    -- Services storage resource.
+    bytesWritten :: Prelude.Maybe Prelude.Integer,
+    -- | The estimated physical number of bytes that is to be transferred over
+    -- the network.
+    estimatedBytesToTransfer :: Prelude.Maybe Prelude.Integer,
+    -- | The expected number of files that is to be transferred over the network.
+    -- This value is calculated during the @PREPARING@ phase before the
+    -- @TRANSFERRING@ phase of the task execution. This value is the expected
+    -- number of files to be transferred. It\'s calculated based on comparing
+    -- the content of the source and destination locations and finding the
+    -- delta that needs to be transferred.
+    estimatedFilesToTransfer :: Prelude.Maybe Prelude.Integer,
+    -- | A list of filter rules that exclude specific data during your transfer.
+    -- For more information and examples, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+    excludes :: Prelude.Maybe [FilterRule],
+    -- | The actual number of files that was transferred over the network. This
+    -- value is calculated and updated on an ongoing basis during the
+    -- @TRANSFERRING@ phase of the task execution. It\'s updated periodically
+    -- when each file is read from the source and sent over the network.
+    --
+    -- If failures occur during a transfer, this value can be less than
+    -- @EstimatedFilesToTransfer@. In some cases, this value can also be
+    -- greater than @EstimatedFilesToTransfer@. This element is
+    -- implementation-specific for some location types, so don\'t use it as an
+    -- indicator for a correct file number or to monitor your task execution.
+    filesTransferred :: Prelude.Maybe Prelude.Integer,
+    -- | A list of filter rules that include specific data during your transfer.
+    -- For more information and examples, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+    includes :: Prelude.Maybe [FilterRule],
+    options :: Prelude.Maybe Options,
+    -- | The result of the task execution.
+    result :: Prelude.Maybe TaskExecutionResultDetail,
+    -- | The time that the task execution was started.
+    startTime :: Prelude.Maybe Data.POSIX,
+    -- | The status of the task execution.
+    --
+    -- For detailed information about task execution statuses, see
+    -- Understanding Task Statuses in the /DataSync User Guide./
+    status :: Prelude.Maybe TaskExecutionStatus,
+    -- | The Amazon Resource Name (ARN) of the task execution that was described.
+    -- @TaskExecutionArn@ is hierarchical and includes @TaskArn@ for the task
+    -- that was executed.
+    --
+    -- For example, a @TaskExecution@ value with the ARN
+    -- @arn:aws:datasync:us-east-1:111222333444:task\/task-0208075f79cedf4a2\/execution\/exec-08ef1e88ec491019b@
+    -- executed the task with the ARN
+    -- @arn:aws:datasync:us-east-1:111222333444:task\/task-0208075f79cedf4a2@.
+    taskExecutionArn :: 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 'DescribeTaskExecutionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bytesCompressed', 'describeTaskExecutionResponse_bytesCompressed' - The physical number of bytes transferred over the network after
+-- compression was applied. In most cases, this number is less than
+-- @BytesTransferred@ unless the data isn\'t compressible.
+--
+-- 'bytesTransferred', 'describeTaskExecutionResponse_bytesTransferred' - The total number of bytes that are involved in the transfer. For the
+-- number of bytes sent over the network, see @BytesCompressed@.
+--
+-- 'bytesWritten', 'describeTaskExecutionResponse_bytesWritten' - The number of logical bytes written to the destination Amazon Web
+-- Services storage resource.
+--
+-- 'estimatedBytesToTransfer', 'describeTaskExecutionResponse_estimatedBytesToTransfer' - The estimated physical number of bytes that is to be transferred over
+-- the network.
+--
+-- 'estimatedFilesToTransfer', 'describeTaskExecutionResponse_estimatedFilesToTransfer' - The expected number of files that is to be transferred over the network.
+-- This value is calculated during the @PREPARING@ phase before the
+-- @TRANSFERRING@ phase of the task execution. This value is the expected
+-- number of files to be transferred. It\'s calculated based on comparing
+-- the content of the source and destination locations and finding the
+-- delta that needs to be transferred.
+--
+-- 'excludes', 'describeTaskExecutionResponse_excludes' - A list of filter rules that exclude specific data during your transfer.
+-- For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+--
+-- 'filesTransferred', 'describeTaskExecutionResponse_filesTransferred' - The actual number of files that was transferred over the network. This
+-- value is calculated and updated on an ongoing basis during the
+-- @TRANSFERRING@ phase of the task execution. It\'s updated periodically
+-- when each file is read from the source and sent over the network.
+--
+-- If failures occur during a transfer, this value can be less than
+-- @EstimatedFilesToTransfer@. In some cases, this value can also be
+-- greater than @EstimatedFilesToTransfer@. This element is
+-- implementation-specific for some location types, so don\'t use it as an
+-- indicator for a correct file number or to monitor your task execution.
+--
+-- 'includes', 'describeTaskExecutionResponse_includes' - A list of filter rules that include specific data during your transfer.
+-- For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+--
+-- 'options', 'describeTaskExecutionResponse_options' - Undocumented member.
+--
+-- 'result', 'describeTaskExecutionResponse_result' - The result of the task execution.
+--
+-- 'startTime', 'describeTaskExecutionResponse_startTime' - The time that the task execution was started.
+--
+-- 'status', 'describeTaskExecutionResponse_status' - The status of the task execution.
+--
+-- For detailed information about task execution statuses, see
+-- Understanding Task Statuses in the /DataSync User Guide./
+--
+-- 'taskExecutionArn', 'describeTaskExecutionResponse_taskExecutionArn' - The Amazon Resource Name (ARN) of the task execution that was described.
+-- @TaskExecutionArn@ is hierarchical and includes @TaskArn@ for the task
+-- that was executed.
+--
+-- For example, a @TaskExecution@ value with the ARN
+-- @arn:aws:datasync:us-east-1:111222333444:task\/task-0208075f79cedf4a2\/execution\/exec-08ef1e88ec491019b@
+-- executed the task with the ARN
+-- @arn:aws:datasync:us-east-1:111222333444:task\/task-0208075f79cedf4a2@.
+--
+-- 'httpStatus', 'describeTaskExecutionResponse_httpStatus' - The response's http status code.
+newDescribeTaskExecutionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTaskExecutionResponse
+newDescribeTaskExecutionResponse pHttpStatus_ =
+  DescribeTaskExecutionResponse'
+    { bytesCompressed =
+        Prelude.Nothing,
+      bytesTransferred = Prelude.Nothing,
+      bytesWritten = Prelude.Nothing,
+      estimatedBytesToTransfer = Prelude.Nothing,
+      estimatedFilesToTransfer = Prelude.Nothing,
+      excludes = Prelude.Nothing,
+      filesTransferred = Prelude.Nothing,
+      includes = Prelude.Nothing,
+      options = Prelude.Nothing,
+      result = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      status = Prelude.Nothing,
+      taskExecutionArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The physical number of bytes transferred over the network after
+-- compression was applied. In most cases, this number is less than
+-- @BytesTransferred@ unless the data isn\'t compressible.
+describeTaskExecutionResponse_bytesCompressed :: Lens.Lens' DescribeTaskExecutionResponse (Prelude.Maybe Prelude.Integer)
+describeTaskExecutionResponse_bytesCompressed = Lens.lens (\DescribeTaskExecutionResponse' {bytesCompressed} -> bytesCompressed) (\s@DescribeTaskExecutionResponse' {} a -> s {bytesCompressed = a} :: DescribeTaskExecutionResponse)
+
+-- | The total number of bytes that are involved in the transfer. For the
+-- number of bytes sent over the network, see @BytesCompressed@.
+describeTaskExecutionResponse_bytesTransferred :: Lens.Lens' DescribeTaskExecutionResponse (Prelude.Maybe Prelude.Integer)
+describeTaskExecutionResponse_bytesTransferred = Lens.lens (\DescribeTaskExecutionResponse' {bytesTransferred} -> bytesTransferred) (\s@DescribeTaskExecutionResponse' {} a -> s {bytesTransferred = a} :: DescribeTaskExecutionResponse)
+
+-- | The number of logical bytes written to the destination Amazon Web
+-- Services storage resource.
+describeTaskExecutionResponse_bytesWritten :: Lens.Lens' DescribeTaskExecutionResponse (Prelude.Maybe Prelude.Integer)
+describeTaskExecutionResponse_bytesWritten = Lens.lens (\DescribeTaskExecutionResponse' {bytesWritten} -> bytesWritten) (\s@DescribeTaskExecutionResponse' {} a -> s {bytesWritten = a} :: DescribeTaskExecutionResponse)
+
+-- | The estimated physical number of bytes that is to be transferred over
+-- the network.
+describeTaskExecutionResponse_estimatedBytesToTransfer :: Lens.Lens' DescribeTaskExecutionResponse (Prelude.Maybe Prelude.Integer)
+describeTaskExecutionResponse_estimatedBytesToTransfer = Lens.lens (\DescribeTaskExecutionResponse' {estimatedBytesToTransfer} -> estimatedBytesToTransfer) (\s@DescribeTaskExecutionResponse' {} a -> s {estimatedBytesToTransfer = a} :: DescribeTaskExecutionResponse)
+
+-- | The expected number of files that is to be transferred over the network.
+-- This value is calculated during the @PREPARING@ phase before the
+-- @TRANSFERRING@ phase of the task execution. This value is the expected
+-- number of files to be transferred. It\'s calculated based on comparing
+-- the content of the source and destination locations and finding the
+-- delta that needs to be transferred.
+describeTaskExecutionResponse_estimatedFilesToTransfer :: Lens.Lens' DescribeTaskExecutionResponse (Prelude.Maybe Prelude.Integer)
+describeTaskExecutionResponse_estimatedFilesToTransfer = Lens.lens (\DescribeTaskExecutionResponse' {estimatedFilesToTransfer} -> estimatedFilesToTransfer) (\s@DescribeTaskExecutionResponse' {} a -> s {estimatedFilesToTransfer = a} :: DescribeTaskExecutionResponse)
+
+-- | A list of filter rules that exclude specific data during your transfer.
+-- For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+describeTaskExecutionResponse_excludes :: Lens.Lens' DescribeTaskExecutionResponse (Prelude.Maybe [FilterRule])
+describeTaskExecutionResponse_excludes = Lens.lens (\DescribeTaskExecutionResponse' {excludes} -> excludes) (\s@DescribeTaskExecutionResponse' {} a -> s {excludes = a} :: DescribeTaskExecutionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The actual number of files that was transferred over the network. This
+-- value is calculated and updated on an ongoing basis during the
+-- @TRANSFERRING@ phase of the task execution. It\'s updated periodically
+-- when each file is read from the source and sent over the network.
+--
+-- If failures occur during a transfer, this value can be less than
+-- @EstimatedFilesToTransfer@. In some cases, this value can also be
+-- greater than @EstimatedFilesToTransfer@. This element is
+-- implementation-specific for some location types, so don\'t use it as an
+-- indicator for a correct file number or to monitor your task execution.
+describeTaskExecutionResponse_filesTransferred :: Lens.Lens' DescribeTaskExecutionResponse (Prelude.Maybe Prelude.Integer)
+describeTaskExecutionResponse_filesTransferred = Lens.lens (\DescribeTaskExecutionResponse' {filesTransferred} -> filesTransferred) (\s@DescribeTaskExecutionResponse' {} a -> s {filesTransferred = a} :: DescribeTaskExecutionResponse)
+
+-- | A list of filter rules that include specific data during your transfer.
+-- For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+describeTaskExecutionResponse_includes :: Lens.Lens' DescribeTaskExecutionResponse (Prelude.Maybe [FilterRule])
+describeTaskExecutionResponse_includes = Lens.lens (\DescribeTaskExecutionResponse' {includes} -> includes) (\s@DescribeTaskExecutionResponse' {} a -> s {includes = a} :: DescribeTaskExecutionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+describeTaskExecutionResponse_options :: Lens.Lens' DescribeTaskExecutionResponse (Prelude.Maybe Options)
+describeTaskExecutionResponse_options = Lens.lens (\DescribeTaskExecutionResponse' {options} -> options) (\s@DescribeTaskExecutionResponse' {} a -> s {options = a} :: DescribeTaskExecutionResponse)
+
+-- | The result of the task execution.
+describeTaskExecutionResponse_result :: Lens.Lens' DescribeTaskExecutionResponse (Prelude.Maybe TaskExecutionResultDetail)
+describeTaskExecutionResponse_result = Lens.lens (\DescribeTaskExecutionResponse' {result} -> result) (\s@DescribeTaskExecutionResponse' {} a -> s {result = a} :: DescribeTaskExecutionResponse)
+
+-- | The time that the task execution was started.
+describeTaskExecutionResponse_startTime :: Lens.Lens' DescribeTaskExecutionResponse (Prelude.Maybe Prelude.UTCTime)
+describeTaskExecutionResponse_startTime = Lens.lens (\DescribeTaskExecutionResponse' {startTime} -> startTime) (\s@DescribeTaskExecutionResponse' {} a -> s {startTime = a} :: DescribeTaskExecutionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the task execution.
+--
+-- For detailed information about task execution statuses, see
+-- Understanding Task Statuses in the /DataSync User Guide./
+describeTaskExecutionResponse_status :: Lens.Lens' DescribeTaskExecutionResponse (Prelude.Maybe TaskExecutionStatus)
+describeTaskExecutionResponse_status = Lens.lens (\DescribeTaskExecutionResponse' {status} -> status) (\s@DescribeTaskExecutionResponse' {} a -> s {status = a} :: DescribeTaskExecutionResponse)
+
+-- | The Amazon Resource Name (ARN) of the task execution that was described.
+-- @TaskExecutionArn@ is hierarchical and includes @TaskArn@ for the task
+-- that was executed.
+--
+-- For example, a @TaskExecution@ value with the ARN
+-- @arn:aws:datasync:us-east-1:111222333444:task\/task-0208075f79cedf4a2\/execution\/exec-08ef1e88ec491019b@
+-- executed the task with the ARN
+-- @arn:aws:datasync:us-east-1:111222333444:task\/task-0208075f79cedf4a2@.
+describeTaskExecutionResponse_taskExecutionArn :: Lens.Lens' DescribeTaskExecutionResponse (Prelude.Maybe Prelude.Text)
+describeTaskExecutionResponse_taskExecutionArn = Lens.lens (\DescribeTaskExecutionResponse' {taskExecutionArn} -> taskExecutionArn) (\s@DescribeTaskExecutionResponse' {} a -> s {taskExecutionArn = a} :: DescribeTaskExecutionResponse)
+
+-- | The response's http status code.
+describeTaskExecutionResponse_httpStatus :: Lens.Lens' DescribeTaskExecutionResponse Prelude.Int
+describeTaskExecutionResponse_httpStatus = Lens.lens (\DescribeTaskExecutionResponse' {httpStatus} -> httpStatus) (\s@DescribeTaskExecutionResponse' {} a -> s {httpStatus = a} :: DescribeTaskExecutionResponse)
+
+instance Prelude.NFData DescribeTaskExecutionResponse where
+  rnf DescribeTaskExecutionResponse' {..} =
+    Prelude.rnf bytesCompressed
+      `Prelude.seq` Prelude.rnf bytesTransferred
+      `Prelude.seq` Prelude.rnf bytesWritten
+      `Prelude.seq` Prelude.rnf estimatedBytesToTransfer
+      `Prelude.seq` Prelude.rnf estimatedFilesToTransfer
+      `Prelude.seq` Prelude.rnf excludes
+      `Prelude.seq` Prelude.rnf filesTransferred
+      `Prelude.seq` Prelude.rnf includes
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf result
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf taskExecutionArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/Lens.hs b/gen/Amazonka/DataSync/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Lens.hs
@@ -0,0 +1,622 @@
+{-# 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.DataSync.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.DataSync.Lens
+  ( -- * Operations
+
+    -- ** CancelTaskExecution
+    cancelTaskExecution_taskExecutionArn,
+    cancelTaskExecutionResponse_httpStatus,
+
+    -- ** CreateAgent
+    createAgent_agentName,
+    createAgent_securityGroupArns,
+    createAgent_subnetArns,
+    createAgent_tags,
+    createAgent_vpcEndpointId,
+    createAgent_activationKey,
+    createAgentResponse_agentArn,
+    createAgentResponse_httpStatus,
+
+    -- ** CreateLocationEfs
+    createLocationEfs_accessPointArn,
+    createLocationEfs_fileSystemAccessRoleArn,
+    createLocationEfs_inTransitEncryption,
+    createLocationEfs_subdirectory,
+    createLocationEfs_tags,
+    createLocationEfs_efsFilesystemArn,
+    createLocationEfs_ec2Config,
+    createLocationEfsResponse_locationArn,
+    createLocationEfsResponse_httpStatus,
+
+    -- ** CreateLocationFsxLustre
+    createLocationFsxLustre_subdirectory,
+    createLocationFsxLustre_tags,
+    createLocationFsxLustre_fsxFilesystemArn,
+    createLocationFsxLustre_securityGroupArns,
+    createLocationFsxLustreResponse_locationArn,
+    createLocationFsxLustreResponse_httpStatus,
+
+    -- ** CreateLocationFsxOntap
+    createLocationFsxOntap_subdirectory,
+    createLocationFsxOntap_tags,
+    createLocationFsxOntap_protocol,
+    createLocationFsxOntap_securityGroupArns,
+    createLocationFsxOntap_storageVirtualMachineArn,
+    createLocationFsxOntapResponse_locationArn,
+    createLocationFsxOntapResponse_httpStatus,
+
+    -- ** CreateLocationFsxOpenZfs
+    createLocationFsxOpenZfs_subdirectory,
+    createLocationFsxOpenZfs_tags,
+    createLocationFsxOpenZfs_fsxFilesystemArn,
+    createLocationFsxOpenZfs_protocol,
+    createLocationFsxOpenZfs_securityGroupArns,
+    createLocationFsxOpenZfsResponse_locationArn,
+    createLocationFsxOpenZfsResponse_httpStatus,
+
+    -- ** CreateLocationFsxWindows
+    createLocationFsxWindows_domain,
+    createLocationFsxWindows_subdirectory,
+    createLocationFsxWindows_tags,
+    createLocationFsxWindows_fsxFilesystemArn,
+    createLocationFsxWindows_securityGroupArns,
+    createLocationFsxWindows_user,
+    createLocationFsxWindows_password,
+    createLocationFsxWindowsResponse_locationArn,
+    createLocationFsxWindowsResponse_httpStatus,
+
+    -- ** CreateLocationHdfs
+    createLocationHdfs_blockSize,
+    createLocationHdfs_kerberosKeytab,
+    createLocationHdfs_kerberosKrb5Conf,
+    createLocationHdfs_kerberosPrincipal,
+    createLocationHdfs_kmsKeyProviderUri,
+    createLocationHdfs_qopConfiguration,
+    createLocationHdfs_replicationFactor,
+    createLocationHdfs_simpleUser,
+    createLocationHdfs_subdirectory,
+    createLocationHdfs_tags,
+    createLocationHdfs_nameNodes,
+    createLocationHdfs_authenticationType,
+    createLocationHdfs_agentArns,
+    createLocationHdfsResponse_locationArn,
+    createLocationHdfsResponse_httpStatus,
+
+    -- ** CreateLocationNfs
+    createLocationNfs_mountOptions,
+    createLocationNfs_tags,
+    createLocationNfs_subdirectory,
+    createLocationNfs_serverHostname,
+    createLocationNfs_onPremConfig,
+    createLocationNfsResponse_locationArn,
+    createLocationNfsResponse_httpStatus,
+
+    -- ** CreateLocationObjectStorage
+    createLocationObjectStorage_accessKey,
+    createLocationObjectStorage_secretKey,
+    createLocationObjectStorage_serverCertificate,
+    createLocationObjectStorage_serverPort,
+    createLocationObjectStorage_serverProtocol,
+    createLocationObjectStorage_subdirectory,
+    createLocationObjectStorage_tags,
+    createLocationObjectStorage_serverHostname,
+    createLocationObjectStorage_bucketName,
+    createLocationObjectStorage_agentArns,
+    createLocationObjectStorageResponse_locationArn,
+    createLocationObjectStorageResponse_httpStatus,
+
+    -- ** CreateLocationS3
+    createLocationS3_agentArns,
+    createLocationS3_s3StorageClass,
+    createLocationS3_subdirectory,
+    createLocationS3_tags,
+    createLocationS3_s3BucketArn,
+    createLocationS3_s3Config,
+    createLocationS3Response_locationArn,
+    createLocationS3Response_httpStatus,
+
+    -- ** CreateLocationSmb
+    createLocationSmb_domain,
+    createLocationSmb_mountOptions,
+    createLocationSmb_tags,
+    createLocationSmb_subdirectory,
+    createLocationSmb_serverHostname,
+    createLocationSmb_user,
+    createLocationSmb_password,
+    createLocationSmb_agentArns,
+    createLocationSmbResponse_locationArn,
+    createLocationSmbResponse_httpStatus,
+
+    -- ** CreateTask
+    createTask_cloudWatchLogGroupArn,
+    createTask_excludes,
+    createTask_includes,
+    createTask_name,
+    createTask_options,
+    createTask_schedule,
+    createTask_tags,
+    createTask_sourceLocationArn,
+    createTask_destinationLocationArn,
+    createTaskResponse_taskArn,
+    createTaskResponse_httpStatus,
+
+    -- ** DeleteAgent
+    deleteAgent_agentArn,
+    deleteAgentResponse_httpStatus,
+
+    -- ** DeleteLocation
+    deleteLocation_locationArn,
+    deleteLocationResponse_httpStatus,
+
+    -- ** DeleteTask
+    deleteTask_taskArn,
+    deleteTaskResponse_httpStatus,
+
+    -- ** DescribeAgent
+    describeAgent_agentArn,
+    describeAgentResponse_agentArn,
+    describeAgentResponse_creationTime,
+    describeAgentResponse_endpointType,
+    describeAgentResponse_lastConnectionTime,
+    describeAgentResponse_name,
+    describeAgentResponse_privateLinkConfig,
+    describeAgentResponse_status,
+    describeAgentResponse_httpStatus,
+
+    -- ** DescribeLocationEfs
+    describeLocationEfs_locationArn,
+    describeLocationEfsResponse_accessPointArn,
+    describeLocationEfsResponse_creationTime,
+    describeLocationEfsResponse_ec2Config,
+    describeLocationEfsResponse_fileSystemAccessRoleArn,
+    describeLocationEfsResponse_inTransitEncryption,
+    describeLocationEfsResponse_locationArn,
+    describeLocationEfsResponse_locationUri,
+    describeLocationEfsResponse_httpStatus,
+
+    -- ** DescribeLocationFsxLustre
+    describeLocationFsxLustre_locationArn,
+    describeLocationFsxLustreResponse_creationTime,
+    describeLocationFsxLustreResponse_locationArn,
+    describeLocationFsxLustreResponse_locationUri,
+    describeLocationFsxLustreResponse_securityGroupArns,
+    describeLocationFsxLustreResponse_httpStatus,
+
+    -- ** DescribeLocationFsxOntap
+    describeLocationFsxOntap_locationArn,
+    describeLocationFsxOntapResponse_creationTime,
+    describeLocationFsxOntapResponse_fsxFilesystemArn,
+    describeLocationFsxOntapResponse_locationArn,
+    describeLocationFsxOntapResponse_locationUri,
+    describeLocationFsxOntapResponse_protocol,
+    describeLocationFsxOntapResponse_securityGroupArns,
+    describeLocationFsxOntapResponse_storageVirtualMachineArn,
+    describeLocationFsxOntapResponse_httpStatus,
+
+    -- ** DescribeLocationFsxOpenZfs
+    describeLocationFsxOpenZfs_locationArn,
+    describeLocationFsxOpenZfsResponse_creationTime,
+    describeLocationFsxOpenZfsResponse_locationArn,
+    describeLocationFsxOpenZfsResponse_locationUri,
+    describeLocationFsxOpenZfsResponse_protocol,
+    describeLocationFsxOpenZfsResponse_securityGroupArns,
+    describeLocationFsxOpenZfsResponse_httpStatus,
+
+    -- ** DescribeLocationFsxWindows
+    describeLocationFsxWindows_locationArn,
+    describeLocationFsxWindowsResponse_creationTime,
+    describeLocationFsxWindowsResponse_domain,
+    describeLocationFsxWindowsResponse_locationArn,
+    describeLocationFsxWindowsResponse_locationUri,
+    describeLocationFsxWindowsResponse_securityGroupArns,
+    describeLocationFsxWindowsResponse_user,
+    describeLocationFsxWindowsResponse_httpStatus,
+
+    -- ** DescribeLocationHdfs
+    describeLocationHdfs_locationArn,
+    describeLocationHdfsResponse_agentArns,
+    describeLocationHdfsResponse_authenticationType,
+    describeLocationHdfsResponse_blockSize,
+    describeLocationHdfsResponse_creationTime,
+    describeLocationHdfsResponse_kerberosPrincipal,
+    describeLocationHdfsResponse_kmsKeyProviderUri,
+    describeLocationHdfsResponse_locationArn,
+    describeLocationHdfsResponse_locationUri,
+    describeLocationHdfsResponse_nameNodes,
+    describeLocationHdfsResponse_qopConfiguration,
+    describeLocationHdfsResponse_replicationFactor,
+    describeLocationHdfsResponse_simpleUser,
+    describeLocationHdfsResponse_httpStatus,
+
+    -- ** DescribeLocationNfs
+    describeLocationNfs_locationArn,
+    describeLocationNfsResponse_creationTime,
+    describeLocationNfsResponse_locationArn,
+    describeLocationNfsResponse_locationUri,
+    describeLocationNfsResponse_mountOptions,
+    describeLocationNfsResponse_onPremConfig,
+    describeLocationNfsResponse_httpStatus,
+
+    -- ** DescribeLocationObjectStorage
+    describeLocationObjectStorage_locationArn,
+    describeLocationObjectStorageResponse_accessKey,
+    describeLocationObjectStorageResponse_agentArns,
+    describeLocationObjectStorageResponse_creationTime,
+    describeLocationObjectStorageResponse_locationArn,
+    describeLocationObjectStorageResponse_locationUri,
+    describeLocationObjectStorageResponse_serverCertificate,
+    describeLocationObjectStorageResponse_serverPort,
+    describeLocationObjectStorageResponse_serverProtocol,
+    describeLocationObjectStorageResponse_httpStatus,
+
+    -- ** DescribeLocationS3
+    describeLocationS3_locationArn,
+    describeLocationS3Response_agentArns,
+    describeLocationS3Response_creationTime,
+    describeLocationS3Response_locationArn,
+    describeLocationS3Response_locationUri,
+    describeLocationS3Response_s3Config,
+    describeLocationS3Response_s3StorageClass,
+    describeLocationS3Response_httpStatus,
+
+    -- ** DescribeLocationSmb
+    describeLocationSmb_locationArn,
+    describeLocationSmbResponse_agentArns,
+    describeLocationSmbResponse_creationTime,
+    describeLocationSmbResponse_domain,
+    describeLocationSmbResponse_locationArn,
+    describeLocationSmbResponse_locationUri,
+    describeLocationSmbResponse_mountOptions,
+    describeLocationSmbResponse_user,
+    describeLocationSmbResponse_httpStatus,
+
+    -- ** DescribeTask
+    describeTask_taskArn,
+    describeTaskResponse_cloudWatchLogGroupArn,
+    describeTaskResponse_creationTime,
+    describeTaskResponse_currentTaskExecutionArn,
+    describeTaskResponse_destinationLocationArn,
+    describeTaskResponse_destinationNetworkInterfaceArns,
+    describeTaskResponse_errorCode,
+    describeTaskResponse_errorDetail,
+    describeTaskResponse_excludes,
+    describeTaskResponse_includes,
+    describeTaskResponse_name,
+    describeTaskResponse_options,
+    describeTaskResponse_schedule,
+    describeTaskResponse_sourceLocationArn,
+    describeTaskResponse_sourceNetworkInterfaceArns,
+    describeTaskResponse_status,
+    describeTaskResponse_taskArn,
+    describeTaskResponse_httpStatus,
+
+    -- ** DescribeTaskExecution
+    describeTaskExecution_taskExecutionArn,
+    describeTaskExecutionResponse_bytesCompressed,
+    describeTaskExecutionResponse_bytesTransferred,
+    describeTaskExecutionResponse_bytesWritten,
+    describeTaskExecutionResponse_estimatedBytesToTransfer,
+    describeTaskExecutionResponse_estimatedFilesToTransfer,
+    describeTaskExecutionResponse_excludes,
+    describeTaskExecutionResponse_filesTransferred,
+    describeTaskExecutionResponse_includes,
+    describeTaskExecutionResponse_options,
+    describeTaskExecutionResponse_result,
+    describeTaskExecutionResponse_startTime,
+    describeTaskExecutionResponse_status,
+    describeTaskExecutionResponse_taskExecutionArn,
+    describeTaskExecutionResponse_httpStatus,
+
+    -- ** ListAgents
+    listAgents_maxResults,
+    listAgents_nextToken,
+    listAgentsResponse_agents,
+    listAgentsResponse_nextToken,
+    listAgentsResponse_httpStatus,
+
+    -- ** ListLocations
+    listLocations_filters,
+    listLocations_maxResults,
+    listLocations_nextToken,
+    listLocationsResponse_locations,
+    listLocationsResponse_nextToken,
+    listLocationsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_maxResults,
+    listTagsForResource_nextToken,
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_nextToken,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListTaskExecutions
+    listTaskExecutions_maxResults,
+    listTaskExecutions_nextToken,
+    listTaskExecutions_taskArn,
+    listTaskExecutionsResponse_nextToken,
+    listTaskExecutionsResponse_taskExecutions,
+    listTaskExecutionsResponse_httpStatus,
+
+    -- ** ListTasks
+    listTasks_filters,
+    listTasks_maxResults,
+    listTasks_nextToken,
+    listTasksResponse_nextToken,
+    listTasksResponse_tasks,
+    listTasksResponse_httpStatus,
+
+    -- ** StartTaskExecution
+    startTaskExecution_excludes,
+    startTaskExecution_includes,
+    startTaskExecution_overrideOptions,
+    startTaskExecution_tags,
+    startTaskExecution_taskArn,
+    startTaskExecutionResponse_taskExecutionArn,
+    startTaskExecutionResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_keys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateAgent
+    updateAgent_name,
+    updateAgent_agentArn,
+    updateAgentResponse_httpStatus,
+
+    -- ** UpdateLocationHdfs
+    updateLocationHdfs_agentArns,
+    updateLocationHdfs_authenticationType,
+    updateLocationHdfs_blockSize,
+    updateLocationHdfs_kerberosKeytab,
+    updateLocationHdfs_kerberosKrb5Conf,
+    updateLocationHdfs_kerberosPrincipal,
+    updateLocationHdfs_kmsKeyProviderUri,
+    updateLocationHdfs_nameNodes,
+    updateLocationHdfs_qopConfiguration,
+    updateLocationHdfs_replicationFactor,
+    updateLocationHdfs_simpleUser,
+    updateLocationHdfs_subdirectory,
+    updateLocationHdfs_locationArn,
+    updateLocationHdfsResponse_httpStatus,
+
+    -- ** UpdateLocationNfs
+    updateLocationNfs_mountOptions,
+    updateLocationNfs_onPremConfig,
+    updateLocationNfs_subdirectory,
+    updateLocationNfs_locationArn,
+    updateLocationNfsResponse_httpStatus,
+
+    -- ** UpdateLocationObjectStorage
+    updateLocationObjectStorage_accessKey,
+    updateLocationObjectStorage_agentArns,
+    updateLocationObjectStorage_secretKey,
+    updateLocationObjectStorage_serverCertificate,
+    updateLocationObjectStorage_serverPort,
+    updateLocationObjectStorage_serverProtocol,
+    updateLocationObjectStorage_subdirectory,
+    updateLocationObjectStorage_locationArn,
+    updateLocationObjectStorageResponse_httpStatus,
+
+    -- ** UpdateLocationSmb
+    updateLocationSmb_agentArns,
+    updateLocationSmb_domain,
+    updateLocationSmb_mountOptions,
+    updateLocationSmb_password,
+    updateLocationSmb_subdirectory,
+    updateLocationSmb_user,
+    updateLocationSmb_locationArn,
+    updateLocationSmbResponse_httpStatus,
+
+    -- ** UpdateTask
+    updateTask_cloudWatchLogGroupArn,
+    updateTask_excludes,
+    updateTask_includes,
+    updateTask_name,
+    updateTask_options,
+    updateTask_schedule,
+    updateTask_taskArn,
+    updateTaskResponse_httpStatus,
+
+    -- ** UpdateTaskExecution
+    updateTaskExecution_taskExecutionArn,
+    updateTaskExecution_options,
+    updateTaskExecutionResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AgentListEntry
+    agentListEntry_agentArn,
+    agentListEntry_name,
+    agentListEntry_status,
+
+    -- ** Ec2Config
+    ec2Config_subnetArn,
+    ec2Config_securityGroupArns,
+
+    -- ** FilterRule
+    filterRule_filterType,
+    filterRule_value,
+
+    -- ** FsxProtocol
+    fsxProtocol_nfs,
+    fsxProtocol_smb,
+
+    -- ** FsxProtocolNfs
+    fsxProtocolNfs_mountOptions,
+
+    -- ** FsxProtocolSmb
+    fsxProtocolSmb_domain,
+    fsxProtocolSmb_mountOptions,
+    fsxProtocolSmb_password,
+    fsxProtocolSmb_user,
+
+    -- ** HdfsNameNode
+    hdfsNameNode_hostname,
+    hdfsNameNode_port,
+
+    -- ** LocationFilter
+    locationFilter_name,
+    locationFilter_values,
+    locationFilter_operator,
+
+    -- ** LocationListEntry
+    locationListEntry_locationArn,
+    locationListEntry_locationUri,
+
+    -- ** NfsMountOptions
+    nfsMountOptions_version,
+
+    -- ** OnPremConfig
+    onPremConfig_agentArns,
+
+    -- ** Options
+    options_atime,
+    options_bytesPerSecond,
+    options_gid,
+    options_logLevel,
+    options_mtime,
+    options_objectTags,
+    options_overwriteMode,
+    options_posixPermissions,
+    options_preserveDeletedFiles,
+    options_preserveDevices,
+    options_securityDescriptorCopyFlags,
+    options_taskQueueing,
+    options_transferMode,
+    options_uid,
+    options_verifyMode,
+
+    -- ** PrivateLinkConfig
+    privateLinkConfig_privateLinkEndpoint,
+    privateLinkConfig_securityGroupArns,
+    privateLinkConfig_subnetArns,
+    privateLinkConfig_vpcEndpointId,
+
+    -- ** QopConfiguration
+    qopConfiguration_dataTransferProtection,
+    qopConfiguration_rpcProtection,
+
+    -- ** S3Config
+    s3Config_bucketAccessRoleArn,
+
+    -- ** SmbMountOptions
+    smbMountOptions_version,
+
+    -- ** TagListEntry
+    tagListEntry_value,
+    tagListEntry_key,
+
+    -- ** TaskExecutionListEntry
+    taskExecutionListEntry_status,
+    taskExecutionListEntry_taskExecutionArn,
+
+    -- ** TaskExecutionResultDetail
+    taskExecutionResultDetail_errorCode,
+    taskExecutionResultDetail_errorDetail,
+    taskExecutionResultDetail_prepareDuration,
+    taskExecutionResultDetail_prepareStatus,
+    taskExecutionResultDetail_totalDuration,
+    taskExecutionResultDetail_transferDuration,
+    taskExecutionResultDetail_transferStatus,
+    taskExecutionResultDetail_verifyDuration,
+    taskExecutionResultDetail_verifyStatus,
+
+    -- ** TaskFilter
+    taskFilter_name,
+    taskFilter_values,
+    taskFilter_operator,
+
+    -- ** TaskListEntry
+    taskListEntry_name,
+    taskListEntry_status,
+    taskListEntry_taskArn,
+
+    -- ** TaskSchedule
+    taskSchedule_scheduleExpression,
+  )
+where
+
+import Amazonka.DataSync.CancelTaskExecution
+import Amazonka.DataSync.CreateAgent
+import Amazonka.DataSync.CreateLocationEfs
+import Amazonka.DataSync.CreateLocationFsxLustre
+import Amazonka.DataSync.CreateLocationFsxOntap
+import Amazonka.DataSync.CreateLocationFsxOpenZfs
+import Amazonka.DataSync.CreateLocationFsxWindows
+import Amazonka.DataSync.CreateLocationHdfs
+import Amazonka.DataSync.CreateLocationNfs
+import Amazonka.DataSync.CreateLocationObjectStorage
+import Amazonka.DataSync.CreateLocationS3
+import Amazonka.DataSync.CreateLocationSmb
+import Amazonka.DataSync.CreateTask
+import Amazonka.DataSync.DeleteAgent
+import Amazonka.DataSync.DeleteLocation
+import Amazonka.DataSync.DeleteTask
+import Amazonka.DataSync.DescribeAgent
+import Amazonka.DataSync.DescribeLocationEfs
+import Amazonka.DataSync.DescribeLocationFsxLustre
+import Amazonka.DataSync.DescribeLocationFsxOntap
+import Amazonka.DataSync.DescribeLocationFsxOpenZfs
+import Amazonka.DataSync.DescribeLocationFsxWindows
+import Amazonka.DataSync.DescribeLocationHdfs
+import Amazonka.DataSync.DescribeLocationNfs
+import Amazonka.DataSync.DescribeLocationObjectStorage
+import Amazonka.DataSync.DescribeLocationS3
+import Amazonka.DataSync.DescribeLocationSmb
+import Amazonka.DataSync.DescribeTask
+import Amazonka.DataSync.DescribeTaskExecution
+import Amazonka.DataSync.ListAgents
+import Amazonka.DataSync.ListLocations
+import Amazonka.DataSync.ListTagsForResource
+import Amazonka.DataSync.ListTaskExecutions
+import Amazonka.DataSync.ListTasks
+import Amazonka.DataSync.StartTaskExecution
+import Amazonka.DataSync.TagResource
+import Amazonka.DataSync.Types.AgentListEntry
+import Amazonka.DataSync.Types.Ec2Config
+import Amazonka.DataSync.Types.FilterRule
+import Amazonka.DataSync.Types.FsxProtocol
+import Amazonka.DataSync.Types.FsxProtocolNfs
+import Amazonka.DataSync.Types.FsxProtocolSmb
+import Amazonka.DataSync.Types.HdfsNameNode
+import Amazonka.DataSync.Types.LocationFilter
+import Amazonka.DataSync.Types.LocationListEntry
+import Amazonka.DataSync.Types.NfsMountOptions
+import Amazonka.DataSync.Types.OnPremConfig
+import Amazonka.DataSync.Types.Options
+import Amazonka.DataSync.Types.PrivateLinkConfig
+import Amazonka.DataSync.Types.QopConfiguration
+import Amazonka.DataSync.Types.S3Config
+import Amazonka.DataSync.Types.SmbMountOptions
+import Amazonka.DataSync.Types.TagListEntry
+import Amazonka.DataSync.Types.TaskExecutionListEntry
+import Amazonka.DataSync.Types.TaskExecutionResultDetail
+import Amazonka.DataSync.Types.TaskFilter
+import Amazonka.DataSync.Types.TaskListEntry
+import Amazonka.DataSync.Types.TaskSchedule
+import Amazonka.DataSync.UntagResource
+import Amazonka.DataSync.UpdateAgent
+import Amazonka.DataSync.UpdateLocationHdfs
+import Amazonka.DataSync.UpdateLocationNfs
+import Amazonka.DataSync.UpdateLocationObjectStorage
+import Amazonka.DataSync.UpdateLocationSmb
+import Amazonka.DataSync.UpdateTask
+import Amazonka.DataSync.UpdateTaskExecution
diff --git a/gen/Amazonka/DataSync/ListAgents.hs b/gen/Amazonka/DataSync/ListAgents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/ListAgents.hs
@@ -0,0 +1,236 @@
+{-# 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.DataSync.ListAgents
+-- 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 agents owned by an Amazon Web Services account in the
+-- Amazon Web Services Region specified in the request. The returned list
+-- is ordered by agent Amazon Resource Name (ARN).
+--
+-- By default, this operation returns a maximum of 100 agents. This
+-- operation supports pagination that enables you to optionally reduce the
+-- number of agents returned in a response.
+--
+-- If you have more agents than are returned in a response (that is, the
+-- response returns only a truncated list of your agents), the response
+-- contains a marker that you can specify in your next request to fetch the
+-- next page of agents.
+--
+-- This operation returns paginated results.
+module Amazonka.DataSync.ListAgents
+  ( -- * Creating a Request
+    ListAgents (..),
+    newListAgents,
+
+    -- * Request Lenses
+    listAgents_maxResults,
+    listAgents_nextToken,
+
+    -- * Destructuring the Response
+    ListAgentsResponse (..),
+    newListAgentsResponse,
+
+    -- * Response Lenses
+    listAgentsResponse_agents,
+    listAgentsResponse_nextToken,
+    listAgentsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | ListAgentsRequest
+--
+-- /See:/ 'newListAgents' smart constructor.
+data ListAgents = ListAgents'
+  { -- | The maximum number of agents to list.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | An opaque string that indicates the position at which to begin the next
+    -- list of agents.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAgents' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAgents_maxResults' - The maximum number of agents to list.
+--
+-- 'nextToken', 'listAgents_nextToken' - An opaque string that indicates the position at which to begin the next
+-- list of agents.
+newListAgents ::
+  ListAgents
+newListAgents =
+  ListAgents'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of agents to list.
+listAgents_maxResults :: Lens.Lens' ListAgents (Prelude.Maybe Prelude.Natural)
+listAgents_maxResults = Lens.lens (\ListAgents' {maxResults} -> maxResults) (\s@ListAgents' {} a -> s {maxResults = a} :: ListAgents)
+
+-- | An opaque string that indicates the position at which to begin the next
+-- list of agents.
+listAgents_nextToken :: Lens.Lens' ListAgents (Prelude.Maybe Prelude.Text)
+listAgents_nextToken = Lens.lens (\ListAgents' {nextToken} -> nextToken) (\s@ListAgents' {} a -> s {nextToken = a} :: ListAgents)
+
+instance Core.AWSPager ListAgents where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAgentsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAgentsResponse_agents
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAgents_nextToken
+          Lens..~ rs
+          Lens.^? listAgentsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListAgents where
+  type AWSResponse ListAgents = ListAgentsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAgentsResponse'
+            Prelude.<$> (x Data..?> "Agents" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAgents where
+  hashWithSalt _salt ListAgents' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListAgents where
+  rnf ListAgents' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListAgents where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("FmrsService.ListAgents" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAgents where
+  toJSON ListAgents' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListAgents where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListAgents where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | ListAgentsResponse
+--
+-- /See:/ 'newListAgentsResponse' smart constructor.
+data ListAgentsResponse = ListAgentsResponse'
+  { -- | A list of agents in your account.
+    agents :: Prelude.Maybe [AgentListEntry],
+    -- | An opaque string that indicates the position at which to begin returning
+    -- the next list of agents.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAgentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'agents', 'listAgentsResponse_agents' - A list of agents in your account.
+--
+-- 'nextToken', 'listAgentsResponse_nextToken' - An opaque string that indicates the position at which to begin returning
+-- the next list of agents.
+--
+-- 'httpStatus', 'listAgentsResponse_httpStatus' - The response's http status code.
+newListAgentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAgentsResponse
+newListAgentsResponse pHttpStatus_ =
+  ListAgentsResponse'
+    { agents = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of agents in your account.
+listAgentsResponse_agents :: Lens.Lens' ListAgentsResponse (Prelude.Maybe [AgentListEntry])
+listAgentsResponse_agents = Lens.lens (\ListAgentsResponse' {agents} -> agents) (\s@ListAgentsResponse' {} a -> s {agents = a} :: ListAgentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | An opaque string that indicates the position at which to begin returning
+-- the next list of agents.
+listAgentsResponse_nextToken :: Lens.Lens' ListAgentsResponse (Prelude.Maybe Prelude.Text)
+listAgentsResponse_nextToken = Lens.lens (\ListAgentsResponse' {nextToken} -> nextToken) (\s@ListAgentsResponse' {} a -> s {nextToken = a} :: ListAgentsResponse)
+
+-- | The response's http status code.
+listAgentsResponse_httpStatus :: Lens.Lens' ListAgentsResponse Prelude.Int
+listAgentsResponse_httpStatus = Lens.lens (\ListAgentsResponse' {httpStatus} -> httpStatus) (\s@ListAgentsResponse' {} a -> s {httpStatus = a} :: ListAgentsResponse)
+
+instance Prelude.NFData ListAgentsResponse where
+  rnf ListAgentsResponse' {..} =
+    Prelude.rnf agents
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/ListLocations.hs b/gen/Amazonka/DataSync/ListLocations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/ListLocations.hs
@@ -0,0 +1,254 @@
+{-# 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.DataSync.ListLocations
+-- 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 source and destination locations.
+--
+-- If you have more locations than are returned in a response (that is, the
+-- response returns only a truncated list of your agents), the response
+-- contains a token that you can specify in your next request to fetch the
+-- next page of locations.
+--
+-- This operation returns paginated results.
+module Amazonka.DataSync.ListLocations
+  ( -- * Creating a Request
+    ListLocations (..),
+    newListLocations,
+
+    -- * Request Lenses
+    listLocations_filters,
+    listLocations_maxResults,
+    listLocations_nextToken,
+
+    -- * Destructuring the Response
+    ListLocationsResponse (..),
+    newListLocationsResponse,
+
+    -- * Response Lenses
+    listLocationsResponse_locations,
+    listLocationsResponse_nextToken,
+    listLocationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | ListLocationsRequest
+--
+-- /See:/ 'newListLocations' smart constructor.
+data ListLocations = ListLocations'
+  { -- | You can use API filters to narrow down the list of resources returned by
+    -- @ListLocations@. For example, to retrieve all tasks on a specific source
+    -- location, you can use @ListLocations@ with filter name @LocationType S3@
+    -- and @Operator Equals@.
+    filters :: Prelude.Maybe [LocationFilter],
+    -- | The maximum number of locations to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | An opaque string that indicates the position at which to begin the next
+    -- list of locations.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListLocations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listLocations_filters' - You can use API filters to narrow down the list of resources returned by
+-- @ListLocations@. For example, to retrieve all tasks on a specific source
+-- location, you can use @ListLocations@ with filter name @LocationType S3@
+-- and @Operator Equals@.
+--
+-- 'maxResults', 'listLocations_maxResults' - The maximum number of locations to return.
+--
+-- 'nextToken', 'listLocations_nextToken' - An opaque string that indicates the position at which to begin the next
+-- list of locations.
+newListLocations ::
+  ListLocations
+newListLocations =
+  ListLocations'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | You can use API filters to narrow down the list of resources returned by
+-- @ListLocations@. For example, to retrieve all tasks on a specific source
+-- location, you can use @ListLocations@ with filter name @LocationType S3@
+-- and @Operator Equals@.
+listLocations_filters :: Lens.Lens' ListLocations (Prelude.Maybe [LocationFilter])
+listLocations_filters = Lens.lens (\ListLocations' {filters} -> filters) (\s@ListLocations' {} a -> s {filters = a} :: ListLocations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of locations to return.
+listLocations_maxResults :: Lens.Lens' ListLocations (Prelude.Maybe Prelude.Natural)
+listLocations_maxResults = Lens.lens (\ListLocations' {maxResults} -> maxResults) (\s@ListLocations' {} a -> s {maxResults = a} :: ListLocations)
+
+-- | An opaque string that indicates the position at which to begin the next
+-- list of locations.
+listLocations_nextToken :: Lens.Lens' ListLocations (Prelude.Maybe Prelude.Text)
+listLocations_nextToken = Lens.lens (\ListLocations' {nextToken} -> nextToken) (\s@ListLocations' {} a -> s {nextToken = a} :: ListLocations)
+
+instance Core.AWSPager ListLocations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listLocationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listLocationsResponse_locations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listLocations_nextToken
+          Lens..~ rs
+          Lens.^? listLocationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListLocations where
+  type
+    AWSResponse ListLocations =
+      ListLocationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListLocationsResponse'
+            Prelude.<$> (x Data..?> "Locations" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListLocations where
+  hashWithSalt _salt ListLocations' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListLocations where
+  rnf ListLocations' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListLocations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("FmrsService.ListLocations" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListLocations where
+  toJSON ListLocations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListLocations where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListLocations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | ListLocationsResponse
+--
+-- /See:/ 'newListLocationsResponse' smart constructor.
+data ListLocationsResponse = ListLocationsResponse'
+  { -- | An array that contains a list of locations.
+    locations :: Prelude.Maybe [LocationListEntry],
+    -- | An opaque string that indicates the position at which to begin returning
+    -- the next list of locations.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListLocationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locations', 'listLocationsResponse_locations' - An array that contains a list of locations.
+--
+-- 'nextToken', 'listLocationsResponse_nextToken' - An opaque string that indicates the position at which to begin returning
+-- the next list of locations.
+--
+-- 'httpStatus', 'listLocationsResponse_httpStatus' - The response's http status code.
+newListLocationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListLocationsResponse
+newListLocationsResponse pHttpStatus_ =
+  ListLocationsResponse'
+    { locations = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array that contains a list of locations.
+listLocationsResponse_locations :: Lens.Lens' ListLocationsResponse (Prelude.Maybe [LocationListEntry])
+listLocationsResponse_locations = Lens.lens (\ListLocationsResponse' {locations} -> locations) (\s@ListLocationsResponse' {} a -> s {locations = a} :: ListLocationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | An opaque string that indicates the position at which to begin returning
+-- the next list of locations.
+listLocationsResponse_nextToken :: Lens.Lens' ListLocationsResponse (Prelude.Maybe Prelude.Text)
+listLocationsResponse_nextToken = Lens.lens (\ListLocationsResponse' {nextToken} -> nextToken) (\s@ListLocationsResponse' {} a -> s {nextToken = a} :: ListLocationsResponse)
+
+-- | The response's http status code.
+listLocationsResponse_httpStatus :: Lens.Lens' ListLocationsResponse Prelude.Int
+listLocationsResponse_httpStatus = Lens.lens (\ListLocationsResponse' {httpStatus} -> httpStatus) (\s@ListLocationsResponse' {} a -> s {httpStatus = a} :: ListLocationsResponse)
+
+instance Prelude.NFData ListLocationsResponse where
+  rnf ListLocationsResponse' {..} =
+    Prelude.rnf locations
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/ListTagsForResource.hs b/gen/Amazonka/DataSync/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/ListTagsForResource.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.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 all the tags associated with an Amazon Web Services resource.
+--
+-- This operation returns paginated results.
+module Amazonka.DataSync.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_maxResults,
+    listTagsForResource_nextToken,
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_nextToken,
+    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.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | ListTagsForResourceRequest
+--
+-- /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | Specifies how many results that you want in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Specifies an opaque string that indicates the position to begin the next
+    -- list of results in the response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the Amazon Resource Name (ARN) of the resource that you want
+    -- tag information on.
+    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:
+--
+-- 'maxResults', 'listTagsForResource_maxResults' - Specifies how many results that you want in the response.
+--
+-- 'nextToken', 'listTagsForResource_nextToken' - Specifies an opaque string that indicates the position to begin the next
+-- list of results in the response.
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - Specifies the Amazon Resource Name (ARN) of the resource that you want
+-- tag information on.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      resourceArn = pResourceArn_
+    }
+
+-- | Specifies how many results that you want in the response.
+listTagsForResource_maxResults :: Lens.Lens' ListTagsForResource (Prelude.Maybe Prelude.Natural)
+listTagsForResource_maxResults = Lens.lens (\ListTagsForResource' {maxResults} -> maxResults) (\s@ListTagsForResource' {} a -> s {maxResults = a} :: ListTagsForResource)
+
+-- | Specifies an opaque string that indicates the position to begin the next
+-- list of results in the response.
+listTagsForResource_nextToken :: Lens.Lens' ListTagsForResource (Prelude.Maybe Prelude.Text)
+listTagsForResource_nextToken = Lens.lens (\ListTagsForResource' {nextToken} -> nextToken) (\s@ListTagsForResource' {} a -> s {nextToken = a} :: ListTagsForResource)
+
+-- | Specifies the Amazon Resource Name (ARN) of the resource that you want
+-- tag information on.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSPager ListTagsForResource where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listTagsForResourceResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listTagsForResourceResponse_tags
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listTagsForResource_nextToken
+          Lens..~ rs
+          Lens.^? listTagsForResourceResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.ListTagsForResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTagsForResource where
+  toJSON ListTagsForResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("ResourceArn" Data..= resourceArn)
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | ListTagsForResourceResponse
+--
+-- /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The opaque string that indicates the position to begin the next list of
+    -- results in the response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of tags applied to the specified resource.
+    tags :: Prelude.Maybe [TagListEntry],
+    -- | 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:
+--
+-- 'nextToken', 'listTagsForResourceResponse_nextToken' - The opaque string that indicates the position to begin the next list of
+-- results in the response.
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - An array of tags applied to the specified resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { nextToken =
+        Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The opaque string that indicates the position to begin the next list of
+-- results in the response.
+listTagsForResourceResponse_nextToken :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe Prelude.Text)
+listTagsForResourceResponse_nextToken = Lens.lens (\ListTagsForResourceResponse' {nextToken} -> nextToken) (\s@ListTagsForResourceResponse' {} a -> s {nextToken = a} :: ListTagsForResourceResponse)
+
+-- | An array of tags applied to the specified resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe [TagListEntry])
+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 nextToken
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/ListTaskExecutions.hs b/gen/Amazonka/DataSync/ListTaskExecutions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/ListTaskExecutions.hs
@@ -0,0 +1,243 @@
+{-# 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.DataSync.ListTaskExecutions
+-- 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 executed tasks.
+--
+-- This operation returns paginated results.
+module Amazonka.DataSync.ListTaskExecutions
+  ( -- * Creating a Request
+    ListTaskExecutions (..),
+    newListTaskExecutions,
+
+    -- * Request Lenses
+    listTaskExecutions_maxResults,
+    listTaskExecutions_nextToken,
+    listTaskExecutions_taskArn,
+
+    -- * Destructuring the Response
+    ListTaskExecutionsResponse (..),
+    newListTaskExecutionsResponse,
+
+    -- * Response Lenses
+    listTaskExecutionsResponse_nextToken,
+    listTaskExecutionsResponse_taskExecutions,
+    listTaskExecutionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | ListTaskExecutions
+--
+-- /See:/ 'newListTaskExecutions' smart constructor.
+data ListTaskExecutions = ListTaskExecutions'
+  { -- | The maximum number of executed tasks to list.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | An opaque string that indicates the position at which to begin the next
+    -- list of the executed tasks.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the task whose tasks you want to list.
+    taskArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTaskExecutions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTaskExecutions_maxResults' - The maximum number of executed tasks to list.
+--
+-- 'nextToken', 'listTaskExecutions_nextToken' - An opaque string that indicates the position at which to begin the next
+-- list of the executed tasks.
+--
+-- 'taskArn', 'listTaskExecutions_taskArn' - The Amazon Resource Name (ARN) of the task whose tasks you want to list.
+newListTaskExecutions ::
+  ListTaskExecutions
+newListTaskExecutions =
+  ListTaskExecutions'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      taskArn = Prelude.Nothing
+    }
+
+-- | The maximum number of executed tasks to list.
+listTaskExecutions_maxResults :: Lens.Lens' ListTaskExecutions (Prelude.Maybe Prelude.Natural)
+listTaskExecutions_maxResults = Lens.lens (\ListTaskExecutions' {maxResults} -> maxResults) (\s@ListTaskExecutions' {} a -> s {maxResults = a} :: ListTaskExecutions)
+
+-- | An opaque string that indicates the position at which to begin the next
+-- list of the executed tasks.
+listTaskExecutions_nextToken :: Lens.Lens' ListTaskExecutions (Prelude.Maybe Prelude.Text)
+listTaskExecutions_nextToken = Lens.lens (\ListTaskExecutions' {nextToken} -> nextToken) (\s@ListTaskExecutions' {} a -> s {nextToken = a} :: ListTaskExecutions)
+
+-- | The Amazon Resource Name (ARN) of the task whose tasks you want to list.
+listTaskExecutions_taskArn :: Lens.Lens' ListTaskExecutions (Prelude.Maybe Prelude.Text)
+listTaskExecutions_taskArn = Lens.lens (\ListTaskExecutions' {taskArn} -> taskArn) (\s@ListTaskExecutions' {} a -> s {taskArn = a} :: ListTaskExecutions)
+
+instance Core.AWSPager ListTaskExecutions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listTaskExecutionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listTaskExecutionsResponse_taskExecutions
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listTaskExecutions_nextToken
+          Lens..~ rs
+          Lens.^? listTaskExecutionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListTaskExecutions where
+  type
+    AWSResponse ListTaskExecutions =
+      ListTaskExecutionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTaskExecutionsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "TaskExecutions" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTaskExecutions where
+  hashWithSalt _salt ListTaskExecutions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` taskArn
+
+instance Prelude.NFData ListTaskExecutions where
+  rnf ListTaskExecutions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf taskArn
+
+instance Data.ToHeaders ListTaskExecutions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.ListTaskExecutions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTaskExecutions where
+  toJSON ListTaskExecutions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("TaskArn" Data..=) Prelude.<$> taskArn
+          ]
+      )
+
+instance Data.ToPath ListTaskExecutions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListTaskExecutions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | ListTaskExecutionsResponse
+--
+-- /See:/ 'newListTaskExecutionsResponse' smart constructor.
+data ListTaskExecutionsResponse = ListTaskExecutionsResponse'
+  { -- | An opaque string that indicates the position at which to begin returning
+    -- the next list of executed tasks.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of executed tasks.
+    taskExecutions :: Prelude.Maybe [TaskExecutionListEntry],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTaskExecutionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listTaskExecutionsResponse_nextToken' - An opaque string that indicates the position at which to begin returning
+-- the next list of executed tasks.
+--
+-- 'taskExecutions', 'listTaskExecutionsResponse_taskExecutions' - A list of executed tasks.
+--
+-- 'httpStatus', 'listTaskExecutionsResponse_httpStatus' - The response's http status code.
+newListTaskExecutionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTaskExecutionsResponse
+newListTaskExecutionsResponse pHttpStatus_ =
+  ListTaskExecutionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      taskExecutions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An opaque string that indicates the position at which to begin returning
+-- the next list of executed tasks.
+listTaskExecutionsResponse_nextToken :: Lens.Lens' ListTaskExecutionsResponse (Prelude.Maybe Prelude.Text)
+listTaskExecutionsResponse_nextToken = Lens.lens (\ListTaskExecutionsResponse' {nextToken} -> nextToken) (\s@ListTaskExecutionsResponse' {} a -> s {nextToken = a} :: ListTaskExecutionsResponse)
+
+-- | A list of executed tasks.
+listTaskExecutionsResponse_taskExecutions :: Lens.Lens' ListTaskExecutionsResponse (Prelude.Maybe [TaskExecutionListEntry])
+listTaskExecutionsResponse_taskExecutions = Lens.lens (\ListTaskExecutionsResponse' {taskExecutions} -> taskExecutions) (\s@ListTaskExecutionsResponse' {} a -> s {taskExecutions = a} :: ListTaskExecutionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTaskExecutionsResponse_httpStatus :: Lens.Lens' ListTaskExecutionsResponse Prelude.Int
+listTaskExecutionsResponse_httpStatus = Lens.lens (\ListTaskExecutionsResponse' {httpStatus} -> httpStatus) (\s@ListTaskExecutionsResponse' {} a -> s {httpStatus = a} :: ListTaskExecutionsResponse)
+
+instance Prelude.NFData ListTaskExecutionsResponse where
+  rnf ListTaskExecutionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf taskExecutions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/ListTasks.hs b/gen/Amazonka/DataSync/ListTasks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/ListTasks.hs
@@ -0,0 +1,247 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.ListTasks
+-- 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 the DataSync tasks you created.
+--
+-- This operation returns paginated results.
+module Amazonka.DataSync.ListTasks
+  ( -- * Creating a Request
+    ListTasks (..),
+    newListTasks,
+
+    -- * Request Lenses
+    listTasks_filters,
+    listTasks_maxResults,
+    listTasks_nextToken,
+
+    -- * Destructuring the Response
+    ListTasksResponse (..),
+    newListTasksResponse,
+
+    -- * Response Lenses
+    listTasksResponse_nextToken,
+    listTasksResponse_tasks,
+    listTasksResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | ListTasksRequest
+--
+-- /See:/ 'newListTasks' smart constructor.
+data ListTasks = ListTasks'
+  { -- | You can use API filters to narrow down the list of resources returned by
+    -- @ListTasks@. For example, to retrieve all tasks on a specific source
+    -- location, you can use @ListTasks@ with filter name @LocationId@ and
+    -- @Operator Equals@ with the ARN for the location.
+    filters :: Prelude.Maybe [TaskFilter],
+    -- | The maximum number of tasks to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | An opaque string that indicates the position at which to begin the next
+    -- list of tasks.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTasks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTasks_filters' - You can use API filters to narrow down the list of resources returned by
+-- @ListTasks@. For example, to retrieve all tasks on a specific source
+-- location, you can use @ListTasks@ with filter name @LocationId@ and
+-- @Operator Equals@ with the ARN for the location.
+--
+-- 'maxResults', 'listTasks_maxResults' - The maximum number of tasks to return.
+--
+-- 'nextToken', 'listTasks_nextToken' - An opaque string that indicates the position at which to begin the next
+-- list of tasks.
+newListTasks ::
+  ListTasks
+newListTasks =
+  ListTasks'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | You can use API filters to narrow down the list of resources returned by
+-- @ListTasks@. For example, to retrieve all tasks on a specific source
+-- location, you can use @ListTasks@ with filter name @LocationId@ and
+-- @Operator Equals@ with the ARN for the location.
+listTasks_filters :: Lens.Lens' ListTasks (Prelude.Maybe [TaskFilter])
+listTasks_filters = Lens.lens (\ListTasks' {filters} -> filters) (\s@ListTasks' {} a -> s {filters = a} :: ListTasks) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of tasks to return.
+listTasks_maxResults :: Lens.Lens' ListTasks (Prelude.Maybe Prelude.Natural)
+listTasks_maxResults = Lens.lens (\ListTasks' {maxResults} -> maxResults) (\s@ListTasks' {} a -> s {maxResults = a} :: ListTasks)
+
+-- | An opaque string that indicates the position at which to begin the next
+-- list of tasks.
+listTasks_nextToken :: Lens.Lens' ListTasks (Prelude.Maybe Prelude.Text)
+listTasks_nextToken = Lens.lens (\ListTasks' {nextToken} -> nextToken) (\s@ListTasks' {} a -> s {nextToken = a} :: ListTasks)
+
+instance Core.AWSPager ListTasks where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listTasksResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listTasksResponse_tasks
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listTasks_nextToken
+          Lens..~ rs
+          Lens.^? listTasksResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListTasks where
+  type AWSResponse ListTasks = ListTasksResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTasksResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Tasks" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTasks where
+  hashWithSalt _salt ListTasks' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListTasks where
+  rnf ListTasks' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListTasks where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("FmrsService.ListTasks" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTasks where
+  toJSON ListTasks' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListTasks where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListTasks where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | ListTasksResponse
+--
+-- /See:/ 'newListTasksResponse' smart constructor.
+data ListTasksResponse = ListTasksResponse'
+  { -- | An opaque string that indicates the position at which to begin returning
+    -- the next list of tasks.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of all the tasks that are returned.
+    tasks :: Prelude.Maybe [TaskListEntry],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTasksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listTasksResponse_nextToken' - An opaque string that indicates the position at which to begin returning
+-- the next list of tasks.
+--
+-- 'tasks', 'listTasksResponse_tasks' - A list of all the tasks that are returned.
+--
+-- 'httpStatus', 'listTasksResponse_httpStatus' - The response's http status code.
+newListTasksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTasksResponse
+newListTasksResponse pHttpStatus_ =
+  ListTasksResponse'
+    { nextToken = Prelude.Nothing,
+      tasks = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An opaque string that indicates the position at which to begin returning
+-- the next list of tasks.
+listTasksResponse_nextToken :: Lens.Lens' ListTasksResponse (Prelude.Maybe Prelude.Text)
+listTasksResponse_nextToken = Lens.lens (\ListTasksResponse' {nextToken} -> nextToken) (\s@ListTasksResponse' {} a -> s {nextToken = a} :: ListTasksResponse)
+
+-- | A list of all the tasks that are returned.
+listTasksResponse_tasks :: Lens.Lens' ListTasksResponse (Prelude.Maybe [TaskListEntry])
+listTasksResponse_tasks = Lens.lens (\ListTasksResponse' {tasks} -> tasks) (\s@ListTasksResponse' {} a -> s {tasks = a} :: ListTasksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTasksResponse_httpStatus :: Lens.Lens' ListTasksResponse Prelude.Int
+listTasksResponse_httpStatus = Lens.lens (\ListTasksResponse' {httpStatus} -> httpStatus) (\s@ListTasksResponse' {} a -> s {httpStatus = a} :: ListTasksResponse)
+
+instance Prelude.NFData ListTasksResponse where
+  rnf ListTasksResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf tasks
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/StartTaskExecution.hs b/gen/Amazonka/DataSync/StartTaskExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/StartTaskExecution.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.DataSync.StartTaskExecution
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts an DataSync task. For each task, you can only run one task
+-- execution at a time.
+--
+-- There are several phases to a task execution. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/working-with-task-executions.html#understand-task-execution-statuses Task execution statuses>.
+module Amazonka.DataSync.StartTaskExecution
+  ( -- * Creating a Request
+    StartTaskExecution (..),
+    newStartTaskExecution,
+
+    -- * Request Lenses
+    startTaskExecution_excludes,
+    startTaskExecution_includes,
+    startTaskExecution_overrideOptions,
+    startTaskExecution_tags,
+    startTaskExecution_taskArn,
+
+    -- * Destructuring the Response
+    StartTaskExecutionResponse (..),
+    newStartTaskExecutionResponse,
+
+    -- * Response Lenses
+    startTaskExecutionResponse_taskExecutionArn,
+    startTaskExecutionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | StartTaskExecutionRequest
+--
+-- /See:/ 'newStartTaskExecution' smart constructor.
+data StartTaskExecution = StartTaskExecution'
+  { -- | Specifies a list of filter rules that determines which files to exclude
+    -- from a task. The list contains a single filter string that consists of
+    -- the patterns to exclude. The patterns are delimited by \"|\" (that is, a
+    -- pipe), for example, @\"\/folder1|\/folder2\"@.
+    excludes :: Prelude.Maybe [FilterRule],
+    -- | Specifies a list of filter rules that determines which files to include
+    -- when running a task. The pattern should contain a single filter string
+    -- that consists of the patterns to include. The patterns are delimited by
+    -- \"|\" (that is, a pipe), for example, @\"\/folder1|\/folder2\"@.
+    includes :: Prelude.Maybe [FilterRule],
+    overrideOptions :: Prelude.Maybe Options,
+    -- | Specifies the tags that you want to apply to the Amazon Resource Name
+    -- (ARN) representing the task execution.
+    --
+    -- /Tags/ are key-value pairs that help you manage, filter, and search for
+    -- your DataSync resources.
+    tags :: Prelude.Maybe [TagListEntry],
+    -- | Specifies the Amazon Resource Name (ARN) of the task that you want to
+    -- start.
+    taskArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartTaskExecution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'excludes', 'startTaskExecution_excludes' - Specifies a list of filter rules that determines which files to exclude
+-- from a task. The list contains a single filter string that consists of
+-- the patterns to exclude. The patterns are delimited by \"|\" (that is, a
+-- pipe), for example, @\"\/folder1|\/folder2\"@.
+--
+-- 'includes', 'startTaskExecution_includes' - Specifies a list of filter rules that determines which files to include
+-- when running a task. The pattern should contain a single filter string
+-- that consists of the patterns to include. The patterns are delimited by
+-- \"|\" (that is, a pipe), for example, @\"\/folder1|\/folder2\"@.
+--
+-- 'overrideOptions', 'startTaskExecution_overrideOptions' - Undocumented member.
+--
+-- 'tags', 'startTaskExecution_tags' - Specifies the tags that you want to apply to the Amazon Resource Name
+-- (ARN) representing the task execution.
+--
+-- /Tags/ are key-value pairs that help you manage, filter, and search for
+-- your DataSync resources.
+--
+-- 'taskArn', 'startTaskExecution_taskArn' - Specifies the Amazon Resource Name (ARN) of the task that you want to
+-- start.
+newStartTaskExecution ::
+  -- | 'taskArn'
+  Prelude.Text ->
+  StartTaskExecution
+newStartTaskExecution pTaskArn_ =
+  StartTaskExecution'
+    { excludes = Prelude.Nothing,
+      includes = Prelude.Nothing,
+      overrideOptions = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      taskArn = pTaskArn_
+    }
+
+-- | Specifies a list of filter rules that determines which files to exclude
+-- from a task. The list contains a single filter string that consists of
+-- the patterns to exclude. The patterns are delimited by \"|\" (that is, a
+-- pipe), for example, @\"\/folder1|\/folder2\"@.
+startTaskExecution_excludes :: Lens.Lens' StartTaskExecution (Prelude.Maybe [FilterRule])
+startTaskExecution_excludes = Lens.lens (\StartTaskExecution' {excludes} -> excludes) (\s@StartTaskExecution' {} a -> s {excludes = a} :: StartTaskExecution) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies a list of filter rules that determines which files to include
+-- when running a task. The pattern should contain a single filter string
+-- that consists of the patterns to include. The patterns are delimited by
+-- \"|\" (that is, a pipe), for example, @\"\/folder1|\/folder2\"@.
+startTaskExecution_includes :: Lens.Lens' StartTaskExecution (Prelude.Maybe [FilterRule])
+startTaskExecution_includes = Lens.lens (\StartTaskExecution' {includes} -> includes) (\s@StartTaskExecution' {} a -> s {includes = a} :: StartTaskExecution) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+startTaskExecution_overrideOptions :: Lens.Lens' StartTaskExecution (Prelude.Maybe Options)
+startTaskExecution_overrideOptions = Lens.lens (\StartTaskExecution' {overrideOptions} -> overrideOptions) (\s@StartTaskExecution' {} a -> s {overrideOptions = a} :: StartTaskExecution)
+
+-- | Specifies the tags that you want to apply to the Amazon Resource Name
+-- (ARN) representing the task execution.
+--
+-- /Tags/ are key-value pairs that help you manage, filter, and search for
+-- your DataSync resources.
+startTaskExecution_tags :: Lens.Lens' StartTaskExecution (Prelude.Maybe [TagListEntry])
+startTaskExecution_tags = Lens.lens (\StartTaskExecution' {tags} -> tags) (\s@StartTaskExecution' {} a -> s {tags = a} :: StartTaskExecution) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the Amazon Resource Name (ARN) of the task that you want to
+-- start.
+startTaskExecution_taskArn :: Lens.Lens' StartTaskExecution Prelude.Text
+startTaskExecution_taskArn = Lens.lens (\StartTaskExecution' {taskArn} -> taskArn) (\s@StartTaskExecution' {} a -> s {taskArn = a} :: StartTaskExecution)
+
+instance Core.AWSRequest StartTaskExecution where
+  type
+    AWSResponse StartTaskExecution =
+      StartTaskExecutionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartTaskExecutionResponse'
+            Prelude.<$> (x Data..?> "TaskExecutionArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartTaskExecution where
+  hashWithSalt _salt StartTaskExecution' {..} =
+    _salt
+      `Prelude.hashWithSalt` excludes
+      `Prelude.hashWithSalt` includes
+      `Prelude.hashWithSalt` overrideOptions
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` taskArn
+
+instance Prelude.NFData StartTaskExecution where
+  rnf StartTaskExecution' {..} =
+    Prelude.rnf excludes
+      `Prelude.seq` Prelude.rnf includes
+      `Prelude.seq` Prelude.rnf overrideOptions
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf taskArn
+
+instance Data.ToHeaders StartTaskExecution where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.StartTaskExecution" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartTaskExecution where
+  toJSON StartTaskExecution' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Excludes" Data..=) Prelude.<$> excludes,
+            ("Includes" Data..=) Prelude.<$> includes,
+            ("OverrideOptions" Data..=)
+              Prelude.<$> overrideOptions,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("TaskArn" Data..= taskArn)
+          ]
+      )
+
+instance Data.ToPath StartTaskExecution where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartTaskExecution where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | StartTaskExecutionResponse
+--
+-- /See:/ 'newStartTaskExecutionResponse' smart constructor.
+data StartTaskExecutionResponse = StartTaskExecutionResponse'
+  { -- | The ARN of the running task execution.
+    taskExecutionArn :: 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 'StartTaskExecutionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'taskExecutionArn', 'startTaskExecutionResponse_taskExecutionArn' - The ARN of the running task execution.
+--
+-- 'httpStatus', 'startTaskExecutionResponse_httpStatus' - The response's http status code.
+newStartTaskExecutionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartTaskExecutionResponse
+newStartTaskExecutionResponse pHttpStatus_ =
+  StartTaskExecutionResponse'
+    { taskExecutionArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the running task execution.
+startTaskExecutionResponse_taskExecutionArn :: Lens.Lens' StartTaskExecutionResponse (Prelude.Maybe Prelude.Text)
+startTaskExecutionResponse_taskExecutionArn = Lens.lens (\StartTaskExecutionResponse' {taskExecutionArn} -> taskExecutionArn) (\s@StartTaskExecutionResponse' {} a -> s {taskExecutionArn = a} :: StartTaskExecutionResponse)
+
+-- | The response's http status code.
+startTaskExecutionResponse_httpStatus :: Lens.Lens' StartTaskExecutionResponse Prelude.Int
+startTaskExecutionResponse_httpStatus = Lens.lens (\StartTaskExecutionResponse' {httpStatus} -> httpStatus) (\s@StartTaskExecutionResponse' {} a -> s {httpStatus = a} :: StartTaskExecutionResponse)
+
+instance Prelude.NFData StartTaskExecutionResponse where
+  rnf StartTaskExecutionResponse' {..} =
+    Prelude.rnf taskExecutionArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/TagResource.hs b/gen/Amazonka/DataSync/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/TagResource.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.DataSync.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)
+--
+-- Applies a /tag/ to an Amazon Web Services resource. Tags are key-value
+-- pairs that can help you manage, filter, and search for your resources.
+--
+-- These include DataSync resources, such as locations, tasks, and task
+-- executions.
+module Amazonka.DataSync.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.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | TagResourceRequest
+--
+-- /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | Specifies the Amazon Resource Name (ARN) of the resource to apply the
+    -- tag to.
+    resourceArn :: Prelude.Text,
+    -- | Specifies the tags that you want to apply to the resource.
+    tags :: [TagListEntry]
+  }
+  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' - Specifies the Amazon Resource Name (ARN) of the resource to apply the
+-- tag to.
+--
+-- 'tags', 'tagResource_tags' - Specifies the tags that you want to apply to the resource.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | Specifies the Amazon Resource Name (ARN) of the resource to apply the
+-- tag to.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | Specifies the tags that you want to apply to the resource.
+tagResource_tags :: Lens.Lens' TagResource [TagListEntry]
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("FmrsService.TagResource" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceArn" Data..= resourceArn),
+            Prelude.Just ("Tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/Types.hs b/gen/Amazonka/DataSync/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types.hs
@@ -0,0 +1,413 @@
+{-# 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.DataSync.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.DataSync.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _InternalException,
+    _InvalidRequestException,
+
+    -- * AgentStatus
+    AgentStatus (..),
+
+    -- * Atime
+    Atime (..),
+
+    -- * EfsInTransitEncryption
+    EfsInTransitEncryption (..),
+
+    -- * EndpointType
+    EndpointType (..),
+
+    -- * FilterType
+    FilterType (..),
+
+    -- * Gid
+    Gid (..),
+
+    -- * HdfsAuthenticationType
+    HdfsAuthenticationType (..),
+
+    -- * HdfsDataTransferProtection
+    HdfsDataTransferProtection (..),
+
+    -- * HdfsRpcProtection
+    HdfsRpcProtection (..),
+
+    -- * LocationFilterName
+    LocationFilterName (..),
+
+    -- * LogLevel
+    LogLevel (..),
+
+    -- * Mtime
+    Mtime (..),
+
+    -- * NfsVersion
+    NfsVersion (..),
+
+    -- * ObjectStorageServerProtocol
+    ObjectStorageServerProtocol (..),
+
+    -- * ObjectTags
+    ObjectTags (..),
+
+    -- * Operator
+    Operator (..),
+
+    -- * OverwriteMode
+    OverwriteMode (..),
+
+    -- * PhaseStatus
+    PhaseStatus (..),
+
+    -- * PosixPermissions
+    PosixPermissions (..),
+
+    -- * PreserveDeletedFiles
+    PreserveDeletedFiles (..),
+
+    -- * PreserveDevices
+    PreserveDevices (..),
+
+    -- * S3StorageClass
+    S3StorageClass (..),
+
+    -- * SmbSecurityDescriptorCopyFlags
+    SmbSecurityDescriptorCopyFlags (..),
+
+    -- * SmbVersion
+    SmbVersion (..),
+
+    -- * TaskExecutionStatus
+    TaskExecutionStatus (..),
+
+    -- * TaskFilterName
+    TaskFilterName (..),
+
+    -- * TaskQueueing
+    TaskQueueing (..),
+
+    -- * TaskStatus
+    TaskStatus (..),
+
+    -- * TransferMode
+    TransferMode (..),
+
+    -- * Uid
+    Uid (..),
+
+    -- * VerifyMode
+    VerifyMode (..),
+
+    -- * AgentListEntry
+    AgentListEntry (..),
+    newAgentListEntry,
+    agentListEntry_agentArn,
+    agentListEntry_name,
+    agentListEntry_status,
+
+    -- * Ec2Config
+    Ec2Config (..),
+    newEc2Config,
+    ec2Config_subnetArn,
+    ec2Config_securityGroupArns,
+
+    -- * FilterRule
+    FilterRule (..),
+    newFilterRule,
+    filterRule_filterType,
+    filterRule_value,
+
+    -- * FsxProtocol
+    FsxProtocol (..),
+    newFsxProtocol,
+    fsxProtocol_nfs,
+    fsxProtocol_smb,
+
+    -- * FsxProtocolNfs
+    FsxProtocolNfs (..),
+    newFsxProtocolNfs,
+    fsxProtocolNfs_mountOptions,
+
+    -- * FsxProtocolSmb
+    FsxProtocolSmb (..),
+    newFsxProtocolSmb,
+    fsxProtocolSmb_domain,
+    fsxProtocolSmb_mountOptions,
+    fsxProtocolSmb_password,
+    fsxProtocolSmb_user,
+
+    -- * HdfsNameNode
+    HdfsNameNode (..),
+    newHdfsNameNode,
+    hdfsNameNode_hostname,
+    hdfsNameNode_port,
+
+    -- * LocationFilter
+    LocationFilter (..),
+    newLocationFilter,
+    locationFilter_name,
+    locationFilter_values,
+    locationFilter_operator,
+
+    -- * LocationListEntry
+    LocationListEntry (..),
+    newLocationListEntry,
+    locationListEntry_locationArn,
+    locationListEntry_locationUri,
+
+    -- * NfsMountOptions
+    NfsMountOptions (..),
+    newNfsMountOptions,
+    nfsMountOptions_version,
+
+    -- * OnPremConfig
+    OnPremConfig (..),
+    newOnPremConfig,
+    onPremConfig_agentArns,
+
+    -- * Options
+    Options (..),
+    newOptions,
+    options_atime,
+    options_bytesPerSecond,
+    options_gid,
+    options_logLevel,
+    options_mtime,
+    options_objectTags,
+    options_overwriteMode,
+    options_posixPermissions,
+    options_preserveDeletedFiles,
+    options_preserveDevices,
+    options_securityDescriptorCopyFlags,
+    options_taskQueueing,
+    options_transferMode,
+    options_uid,
+    options_verifyMode,
+
+    -- * PrivateLinkConfig
+    PrivateLinkConfig (..),
+    newPrivateLinkConfig,
+    privateLinkConfig_privateLinkEndpoint,
+    privateLinkConfig_securityGroupArns,
+    privateLinkConfig_subnetArns,
+    privateLinkConfig_vpcEndpointId,
+
+    -- * QopConfiguration
+    QopConfiguration (..),
+    newQopConfiguration,
+    qopConfiguration_dataTransferProtection,
+    qopConfiguration_rpcProtection,
+
+    -- * S3Config
+    S3Config (..),
+    newS3Config,
+    s3Config_bucketAccessRoleArn,
+
+    -- * SmbMountOptions
+    SmbMountOptions (..),
+    newSmbMountOptions,
+    smbMountOptions_version,
+
+    -- * TagListEntry
+    TagListEntry (..),
+    newTagListEntry,
+    tagListEntry_value,
+    tagListEntry_key,
+
+    -- * TaskExecutionListEntry
+    TaskExecutionListEntry (..),
+    newTaskExecutionListEntry,
+    taskExecutionListEntry_status,
+    taskExecutionListEntry_taskExecutionArn,
+
+    -- * TaskExecutionResultDetail
+    TaskExecutionResultDetail (..),
+    newTaskExecutionResultDetail,
+    taskExecutionResultDetail_errorCode,
+    taskExecutionResultDetail_errorDetail,
+    taskExecutionResultDetail_prepareDuration,
+    taskExecutionResultDetail_prepareStatus,
+    taskExecutionResultDetail_totalDuration,
+    taskExecutionResultDetail_transferDuration,
+    taskExecutionResultDetail_transferStatus,
+    taskExecutionResultDetail_verifyDuration,
+    taskExecutionResultDetail_verifyStatus,
+
+    -- * TaskFilter
+    TaskFilter (..),
+    newTaskFilter,
+    taskFilter_name,
+    taskFilter_values,
+    taskFilter_operator,
+
+    -- * TaskListEntry
+    TaskListEntry (..),
+    newTaskListEntry,
+    taskListEntry_name,
+    taskListEntry_status,
+    taskListEntry_taskArn,
+
+    -- * TaskSchedule
+    TaskSchedule (..),
+    newTaskSchedule,
+    taskSchedule_scheduleExpression,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.DataSync.Types.AgentListEntry
+import Amazonka.DataSync.Types.AgentStatus
+import Amazonka.DataSync.Types.Atime
+import Amazonka.DataSync.Types.Ec2Config
+import Amazonka.DataSync.Types.EfsInTransitEncryption
+import Amazonka.DataSync.Types.EndpointType
+import Amazonka.DataSync.Types.FilterRule
+import Amazonka.DataSync.Types.FilterType
+import Amazonka.DataSync.Types.FsxProtocol
+import Amazonka.DataSync.Types.FsxProtocolNfs
+import Amazonka.DataSync.Types.FsxProtocolSmb
+import Amazonka.DataSync.Types.Gid
+import Amazonka.DataSync.Types.HdfsAuthenticationType
+import Amazonka.DataSync.Types.HdfsDataTransferProtection
+import Amazonka.DataSync.Types.HdfsNameNode
+import Amazonka.DataSync.Types.HdfsRpcProtection
+import Amazonka.DataSync.Types.LocationFilter
+import Amazonka.DataSync.Types.LocationFilterName
+import Amazonka.DataSync.Types.LocationListEntry
+import Amazonka.DataSync.Types.LogLevel
+import Amazonka.DataSync.Types.Mtime
+import Amazonka.DataSync.Types.NfsMountOptions
+import Amazonka.DataSync.Types.NfsVersion
+import Amazonka.DataSync.Types.ObjectStorageServerProtocol
+import Amazonka.DataSync.Types.ObjectTags
+import Amazonka.DataSync.Types.OnPremConfig
+import Amazonka.DataSync.Types.Operator
+import Amazonka.DataSync.Types.Options
+import Amazonka.DataSync.Types.OverwriteMode
+import Amazonka.DataSync.Types.PhaseStatus
+import Amazonka.DataSync.Types.PosixPermissions
+import Amazonka.DataSync.Types.PreserveDeletedFiles
+import Amazonka.DataSync.Types.PreserveDevices
+import Amazonka.DataSync.Types.PrivateLinkConfig
+import Amazonka.DataSync.Types.QopConfiguration
+import Amazonka.DataSync.Types.S3Config
+import Amazonka.DataSync.Types.S3StorageClass
+import Amazonka.DataSync.Types.SmbMountOptions
+import Amazonka.DataSync.Types.SmbSecurityDescriptorCopyFlags
+import Amazonka.DataSync.Types.SmbVersion
+import Amazonka.DataSync.Types.TagListEntry
+import Amazonka.DataSync.Types.TaskExecutionListEntry
+import Amazonka.DataSync.Types.TaskExecutionResultDetail
+import Amazonka.DataSync.Types.TaskExecutionStatus
+import Amazonka.DataSync.Types.TaskFilter
+import Amazonka.DataSync.Types.TaskFilterName
+import Amazonka.DataSync.Types.TaskListEntry
+import Amazonka.DataSync.Types.TaskQueueing
+import Amazonka.DataSync.Types.TaskSchedule
+import Amazonka.DataSync.Types.TaskStatus
+import Amazonka.DataSync.Types.TransferMode
+import Amazonka.DataSync.Types.Uid
+import Amazonka.DataSync.Types.VerifyMode
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2018-11-09@ of the Amazon DataSync SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "DataSync",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "datasync",
+      Core.signingName = "datasync",
+      Core.version = "2018-11-09",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "DataSync",
+      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
+
+-- | This exception is thrown when an error occurs in the DataSync service.
+_InternalException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalException =
+  Core._MatchServiceError
+    defaultService
+    "InternalException"
+
+-- | This exception is thrown when the client submits a malformed request.
+_InvalidRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidRequestException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidRequestException"
diff --git a/gen/Amazonka/DataSync/Types/AgentListEntry.hs b/gen/Amazonka/DataSync/Types/AgentListEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/AgentListEntry.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.DataSync.Types.AgentListEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.AgentListEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types.AgentStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a single entry in a list of agents. @AgentListEntry@ returns
+-- an array that contains a list of agents when the
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/API_ListAgents.html ListAgents>
+-- operation is called.
+--
+-- /See:/ 'newAgentListEntry' smart constructor.
+data AgentListEntry = AgentListEntry'
+  { -- | The Amazon Resource Name (ARN) of the agent.
+    agentArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the agent.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The status of the agent.
+    status :: Prelude.Maybe AgentStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AgentListEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'agentArn', 'agentListEntry_agentArn' - The Amazon Resource Name (ARN) of the agent.
+--
+-- 'name', 'agentListEntry_name' - The name of the agent.
+--
+-- 'status', 'agentListEntry_status' - The status of the agent.
+newAgentListEntry ::
+  AgentListEntry
+newAgentListEntry =
+  AgentListEntry'
+    { agentArn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the agent.
+agentListEntry_agentArn :: Lens.Lens' AgentListEntry (Prelude.Maybe Prelude.Text)
+agentListEntry_agentArn = Lens.lens (\AgentListEntry' {agentArn} -> agentArn) (\s@AgentListEntry' {} a -> s {agentArn = a} :: AgentListEntry)
+
+-- | The name of the agent.
+agentListEntry_name :: Lens.Lens' AgentListEntry (Prelude.Maybe Prelude.Text)
+agentListEntry_name = Lens.lens (\AgentListEntry' {name} -> name) (\s@AgentListEntry' {} a -> s {name = a} :: AgentListEntry)
+
+-- | The status of the agent.
+agentListEntry_status :: Lens.Lens' AgentListEntry (Prelude.Maybe AgentStatus)
+agentListEntry_status = Lens.lens (\AgentListEntry' {status} -> status) (\s@AgentListEntry' {} a -> s {status = a} :: AgentListEntry)
+
+instance Data.FromJSON AgentListEntry where
+  parseJSON =
+    Data.withObject
+      "AgentListEntry"
+      ( \x ->
+          AgentListEntry'
+            Prelude.<$> (x Data..:? "AgentArn")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable AgentListEntry where
+  hashWithSalt _salt AgentListEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` agentArn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData AgentListEntry where
+  rnf AgentListEntry' {..} =
+    Prelude.rnf agentArn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/DataSync/Types/AgentStatus.hs b/gen/Amazonka/DataSync/Types/AgentStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/AgentStatus.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.DataSync.Types.AgentStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.AgentStatus
+  ( AgentStatus
+      ( ..,
+        AgentStatus_OFFLINE,
+        AgentStatus_ONLINE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AgentStatus = AgentStatus'
+  { fromAgentStatus ::
+      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 AgentStatus_OFFLINE :: AgentStatus
+pattern AgentStatus_OFFLINE = AgentStatus' "OFFLINE"
+
+pattern AgentStatus_ONLINE :: AgentStatus
+pattern AgentStatus_ONLINE = AgentStatus' "ONLINE"
+
+{-# COMPLETE
+  AgentStatus_OFFLINE,
+  AgentStatus_ONLINE,
+  AgentStatus'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/Atime.hs b/gen/Amazonka/DataSync/Types/Atime.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/Atime.hs
@@ -0,0 +1,68 @@
+{-# 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.DataSync.Types.Atime
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.Atime
+  ( Atime
+      ( ..,
+        Atime_BEST_EFFORT,
+        Atime_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Atime = Atime' {fromAtime :: 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 Atime_BEST_EFFORT :: Atime
+pattern Atime_BEST_EFFORT = Atime' "BEST_EFFORT"
+
+pattern Atime_NONE :: Atime
+pattern Atime_NONE = Atime' "NONE"
+
+{-# COMPLETE
+  Atime_BEST_EFFORT,
+  Atime_NONE,
+  Atime'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/Ec2Config.hs b/gen/Amazonka/DataSync/Types/Ec2Config.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/Ec2Config.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.Types.Ec2Config
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.Ec2Config 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 subnet and security groups that DataSync uses to access your Amazon
+-- EFS file system.
+--
+-- /See:/ 'newEc2Config' smart constructor.
+data Ec2Config = Ec2Config'
+  { -- | Specifies the ARN of a subnet where DataSync creates the
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/datasync-network.html#required-network-interfaces network interfaces>
+    -- for managing traffic during your transfer.
+    --
+    -- The subnet must be located:
+    --
+    -- -   In the same virtual private cloud (VPC) as the Amazon EFS file
+    --     system.
+    --
+    -- -   In the same Availability Zone as at least one mount target for the
+    --     Amazon EFS file system.
+    --
+    -- You don\'t need to specify a subnet that includes a file system mount
+    -- target.
+    subnetArn :: Prelude.Text,
+    -- | Specifies the Amazon Resource Names (ARNs) of the security groups
+    -- associated with an Amazon EFS file system\'s mount target.
+    securityGroupArns :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ec2Config' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'subnetArn', 'ec2Config_subnetArn' - Specifies the ARN of a subnet where DataSync creates the
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/datasync-network.html#required-network-interfaces network interfaces>
+-- for managing traffic during your transfer.
+--
+-- The subnet must be located:
+--
+-- -   In the same virtual private cloud (VPC) as the Amazon EFS file
+--     system.
+--
+-- -   In the same Availability Zone as at least one mount target for the
+--     Amazon EFS file system.
+--
+-- You don\'t need to specify a subnet that includes a file system mount
+-- target.
+--
+-- 'securityGroupArns', 'ec2Config_securityGroupArns' - Specifies the Amazon Resource Names (ARNs) of the security groups
+-- associated with an Amazon EFS file system\'s mount target.
+newEc2Config ::
+  -- | 'subnetArn'
+  Prelude.Text ->
+  -- | 'securityGroupArns'
+  Prelude.NonEmpty Prelude.Text ->
+  Ec2Config
+newEc2Config pSubnetArn_ pSecurityGroupArns_ =
+  Ec2Config'
+    { subnetArn = pSubnetArn_,
+      securityGroupArns =
+        Lens.coerced Lens.# pSecurityGroupArns_
+    }
+
+-- | Specifies the ARN of a subnet where DataSync creates the
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/datasync-network.html#required-network-interfaces network interfaces>
+-- for managing traffic during your transfer.
+--
+-- The subnet must be located:
+--
+-- -   In the same virtual private cloud (VPC) as the Amazon EFS file
+--     system.
+--
+-- -   In the same Availability Zone as at least one mount target for the
+--     Amazon EFS file system.
+--
+-- You don\'t need to specify a subnet that includes a file system mount
+-- target.
+ec2Config_subnetArn :: Lens.Lens' Ec2Config Prelude.Text
+ec2Config_subnetArn = Lens.lens (\Ec2Config' {subnetArn} -> subnetArn) (\s@Ec2Config' {} a -> s {subnetArn = a} :: Ec2Config)
+
+-- | Specifies the Amazon Resource Names (ARNs) of the security groups
+-- associated with an Amazon EFS file system\'s mount target.
+ec2Config_securityGroupArns :: Lens.Lens' Ec2Config (Prelude.NonEmpty Prelude.Text)
+ec2Config_securityGroupArns = Lens.lens (\Ec2Config' {securityGroupArns} -> securityGroupArns) (\s@Ec2Config' {} a -> s {securityGroupArns = a} :: Ec2Config) Prelude.. Lens.coerced
+
+instance Data.FromJSON Ec2Config where
+  parseJSON =
+    Data.withObject
+      "Ec2Config"
+      ( \x ->
+          Ec2Config'
+            Prelude.<$> (x Data..: "SubnetArn")
+            Prelude.<*> (x Data..: "SecurityGroupArns")
+      )
+
+instance Prelude.Hashable Ec2Config where
+  hashWithSalt _salt Ec2Config' {..} =
+    _salt
+      `Prelude.hashWithSalt` subnetArn
+      `Prelude.hashWithSalt` securityGroupArns
+
+instance Prelude.NFData Ec2Config where
+  rnf Ec2Config' {..} =
+    Prelude.rnf subnetArn
+      `Prelude.seq` Prelude.rnf securityGroupArns
+
+instance Data.ToJSON Ec2Config where
+  toJSON Ec2Config' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("SubnetArn" Data..= subnetArn),
+            Prelude.Just
+              ("SecurityGroupArns" Data..= securityGroupArns)
+          ]
+      )
diff --git a/gen/Amazonka/DataSync/Types/EfsInTransitEncryption.hs b/gen/Amazonka/DataSync/Types/EfsInTransitEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/EfsInTransitEncryption.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.DataSync.Types.EfsInTransitEncryption
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.EfsInTransitEncryption
+  ( EfsInTransitEncryption
+      ( ..,
+        EfsInTransitEncryption_NONE,
+        EfsInTransitEncryption_TLS1_2
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EfsInTransitEncryption = EfsInTransitEncryption'
+  { fromEfsInTransitEncryption ::
+      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 EfsInTransitEncryption_NONE :: EfsInTransitEncryption
+pattern EfsInTransitEncryption_NONE = EfsInTransitEncryption' "NONE"
+
+pattern EfsInTransitEncryption_TLS1_2 :: EfsInTransitEncryption
+pattern EfsInTransitEncryption_TLS1_2 = EfsInTransitEncryption' "TLS1_2"
+
+{-# COMPLETE
+  EfsInTransitEncryption_NONE,
+  EfsInTransitEncryption_TLS1_2,
+  EfsInTransitEncryption'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/EndpointType.hs b/gen/Amazonka/DataSync/Types/EndpointType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/EndpointType.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.DataSync.Types.EndpointType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.EndpointType
+  ( EndpointType
+      ( ..,
+        EndpointType_FIPS,
+        EndpointType_PRIVATE_LINK,
+        EndpointType_PUBLIC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EndpointType = EndpointType'
+  { fromEndpointType ::
+      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 EndpointType_FIPS :: EndpointType
+pattern EndpointType_FIPS = EndpointType' "FIPS"
+
+pattern EndpointType_PRIVATE_LINK :: EndpointType
+pattern EndpointType_PRIVATE_LINK = EndpointType' "PRIVATE_LINK"
+
+pattern EndpointType_PUBLIC :: EndpointType
+pattern EndpointType_PUBLIC = EndpointType' "PUBLIC"
+
+{-# COMPLETE
+  EndpointType_FIPS,
+  EndpointType_PRIVATE_LINK,
+  EndpointType_PUBLIC,
+  EndpointType'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/FilterRule.hs b/gen/Amazonka/DataSync/Types/FilterRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/FilterRule.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.DataSync.Types.FilterRule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.FilterRule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types.FilterType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies which files, folders, and objects to include or exclude when
+-- transferring files from source to destination.
+--
+-- /See:/ 'newFilterRule' smart constructor.
+data FilterRule = FilterRule'
+  { -- | The type of filter rule to apply. DataSync only supports the
+    -- SIMPLE_PATTERN rule type.
+    filterType :: Prelude.Maybe FilterType,
+    -- | A single filter string that consists of the patterns to include or
+    -- exclude. The patterns are delimited by \"|\" (that is, a pipe), for
+    -- example: @\/folder1|\/folder2@
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FilterRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filterType', 'filterRule_filterType' - The type of filter rule to apply. DataSync only supports the
+-- SIMPLE_PATTERN rule type.
+--
+-- 'value', 'filterRule_value' - A single filter string that consists of the patterns to include or
+-- exclude. The patterns are delimited by \"|\" (that is, a pipe), for
+-- example: @\/folder1|\/folder2@
+newFilterRule ::
+  FilterRule
+newFilterRule =
+  FilterRule'
+    { filterType = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The type of filter rule to apply. DataSync only supports the
+-- SIMPLE_PATTERN rule type.
+filterRule_filterType :: Lens.Lens' FilterRule (Prelude.Maybe FilterType)
+filterRule_filterType = Lens.lens (\FilterRule' {filterType} -> filterType) (\s@FilterRule' {} a -> s {filterType = a} :: FilterRule)
+
+-- | A single filter string that consists of the patterns to include or
+-- exclude. The patterns are delimited by \"|\" (that is, a pipe), for
+-- example: @\/folder1|\/folder2@
+filterRule_value :: Lens.Lens' FilterRule (Prelude.Maybe Prelude.Text)
+filterRule_value = Lens.lens (\FilterRule' {value} -> value) (\s@FilterRule' {} a -> s {value = a} :: FilterRule)
+
+instance Data.FromJSON FilterRule where
+  parseJSON =
+    Data.withObject
+      "FilterRule"
+      ( \x ->
+          FilterRule'
+            Prelude.<$> (x Data..:? "FilterType")
+            Prelude.<*> (x Data..:? "Value")
+      )
+
+instance Prelude.Hashable FilterRule where
+  hashWithSalt _salt FilterRule' {..} =
+    _salt
+      `Prelude.hashWithSalt` filterType
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData FilterRule where
+  rnf FilterRule' {..} =
+    Prelude.rnf filterType
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON FilterRule where
+  toJSON FilterRule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FilterType" Data..=) Prelude.<$> filterType,
+            ("Value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/DataSync/Types/FilterType.hs b/gen/Amazonka/DataSync/Types/FilterType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/FilterType.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.DataSync.Types.FilterType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.FilterType
+  ( FilterType
+      ( ..,
+        FilterType_SIMPLE_PATTERN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FilterType = FilterType'
+  { fromFilterType ::
+      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 FilterType_SIMPLE_PATTERN :: FilterType
+pattern FilterType_SIMPLE_PATTERN = FilterType' "SIMPLE_PATTERN"
+
+{-# COMPLETE
+  FilterType_SIMPLE_PATTERN,
+  FilterType'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/FsxProtocol.hs b/gen/Amazonka/DataSync/Types/FsxProtocol.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/FsxProtocol.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.DataSync.Types.FsxProtocol
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.FsxProtocol where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types.FsxProtocolNfs
+import Amazonka.DataSync.Types.FsxProtocolSmb
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the data transfer protocol that DataSync uses to access your
+-- Amazon FSx file system.
+--
+-- /See:/ 'newFsxProtocol' smart constructor.
+data FsxProtocol = FsxProtocol'
+  { -- | Specifies the Network File System (NFS) protocol configuration that
+    -- DataSync uses to access your FSx for OpenZFS file system or FSx for
+    -- ONTAP file system\'s storage virtual machine (SVM).
+    nfs :: Prelude.Maybe FsxProtocolNfs,
+    -- | Specifies the Server Message Block (SMB) protocol configuration that
+    -- DataSync uses to access your FSx for ONTAP file system\'s SVM.
+    smb :: Prelude.Maybe FsxProtocolSmb
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FsxProtocol' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nfs', 'fsxProtocol_nfs' - Specifies the Network File System (NFS) protocol configuration that
+-- DataSync uses to access your FSx for OpenZFS file system or FSx for
+-- ONTAP file system\'s storage virtual machine (SVM).
+--
+-- 'smb', 'fsxProtocol_smb' - Specifies the Server Message Block (SMB) protocol configuration that
+-- DataSync uses to access your FSx for ONTAP file system\'s SVM.
+newFsxProtocol ::
+  FsxProtocol
+newFsxProtocol =
+  FsxProtocol'
+    { nfs = Prelude.Nothing,
+      smb = Prelude.Nothing
+    }
+
+-- | Specifies the Network File System (NFS) protocol configuration that
+-- DataSync uses to access your FSx for OpenZFS file system or FSx for
+-- ONTAP file system\'s storage virtual machine (SVM).
+fsxProtocol_nfs :: Lens.Lens' FsxProtocol (Prelude.Maybe FsxProtocolNfs)
+fsxProtocol_nfs = Lens.lens (\FsxProtocol' {nfs} -> nfs) (\s@FsxProtocol' {} a -> s {nfs = a} :: FsxProtocol)
+
+-- | Specifies the Server Message Block (SMB) protocol configuration that
+-- DataSync uses to access your FSx for ONTAP file system\'s SVM.
+fsxProtocol_smb :: Lens.Lens' FsxProtocol (Prelude.Maybe FsxProtocolSmb)
+fsxProtocol_smb = Lens.lens (\FsxProtocol' {smb} -> smb) (\s@FsxProtocol' {} a -> s {smb = a} :: FsxProtocol)
+
+instance Data.FromJSON FsxProtocol where
+  parseJSON =
+    Data.withObject
+      "FsxProtocol"
+      ( \x ->
+          FsxProtocol'
+            Prelude.<$> (x Data..:? "NFS")
+            Prelude.<*> (x Data..:? "SMB")
+      )
+
+instance Prelude.Hashable FsxProtocol where
+  hashWithSalt _salt FsxProtocol' {..} =
+    _salt
+      `Prelude.hashWithSalt` nfs
+      `Prelude.hashWithSalt` smb
+
+instance Prelude.NFData FsxProtocol where
+  rnf FsxProtocol' {..} =
+    Prelude.rnf nfs `Prelude.seq` Prelude.rnf smb
+
+instance Data.ToJSON FsxProtocol where
+  toJSON FsxProtocol' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("NFS" Data..=) Prelude.<$> nfs,
+            ("SMB" Data..=) Prelude.<$> smb
+          ]
+      )
diff --git a/gen/Amazonka/DataSync/Types/FsxProtocolNfs.hs b/gen/Amazonka/DataSync/Types/FsxProtocolNfs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/FsxProtocolNfs.hs
@@ -0,0 +1,77 @@
+{-# 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.DataSync.Types.FsxProtocolNfs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.FsxProtocolNfs where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types.NfsMountOptions
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the Network File System (NFS) protocol configuration that
+-- DataSync uses to access your Amazon FSx for OpenZFS or Amazon FSx for
+-- NetApp ONTAP file system.
+--
+-- /See:/ 'newFsxProtocolNfs' smart constructor.
+data FsxProtocolNfs = FsxProtocolNfs'
+  { mountOptions :: Prelude.Maybe NfsMountOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FsxProtocolNfs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'mountOptions', 'fsxProtocolNfs_mountOptions' - Undocumented member.
+newFsxProtocolNfs ::
+  FsxProtocolNfs
+newFsxProtocolNfs =
+  FsxProtocolNfs' {mountOptions = Prelude.Nothing}
+
+-- | Undocumented member.
+fsxProtocolNfs_mountOptions :: Lens.Lens' FsxProtocolNfs (Prelude.Maybe NfsMountOptions)
+fsxProtocolNfs_mountOptions = Lens.lens (\FsxProtocolNfs' {mountOptions} -> mountOptions) (\s@FsxProtocolNfs' {} a -> s {mountOptions = a} :: FsxProtocolNfs)
+
+instance Data.FromJSON FsxProtocolNfs where
+  parseJSON =
+    Data.withObject
+      "FsxProtocolNfs"
+      ( \x ->
+          FsxProtocolNfs'
+            Prelude.<$> (x Data..:? "MountOptions")
+      )
+
+instance Prelude.Hashable FsxProtocolNfs where
+  hashWithSalt _salt FsxProtocolNfs' {..} =
+    _salt `Prelude.hashWithSalt` mountOptions
+
+instance Prelude.NFData FsxProtocolNfs where
+  rnf FsxProtocolNfs' {..} = Prelude.rnf mountOptions
+
+instance Data.ToJSON FsxProtocolNfs where
+  toJSON FsxProtocolNfs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("MountOptions" Data..=) Prelude.<$> mountOptions]
+      )
diff --git a/gen/Amazonka/DataSync/Types/FsxProtocolSmb.hs b/gen/Amazonka/DataSync/Types/FsxProtocolSmb.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/FsxProtocolSmb.hs
@@ -0,0 +1,210 @@
+{-# 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.DataSync.Types.FsxProtocolSmb
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.FsxProtocolSmb where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types.SmbMountOptions
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the Server Message Block (SMB) protocol configuration that
+-- DataSync uses to access your Amazon FSx for NetApp ONTAP file system.
+-- For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-ontap-location.html#create-ontap-location-access Accessing FSx for ONTAP file systems>.
+--
+-- /See:/ 'newFsxProtocolSmb' smart constructor.
+data FsxProtocolSmb = FsxProtocolSmb'
+  { -- | Specifies the fully qualified domain name (FQDN) of the Microsoft Active
+    -- Directory that your storage virtual machine (SVM) belongs to.
+    domain :: Prelude.Maybe Prelude.Text,
+    mountOptions :: Prelude.Maybe SmbMountOptions,
+    -- | Specifies the password of a user who has permission to access your SVM.
+    password :: Data.Sensitive Prelude.Text,
+    -- | Specifies a user name that can mount the location and access the files,
+    -- folders, and metadata that you need in the SVM.
+    --
+    -- If you provide a user in your Active Directory, note the following:
+    --
+    -- -   If you\'re using Directory Service for Microsoft Active Directory,
+    --     the user must be a member of the Amazon Web Services Delegated FSx
+    --     Administrators group.
+    --
+    -- -   If you\'re using a self-managed Active Directory, the user must be a
+    --     member of either the Domain Admins group or a custom group that you
+    --     specified for file system administration when you created your file
+    --     system.
+    --
+    -- Make sure that the user has the permissions it needs to copy the data
+    -- you want:
+    --
+    -- -   @SE_TCB_NAME@: Required to set object ownership and file metadata.
+    --     With this privilege, you also can copy NTFS discretionary access
+    --     lists (DACLs).
+    --
+    -- -   @SE_SECURITY_NAME@: May be needed to copy NTFS system access control
+    --     lists (SACLs). This operation specifically requires the Windows
+    --     privilege, which is granted to members of the Domain Admins group.
+    --     If you configure your task to copy SACLs, make sure that the user
+    --     has the required privileges. For information about copying SACLs,
+    --     see
+    --     <https://docs.aws.amazon.com/datasync/latest/userguide/create-task.html#configure-ownership-and-permissions Ownership and permissions-related options>.
+    user :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FsxProtocolSmb' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domain', 'fsxProtocolSmb_domain' - Specifies the fully qualified domain name (FQDN) of the Microsoft Active
+-- Directory that your storage virtual machine (SVM) belongs to.
+--
+-- 'mountOptions', 'fsxProtocolSmb_mountOptions' - Undocumented member.
+--
+-- 'password', 'fsxProtocolSmb_password' - Specifies the password of a user who has permission to access your SVM.
+--
+-- 'user', 'fsxProtocolSmb_user' - Specifies a user name that can mount the location and access the files,
+-- folders, and metadata that you need in the SVM.
+--
+-- If you provide a user in your Active Directory, note the following:
+--
+-- -   If you\'re using Directory Service for Microsoft Active Directory,
+--     the user must be a member of the Amazon Web Services Delegated FSx
+--     Administrators group.
+--
+-- -   If you\'re using a self-managed Active Directory, the user must be a
+--     member of either the Domain Admins group or a custom group that you
+--     specified for file system administration when you created your file
+--     system.
+--
+-- Make sure that the user has the permissions it needs to copy the data
+-- you want:
+--
+-- -   @SE_TCB_NAME@: Required to set object ownership and file metadata.
+--     With this privilege, you also can copy NTFS discretionary access
+--     lists (DACLs).
+--
+-- -   @SE_SECURITY_NAME@: May be needed to copy NTFS system access control
+--     lists (SACLs). This operation specifically requires the Windows
+--     privilege, which is granted to members of the Domain Admins group.
+--     If you configure your task to copy SACLs, make sure that the user
+--     has the required privileges. For information about copying SACLs,
+--     see
+--     <https://docs.aws.amazon.com/datasync/latest/userguide/create-task.html#configure-ownership-and-permissions Ownership and permissions-related options>.
+newFsxProtocolSmb ::
+  -- | 'password'
+  Prelude.Text ->
+  -- | 'user'
+  Prelude.Text ->
+  FsxProtocolSmb
+newFsxProtocolSmb pPassword_ pUser_ =
+  FsxProtocolSmb'
+    { domain = Prelude.Nothing,
+      mountOptions = Prelude.Nothing,
+      password = Data._Sensitive Lens.# pPassword_,
+      user = pUser_
+    }
+
+-- | Specifies the fully qualified domain name (FQDN) of the Microsoft Active
+-- Directory that your storage virtual machine (SVM) belongs to.
+fsxProtocolSmb_domain :: Lens.Lens' FsxProtocolSmb (Prelude.Maybe Prelude.Text)
+fsxProtocolSmb_domain = Lens.lens (\FsxProtocolSmb' {domain} -> domain) (\s@FsxProtocolSmb' {} a -> s {domain = a} :: FsxProtocolSmb)
+
+-- | Undocumented member.
+fsxProtocolSmb_mountOptions :: Lens.Lens' FsxProtocolSmb (Prelude.Maybe SmbMountOptions)
+fsxProtocolSmb_mountOptions = Lens.lens (\FsxProtocolSmb' {mountOptions} -> mountOptions) (\s@FsxProtocolSmb' {} a -> s {mountOptions = a} :: FsxProtocolSmb)
+
+-- | Specifies the password of a user who has permission to access your SVM.
+fsxProtocolSmb_password :: Lens.Lens' FsxProtocolSmb Prelude.Text
+fsxProtocolSmb_password = Lens.lens (\FsxProtocolSmb' {password} -> password) (\s@FsxProtocolSmb' {} a -> s {password = a} :: FsxProtocolSmb) Prelude.. Data._Sensitive
+
+-- | Specifies a user name that can mount the location and access the files,
+-- folders, and metadata that you need in the SVM.
+--
+-- If you provide a user in your Active Directory, note the following:
+--
+-- -   If you\'re using Directory Service for Microsoft Active Directory,
+--     the user must be a member of the Amazon Web Services Delegated FSx
+--     Administrators group.
+--
+-- -   If you\'re using a self-managed Active Directory, the user must be a
+--     member of either the Domain Admins group or a custom group that you
+--     specified for file system administration when you created your file
+--     system.
+--
+-- Make sure that the user has the permissions it needs to copy the data
+-- you want:
+--
+-- -   @SE_TCB_NAME@: Required to set object ownership and file metadata.
+--     With this privilege, you also can copy NTFS discretionary access
+--     lists (DACLs).
+--
+-- -   @SE_SECURITY_NAME@: May be needed to copy NTFS system access control
+--     lists (SACLs). This operation specifically requires the Windows
+--     privilege, which is granted to members of the Domain Admins group.
+--     If you configure your task to copy SACLs, make sure that the user
+--     has the required privileges. For information about copying SACLs,
+--     see
+--     <https://docs.aws.amazon.com/datasync/latest/userguide/create-task.html#configure-ownership-and-permissions Ownership and permissions-related options>.
+fsxProtocolSmb_user :: Lens.Lens' FsxProtocolSmb Prelude.Text
+fsxProtocolSmb_user = Lens.lens (\FsxProtocolSmb' {user} -> user) (\s@FsxProtocolSmb' {} a -> s {user = a} :: FsxProtocolSmb)
+
+instance Data.FromJSON FsxProtocolSmb where
+  parseJSON =
+    Data.withObject
+      "FsxProtocolSmb"
+      ( \x ->
+          FsxProtocolSmb'
+            Prelude.<$> (x Data..:? "Domain")
+            Prelude.<*> (x Data..:? "MountOptions")
+            Prelude.<*> (x Data..: "Password")
+            Prelude.<*> (x Data..: "User")
+      )
+
+instance Prelude.Hashable FsxProtocolSmb where
+  hashWithSalt _salt FsxProtocolSmb' {..} =
+    _salt
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` mountOptions
+      `Prelude.hashWithSalt` password
+      `Prelude.hashWithSalt` user
+
+instance Prelude.NFData FsxProtocolSmb where
+  rnf FsxProtocolSmb' {..} =
+    Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf mountOptions
+      `Prelude.seq` Prelude.rnf password
+      `Prelude.seq` Prelude.rnf user
+
+instance Data.ToJSON FsxProtocolSmb where
+  toJSON FsxProtocolSmb' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Domain" Data..=) Prelude.<$> domain,
+            ("MountOptions" Data..=) Prelude.<$> mountOptions,
+            Prelude.Just ("Password" Data..= password),
+            Prelude.Just ("User" Data..= user)
+          ]
+      )
diff --git a/gen/Amazonka/DataSync/Types/Gid.hs b/gen/Amazonka/DataSync/Types/Gid.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/Gid.hs
@@ -0,0 +1,78 @@
+{-# 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.DataSync.Types.Gid
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.Gid
+  ( Gid
+      ( ..,
+        Gid_BOTH,
+        Gid_INT_VALUE,
+        Gid_NAME,
+        Gid_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Gid = Gid' {fromGid :: 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 Gid_BOTH :: Gid
+pattern Gid_BOTH = Gid' "BOTH"
+
+pattern Gid_INT_VALUE :: Gid
+pattern Gid_INT_VALUE = Gid' "INT_VALUE"
+
+pattern Gid_NAME :: Gid
+pattern Gid_NAME = Gid' "NAME"
+
+pattern Gid_NONE :: Gid
+pattern Gid_NONE = Gid' "NONE"
+
+{-# COMPLETE
+  Gid_BOTH,
+  Gid_INT_VALUE,
+  Gid_NAME,
+  Gid_NONE,
+  Gid'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/HdfsAuthenticationType.hs b/gen/Amazonka/DataSync/Types/HdfsAuthenticationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/HdfsAuthenticationType.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.DataSync.Types.HdfsAuthenticationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.HdfsAuthenticationType
+  ( HdfsAuthenticationType
+      ( ..,
+        HdfsAuthenticationType_KERBEROS,
+        HdfsAuthenticationType_SIMPLE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype HdfsAuthenticationType = HdfsAuthenticationType'
+  { fromHdfsAuthenticationType ::
+      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 HdfsAuthenticationType_KERBEROS :: HdfsAuthenticationType
+pattern HdfsAuthenticationType_KERBEROS = HdfsAuthenticationType' "KERBEROS"
+
+pattern HdfsAuthenticationType_SIMPLE :: HdfsAuthenticationType
+pattern HdfsAuthenticationType_SIMPLE = HdfsAuthenticationType' "SIMPLE"
+
+{-# COMPLETE
+  HdfsAuthenticationType_KERBEROS,
+  HdfsAuthenticationType_SIMPLE,
+  HdfsAuthenticationType'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/HdfsDataTransferProtection.hs b/gen/Amazonka/DataSync/Types/HdfsDataTransferProtection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/HdfsDataTransferProtection.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.Types.HdfsDataTransferProtection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.HdfsDataTransferProtection
+  ( HdfsDataTransferProtection
+      ( ..,
+        HdfsDataTransferProtection_AUTHENTICATION,
+        HdfsDataTransferProtection_DISABLED,
+        HdfsDataTransferProtection_INTEGRITY,
+        HdfsDataTransferProtection_PRIVACY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype HdfsDataTransferProtection = HdfsDataTransferProtection'
+  { fromHdfsDataTransferProtection ::
+      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 HdfsDataTransferProtection_AUTHENTICATION :: HdfsDataTransferProtection
+pattern HdfsDataTransferProtection_AUTHENTICATION = HdfsDataTransferProtection' "AUTHENTICATION"
+
+pattern HdfsDataTransferProtection_DISABLED :: HdfsDataTransferProtection
+pattern HdfsDataTransferProtection_DISABLED = HdfsDataTransferProtection' "DISABLED"
+
+pattern HdfsDataTransferProtection_INTEGRITY :: HdfsDataTransferProtection
+pattern HdfsDataTransferProtection_INTEGRITY = HdfsDataTransferProtection' "INTEGRITY"
+
+pattern HdfsDataTransferProtection_PRIVACY :: HdfsDataTransferProtection
+pattern HdfsDataTransferProtection_PRIVACY = HdfsDataTransferProtection' "PRIVACY"
+
+{-# COMPLETE
+  HdfsDataTransferProtection_AUTHENTICATION,
+  HdfsDataTransferProtection_DISABLED,
+  HdfsDataTransferProtection_INTEGRITY,
+  HdfsDataTransferProtection_PRIVACY,
+  HdfsDataTransferProtection'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/HdfsNameNode.hs b/gen/Amazonka/DataSync/Types/HdfsNameNode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/HdfsNameNode.hs
@@ -0,0 +1,106 @@
+{-# 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.DataSync.Types.HdfsNameNode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.HdfsNameNode 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 NameNode of the Hadoop Distributed File System (HDFS). The NameNode
+-- manages the file system\'s namespace. The NameNode performs operations
+-- such as opening, closing, and renaming files and directories. The
+-- NameNode contains the information to map blocks of data to the
+-- DataNodes.
+--
+-- /See:/ 'newHdfsNameNode' smart constructor.
+data HdfsNameNode = HdfsNameNode'
+  { -- | The hostname of the NameNode in the HDFS cluster. This value is the IP
+    -- address or Domain Name Service (DNS) name of the NameNode. An agent
+    -- that\'s installed on-premises uses this hostname to communicate with the
+    -- NameNode in the network.
+    hostname :: Prelude.Text,
+    -- | The port that the NameNode uses to listen to client requests.
+    port :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HdfsNameNode' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'hostname', 'hdfsNameNode_hostname' - The hostname of the NameNode in the HDFS cluster. This value is the IP
+-- address or Domain Name Service (DNS) name of the NameNode. An agent
+-- that\'s installed on-premises uses this hostname to communicate with the
+-- NameNode in the network.
+--
+-- 'port', 'hdfsNameNode_port' - The port that the NameNode uses to listen to client requests.
+newHdfsNameNode ::
+  -- | 'hostname'
+  Prelude.Text ->
+  -- | 'port'
+  Prelude.Natural ->
+  HdfsNameNode
+newHdfsNameNode pHostname_ pPort_ =
+  HdfsNameNode' {hostname = pHostname_, port = pPort_}
+
+-- | The hostname of the NameNode in the HDFS cluster. This value is the IP
+-- address or Domain Name Service (DNS) name of the NameNode. An agent
+-- that\'s installed on-premises uses this hostname to communicate with the
+-- NameNode in the network.
+hdfsNameNode_hostname :: Lens.Lens' HdfsNameNode Prelude.Text
+hdfsNameNode_hostname = Lens.lens (\HdfsNameNode' {hostname} -> hostname) (\s@HdfsNameNode' {} a -> s {hostname = a} :: HdfsNameNode)
+
+-- | The port that the NameNode uses to listen to client requests.
+hdfsNameNode_port :: Lens.Lens' HdfsNameNode Prelude.Natural
+hdfsNameNode_port = Lens.lens (\HdfsNameNode' {port} -> port) (\s@HdfsNameNode' {} a -> s {port = a} :: HdfsNameNode)
+
+instance Data.FromJSON HdfsNameNode where
+  parseJSON =
+    Data.withObject
+      "HdfsNameNode"
+      ( \x ->
+          HdfsNameNode'
+            Prelude.<$> (x Data..: "Hostname")
+            Prelude.<*> (x Data..: "Port")
+      )
+
+instance Prelude.Hashable HdfsNameNode where
+  hashWithSalt _salt HdfsNameNode' {..} =
+    _salt
+      `Prelude.hashWithSalt` hostname
+      `Prelude.hashWithSalt` port
+
+instance Prelude.NFData HdfsNameNode where
+  rnf HdfsNameNode' {..} =
+    Prelude.rnf hostname `Prelude.seq` Prelude.rnf port
+
+instance Data.ToJSON HdfsNameNode where
+  toJSON HdfsNameNode' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Hostname" Data..= hostname),
+            Prelude.Just ("Port" Data..= port)
+          ]
+      )
diff --git a/gen/Amazonka/DataSync/Types/HdfsRpcProtection.hs b/gen/Amazonka/DataSync/Types/HdfsRpcProtection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/HdfsRpcProtection.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.Types.HdfsRpcProtection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.HdfsRpcProtection
+  ( HdfsRpcProtection
+      ( ..,
+        HdfsRpcProtection_AUTHENTICATION,
+        HdfsRpcProtection_DISABLED,
+        HdfsRpcProtection_INTEGRITY,
+        HdfsRpcProtection_PRIVACY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype HdfsRpcProtection = HdfsRpcProtection'
+  { fromHdfsRpcProtection ::
+      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 HdfsRpcProtection_AUTHENTICATION :: HdfsRpcProtection
+pattern HdfsRpcProtection_AUTHENTICATION = HdfsRpcProtection' "AUTHENTICATION"
+
+pattern HdfsRpcProtection_DISABLED :: HdfsRpcProtection
+pattern HdfsRpcProtection_DISABLED = HdfsRpcProtection' "DISABLED"
+
+pattern HdfsRpcProtection_INTEGRITY :: HdfsRpcProtection
+pattern HdfsRpcProtection_INTEGRITY = HdfsRpcProtection' "INTEGRITY"
+
+pattern HdfsRpcProtection_PRIVACY :: HdfsRpcProtection
+pattern HdfsRpcProtection_PRIVACY = HdfsRpcProtection' "PRIVACY"
+
+{-# COMPLETE
+  HdfsRpcProtection_AUTHENTICATION,
+  HdfsRpcProtection_DISABLED,
+  HdfsRpcProtection_INTEGRITY,
+  HdfsRpcProtection_PRIVACY,
+  HdfsRpcProtection'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/LocationFilter.hs b/gen/Amazonka/DataSync/Types/LocationFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/LocationFilter.hs
@@ -0,0 +1,119 @@
+{-# 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.DataSync.Types.LocationFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.LocationFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types.LocationFilterName
+import Amazonka.DataSync.Types.Operator
+import qualified Amazonka.Prelude as Prelude
+
+-- | Narrow down the list of resources returned by @ListLocations@. For
+-- example, to see all your Amazon S3 locations, create a filter using
+-- @\"Name\": \"LocationType\"@, @\"Operator\": \"Equals\"@, and
+-- @\"Values\": \"S3\"@.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/query-resources.html filtering resources>.
+--
+-- /See:/ 'newLocationFilter' smart constructor.
+data LocationFilter = LocationFilter'
+  { -- | The name of the filter being used. Each API call supports a list of
+    -- filters that are available for it (for example, @LocationType@ for
+    -- @ListLocations@).
+    name :: LocationFilterName,
+    -- | The values that you want to filter for. For example, you might want to
+    -- display only Amazon S3 locations.
+    values :: [Prelude.Text],
+    -- | The operator that is used to compare filter values (for example,
+    -- @Equals@ or @Contains@).
+    operator :: Operator
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LocationFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'locationFilter_name' - The name of the filter being used. Each API call supports a list of
+-- filters that are available for it (for example, @LocationType@ for
+-- @ListLocations@).
+--
+-- 'values', 'locationFilter_values' - The values that you want to filter for. For example, you might want to
+-- display only Amazon S3 locations.
+--
+-- 'operator', 'locationFilter_operator' - The operator that is used to compare filter values (for example,
+-- @Equals@ or @Contains@).
+newLocationFilter ::
+  -- | 'name'
+  LocationFilterName ->
+  -- | 'operator'
+  Operator ->
+  LocationFilter
+newLocationFilter pName_ pOperator_ =
+  LocationFilter'
+    { name = pName_,
+      values = Prelude.mempty,
+      operator = pOperator_
+    }
+
+-- | The name of the filter being used. Each API call supports a list of
+-- filters that are available for it (for example, @LocationType@ for
+-- @ListLocations@).
+locationFilter_name :: Lens.Lens' LocationFilter LocationFilterName
+locationFilter_name = Lens.lens (\LocationFilter' {name} -> name) (\s@LocationFilter' {} a -> s {name = a} :: LocationFilter)
+
+-- | The values that you want to filter for. For example, you might want to
+-- display only Amazon S3 locations.
+locationFilter_values :: Lens.Lens' LocationFilter [Prelude.Text]
+locationFilter_values = Lens.lens (\LocationFilter' {values} -> values) (\s@LocationFilter' {} a -> s {values = a} :: LocationFilter) Prelude.. Lens.coerced
+
+-- | The operator that is used to compare filter values (for example,
+-- @Equals@ or @Contains@).
+locationFilter_operator :: Lens.Lens' LocationFilter Operator
+locationFilter_operator = Lens.lens (\LocationFilter' {operator} -> operator) (\s@LocationFilter' {} a -> s {operator = a} :: LocationFilter)
+
+instance Prelude.Hashable LocationFilter where
+  hashWithSalt _salt LocationFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+      `Prelude.hashWithSalt` operator
+
+instance Prelude.NFData LocationFilter where
+  rnf LocationFilter' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf values
+      `Prelude.seq` Prelude.rnf operator
+
+instance Data.ToJSON LocationFilter where
+  toJSON LocationFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Values" Data..= values),
+            Prelude.Just ("Operator" Data..= operator)
+          ]
+      )
diff --git a/gen/Amazonka/DataSync/Types/LocationFilterName.hs b/gen/Amazonka/DataSync/Types/LocationFilterName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/LocationFilterName.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.DataSync.Types.LocationFilterName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.LocationFilterName
+  ( LocationFilterName
+      ( ..,
+        LocationFilterName_CreationTime,
+        LocationFilterName_LocationType,
+        LocationFilterName_LocationUri
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LocationFilterName = LocationFilterName'
+  { fromLocationFilterName ::
+      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 LocationFilterName_CreationTime :: LocationFilterName
+pattern LocationFilterName_CreationTime = LocationFilterName' "CreationTime"
+
+pattern LocationFilterName_LocationType :: LocationFilterName
+pattern LocationFilterName_LocationType = LocationFilterName' "LocationType"
+
+pattern LocationFilterName_LocationUri :: LocationFilterName
+pattern LocationFilterName_LocationUri = LocationFilterName' "LocationUri"
+
+{-# COMPLETE
+  LocationFilterName_CreationTime,
+  LocationFilterName_LocationType,
+  LocationFilterName_LocationUri,
+  LocationFilterName'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/LocationListEntry.hs b/gen/Amazonka/DataSync/Types/LocationListEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/LocationListEntry.hs
@@ -0,0 +1,150 @@
+{-# 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.DataSync.Types.LocationListEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.LocationListEntry 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 single entry in a list of locations. @LocationListEntry@
+-- returns an array that contains a list of locations when the
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/API_ListLocations.html ListLocations>
+-- operation is called.
+--
+-- /See:/ 'newLocationListEntry' smart constructor.
+data LocationListEntry = LocationListEntry'
+  { -- | The Amazon Resource Name (ARN) of the location. For Network File System
+    -- (NFS) or Amazon EFS, the location is the export path. For Amazon S3, the
+    -- location is the prefix path that you want to mount and use as the root
+    -- of the location.
+    locationArn :: Prelude.Maybe Prelude.Text,
+    -- | Represents a list of URIs of a location. @LocationUri@ returns an array
+    -- that contains a list of locations when the
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/API_ListLocations.html ListLocations>
+    -- operation is called.
+    --
+    -- Format: @TYPE:\/\/GLOBAL_ID\/SUBDIR@.
+    --
+    -- TYPE designates the type of location (for example, @nfs@ or @s3@).
+    --
+    -- GLOBAL_ID is the globally unique identifier of the resource that backs
+    -- the location. An example for EFS is @us-east-2.fs-abcd1234@. An example
+    -- for Amazon S3 is the bucket name, such as @myBucket@. An example for NFS
+    -- is a valid IPv4 address or a hostname that is compliant with Domain Name
+    -- Service (DNS).
+    --
+    -- SUBDIR is a valid file system path, delimited by forward slashes as is
+    -- the *nix convention. For NFS and Amazon EFS, it\'s the export path to
+    -- mount the location. For Amazon S3, it\'s the prefix path that you mount
+    -- to and treat as the root of the location.
+    locationUri :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LocationListEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locationArn', 'locationListEntry_locationArn' - The Amazon Resource Name (ARN) of the location. For Network File System
+-- (NFS) or Amazon EFS, the location is the export path. For Amazon S3, the
+-- location is the prefix path that you want to mount and use as the root
+-- of the location.
+--
+-- 'locationUri', 'locationListEntry_locationUri' - Represents a list of URIs of a location. @LocationUri@ returns an array
+-- that contains a list of locations when the
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/API_ListLocations.html ListLocations>
+-- operation is called.
+--
+-- Format: @TYPE:\/\/GLOBAL_ID\/SUBDIR@.
+--
+-- TYPE designates the type of location (for example, @nfs@ or @s3@).
+--
+-- GLOBAL_ID is the globally unique identifier of the resource that backs
+-- the location. An example for EFS is @us-east-2.fs-abcd1234@. An example
+-- for Amazon S3 is the bucket name, such as @myBucket@. An example for NFS
+-- is a valid IPv4 address or a hostname that is compliant with Domain Name
+-- Service (DNS).
+--
+-- SUBDIR is a valid file system path, delimited by forward slashes as is
+-- the *nix convention. For NFS and Amazon EFS, it\'s the export path to
+-- mount the location. For Amazon S3, it\'s the prefix path that you mount
+-- to and treat as the root of the location.
+newLocationListEntry ::
+  LocationListEntry
+newLocationListEntry =
+  LocationListEntry'
+    { locationArn = Prelude.Nothing,
+      locationUri = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the location. For Network File System
+-- (NFS) or Amazon EFS, the location is the export path. For Amazon S3, the
+-- location is the prefix path that you want to mount and use as the root
+-- of the location.
+locationListEntry_locationArn :: Lens.Lens' LocationListEntry (Prelude.Maybe Prelude.Text)
+locationListEntry_locationArn = Lens.lens (\LocationListEntry' {locationArn} -> locationArn) (\s@LocationListEntry' {} a -> s {locationArn = a} :: LocationListEntry)
+
+-- | Represents a list of URIs of a location. @LocationUri@ returns an array
+-- that contains a list of locations when the
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/API_ListLocations.html ListLocations>
+-- operation is called.
+--
+-- Format: @TYPE:\/\/GLOBAL_ID\/SUBDIR@.
+--
+-- TYPE designates the type of location (for example, @nfs@ or @s3@).
+--
+-- GLOBAL_ID is the globally unique identifier of the resource that backs
+-- the location. An example for EFS is @us-east-2.fs-abcd1234@. An example
+-- for Amazon S3 is the bucket name, such as @myBucket@. An example for NFS
+-- is a valid IPv4 address or a hostname that is compliant with Domain Name
+-- Service (DNS).
+--
+-- SUBDIR is a valid file system path, delimited by forward slashes as is
+-- the *nix convention. For NFS and Amazon EFS, it\'s the export path to
+-- mount the location. For Amazon S3, it\'s the prefix path that you mount
+-- to and treat as the root of the location.
+locationListEntry_locationUri :: Lens.Lens' LocationListEntry (Prelude.Maybe Prelude.Text)
+locationListEntry_locationUri = Lens.lens (\LocationListEntry' {locationUri} -> locationUri) (\s@LocationListEntry' {} a -> s {locationUri = a} :: LocationListEntry)
+
+instance Data.FromJSON LocationListEntry where
+  parseJSON =
+    Data.withObject
+      "LocationListEntry"
+      ( \x ->
+          LocationListEntry'
+            Prelude.<$> (x Data..:? "LocationArn")
+            Prelude.<*> (x Data..:? "LocationUri")
+      )
+
+instance Prelude.Hashable LocationListEntry where
+  hashWithSalt _salt LocationListEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` locationArn
+      `Prelude.hashWithSalt` locationUri
+
+instance Prelude.NFData LocationListEntry where
+  rnf LocationListEntry' {..} =
+    Prelude.rnf locationArn
+      `Prelude.seq` Prelude.rnf locationUri
diff --git a/gen/Amazonka/DataSync/Types/LogLevel.hs b/gen/Amazonka/DataSync/Types/LogLevel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/LogLevel.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.DataSync.Types.LogLevel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.LogLevel
+  ( LogLevel
+      ( ..,
+        LogLevel_BASIC,
+        LogLevel_OFF,
+        LogLevel_TRANSFER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LogLevel = LogLevel'
+  { fromLogLevel ::
+      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 LogLevel_BASIC :: LogLevel
+pattern LogLevel_BASIC = LogLevel' "BASIC"
+
+pattern LogLevel_OFF :: LogLevel
+pattern LogLevel_OFF = LogLevel' "OFF"
+
+pattern LogLevel_TRANSFER :: LogLevel
+pattern LogLevel_TRANSFER = LogLevel' "TRANSFER"
+
+{-# COMPLETE
+  LogLevel_BASIC,
+  LogLevel_OFF,
+  LogLevel_TRANSFER,
+  LogLevel'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/Mtime.hs b/gen/Amazonka/DataSync/Types/Mtime.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/Mtime.hs
@@ -0,0 +1,68 @@
+{-# 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.DataSync.Types.Mtime
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.Mtime
+  ( Mtime
+      ( ..,
+        Mtime_NONE,
+        Mtime_PRESERVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Mtime = Mtime' {fromMtime :: 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 Mtime_NONE :: Mtime
+pattern Mtime_NONE = Mtime' "NONE"
+
+pattern Mtime_PRESERVE :: Mtime
+pattern Mtime_PRESERVE = Mtime' "PRESERVE"
+
+{-# COMPLETE
+  Mtime_NONE,
+  Mtime_PRESERVE,
+  Mtime'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/NfsMountOptions.hs b/gen/Amazonka/DataSync/Types/NfsMountOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/NfsMountOptions.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.Types.NfsMountOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.NfsMountOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types.NfsVersion
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies how DataSync can access a location using the NFS protocol.
+--
+-- /See:/ 'newNfsMountOptions' smart constructor.
+data NfsMountOptions = NfsMountOptions'
+  { -- | Specifies the NFS version that you want DataSync to use when mounting
+    -- your NFS share. If the server refuses to use the version specified, the
+    -- task fails.
+    --
+    -- You can specify the following options:
+    --
+    -- -   @AUTOMATIC@ (default): DataSync chooses NFS version 4.1.
+    --
+    -- -   @NFS3@: Stateless protocol version that allows for asynchronous
+    --     writes on the server.
+    --
+    -- -   @NFSv4_0@: Stateful, firewall-friendly protocol version that
+    --     supports delegations and pseudo file systems.
+    --
+    -- -   @NFSv4_1@: Stateful protocol version that supports sessions,
+    --     directory delegations, and parallel data processing. NFS version 4.1
+    --     also includes all features available in version 4.0.
+    --
+    -- DataSync currently only supports NFS version 3 with Amazon FSx for
+    -- NetApp ONTAP locations.
+    version :: Prelude.Maybe NfsVersion
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NfsMountOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'version', 'nfsMountOptions_version' - Specifies the NFS version that you want DataSync to use when mounting
+-- your NFS share. If the server refuses to use the version specified, the
+-- task fails.
+--
+-- You can specify the following options:
+--
+-- -   @AUTOMATIC@ (default): DataSync chooses NFS version 4.1.
+--
+-- -   @NFS3@: Stateless protocol version that allows for asynchronous
+--     writes on the server.
+--
+-- -   @NFSv4_0@: Stateful, firewall-friendly protocol version that
+--     supports delegations and pseudo file systems.
+--
+-- -   @NFSv4_1@: Stateful protocol version that supports sessions,
+--     directory delegations, and parallel data processing. NFS version 4.1
+--     also includes all features available in version 4.0.
+--
+-- DataSync currently only supports NFS version 3 with Amazon FSx for
+-- NetApp ONTAP locations.
+newNfsMountOptions ::
+  NfsMountOptions
+newNfsMountOptions =
+  NfsMountOptions' {version = Prelude.Nothing}
+
+-- | Specifies the NFS version that you want DataSync to use when mounting
+-- your NFS share. If the server refuses to use the version specified, the
+-- task fails.
+--
+-- You can specify the following options:
+--
+-- -   @AUTOMATIC@ (default): DataSync chooses NFS version 4.1.
+--
+-- -   @NFS3@: Stateless protocol version that allows for asynchronous
+--     writes on the server.
+--
+-- -   @NFSv4_0@: Stateful, firewall-friendly protocol version that
+--     supports delegations and pseudo file systems.
+--
+-- -   @NFSv4_1@: Stateful protocol version that supports sessions,
+--     directory delegations, and parallel data processing. NFS version 4.1
+--     also includes all features available in version 4.0.
+--
+-- DataSync currently only supports NFS version 3 with Amazon FSx for
+-- NetApp ONTAP locations.
+nfsMountOptions_version :: Lens.Lens' NfsMountOptions (Prelude.Maybe NfsVersion)
+nfsMountOptions_version = Lens.lens (\NfsMountOptions' {version} -> version) (\s@NfsMountOptions' {} a -> s {version = a} :: NfsMountOptions)
+
+instance Data.FromJSON NfsMountOptions where
+  parseJSON =
+    Data.withObject
+      "NfsMountOptions"
+      ( \x ->
+          NfsMountOptions' Prelude.<$> (x Data..:? "Version")
+      )
+
+instance Prelude.Hashable NfsMountOptions where
+  hashWithSalt _salt NfsMountOptions' {..} =
+    _salt `Prelude.hashWithSalt` version
+
+instance Prelude.NFData NfsMountOptions where
+  rnf NfsMountOptions' {..} = Prelude.rnf version
+
+instance Data.ToJSON NfsMountOptions where
+  toJSON NfsMountOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Version" Data..=) Prelude.<$> version]
+      )
diff --git a/gen/Amazonka/DataSync/Types/NfsVersion.hs b/gen/Amazonka/DataSync/Types/NfsVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/NfsVersion.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.Types.NfsVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.NfsVersion
+  ( NfsVersion
+      ( ..,
+        NfsVersion_AUTOMATIC,
+        NfsVersion_NFS3,
+        NfsVersion_NFS4_0,
+        NfsVersion_NFS4_1
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype NfsVersion = NfsVersion'
+  { fromNfsVersion ::
+      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 NfsVersion_AUTOMATIC :: NfsVersion
+pattern NfsVersion_AUTOMATIC = NfsVersion' "AUTOMATIC"
+
+pattern NfsVersion_NFS3 :: NfsVersion
+pattern NfsVersion_NFS3 = NfsVersion' "NFS3"
+
+pattern NfsVersion_NFS4_0 :: NfsVersion
+pattern NfsVersion_NFS4_0 = NfsVersion' "NFS4_0"
+
+pattern NfsVersion_NFS4_1 :: NfsVersion
+pattern NfsVersion_NFS4_1 = NfsVersion' "NFS4_1"
+
+{-# COMPLETE
+  NfsVersion_AUTOMATIC,
+  NfsVersion_NFS3,
+  NfsVersion_NFS4_0,
+  NfsVersion_NFS4_1,
+  NfsVersion'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/ObjectStorageServerProtocol.hs b/gen/Amazonka/DataSync/Types/ObjectStorageServerProtocol.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/ObjectStorageServerProtocol.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.DataSync.Types.ObjectStorageServerProtocol
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.ObjectStorageServerProtocol
+  ( ObjectStorageServerProtocol
+      ( ..,
+        ObjectStorageServerProtocol_HTTP,
+        ObjectStorageServerProtocol_HTTPS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ObjectStorageServerProtocol = ObjectStorageServerProtocol'
+  { fromObjectStorageServerProtocol ::
+      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 ObjectStorageServerProtocol_HTTP :: ObjectStorageServerProtocol
+pattern ObjectStorageServerProtocol_HTTP = ObjectStorageServerProtocol' "HTTP"
+
+pattern ObjectStorageServerProtocol_HTTPS :: ObjectStorageServerProtocol
+pattern ObjectStorageServerProtocol_HTTPS = ObjectStorageServerProtocol' "HTTPS"
+
+{-# COMPLETE
+  ObjectStorageServerProtocol_HTTP,
+  ObjectStorageServerProtocol_HTTPS,
+  ObjectStorageServerProtocol'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/ObjectTags.hs b/gen/Amazonka/DataSync/Types/ObjectTags.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/ObjectTags.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.DataSync.Types.ObjectTags
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.ObjectTags
+  ( ObjectTags
+      ( ..,
+        ObjectTags_NONE,
+        ObjectTags_PRESERVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ObjectTags = ObjectTags'
+  { fromObjectTags ::
+      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 ObjectTags_NONE :: ObjectTags
+pattern ObjectTags_NONE = ObjectTags' "NONE"
+
+pattern ObjectTags_PRESERVE :: ObjectTags
+pattern ObjectTags_PRESERVE = ObjectTags' "PRESERVE"
+
+{-# COMPLETE
+  ObjectTags_NONE,
+  ObjectTags_PRESERVE,
+  ObjectTags'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/OnPremConfig.hs b/gen/Amazonka/DataSync/Types/OnPremConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/OnPremConfig.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.Types.OnPremConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.OnPremConfig 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 list of Amazon Resource Names (ARNs) of agents to use for a Network
+-- File System (NFS) location.
+--
+-- /See:/ 'newOnPremConfig' smart constructor.
+data OnPremConfig = OnPremConfig'
+  { -- | ARNs of the agents to use for an NFS location.
+    agentArns :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OnPremConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'agentArns', 'onPremConfig_agentArns' - ARNs of the agents to use for an NFS location.
+newOnPremConfig ::
+  -- | 'agentArns'
+  Prelude.NonEmpty Prelude.Text ->
+  OnPremConfig
+newOnPremConfig pAgentArns_ =
+  OnPremConfig'
+    { agentArns =
+        Lens.coerced Lens.# pAgentArns_
+    }
+
+-- | ARNs of the agents to use for an NFS location.
+onPremConfig_agentArns :: Lens.Lens' OnPremConfig (Prelude.NonEmpty Prelude.Text)
+onPremConfig_agentArns = Lens.lens (\OnPremConfig' {agentArns} -> agentArns) (\s@OnPremConfig' {} a -> s {agentArns = a} :: OnPremConfig) Prelude.. Lens.coerced
+
+instance Data.FromJSON OnPremConfig where
+  parseJSON =
+    Data.withObject
+      "OnPremConfig"
+      ( \x ->
+          OnPremConfig' Prelude.<$> (x Data..: "AgentArns")
+      )
+
+instance Prelude.Hashable OnPremConfig where
+  hashWithSalt _salt OnPremConfig' {..} =
+    _salt `Prelude.hashWithSalt` agentArns
+
+instance Prelude.NFData OnPremConfig where
+  rnf OnPremConfig' {..} = Prelude.rnf agentArns
+
+instance Data.ToJSON OnPremConfig where
+  toJSON OnPremConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("AgentArns" Data..= agentArns)]
+      )
diff --git a/gen/Amazonka/DataSync/Types/Operator.hs b/gen/Amazonka/DataSync/Types/Operator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/Operator.hs
@@ -0,0 +1,111 @@
+{-# 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.DataSync.Types.Operator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.Operator
+  ( Operator
+      ( ..,
+        Operator_BeginsWith,
+        Operator_Contains,
+        Operator_Equals,
+        Operator_GreaterThan,
+        Operator_GreaterThanOrEqual,
+        Operator_In,
+        Operator_LessThan,
+        Operator_LessThanOrEqual,
+        Operator_NotContains,
+        Operator_NotEquals
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Operator = Operator'
+  { fromOperator ::
+      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 Operator_BeginsWith :: Operator
+pattern Operator_BeginsWith = Operator' "BeginsWith"
+
+pattern Operator_Contains :: Operator
+pattern Operator_Contains = Operator' "Contains"
+
+pattern Operator_Equals :: Operator
+pattern Operator_Equals = Operator' "Equals"
+
+pattern Operator_GreaterThan :: Operator
+pattern Operator_GreaterThan = Operator' "GreaterThan"
+
+pattern Operator_GreaterThanOrEqual :: Operator
+pattern Operator_GreaterThanOrEqual = Operator' "GreaterThanOrEqual"
+
+pattern Operator_In :: Operator
+pattern Operator_In = Operator' "In"
+
+pattern Operator_LessThan :: Operator
+pattern Operator_LessThan = Operator' "LessThan"
+
+pattern Operator_LessThanOrEqual :: Operator
+pattern Operator_LessThanOrEqual = Operator' "LessThanOrEqual"
+
+pattern Operator_NotContains :: Operator
+pattern Operator_NotContains = Operator' "NotContains"
+
+pattern Operator_NotEquals :: Operator
+pattern Operator_NotEquals = Operator' "NotEquals"
+
+{-# COMPLETE
+  Operator_BeginsWith,
+  Operator_Contains,
+  Operator_Equals,
+  Operator_GreaterThan,
+  Operator_GreaterThanOrEqual,
+  Operator_In,
+  Operator_LessThan,
+  Operator_LessThanOrEqual,
+  Operator_NotContains,
+  Operator_NotEquals,
+  Operator'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/Options.hs b/gen/Amazonka/DataSync/Types/Options.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/Options.hs
@@ -0,0 +1,857 @@
+{-# 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.DataSync.Types.Options
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.Options where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types.Atime
+import Amazonka.DataSync.Types.Gid
+import Amazonka.DataSync.Types.LogLevel
+import Amazonka.DataSync.Types.Mtime
+import Amazonka.DataSync.Types.ObjectTags
+import Amazonka.DataSync.Types.OverwriteMode
+import Amazonka.DataSync.Types.PosixPermissions
+import Amazonka.DataSync.Types.PreserveDeletedFiles
+import Amazonka.DataSync.Types.PreserveDevices
+import Amazonka.DataSync.Types.SmbSecurityDescriptorCopyFlags
+import Amazonka.DataSync.Types.TaskQueueing
+import Amazonka.DataSync.Types.TransferMode
+import Amazonka.DataSync.Types.Uid
+import Amazonka.DataSync.Types.VerifyMode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configures your DataSync task settings. These options include how
+-- DataSync handles files, objects, and their associated metadata. You also
+-- can specify how DataSync verifies data integrity, set bandwidth limits
+-- for your task, among other options.
+--
+-- Each task setting has a default value. Unless you need to, you don\'t
+-- have to configure any of these @Options@ before starting your task.
+--
+-- /See:/ 'newOptions' smart constructor.
+data Options = Options'
+  { -- | Specifies whether to preserve metadata indicating the last time a file
+    -- was read or written to. If you set @Atime@ to @BEST_EFFORT@, DataSync
+    -- attempts to preserve the original @Atime@ attribute on all source files
+    -- (that is, the version before the @PREPARING@ phase of the task
+    -- execution).
+    --
+    -- The behavior of @Atime@ isn\'t fully standard across platforms, so
+    -- DataSync can only do this on a best-effort basis.
+    --
+    -- Default value: @BEST_EFFORT@
+    --
+    -- @BEST_EFFORT@: Attempt to preserve the per-file @Atime@ value
+    -- (recommended).
+    --
+    -- @NONE@: Ignore @Atime@.
+    --
+    -- If @Atime@ is set to @BEST_EFFORT@, @Mtime@ must be set to @PRESERVE@.
+    --
+    -- If @Atime@ is set to @NONE@, @Mtime@ must also be @NONE@.
+    atime :: Prelude.Maybe Atime,
+    -- | Limits the bandwidth used by a DataSync task. For example, if you want
+    -- DataSync to use a maximum of 1 MB, set this value to @1048576@
+    -- (@=1024*1024@).
+    bytesPerSecond :: Prelude.Maybe Prelude.Integer,
+    -- | Specifies the POSIX group ID (GID) of the file\'s owners.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/special-files.html#metadata-copied Metadata copied by DataSync>.
+    --
+    -- Default value: @INT_VALUE@. This preserves the integer value of the ID.
+    --
+    -- @INT_VALUE@: Preserve the integer value of user ID (UID) and GID
+    -- (recommended).
+    --
+    -- @NONE@: Ignore UID and GID.
+    gid :: Prelude.Maybe Gid,
+    -- | Specifies the type of logs that DataSync publishes to a Amazon
+    -- CloudWatch Logs log group. To specify the log group, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/API_CreateTask.html#DataSync-CreateTask-request-CloudWatchLogGroupArn CloudWatchLogGroupArn>.
+    --
+    -- If you set @LogLevel@ to @OFF@, no logs are published. @BASIC@ publishes
+    -- logs on errors for individual files transferred. @TRANSFER@ publishes
+    -- logs for every file or object that is transferred and integrity checked.
+    logLevel :: Prelude.Maybe LogLevel,
+    -- | Specifies whether to preserve metadata indicating the last time that a
+    -- file was written to before the @PREPARING@ phase of your task execution.
+    -- This option is required when you need to run the a task more than once.
+    --
+    -- Default Value: @PRESERVE@
+    --
+    -- @PRESERVE@: Preserve original @Mtime@ (recommended)
+    --
+    -- @NONE@: Ignore @Mtime@.
+    --
+    -- If @Mtime@ is set to @PRESERVE@, @Atime@ must be set to @BEST_EFFORT@.
+    --
+    -- If @Mtime@ is set to @NONE@, @Atime@ must also be set to @NONE@.
+    mtime :: Prelude.Maybe Mtime,
+    -- | Specifies whether object tags are preserved when transferring between
+    -- object storage systems. If you want your DataSync task to ignore object
+    -- tags, specify the @NONE@ value.
+    --
+    -- Default Value: @PRESERVE@
+    objectTags :: Prelude.Maybe ObjectTags,
+    -- | Specifies whether data at the destination location should be overwritten
+    -- or preserved. If set to @NEVER@, a destination file for example will not
+    -- be replaced by a source file (even if the destination file differs from
+    -- the source file). If you modify files in the destination and you sync
+    -- the files, you can use this value to protect against overwriting those
+    -- changes.
+    --
+    -- Some storage classes have specific behaviors that can affect your Amazon
+    -- S3 storage cost. For detailed information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Considerations when working with Amazon S3 storage classes in DataSync>
+    -- .
+    overwriteMode :: Prelude.Maybe OverwriteMode,
+    -- | Specifies which users or groups can access a file for a specific purpose
+    -- such as reading, writing, or execution of the file.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/special-files.html#metadata-copied Metadata copied by DataSync>.
+    --
+    -- Default value: @PRESERVE@
+    --
+    -- @PRESERVE@: Preserve POSIX-style permissions (recommended).
+    --
+    -- @NONE@: Ignore permissions.
+    --
+    -- DataSync can preserve extant permissions of a source location.
+    posixPermissions :: Prelude.Maybe PosixPermissions,
+    -- | Specifies whether files in the destination location that don\'t exist in
+    -- the source should be preserved. This option can affect your Amazon S3
+    -- storage cost. If your task deletes objects, you might incur minimum
+    -- storage duration charges for certain storage classes. For detailed
+    -- information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Considerations when working with Amazon S3 storage classes in DataSync>
+    -- .
+    --
+    -- Default value: @PRESERVE@
+    --
+    -- @PRESERVE@: Ignore such destination files (recommended).
+    --
+    -- @REMOVE@: Delete destination files that aren’t present in the source.
+    preserveDeletedFiles :: Prelude.Maybe PreserveDeletedFiles,
+    -- | Specifies whether DataSync should preserve the metadata of block and
+    -- character devices in the source location and recreate the files with
+    -- that device name and metadata on the destination. DataSync copies only
+    -- the name and metadata of such devices.
+    --
+    -- DataSync can\'t copy the actual contents of these devices because
+    -- they\'re nonterminal and don\'t return an end-of-file (EOF) marker.
+    --
+    -- Default value: @NONE@
+    --
+    -- @NONE@: Ignore special devices (recommended).
+    --
+    -- @PRESERVE@: Preserve character and block device metadata. This option
+    -- currently isn\'t supported for Amazon EFS.
+    preserveDevices :: Prelude.Maybe PreserveDevices,
+    -- | Specifies which components of the SMB security descriptor are copied
+    -- from source to destination objects.
+    --
+    -- This value is only used for transfers between SMB and Amazon FSx for
+    -- Windows File Server locations or between two FSx for Windows File Server
+    -- locations. For more information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/special-files.html how DataSync handles metadata>.
+    --
+    -- Default value: @OWNER_DACL@
+    --
+    -- @OWNER_DACL@: For each copied object, DataSync copies the following
+    -- metadata:
+    --
+    -- -   The object owner.
+    --
+    -- -   NTFS discretionary access control lists (DACLs), which determine
+    --     whether to grant access to an object.
+    --
+    --     DataSync won\'t copy NTFS system access control lists (SACLs) with
+    --     this option.
+    --
+    -- @OWNER_DACL_SACL@: For each copied object, DataSync copies the following
+    -- metadata:
+    --
+    -- -   The object owner.
+    --
+    -- -   NTFS discretionary access control lists (DACLs), which determine
+    --     whether to grant access to an object.
+    --
+    -- -   SACLs, which are used by administrators to log attempts to access a
+    --     secured object.
+    --
+    --     Copying SACLs requires granting additional permissions to the
+    --     Windows user that DataSync uses to access your SMB location. For
+    --     information about choosing a user that ensures sufficient
+    --     permissions to files, folders, and metadata, see
+    --     <create-smb-location.html#SMBuser user>.
+    --
+    -- @NONE@: None of the SMB security descriptor components are copied.
+    -- Destination objects are owned by the user that was provided for
+    -- accessing the destination location. DACLs and SACLs are set based on the
+    -- destination server’s configuration.
+    securityDescriptorCopyFlags :: Prelude.Maybe SmbSecurityDescriptorCopyFlags,
+    -- | Specifies whether tasks should be queued before executing the tasks. The
+    -- default is @ENABLED@, which means the tasks will be queued.
+    --
+    -- If you use the same agent to run multiple tasks, you can enable the
+    -- tasks to run in series. For more information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/run-task.html#queue-task-execution Queueing task executions>.
+    taskQueueing :: Prelude.Maybe TaskQueueing,
+    -- | Determines whether DataSync transfers only the data and metadata that
+    -- differ between the source and the destination location or transfers all
+    -- the content from the source (without comparing what\'s in the
+    -- destination).
+    --
+    -- @CHANGED@: DataSync copies only data or metadata that is new or
+    -- different content from the source location to the destination location.
+    --
+    -- @ALL@: DataSync copies all source location content to the destination
+    -- (without comparing what\'s in the destination).
+    transferMode :: Prelude.Maybe TransferMode,
+    -- | Specifies the POSIX user ID (UID) of the file\'s owner.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/special-files.html#metadata-copied Metadata copied by DataSync>.
+    --
+    -- Default value: @INT_VALUE@. This preserves the integer value of the ID.
+    --
+    -- @INT_VALUE@: Preserve the integer value of UID and group ID (GID)
+    -- (recommended).
+    --
+    -- @NONE@: Ignore UID and GID.
+    uid :: Prelude.Maybe Uid,
+    -- | Specifies how and when DataSync checks the integrity of your data during
+    -- a transfer.
+    --
+    -- Default value: @POINT_IN_TIME_CONSISTENT@
+    --
+    -- @ONLY_FILES_TRANSFERRED@ (recommended): DataSync calculates the checksum
+    -- of transferred files and metadata at the source location. At the end of
+    -- the transfer, DataSync then compares this checksum to the checksum
+    -- calculated on those files at the destination.
+    --
+    -- We recommend this option when transferring to S3 Glacier Flexible
+    -- Retrieval or S3 Glacier Deep Archive storage classes. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Storage class considerations with Amazon S3 locations>.
+    --
+    -- @POINT_IN_TIME_CONSISTENT@: At the end of the transfer, DataSync scans
+    -- the entire source and destination to verify that both locations are
+    -- fully synchronized.
+    --
+    -- You can\'t use this option when transferring to S3 Glacier Flexible
+    -- Retrieval or S3 Glacier Deep Archive storage classes. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Storage class considerations with Amazon S3 locations>.
+    --
+    -- @NONE@: DataSync doesn\'t run additional verification at the end of the
+    -- transfer. All data transmissions are still integrity-checked with
+    -- checksum verification during the transfer.
+    verifyMode :: Prelude.Maybe VerifyMode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Options' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'atime', 'options_atime' - Specifies whether to preserve metadata indicating the last time a file
+-- was read or written to. If you set @Atime@ to @BEST_EFFORT@, DataSync
+-- attempts to preserve the original @Atime@ attribute on all source files
+-- (that is, the version before the @PREPARING@ phase of the task
+-- execution).
+--
+-- The behavior of @Atime@ isn\'t fully standard across platforms, so
+-- DataSync can only do this on a best-effort basis.
+--
+-- Default value: @BEST_EFFORT@
+--
+-- @BEST_EFFORT@: Attempt to preserve the per-file @Atime@ value
+-- (recommended).
+--
+-- @NONE@: Ignore @Atime@.
+--
+-- If @Atime@ is set to @BEST_EFFORT@, @Mtime@ must be set to @PRESERVE@.
+--
+-- If @Atime@ is set to @NONE@, @Mtime@ must also be @NONE@.
+--
+-- 'bytesPerSecond', 'options_bytesPerSecond' - Limits the bandwidth used by a DataSync task. For example, if you want
+-- DataSync to use a maximum of 1 MB, set this value to @1048576@
+-- (@=1024*1024@).
+--
+-- 'gid', 'options_gid' - Specifies the POSIX group ID (GID) of the file\'s owners.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/special-files.html#metadata-copied Metadata copied by DataSync>.
+--
+-- Default value: @INT_VALUE@. This preserves the integer value of the ID.
+--
+-- @INT_VALUE@: Preserve the integer value of user ID (UID) and GID
+-- (recommended).
+--
+-- @NONE@: Ignore UID and GID.
+--
+-- 'logLevel', 'options_logLevel' - Specifies the type of logs that DataSync publishes to a Amazon
+-- CloudWatch Logs log group. To specify the log group, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/API_CreateTask.html#DataSync-CreateTask-request-CloudWatchLogGroupArn CloudWatchLogGroupArn>.
+--
+-- If you set @LogLevel@ to @OFF@, no logs are published. @BASIC@ publishes
+-- logs on errors for individual files transferred. @TRANSFER@ publishes
+-- logs for every file or object that is transferred and integrity checked.
+--
+-- 'mtime', 'options_mtime' - Specifies whether to preserve metadata indicating the last time that a
+-- file was written to before the @PREPARING@ phase of your task execution.
+-- This option is required when you need to run the a task more than once.
+--
+-- Default Value: @PRESERVE@
+--
+-- @PRESERVE@: Preserve original @Mtime@ (recommended)
+--
+-- @NONE@: Ignore @Mtime@.
+--
+-- If @Mtime@ is set to @PRESERVE@, @Atime@ must be set to @BEST_EFFORT@.
+--
+-- If @Mtime@ is set to @NONE@, @Atime@ must also be set to @NONE@.
+--
+-- 'objectTags', 'options_objectTags' - Specifies whether object tags are preserved when transferring between
+-- object storage systems. If you want your DataSync task to ignore object
+-- tags, specify the @NONE@ value.
+--
+-- Default Value: @PRESERVE@
+--
+-- 'overwriteMode', 'options_overwriteMode' - Specifies whether data at the destination location should be overwritten
+-- or preserved. If set to @NEVER@, a destination file for example will not
+-- be replaced by a source file (even if the destination file differs from
+-- the source file). If you modify files in the destination and you sync
+-- the files, you can use this value to protect against overwriting those
+-- changes.
+--
+-- Some storage classes have specific behaviors that can affect your Amazon
+-- S3 storage cost. For detailed information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Considerations when working with Amazon S3 storage classes in DataSync>
+-- .
+--
+-- 'posixPermissions', 'options_posixPermissions' - Specifies which users or groups can access a file for a specific purpose
+-- such as reading, writing, or execution of the file.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/special-files.html#metadata-copied Metadata copied by DataSync>.
+--
+-- Default value: @PRESERVE@
+--
+-- @PRESERVE@: Preserve POSIX-style permissions (recommended).
+--
+-- @NONE@: Ignore permissions.
+--
+-- DataSync can preserve extant permissions of a source location.
+--
+-- 'preserveDeletedFiles', 'options_preserveDeletedFiles' - Specifies whether files in the destination location that don\'t exist in
+-- the source should be preserved. This option can affect your Amazon S3
+-- storage cost. If your task deletes objects, you might incur minimum
+-- storage duration charges for certain storage classes. For detailed
+-- information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Considerations when working with Amazon S3 storage classes in DataSync>
+-- .
+--
+-- Default value: @PRESERVE@
+--
+-- @PRESERVE@: Ignore such destination files (recommended).
+--
+-- @REMOVE@: Delete destination files that aren’t present in the source.
+--
+-- 'preserveDevices', 'options_preserveDevices' - Specifies whether DataSync should preserve the metadata of block and
+-- character devices in the source location and recreate the files with
+-- that device name and metadata on the destination. DataSync copies only
+-- the name and metadata of such devices.
+--
+-- DataSync can\'t copy the actual contents of these devices because
+-- they\'re nonterminal and don\'t return an end-of-file (EOF) marker.
+--
+-- Default value: @NONE@
+--
+-- @NONE@: Ignore special devices (recommended).
+--
+-- @PRESERVE@: Preserve character and block device metadata. This option
+-- currently isn\'t supported for Amazon EFS.
+--
+-- 'securityDescriptorCopyFlags', 'options_securityDescriptorCopyFlags' - Specifies which components of the SMB security descriptor are copied
+-- from source to destination objects.
+--
+-- This value is only used for transfers between SMB and Amazon FSx for
+-- Windows File Server locations or between two FSx for Windows File Server
+-- locations. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/special-files.html how DataSync handles metadata>.
+--
+-- Default value: @OWNER_DACL@
+--
+-- @OWNER_DACL@: For each copied object, DataSync copies the following
+-- metadata:
+--
+-- -   The object owner.
+--
+-- -   NTFS discretionary access control lists (DACLs), which determine
+--     whether to grant access to an object.
+--
+--     DataSync won\'t copy NTFS system access control lists (SACLs) with
+--     this option.
+--
+-- @OWNER_DACL_SACL@: For each copied object, DataSync copies the following
+-- metadata:
+--
+-- -   The object owner.
+--
+-- -   NTFS discretionary access control lists (DACLs), which determine
+--     whether to grant access to an object.
+--
+-- -   SACLs, which are used by administrators to log attempts to access a
+--     secured object.
+--
+--     Copying SACLs requires granting additional permissions to the
+--     Windows user that DataSync uses to access your SMB location. For
+--     information about choosing a user that ensures sufficient
+--     permissions to files, folders, and metadata, see
+--     <create-smb-location.html#SMBuser user>.
+--
+-- @NONE@: None of the SMB security descriptor components are copied.
+-- Destination objects are owned by the user that was provided for
+-- accessing the destination location. DACLs and SACLs are set based on the
+-- destination server’s configuration.
+--
+-- 'taskQueueing', 'options_taskQueueing' - Specifies whether tasks should be queued before executing the tasks. The
+-- default is @ENABLED@, which means the tasks will be queued.
+--
+-- If you use the same agent to run multiple tasks, you can enable the
+-- tasks to run in series. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/run-task.html#queue-task-execution Queueing task executions>.
+--
+-- 'transferMode', 'options_transferMode' - Determines whether DataSync transfers only the data and metadata that
+-- differ between the source and the destination location or transfers all
+-- the content from the source (without comparing what\'s in the
+-- destination).
+--
+-- @CHANGED@: DataSync copies only data or metadata that is new or
+-- different content from the source location to the destination location.
+--
+-- @ALL@: DataSync copies all source location content to the destination
+-- (without comparing what\'s in the destination).
+--
+-- 'uid', 'options_uid' - Specifies the POSIX user ID (UID) of the file\'s owner.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/special-files.html#metadata-copied Metadata copied by DataSync>.
+--
+-- Default value: @INT_VALUE@. This preserves the integer value of the ID.
+--
+-- @INT_VALUE@: Preserve the integer value of UID and group ID (GID)
+-- (recommended).
+--
+-- @NONE@: Ignore UID and GID.
+--
+-- 'verifyMode', 'options_verifyMode' - Specifies how and when DataSync checks the integrity of your data during
+-- a transfer.
+--
+-- Default value: @POINT_IN_TIME_CONSISTENT@
+--
+-- @ONLY_FILES_TRANSFERRED@ (recommended): DataSync calculates the checksum
+-- of transferred files and metadata at the source location. At the end of
+-- the transfer, DataSync then compares this checksum to the checksum
+-- calculated on those files at the destination.
+--
+-- We recommend this option when transferring to S3 Glacier Flexible
+-- Retrieval or S3 Glacier Deep Archive storage classes. For more
+-- information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Storage class considerations with Amazon S3 locations>.
+--
+-- @POINT_IN_TIME_CONSISTENT@: At the end of the transfer, DataSync scans
+-- the entire source and destination to verify that both locations are
+-- fully synchronized.
+--
+-- You can\'t use this option when transferring to S3 Glacier Flexible
+-- Retrieval or S3 Glacier Deep Archive storage classes. For more
+-- information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Storage class considerations with Amazon S3 locations>.
+--
+-- @NONE@: DataSync doesn\'t run additional verification at the end of the
+-- transfer. All data transmissions are still integrity-checked with
+-- checksum verification during the transfer.
+newOptions ::
+  Options
+newOptions =
+  Options'
+    { atime = Prelude.Nothing,
+      bytesPerSecond = Prelude.Nothing,
+      gid = Prelude.Nothing,
+      logLevel = Prelude.Nothing,
+      mtime = Prelude.Nothing,
+      objectTags = Prelude.Nothing,
+      overwriteMode = Prelude.Nothing,
+      posixPermissions = Prelude.Nothing,
+      preserveDeletedFiles = Prelude.Nothing,
+      preserveDevices = Prelude.Nothing,
+      securityDescriptorCopyFlags = Prelude.Nothing,
+      taskQueueing = Prelude.Nothing,
+      transferMode = Prelude.Nothing,
+      uid = Prelude.Nothing,
+      verifyMode = Prelude.Nothing
+    }
+
+-- | Specifies whether to preserve metadata indicating the last time a file
+-- was read or written to. If you set @Atime@ to @BEST_EFFORT@, DataSync
+-- attempts to preserve the original @Atime@ attribute on all source files
+-- (that is, the version before the @PREPARING@ phase of the task
+-- execution).
+--
+-- The behavior of @Atime@ isn\'t fully standard across platforms, so
+-- DataSync can only do this on a best-effort basis.
+--
+-- Default value: @BEST_EFFORT@
+--
+-- @BEST_EFFORT@: Attempt to preserve the per-file @Atime@ value
+-- (recommended).
+--
+-- @NONE@: Ignore @Atime@.
+--
+-- If @Atime@ is set to @BEST_EFFORT@, @Mtime@ must be set to @PRESERVE@.
+--
+-- If @Atime@ is set to @NONE@, @Mtime@ must also be @NONE@.
+options_atime :: Lens.Lens' Options (Prelude.Maybe Atime)
+options_atime = Lens.lens (\Options' {atime} -> atime) (\s@Options' {} a -> s {atime = a} :: Options)
+
+-- | Limits the bandwidth used by a DataSync task. For example, if you want
+-- DataSync to use a maximum of 1 MB, set this value to @1048576@
+-- (@=1024*1024@).
+options_bytesPerSecond :: Lens.Lens' Options (Prelude.Maybe Prelude.Integer)
+options_bytesPerSecond = Lens.lens (\Options' {bytesPerSecond} -> bytesPerSecond) (\s@Options' {} a -> s {bytesPerSecond = a} :: Options)
+
+-- | Specifies the POSIX group ID (GID) of the file\'s owners.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/special-files.html#metadata-copied Metadata copied by DataSync>.
+--
+-- Default value: @INT_VALUE@. This preserves the integer value of the ID.
+--
+-- @INT_VALUE@: Preserve the integer value of user ID (UID) and GID
+-- (recommended).
+--
+-- @NONE@: Ignore UID and GID.
+options_gid :: Lens.Lens' Options (Prelude.Maybe Gid)
+options_gid = Lens.lens (\Options' {gid} -> gid) (\s@Options' {} a -> s {gid = a} :: Options)
+
+-- | Specifies the type of logs that DataSync publishes to a Amazon
+-- CloudWatch Logs log group. To specify the log group, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/API_CreateTask.html#DataSync-CreateTask-request-CloudWatchLogGroupArn CloudWatchLogGroupArn>.
+--
+-- If you set @LogLevel@ to @OFF@, no logs are published. @BASIC@ publishes
+-- logs on errors for individual files transferred. @TRANSFER@ publishes
+-- logs for every file or object that is transferred and integrity checked.
+options_logLevel :: Lens.Lens' Options (Prelude.Maybe LogLevel)
+options_logLevel = Lens.lens (\Options' {logLevel} -> logLevel) (\s@Options' {} a -> s {logLevel = a} :: Options)
+
+-- | Specifies whether to preserve metadata indicating the last time that a
+-- file was written to before the @PREPARING@ phase of your task execution.
+-- This option is required when you need to run the a task more than once.
+--
+-- Default Value: @PRESERVE@
+--
+-- @PRESERVE@: Preserve original @Mtime@ (recommended)
+--
+-- @NONE@: Ignore @Mtime@.
+--
+-- If @Mtime@ is set to @PRESERVE@, @Atime@ must be set to @BEST_EFFORT@.
+--
+-- If @Mtime@ is set to @NONE@, @Atime@ must also be set to @NONE@.
+options_mtime :: Lens.Lens' Options (Prelude.Maybe Mtime)
+options_mtime = Lens.lens (\Options' {mtime} -> mtime) (\s@Options' {} a -> s {mtime = a} :: Options)
+
+-- | Specifies whether object tags are preserved when transferring between
+-- object storage systems. If you want your DataSync task to ignore object
+-- tags, specify the @NONE@ value.
+--
+-- Default Value: @PRESERVE@
+options_objectTags :: Lens.Lens' Options (Prelude.Maybe ObjectTags)
+options_objectTags = Lens.lens (\Options' {objectTags} -> objectTags) (\s@Options' {} a -> s {objectTags = a} :: Options)
+
+-- | Specifies whether data at the destination location should be overwritten
+-- or preserved. If set to @NEVER@, a destination file for example will not
+-- be replaced by a source file (even if the destination file differs from
+-- the source file). If you modify files in the destination and you sync
+-- the files, you can use this value to protect against overwriting those
+-- changes.
+--
+-- Some storage classes have specific behaviors that can affect your Amazon
+-- S3 storage cost. For detailed information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Considerations when working with Amazon S3 storage classes in DataSync>
+-- .
+options_overwriteMode :: Lens.Lens' Options (Prelude.Maybe OverwriteMode)
+options_overwriteMode = Lens.lens (\Options' {overwriteMode} -> overwriteMode) (\s@Options' {} a -> s {overwriteMode = a} :: Options)
+
+-- | Specifies which users or groups can access a file for a specific purpose
+-- such as reading, writing, or execution of the file.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/special-files.html#metadata-copied Metadata copied by DataSync>.
+--
+-- Default value: @PRESERVE@
+--
+-- @PRESERVE@: Preserve POSIX-style permissions (recommended).
+--
+-- @NONE@: Ignore permissions.
+--
+-- DataSync can preserve extant permissions of a source location.
+options_posixPermissions :: Lens.Lens' Options (Prelude.Maybe PosixPermissions)
+options_posixPermissions = Lens.lens (\Options' {posixPermissions} -> posixPermissions) (\s@Options' {} a -> s {posixPermissions = a} :: Options)
+
+-- | Specifies whether files in the destination location that don\'t exist in
+-- the source should be preserved. This option can affect your Amazon S3
+-- storage cost. If your task deletes objects, you might incur minimum
+-- storage duration charges for certain storage classes. For detailed
+-- information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Considerations when working with Amazon S3 storage classes in DataSync>
+-- .
+--
+-- Default value: @PRESERVE@
+--
+-- @PRESERVE@: Ignore such destination files (recommended).
+--
+-- @REMOVE@: Delete destination files that aren’t present in the source.
+options_preserveDeletedFiles :: Lens.Lens' Options (Prelude.Maybe PreserveDeletedFiles)
+options_preserveDeletedFiles = Lens.lens (\Options' {preserveDeletedFiles} -> preserveDeletedFiles) (\s@Options' {} a -> s {preserveDeletedFiles = a} :: Options)
+
+-- | Specifies whether DataSync should preserve the metadata of block and
+-- character devices in the source location and recreate the files with
+-- that device name and metadata on the destination. DataSync copies only
+-- the name and metadata of such devices.
+--
+-- DataSync can\'t copy the actual contents of these devices because
+-- they\'re nonterminal and don\'t return an end-of-file (EOF) marker.
+--
+-- Default value: @NONE@
+--
+-- @NONE@: Ignore special devices (recommended).
+--
+-- @PRESERVE@: Preserve character and block device metadata. This option
+-- currently isn\'t supported for Amazon EFS.
+options_preserveDevices :: Lens.Lens' Options (Prelude.Maybe PreserveDevices)
+options_preserveDevices = Lens.lens (\Options' {preserveDevices} -> preserveDevices) (\s@Options' {} a -> s {preserveDevices = a} :: Options)
+
+-- | Specifies which components of the SMB security descriptor are copied
+-- from source to destination objects.
+--
+-- This value is only used for transfers between SMB and Amazon FSx for
+-- Windows File Server locations or between two FSx for Windows File Server
+-- locations. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/special-files.html how DataSync handles metadata>.
+--
+-- Default value: @OWNER_DACL@
+--
+-- @OWNER_DACL@: For each copied object, DataSync copies the following
+-- metadata:
+--
+-- -   The object owner.
+--
+-- -   NTFS discretionary access control lists (DACLs), which determine
+--     whether to grant access to an object.
+--
+--     DataSync won\'t copy NTFS system access control lists (SACLs) with
+--     this option.
+--
+-- @OWNER_DACL_SACL@: For each copied object, DataSync copies the following
+-- metadata:
+--
+-- -   The object owner.
+--
+-- -   NTFS discretionary access control lists (DACLs), which determine
+--     whether to grant access to an object.
+--
+-- -   SACLs, which are used by administrators to log attempts to access a
+--     secured object.
+--
+--     Copying SACLs requires granting additional permissions to the
+--     Windows user that DataSync uses to access your SMB location. For
+--     information about choosing a user that ensures sufficient
+--     permissions to files, folders, and metadata, see
+--     <create-smb-location.html#SMBuser user>.
+--
+-- @NONE@: None of the SMB security descriptor components are copied.
+-- Destination objects are owned by the user that was provided for
+-- accessing the destination location. DACLs and SACLs are set based on the
+-- destination server’s configuration.
+options_securityDescriptorCopyFlags :: Lens.Lens' Options (Prelude.Maybe SmbSecurityDescriptorCopyFlags)
+options_securityDescriptorCopyFlags = Lens.lens (\Options' {securityDescriptorCopyFlags} -> securityDescriptorCopyFlags) (\s@Options' {} a -> s {securityDescriptorCopyFlags = a} :: Options)
+
+-- | Specifies whether tasks should be queued before executing the tasks. The
+-- default is @ENABLED@, which means the tasks will be queued.
+--
+-- If you use the same agent to run multiple tasks, you can enable the
+-- tasks to run in series. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/run-task.html#queue-task-execution Queueing task executions>.
+options_taskQueueing :: Lens.Lens' Options (Prelude.Maybe TaskQueueing)
+options_taskQueueing = Lens.lens (\Options' {taskQueueing} -> taskQueueing) (\s@Options' {} a -> s {taskQueueing = a} :: Options)
+
+-- | Determines whether DataSync transfers only the data and metadata that
+-- differ between the source and the destination location or transfers all
+-- the content from the source (without comparing what\'s in the
+-- destination).
+--
+-- @CHANGED@: DataSync copies only data or metadata that is new or
+-- different content from the source location to the destination location.
+--
+-- @ALL@: DataSync copies all source location content to the destination
+-- (without comparing what\'s in the destination).
+options_transferMode :: Lens.Lens' Options (Prelude.Maybe TransferMode)
+options_transferMode = Lens.lens (\Options' {transferMode} -> transferMode) (\s@Options' {} a -> s {transferMode = a} :: Options)
+
+-- | Specifies the POSIX user ID (UID) of the file\'s owner.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/special-files.html#metadata-copied Metadata copied by DataSync>.
+--
+-- Default value: @INT_VALUE@. This preserves the integer value of the ID.
+--
+-- @INT_VALUE@: Preserve the integer value of UID and group ID (GID)
+-- (recommended).
+--
+-- @NONE@: Ignore UID and GID.
+options_uid :: Lens.Lens' Options (Prelude.Maybe Uid)
+options_uid = Lens.lens (\Options' {uid} -> uid) (\s@Options' {} a -> s {uid = a} :: Options)
+
+-- | Specifies how and when DataSync checks the integrity of your data during
+-- a transfer.
+--
+-- Default value: @POINT_IN_TIME_CONSISTENT@
+--
+-- @ONLY_FILES_TRANSFERRED@ (recommended): DataSync calculates the checksum
+-- of transferred files and metadata at the source location. At the end of
+-- the transfer, DataSync then compares this checksum to the checksum
+-- calculated on those files at the destination.
+--
+-- We recommend this option when transferring to S3 Glacier Flexible
+-- Retrieval or S3 Glacier Deep Archive storage classes. For more
+-- information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Storage class considerations with Amazon S3 locations>.
+--
+-- @POINT_IN_TIME_CONSISTENT@: At the end of the transfer, DataSync scans
+-- the entire source and destination to verify that both locations are
+-- fully synchronized.
+--
+-- You can\'t use this option when transferring to S3 Glacier Flexible
+-- Retrieval or S3 Glacier Deep Archive storage classes. For more
+-- information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#using-storage-classes Storage class considerations with Amazon S3 locations>.
+--
+-- @NONE@: DataSync doesn\'t run additional verification at the end of the
+-- transfer. All data transmissions are still integrity-checked with
+-- checksum verification during the transfer.
+options_verifyMode :: Lens.Lens' Options (Prelude.Maybe VerifyMode)
+options_verifyMode = Lens.lens (\Options' {verifyMode} -> verifyMode) (\s@Options' {} a -> s {verifyMode = a} :: Options)
+
+instance Data.FromJSON Options where
+  parseJSON =
+    Data.withObject
+      "Options"
+      ( \x ->
+          Options'
+            Prelude.<$> (x Data..:? "Atime")
+            Prelude.<*> (x Data..:? "BytesPerSecond")
+            Prelude.<*> (x Data..:? "Gid")
+            Prelude.<*> (x Data..:? "LogLevel")
+            Prelude.<*> (x Data..:? "Mtime")
+            Prelude.<*> (x Data..:? "ObjectTags")
+            Prelude.<*> (x Data..:? "OverwriteMode")
+            Prelude.<*> (x Data..:? "PosixPermissions")
+            Prelude.<*> (x Data..:? "PreserveDeletedFiles")
+            Prelude.<*> (x Data..:? "PreserveDevices")
+            Prelude.<*> (x Data..:? "SecurityDescriptorCopyFlags")
+            Prelude.<*> (x Data..:? "TaskQueueing")
+            Prelude.<*> (x Data..:? "TransferMode")
+            Prelude.<*> (x Data..:? "Uid")
+            Prelude.<*> (x Data..:? "VerifyMode")
+      )
+
+instance Prelude.Hashable Options where
+  hashWithSalt _salt Options' {..} =
+    _salt
+      `Prelude.hashWithSalt` atime
+      `Prelude.hashWithSalt` bytesPerSecond
+      `Prelude.hashWithSalt` gid
+      `Prelude.hashWithSalt` logLevel
+      `Prelude.hashWithSalt` mtime
+      `Prelude.hashWithSalt` objectTags
+      `Prelude.hashWithSalt` overwriteMode
+      `Prelude.hashWithSalt` posixPermissions
+      `Prelude.hashWithSalt` preserveDeletedFiles
+      `Prelude.hashWithSalt` preserveDevices
+      `Prelude.hashWithSalt` securityDescriptorCopyFlags
+      `Prelude.hashWithSalt` taskQueueing
+      `Prelude.hashWithSalt` transferMode
+      `Prelude.hashWithSalt` uid
+      `Prelude.hashWithSalt` verifyMode
+
+instance Prelude.NFData Options where
+  rnf Options' {..} =
+    Prelude.rnf atime
+      `Prelude.seq` Prelude.rnf bytesPerSecond
+      `Prelude.seq` Prelude.rnf gid
+      `Prelude.seq` Prelude.rnf logLevel
+      `Prelude.seq` Prelude.rnf mtime
+      `Prelude.seq` Prelude.rnf objectTags
+      `Prelude.seq` Prelude.rnf overwriteMode
+      `Prelude.seq` Prelude.rnf posixPermissions
+      `Prelude.seq` Prelude.rnf preserveDeletedFiles
+      `Prelude.seq` Prelude.rnf preserveDevices
+      `Prelude.seq` Prelude.rnf securityDescriptorCopyFlags
+      `Prelude.seq` Prelude.rnf taskQueueing
+      `Prelude.seq` Prelude.rnf transferMode
+      `Prelude.seq` Prelude.rnf uid
+      `Prelude.seq` Prelude.rnf verifyMode
+
+instance Data.ToJSON Options where
+  toJSON Options' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Atime" Data..=) Prelude.<$> atime,
+            ("BytesPerSecond" Data..=)
+              Prelude.<$> bytesPerSecond,
+            ("Gid" Data..=) Prelude.<$> gid,
+            ("LogLevel" Data..=) Prelude.<$> logLevel,
+            ("Mtime" Data..=) Prelude.<$> mtime,
+            ("ObjectTags" Data..=) Prelude.<$> objectTags,
+            ("OverwriteMode" Data..=) Prelude.<$> overwriteMode,
+            ("PosixPermissions" Data..=)
+              Prelude.<$> posixPermissions,
+            ("PreserveDeletedFiles" Data..=)
+              Prelude.<$> preserveDeletedFiles,
+            ("PreserveDevices" Data..=)
+              Prelude.<$> preserveDevices,
+            ("SecurityDescriptorCopyFlags" Data..=)
+              Prelude.<$> securityDescriptorCopyFlags,
+            ("TaskQueueing" Data..=) Prelude.<$> taskQueueing,
+            ("TransferMode" Data..=) Prelude.<$> transferMode,
+            ("Uid" Data..=) Prelude.<$> uid,
+            ("VerifyMode" Data..=) Prelude.<$> verifyMode
+          ]
+      )
diff --git a/gen/Amazonka/DataSync/Types/OverwriteMode.hs b/gen/Amazonka/DataSync/Types/OverwriteMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/OverwriteMode.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.DataSync.Types.OverwriteMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.OverwriteMode
+  ( OverwriteMode
+      ( ..,
+        OverwriteMode_ALWAYS,
+        OverwriteMode_NEVER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype OverwriteMode = OverwriteMode'
+  { fromOverwriteMode ::
+      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 OverwriteMode_ALWAYS :: OverwriteMode
+pattern OverwriteMode_ALWAYS = OverwriteMode' "ALWAYS"
+
+pattern OverwriteMode_NEVER :: OverwriteMode
+pattern OverwriteMode_NEVER = OverwriteMode' "NEVER"
+
+{-# COMPLETE
+  OverwriteMode_ALWAYS,
+  OverwriteMode_NEVER,
+  OverwriteMode'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/PhaseStatus.hs b/gen/Amazonka/DataSync/Types/PhaseStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/PhaseStatus.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.DataSync.Types.PhaseStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.PhaseStatus
+  ( PhaseStatus
+      ( ..,
+        PhaseStatus_ERROR,
+        PhaseStatus_PENDING,
+        PhaseStatus_SUCCESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PhaseStatus = PhaseStatus'
+  { fromPhaseStatus ::
+      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 PhaseStatus_ERROR :: PhaseStatus
+pattern PhaseStatus_ERROR = PhaseStatus' "ERROR"
+
+pattern PhaseStatus_PENDING :: PhaseStatus
+pattern PhaseStatus_PENDING = PhaseStatus' "PENDING"
+
+pattern PhaseStatus_SUCCESS :: PhaseStatus
+pattern PhaseStatus_SUCCESS = PhaseStatus' "SUCCESS"
+
+{-# COMPLETE
+  PhaseStatus_ERROR,
+  PhaseStatus_PENDING,
+  PhaseStatus_SUCCESS,
+  PhaseStatus'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/PosixPermissions.hs b/gen/Amazonka/DataSync/Types/PosixPermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/PosixPermissions.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.DataSync.Types.PosixPermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.PosixPermissions
+  ( PosixPermissions
+      ( ..,
+        PosixPermissions_NONE,
+        PosixPermissions_PRESERVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PosixPermissions = PosixPermissions'
+  { fromPosixPermissions ::
+      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 PosixPermissions_NONE :: PosixPermissions
+pattern PosixPermissions_NONE = PosixPermissions' "NONE"
+
+pattern PosixPermissions_PRESERVE :: PosixPermissions
+pattern PosixPermissions_PRESERVE = PosixPermissions' "PRESERVE"
+
+{-# COMPLETE
+  PosixPermissions_NONE,
+  PosixPermissions_PRESERVE,
+  PosixPermissions'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/PreserveDeletedFiles.hs b/gen/Amazonka/DataSync/Types/PreserveDeletedFiles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/PreserveDeletedFiles.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.DataSync.Types.PreserveDeletedFiles
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.PreserveDeletedFiles
+  ( PreserveDeletedFiles
+      ( ..,
+        PreserveDeletedFiles_PRESERVE,
+        PreserveDeletedFiles_REMOVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PreserveDeletedFiles = PreserveDeletedFiles'
+  { fromPreserveDeletedFiles ::
+      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 PreserveDeletedFiles_PRESERVE :: PreserveDeletedFiles
+pattern PreserveDeletedFiles_PRESERVE = PreserveDeletedFiles' "PRESERVE"
+
+pattern PreserveDeletedFiles_REMOVE :: PreserveDeletedFiles
+pattern PreserveDeletedFiles_REMOVE = PreserveDeletedFiles' "REMOVE"
+
+{-# COMPLETE
+  PreserveDeletedFiles_PRESERVE,
+  PreserveDeletedFiles_REMOVE,
+  PreserveDeletedFiles'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/PreserveDevices.hs b/gen/Amazonka/DataSync/Types/PreserveDevices.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/PreserveDevices.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.DataSync.Types.PreserveDevices
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.PreserveDevices
+  ( PreserveDevices
+      ( ..,
+        PreserveDevices_NONE,
+        PreserveDevices_PRESERVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PreserveDevices = PreserveDevices'
+  { fromPreserveDevices ::
+      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 PreserveDevices_NONE :: PreserveDevices
+pattern PreserveDevices_NONE = PreserveDevices' "NONE"
+
+pattern PreserveDevices_PRESERVE :: PreserveDevices
+pattern PreserveDevices_PRESERVE = PreserveDevices' "PRESERVE"
+
+{-# COMPLETE
+  PreserveDevices_NONE,
+  PreserveDevices_PRESERVE,
+  PreserveDevices'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/PrivateLinkConfig.hs b/gen/Amazonka/DataSync/Types/PrivateLinkConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/PrivateLinkConfig.hs
@@ -0,0 +1,140 @@
+{-# 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.DataSync.Types.PrivateLinkConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.PrivateLinkConfig 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 VPC endpoint, subnet, and security group that an agent uses to
+-- access IP addresses in a VPC (Virtual Private Cloud).
+--
+-- /See:/ 'newPrivateLinkConfig' smart constructor.
+data PrivateLinkConfig = PrivateLinkConfig'
+  { -- | The private endpoint that is configured for an agent that has access to
+    -- IP addresses in a
+    -- <https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html PrivateLink>.
+    -- An agent that is configured with this endpoint will not be accessible
+    -- over the public internet.
+    privateLinkEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Names (ARNs) of the security groups that are
+    -- configured for the EC2 resource that hosts an agent activated in a VPC
+    -- or an agent that has access to a VPC endpoint.
+    securityGroupArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The Amazon Resource Names (ARNs) of the subnets that are configured for
+    -- an agent activated in a VPC or an agent that has access to a VPC
+    -- endpoint.
+    subnetArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The ID of the VPC endpoint that is configured for an agent. An agent
+    -- that is configured with a VPC endpoint will not be accessible over the
+    -- public internet.
+    vpcEndpointId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrivateLinkConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'privateLinkEndpoint', 'privateLinkConfig_privateLinkEndpoint' - The private endpoint that is configured for an agent that has access to
+-- IP addresses in a
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html PrivateLink>.
+-- An agent that is configured with this endpoint will not be accessible
+-- over the public internet.
+--
+-- 'securityGroupArns', 'privateLinkConfig_securityGroupArns' - The Amazon Resource Names (ARNs) of the security groups that are
+-- configured for the EC2 resource that hosts an agent activated in a VPC
+-- or an agent that has access to a VPC endpoint.
+--
+-- 'subnetArns', 'privateLinkConfig_subnetArns' - The Amazon Resource Names (ARNs) of the subnets that are configured for
+-- an agent activated in a VPC or an agent that has access to a VPC
+-- endpoint.
+--
+-- 'vpcEndpointId', 'privateLinkConfig_vpcEndpointId' - The ID of the VPC endpoint that is configured for an agent. An agent
+-- that is configured with a VPC endpoint will not be accessible over the
+-- public internet.
+newPrivateLinkConfig ::
+  PrivateLinkConfig
+newPrivateLinkConfig =
+  PrivateLinkConfig'
+    { privateLinkEndpoint =
+        Prelude.Nothing,
+      securityGroupArns = Prelude.Nothing,
+      subnetArns = Prelude.Nothing,
+      vpcEndpointId = Prelude.Nothing
+    }
+
+-- | The private endpoint that is configured for an agent that has access to
+-- IP addresses in a
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html PrivateLink>.
+-- An agent that is configured with this endpoint will not be accessible
+-- over the public internet.
+privateLinkConfig_privateLinkEndpoint :: Lens.Lens' PrivateLinkConfig (Prelude.Maybe Prelude.Text)
+privateLinkConfig_privateLinkEndpoint = Lens.lens (\PrivateLinkConfig' {privateLinkEndpoint} -> privateLinkEndpoint) (\s@PrivateLinkConfig' {} a -> s {privateLinkEndpoint = a} :: PrivateLinkConfig)
+
+-- | The Amazon Resource Names (ARNs) of the security groups that are
+-- configured for the EC2 resource that hosts an agent activated in a VPC
+-- or an agent that has access to a VPC endpoint.
+privateLinkConfig_securityGroupArns :: Lens.Lens' PrivateLinkConfig (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+privateLinkConfig_securityGroupArns = Lens.lens (\PrivateLinkConfig' {securityGroupArns} -> securityGroupArns) (\s@PrivateLinkConfig' {} a -> s {securityGroupArns = a} :: PrivateLinkConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Names (ARNs) of the subnets that are configured for
+-- an agent activated in a VPC or an agent that has access to a VPC
+-- endpoint.
+privateLinkConfig_subnetArns :: Lens.Lens' PrivateLinkConfig (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+privateLinkConfig_subnetArns = Lens.lens (\PrivateLinkConfig' {subnetArns} -> subnetArns) (\s@PrivateLinkConfig' {} a -> s {subnetArns = a} :: PrivateLinkConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC endpoint that is configured for an agent. An agent
+-- that is configured with a VPC endpoint will not be accessible over the
+-- public internet.
+privateLinkConfig_vpcEndpointId :: Lens.Lens' PrivateLinkConfig (Prelude.Maybe Prelude.Text)
+privateLinkConfig_vpcEndpointId = Lens.lens (\PrivateLinkConfig' {vpcEndpointId} -> vpcEndpointId) (\s@PrivateLinkConfig' {} a -> s {vpcEndpointId = a} :: PrivateLinkConfig)
+
+instance Data.FromJSON PrivateLinkConfig where
+  parseJSON =
+    Data.withObject
+      "PrivateLinkConfig"
+      ( \x ->
+          PrivateLinkConfig'
+            Prelude.<$> (x Data..:? "PrivateLinkEndpoint")
+            Prelude.<*> (x Data..:? "SecurityGroupArns")
+            Prelude.<*> (x Data..:? "SubnetArns")
+            Prelude.<*> (x Data..:? "VpcEndpointId")
+      )
+
+instance Prelude.Hashable PrivateLinkConfig where
+  hashWithSalt _salt PrivateLinkConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` privateLinkEndpoint
+      `Prelude.hashWithSalt` securityGroupArns
+      `Prelude.hashWithSalt` subnetArns
+      `Prelude.hashWithSalt` vpcEndpointId
+
+instance Prelude.NFData PrivateLinkConfig where
+  rnf PrivateLinkConfig' {..} =
+    Prelude.rnf privateLinkEndpoint
+      `Prelude.seq` Prelude.rnf securityGroupArns
+      `Prelude.seq` Prelude.rnf subnetArns
+      `Prelude.seq` Prelude.rnf vpcEndpointId
diff --git a/gen/Amazonka/DataSync/Types/QopConfiguration.hs b/gen/Amazonka/DataSync/Types/QopConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/QopConfiguration.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.Types.QopConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.QopConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types.HdfsDataTransferProtection
+import Amazonka.DataSync.Types.HdfsRpcProtection
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Quality of Protection (QOP) configuration specifies the Remote
+-- Procedure Call (RPC) and data transfer privacy settings configured on
+-- the Hadoop Distributed File System (HDFS) cluster.
+--
+-- /See:/ 'newQopConfiguration' smart constructor.
+data QopConfiguration = QopConfiguration'
+  { -- | The data transfer protection setting configured on the HDFS cluster.
+    -- This setting corresponds to your @dfs.data.transfer.protection@ setting
+    -- in the @hdfs-site.xml@ file on your Hadoop cluster.
+    dataTransferProtection :: Prelude.Maybe HdfsDataTransferProtection,
+    -- | The RPC protection setting configured on the HDFS cluster. This setting
+    -- corresponds to your @hadoop.rpc.protection@ setting in your
+    -- @core-site.xml@ file on your Hadoop cluster.
+    rpcProtection :: Prelude.Maybe HdfsRpcProtection
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'QopConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataTransferProtection', 'qopConfiguration_dataTransferProtection' - The data transfer protection setting configured on the HDFS cluster.
+-- This setting corresponds to your @dfs.data.transfer.protection@ setting
+-- in the @hdfs-site.xml@ file on your Hadoop cluster.
+--
+-- 'rpcProtection', 'qopConfiguration_rpcProtection' - The RPC protection setting configured on the HDFS cluster. This setting
+-- corresponds to your @hadoop.rpc.protection@ setting in your
+-- @core-site.xml@ file on your Hadoop cluster.
+newQopConfiguration ::
+  QopConfiguration
+newQopConfiguration =
+  QopConfiguration'
+    { dataTransferProtection =
+        Prelude.Nothing,
+      rpcProtection = Prelude.Nothing
+    }
+
+-- | The data transfer protection setting configured on the HDFS cluster.
+-- This setting corresponds to your @dfs.data.transfer.protection@ setting
+-- in the @hdfs-site.xml@ file on your Hadoop cluster.
+qopConfiguration_dataTransferProtection :: Lens.Lens' QopConfiguration (Prelude.Maybe HdfsDataTransferProtection)
+qopConfiguration_dataTransferProtection = Lens.lens (\QopConfiguration' {dataTransferProtection} -> dataTransferProtection) (\s@QopConfiguration' {} a -> s {dataTransferProtection = a} :: QopConfiguration)
+
+-- | The RPC protection setting configured on the HDFS cluster. This setting
+-- corresponds to your @hadoop.rpc.protection@ setting in your
+-- @core-site.xml@ file on your Hadoop cluster.
+qopConfiguration_rpcProtection :: Lens.Lens' QopConfiguration (Prelude.Maybe HdfsRpcProtection)
+qopConfiguration_rpcProtection = Lens.lens (\QopConfiguration' {rpcProtection} -> rpcProtection) (\s@QopConfiguration' {} a -> s {rpcProtection = a} :: QopConfiguration)
+
+instance Data.FromJSON QopConfiguration where
+  parseJSON =
+    Data.withObject
+      "QopConfiguration"
+      ( \x ->
+          QopConfiguration'
+            Prelude.<$> (x Data..:? "DataTransferProtection")
+            Prelude.<*> (x Data..:? "RpcProtection")
+      )
+
+instance Prelude.Hashable QopConfiguration where
+  hashWithSalt _salt QopConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataTransferProtection
+      `Prelude.hashWithSalt` rpcProtection
+
+instance Prelude.NFData QopConfiguration where
+  rnf QopConfiguration' {..} =
+    Prelude.rnf dataTransferProtection
+      `Prelude.seq` Prelude.rnf rpcProtection
+
+instance Data.ToJSON QopConfiguration where
+  toJSON QopConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataTransferProtection" Data..=)
+              Prelude.<$> dataTransferProtection,
+            ("RpcProtection" Data..=) Prelude.<$> rpcProtection
+          ]
+      )
diff --git a/gen/Amazonka/DataSync/Types/S3Config.hs b/gen/Amazonka/DataSync/Types/S3Config.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/S3Config.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.Types.S3Config
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.S3Config 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 Amazon Resource Name (ARN) of the Identity and Access Management
+-- (IAM) role used to access an Amazon S3 bucket.
+--
+-- For detailed information about using such a role, see Creating a
+-- Location for Amazon S3 in the /DataSync User Guide/.
+--
+-- /See:/ 'newS3Config' smart constructor.
+data S3Config = S3Config'
+  { -- | The ARN of the IAM role for accessing the S3 bucket.
+    bucketAccessRoleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Config' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucketAccessRoleArn', 's3Config_bucketAccessRoleArn' - The ARN of the IAM role for accessing the S3 bucket.
+newS3Config ::
+  -- | 'bucketAccessRoleArn'
+  Prelude.Text ->
+  S3Config
+newS3Config pBucketAccessRoleArn_ =
+  S3Config'
+    { bucketAccessRoleArn =
+        pBucketAccessRoleArn_
+    }
+
+-- | The ARN of the IAM role for accessing the S3 bucket.
+s3Config_bucketAccessRoleArn :: Lens.Lens' S3Config Prelude.Text
+s3Config_bucketAccessRoleArn = Lens.lens (\S3Config' {bucketAccessRoleArn} -> bucketAccessRoleArn) (\s@S3Config' {} a -> s {bucketAccessRoleArn = a} :: S3Config)
+
+instance Data.FromJSON S3Config where
+  parseJSON =
+    Data.withObject
+      "S3Config"
+      ( \x ->
+          S3Config'
+            Prelude.<$> (x Data..: "BucketAccessRoleArn")
+      )
+
+instance Prelude.Hashable S3Config where
+  hashWithSalt _salt S3Config' {..} =
+    _salt `Prelude.hashWithSalt` bucketAccessRoleArn
+
+instance Prelude.NFData S3Config where
+  rnf S3Config' {..} = Prelude.rnf bucketAccessRoleArn
+
+instance Data.ToJSON S3Config where
+  toJSON S3Config' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("BucketAccessRoleArn" Data..= bucketAccessRoleArn)
+          ]
+      )
diff --git a/gen/Amazonka/DataSync/Types/S3StorageClass.hs b/gen/Amazonka/DataSync/Types/S3StorageClass.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/S3StorageClass.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.Types.S3StorageClass
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.S3StorageClass
+  ( S3StorageClass
+      ( ..,
+        S3StorageClass_DEEP_ARCHIVE,
+        S3StorageClass_GLACIER,
+        S3StorageClass_GLACIER_INSTANT_RETRIEVAL,
+        S3StorageClass_INTELLIGENT_TIERING,
+        S3StorageClass_ONEZONE_IA,
+        S3StorageClass_OUTPOSTS,
+        S3StorageClass_STANDARD,
+        S3StorageClass_STANDARD_IA
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype S3StorageClass = S3StorageClass'
+  { fromS3StorageClass ::
+      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 S3StorageClass_DEEP_ARCHIVE :: S3StorageClass
+pattern S3StorageClass_DEEP_ARCHIVE = S3StorageClass' "DEEP_ARCHIVE"
+
+pattern S3StorageClass_GLACIER :: S3StorageClass
+pattern S3StorageClass_GLACIER = S3StorageClass' "GLACIER"
+
+pattern S3StorageClass_GLACIER_INSTANT_RETRIEVAL :: S3StorageClass
+pattern S3StorageClass_GLACIER_INSTANT_RETRIEVAL = S3StorageClass' "GLACIER_INSTANT_RETRIEVAL"
+
+pattern S3StorageClass_INTELLIGENT_TIERING :: S3StorageClass
+pattern S3StorageClass_INTELLIGENT_TIERING = S3StorageClass' "INTELLIGENT_TIERING"
+
+pattern S3StorageClass_ONEZONE_IA :: S3StorageClass
+pattern S3StorageClass_ONEZONE_IA = S3StorageClass' "ONEZONE_IA"
+
+pattern S3StorageClass_OUTPOSTS :: S3StorageClass
+pattern S3StorageClass_OUTPOSTS = S3StorageClass' "OUTPOSTS"
+
+pattern S3StorageClass_STANDARD :: S3StorageClass
+pattern S3StorageClass_STANDARD = S3StorageClass' "STANDARD"
+
+pattern S3StorageClass_STANDARD_IA :: S3StorageClass
+pattern S3StorageClass_STANDARD_IA = S3StorageClass' "STANDARD_IA"
+
+{-# COMPLETE
+  S3StorageClass_DEEP_ARCHIVE,
+  S3StorageClass_GLACIER,
+  S3StorageClass_GLACIER_INSTANT_RETRIEVAL,
+  S3StorageClass_INTELLIGENT_TIERING,
+  S3StorageClass_ONEZONE_IA,
+  S3StorageClass_OUTPOSTS,
+  S3StorageClass_STANDARD,
+  S3StorageClass_STANDARD_IA,
+  S3StorageClass'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/SmbMountOptions.hs b/gen/Amazonka/DataSync/Types/SmbMountOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/SmbMountOptions.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.DataSync.Types.SmbMountOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.SmbMountOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types.SmbVersion
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies how DataSync can access a location using the SMB protocol.
+--
+-- /See:/ 'newSmbMountOptions' smart constructor.
+data SmbMountOptions = SmbMountOptions'
+  { -- | Specifies the SMB version that you want DataSync to use when mounting
+    -- your SMB share. If you don\'t specify a version, DataSync defaults to
+    -- @AUTOMATIC@ and chooses a version based on negotiation with the SMB
+    -- server.
+    version :: Prelude.Maybe SmbVersion
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SmbMountOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'version', 'smbMountOptions_version' - Specifies the SMB version that you want DataSync to use when mounting
+-- your SMB share. If you don\'t specify a version, DataSync defaults to
+-- @AUTOMATIC@ and chooses a version based on negotiation with the SMB
+-- server.
+newSmbMountOptions ::
+  SmbMountOptions
+newSmbMountOptions =
+  SmbMountOptions' {version = Prelude.Nothing}
+
+-- | Specifies the SMB version that you want DataSync to use when mounting
+-- your SMB share. If you don\'t specify a version, DataSync defaults to
+-- @AUTOMATIC@ and chooses a version based on negotiation with the SMB
+-- server.
+smbMountOptions_version :: Lens.Lens' SmbMountOptions (Prelude.Maybe SmbVersion)
+smbMountOptions_version = Lens.lens (\SmbMountOptions' {version} -> version) (\s@SmbMountOptions' {} a -> s {version = a} :: SmbMountOptions)
+
+instance Data.FromJSON SmbMountOptions where
+  parseJSON =
+    Data.withObject
+      "SmbMountOptions"
+      ( \x ->
+          SmbMountOptions' Prelude.<$> (x Data..:? "Version")
+      )
+
+instance Prelude.Hashable SmbMountOptions where
+  hashWithSalt _salt SmbMountOptions' {..} =
+    _salt `Prelude.hashWithSalt` version
+
+instance Prelude.NFData SmbMountOptions where
+  rnf SmbMountOptions' {..} = Prelude.rnf version
+
+instance Data.ToJSON SmbMountOptions where
+  toJSON SmbMountOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Version" Data..=) Prelude.<$> version]
+      )
diff --git a/gen/Amazonka/DataSync/Types/SmbSecurityDescriptorCopyFlags.hs b/gen/Amazonka/DataSync/Types/SmbSecurityDescriptorCopyFlags.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/SmbSecurityDescriptorCopyFlags.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.DataSync.Types.SmbSecurityDescriptorCopyFlags
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.SmbSecurityDescriptorCopyFlags
+  ( SmbSecurityDescriptorCopyFlags
+      ( ..,
+        SmbSecurityDescriptorCopyFlags_NONE,
+        SmbSecurityDescriptorCopyFlags_OWNER_DACL,
+        SmbSecurityDescriptorCopyFlags_OWNER_DACL_SACL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SmbSecurityDescriptorCopyFlags = SmbSecurityDescriptorCopyFlags'
+  { fromSmbSecurityDescriptorCopyFlags ::
+      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 SmbSecurityDescriptorCopyFlags_NONE :: SmbSecurityDescriptorCopyFlags
+pattern SmbSecurityDescriptorCopyFlags_NONE = SmbSecurityDescriptorCopyFlags' "NONE"
+
+pattern SmbSecurityDescriptorCopyFlags_OWNER_DACL :: SmbSecurityDescriptorCopyFlags
+pattern SmbSecurityDescriptorCopyFlags_OWNER_DACL = SmbSecurityDescriptorCopyFlags' "OWNER_DACL"
+
+pattern SmbSecurityDescriptorCopyFlags_OWNER_DACL_SACL :: SmbSecurityDescriptorCopyFlags
+pattern SmbSecurityDescriptorCopyFlags_OWNER_DACL_SACL = SmbSecurityDescriptorCopyFlags' "OWNER_DACL_SACL"
+
+{-# COMPLETE
+  SmbSecurityDescriptorCopyFlags_NONE,
+  SmbSecurityDescriptorCopyFlags_OWNER_DACL,
+  SmbSecurityDescriptorCopyFlags_OWNER_DACL_SACL,
+  SmbSecurityDescriptorCopyFlags'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/SmbVersion.hs b/gen/Amazonka/DataSync/Types/SmbVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/SmbVersion.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.DataSync.Types.SmbVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.SmbVersion
+  ( SmbVersion
+      ( ..,
+        SmbVersion_AUTOMATIC,
+        SmbVersion_SMB2,
+        SmbVersion_SMB3
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SmbVersion = SmbVersion'
+  { fromSmbVersion ::
+      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 SmbVersion_AUTOMATIC :: SmbVersion
+pattern SmbVersion_AUTOMATIC = SmbVersion' "AUTOMATIC"
+
+pattern SmbVersion_SMB2 :: SmbVersion
+pattern SmbVersion_SMB2 = SmbVersion' "SMB2"
+
+pattern SmbVersion_SMB3 :: SmbVersion
+pattern SmbVersion_SMB3 = SmbVersion' "SMB3"
+
+{-# COMPLETE
+  SmbVersion_AUTOMATIC,
+  SmbVersion_SMB2,
+  SmbVersion_SMB3,
+  SmbVersion'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/TagListEntry.hs b/gen/Amazonka/DataSync/Types/TagListEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/TagListEntry.hs
@@ -0,0 +1,92 @@
+{-# 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.DataSync.Types.TagListEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.TagListEntry 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 key-value pair representing a single tag that\'s been applied to an
+-- Amazon Web Services resource.
+--
+-- /See:/ 'newTagListEntry' smart constructor.
+data TagListEntry = TagListEntry'
+  { -- | The value for an Amazon Web Services resource tag.
+    value :: Prelude.Maybe Prelude.Text,
+    -- | The key for an Amazon Web Services resource tag.
+    key :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagListEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'tagListEntry_value' - The value for an Amazon Web Services resource tag.
+--
+-- 'key', 'tagListEntry_key' - The key for an Amazon Web Services resource tag.
+newTagListEntry ::
+  -- | 'key'
+  Prelude.Text ->
+  TagListEntry
+newTagListEntry pKey_ =
+  TagListEntry' {value = Prelude.Nothing, key = pKey_}
+
+-- | The value for an Amazon Web Services resource tag.
+tagListEntry_value :: Lens.Lens' TagListEntry (Prelude.Maybe Prelude.Text)
+tagListEntry_value = Lens.lens (\TagListEntry' {value} -> value) (\s@TagListEntry' {} a -> s {value = a} :: TagListEntry)
+
+-- | The key for an Amazon Web Services resource tag.
+tagListEntry_key :: Lens.Lens' TagListEntry Prelude.Text
+tagListEntry_key = Lens.lens (\TagListEntry' {key} -> key) (\s@TagListEntry' {} a -> s {key = a} :: TagListEntry)
+
+instance Data.FromJSON TagListEntry where
+  parseJSON =
+    Data.withObject
+      "TagListEntry"
+      ( \x ->
+          TagListEntry'
+            Prelude.<$> (x Data..:? "Value")
+            Prelude.<*> (x Data..: "Key")
+      )
+
+instance Prelude.Hashable TagListEntry where
+  hashWithSalt _salt TagListEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` value
+      `Prelude.hashWithSalt` key
+
+instance Prelude.NFData TagListEntry where
+  rnf TagListEntry' {..} =
+    Prelude.rnf value `Prelude.seq` Prelude.rnf key
+
+instance Data.ToJSON TagListEntry where
+  toJSON TagListEntry' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Value" Data..=) Prelude.<$> value,
+            Prelude.Just ("Key" Data..= key)
+          ]
+      )
diff --git a/gen/Amazonka/DataSync/Types/TaskExecutionListEntry.hs b/gen/Amazonka/DataSync/Types/TaskExecutionListEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/TaskExecutionListEntry.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.DataSync.Types.TaskExecutionListEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.TaskExecutionListEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types.TaskExecutionStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a single entry in a list of task executions.
+-- @TaskExecutionListEntry@ returns an array that contains a list of
+-- specific invocations of a task when the
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/API_ListTaskExecutions.html ListTaskExecutions>
+-- operation is called.
+--
+-- /See:/ 'newTaskExecutionListEntry' smart constructor.
+data TaskExecutionListEntry = TaskExecutionListEntry'
+  { -- | The status of a task execution.
+    status :: Prelude.Maybe TaskExecutionStatus,
+    -- | The Amazon Resource Name (ARN) of the task that was executed.
+    taskExecutionArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TaskExecutionListEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'status', 'taskExecutionListEntry_status' - The status of a task execution.
+--
+-- 'taskExecutionArn', 'taskExecutionListEntry_taskExecutionArn' - The Amazon Resource Name (ARN) of the task that was executed.
+newTaskExecutionListEntry ::
+  TaskExecutionListEntry
+newTaskExecutionListEntry =
+  TaskExecutionListEntry'
+    { status = Prelude.Nothing,
+      taskExecutionArn = Prelude.Nothing
+    }
+
+-- | The status of a task execution.
+taskExecutionListEntry_status :: Lens.Lens' TaskExecutionListEntry (Prelude.Maybe TaskExecutionStatus)
+taskExecutionListEntry_status = Lens.lens (\TaskExecutionListEntry' {status} -> status) (\s@TaskExecutionListEntry' {} a -> s {status = a} :: TaskExecutionListEntry)
+
+-- | The Amazon Resource Name (ARN) of the task that was executed.
+taskExecutionListEntry_taskExecutionArn :: Lens.Lens' TaskExecutionListEntry (Prelude.Maybe Prelude.Text)
+taskExecutionListEntry_taskExecutionArn = Lens.lens (\TaskExecutionListEntry' {taskExecutionArn} -> taskExecutionArn) (\s@TaskExecutionListEntry' {} a -> s {taskExecutionArn = a} :: TaskExecutionListEntry)
+
+instance Data.FromJSON TaskExecutionListEntry where
+  parseJSON =
+    Data.withObject
+      "TaskExecutionListEntry"
+      ( \x ->
+          TaskExecutionListEntry'
+            Prelude.<$> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "TaskExecutionArn")
+      )
+
+instance Prelude.Hashable TaskExecutionListEntry where
+  hashWithSalt _salt TaskExecutionListEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` taskExecutionArn
+
+instance Prelude.NFData TaskExecutionListEntry where
+  rnf TaskExecutionListEntry' {..} =
+    Prelude.rnf status
+      `Prelude.seq` Prelude.rnf taskExecutionArn
diff --git a/gen/Amazonka/DataSync/Types/TaskExecutionResultDetail.hs b/gen/Amazonka/DataSync/Types/TaskExecutionResultDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/TaskExecutionResultDetail.hs
@@ -0,0 +1,190 @@
+{-# 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.DataSync.Types.TaskExecutionResultDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.TaskExecutionResultDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types.PhaseStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the detailed result of a @TaskExecution@ operation. This
+-- result includes the time in milliseconds spent in each phase, the status
+-- of the task execution, and the errors encountered.
+--
+-- /See:/ 'newTaskExecutionResultDetail' smart constructor.
+data TaskExecutionResultDetail = TaskExecutionResultDetail'
+  { -- | Errors that DataSync encountered during execution of the task. You can
+    -- use this error code to help troubleshoot issues.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | Detailed description of an error that was encountered during the task
+    -- execution. You can use this information to help troubleshoot issues.
+    errorDetail :: Prelude.Maybe Prelude.Text,
+    -- | The total time in milliseconds that DataSync spent in the PREPARING
+    -- phase.
+    prepareDuration :: Prelude.Maybe Prelude.Natural,
+    -- | The status of the PREPARING phase.
+    prepareStatus :: Prelude.Maybe PhaseStatus,
+    -- | The total time in milliseconds that DataSync took to transfer the file
+    -- from the source to the destination location.
+    totalDuration :: Prelude.Maybe Prelude.Natural,
+    -- | The total time in milliseconds that DataSync spent in the TRANSFERRING
+    -- phase.
+    transferDuration :: Prelude.Maybe Prelude.Natural,
+    -- | The status of the TRANSFERRING phase.
+    transferStatus :: Prelude.Maybe PhaseStatus,
+    -- | The total time in milliseconds that DataSync spent in the VERIFYING
+    -- phase.
+    verifyDuration :: Prelude.Maybe Prelude.Natural,
+    -- | The status of the VERIFYING phase.
+    verifyStatus :: Prelude.Maybe PhaseStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TaskExecutionResultDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'taskExecutionResultDetail_errorCode' - Errors that DataSync encountered during execution of the task. You can
+-- use this error code to help troubleshoot issues.
+--
+-- 'errorDetail', 'taskExecutionResultDetail_errorDetail' - Detailed description of an error that was encountered during the task
+-- execution. You can use this information to help troubleshoot issues.
+--
+-- 'prepareDuration', 'taskExecutionResultDetail_prepareDuration' - The total time in milliseconds that DataSync spent in the PREPARING
+-- phase.
+--
+-- 'prepareStatus', 'taskExecutionResultDetail_prepareStatus' - The status of the PREPARING phase.
+--
+-- 'totalDuration', 'taskExecutionResultDetail_totalDuration' - The total time in milliseconds that DataSync took to transfer the file
+-- from the source to the destination location.
+--
+-- 'transferDuration', 'taskExecutionResultDetail_transferDuration' - The total time in milliseconds that DataSync spent in the TRANSFERRING
+-- phase.
+--
+-- 'transferStatus', 'taskExecutionResultDetail_transferStatus' - The status of the TRANSFERRING phase.
+--
+-- 'verifyDuration', 'taskExecutionResultDetail_verifyDuration' - The total time in milliseconds that DataSync spent in the VERIFYING
+-- phase.
+--
+-- 'verifyStatus', 'taskExecutionResultDetail_verifyStatus' - The status of the VERIFYING phase.
+newTaskExecutionResultDetail ::
+  TaskExecutionResultDetail
+newTaskExecutionResultDetail =
+  TaskExecutionResultDetail'
+    { errorCode =
+        Prelude.Nothing,
+      errorDetail = Prelude.Nothing,
+      prepareDuration = Prelude.Nothing,
+      prepareStatus = Prelude.Nothing,
+      totalDuration = Prelude.Nothing,
+      transferDuration = Prelude.Nothing,
+      transferStatus = Prelude.Nothing,
+      verifyDuration = Prelude.Nothing,
+      verifyStatus = Prelude.Nothing
+    }
+
+-- | Errors that DataSync encountered during execution of the task. You can
+-- use this error code to help troubleshoot issues.
+taskExecutionResultDetail_errorCode :: Lens.Lens' TaskExecutionResultDetail (Prelude.Maybe Prelude.Text)
+taskExecutionResultDetail_errorCode = Lens.lens (\TaskExecutionResultDetail' {errorCode} -> errorCode) (\s@TaskExecutionResultDetail' {} a -> s {errorCode = a} :: TaskExecutionResultDetail)
+
+-- | Detailed description of an error that was encountered during the task
+-- execution. You can use this information to help troubleshoot issues.
+taskExecutionResultDetail_errorDetail :: Lens.Lens' TaskExecutionResultDetail (Prelude.Maybe Prelude.Text)
+taskExecutionResultDetail_errorDetail = Lens.lens (\TaskExecutionResultDetail' {errorDetail} -> errorDetail) (\s@TaskExecutionResultDetail' {} a -> s {errorDetail = a} :: TaskExecutionResultDetail)
+
+-- | The total time in milliseconds that DataSync spent in the PREPARING
+-- phase.
+taskExecutionResultDetail_prepareDuration :: Lens.Lens' TaskExecutionResultDetail (Prelude.Maybe Prelude.Natural)
+taskExecutionResultDetail_prepareDuration = Lens.lens (\TaskExecutionResultDetail' {prepareDuration} -> prepareDuration) (\s@TaskExecutionResultDetail' {} a -> s {prepareDuration = a} :: TaskExecutionResultDetail)
+
+-- | The status of the PREPARING phase.
+taskExecutionResultDetail_prepareStatus :: Lens.Lens' TaskExecutionResultDetail (Prelude.Maybe PhaseStatus)
+taskExecutionResultDetail_prepareStatus = Lens.lens (\TaskExecutionResultDetail' {prepareStatus} -> prepareStatus) (\s@TaskExecutionResultDetail' {} a -> s {prepareStatus = a} :: TaskExecutionResultDetail)
+
+-- | The total time in milliseconds that DataSync took to transfer the file
+-- from the source to the destination location.
+taskExecutionResultDetail_totalDuration :: Lens.Lens' TaskExecutionResultDetail (Prelude.Maybe Prelude.Natural)
+taskExecutionResultDetail_totalDuration = Lens.lens (\TaskExecutionResultDetail' {totalDuration} -> totalDuration) (\s@TaskExecutionResultDetail' {} a -> s {totalDuration = a} :: TaskExecutionResultDetail)
+
+-- | The total time in milliseconds that DataSync spent in the TRANSFERRING
+-- phase.
+taskExecutionResultDetail_transferDuration :: Lens.Lens' TaskExecutionResultDetail (Prelude.Maybe Prelude.Natural)
+taskExecutionResultDetail_transferDuration = Lens.lens (\TaskExecutionResultDetail' {transferDuration} -> transferDuration) (\s@TaskExecutionResultDetail' {} a -> s {transferDuration = a} :: TaskExecutionResultDetail)
+
+-- | The status of the TRANSFERRING phase.
+taskExecutionResultDetail_transferStatus :: Lens.Lens' TaskExecutionResultDetail (Prelude.Maybe PhaseStatus)
+taskExecutionResultDetail_transferStatus = Lens.lens (\TaskExecutionResultDetail' {transferStatus} -> transferStatus) (\s@TaskExecutionResultDetail' {} a -> s {transferStatus = a} :: TaskExecutionResultDetail)
+
+-- | The total time in milliseconds that DataSync spent in the VERIFYING
+-- phase.
+taskExecutionResultDetail_verifyDuration :: Lens.Lens' TaskExecutionResultDetail (Prelude.Maybe Prelude.Natural)
+taskExecutionResultDetail_verifyDuration = Lens.lens (\TaskExecutionResultDetail' {verifyDuration} -> verifyDuration) (\s@TaskExecutionResultDetail' {} a -> s {verifyDuration = a} :: TaskExecutionResultDetail)
+
+-- | The status of the VERIFYING phase.
+taskExecutionResultDetail_verifyStatus :: Lens.Lens' TaskExecutionResultDetail (Prelude.Maybe PhaseStatus)
+taskExecutionResultDetail_verifyStatus = Lens.lens (\TaskExecutionResultDetail' {verifyStatus} -> verifyStatus) (\s@TaskExecutionResultDetail' {} a -> s {verifyStatus = a} :: TaskExecutionResultDetail)
+
+instance Data.FromJSON TaskExecutionResultDetail where
+  parseJSON =
+    Data.withObject
+      "TaskExecutionResultDetail"
+      ( \x ->
+          TaskExecutionResultDetail'
+            Prelude.<$> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorDetail")
+            Prelude.<*> (x Data..:? "PrepareDuration")
+            Prelude.<*> (x Data..:? "PrepareStatus")
+            Prelude.<*> (x Data..:? "TotalDuration")
+            Prelude.<*> (x Data..:? "TransferDuration")
+            Prelude.<*> (x Data..:? "TransferStatus")
+            Prelude.<*> (x Data..:? "VerifyDuration")
+            Prelude.<*> (x Data..:? "VerifyStatus")
+      )
+
+instance Prelude.Hashable TaskExecutionResultDetail where
+  hashWithSalt _salt TaskExecutionResultDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorDetail
+      `Prelude.hashWithSalt` prepareDuration
+      `Prelude.hashWithSalt` prepareStatus
+      `Prelude.hashWithSalt` totalDuration
+      `Prelude.hashWithSalt` transferDuration
+      `Prelude.hashWithSalt` transferStatus
+      `Prelude.hashWithSalt` verifyDuration
+      `Prelude.hashWithSalt` verifyStatus
+
+instance Prelude.NFData TaskExecutionResultDetail where
+  rnf TaskExecutionResultDetail' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorDetail
+      `Prelude.seq` Prelude.rnf prepareDuration
+      `Prelude.seq` Prelude.rnf prepareStatus
+      `Prelude.seq` Prelude.rnf totalDuration
+      `Prelude.seq` Prelude.rnf transferDuration
+      `Prelude.seq` Prelude.rnf transferStatus
+      `Prelude.seq` Prelude.rnf verifyDuration
+      `Prelude.seq` Prelude.rnf verifyStatus
diff --git a/gen/Amazonka/DataSync/Types/TaskExecutionStatus.hs b/gen/Amazonka/DataSync/Types/TaskExecutionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/TaskExecutionStatus.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.DataSync.Types.TaskExecutionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.TaskExecutionStatus
+  ( TaskExecutionStatus
+      ( ..,
+        TaskExecutionStatus_ERROR,
+        TaskExecutionStatus_LAUNCHING,
+        TaskExecutionStatus_PREPARING,
+        TaskExecutionStatus_QUEUED,
+        TaskExecutionStatus_SUCCESS,
+        TaskExecutionStatus_TRANSFERRING,
+        TaskExecutionStatus_VERIFYING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TaskExecutionStatus = TaskExecutionStatus'
+  { fromTaskExecutionStatus ::
+      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 TaskExecutionStatus_ERROR :: TaskExecutionStatus
+pattern TaskExecutionStatus_ERROR = TaskExecutionStatus' "ERROR"
+
+pattern TaskExecutionStatus_LAUNCHING :: TaskExecutionStatus
+pattern TaskExecutionStatus_LAUNCHING = TaskExecutionStatus' "LAUNCHING"
+
+pattern TaskExecutionStatus_PREPARING :: TaskExecutionStatus
+pattern TaskExecutionStatus_PREPARING = TaskExecutionStatus' "PREPARING"
+
+pattern TaskExecutionStatus_QUEUED :: TaskExecutionStatus
+pattern TaskExecutionStatus_QUEUED = TaskExecutionStatus' "QUEUED"
+
+pattern TaskExecutionStatus_SUCCESS :: TaskExecutionStatus
+pattern TaskExecutionStatus_SUCCESS = TaskExecutionStatus' "SUCCESS"
+
+pattern TaskExecutionStatus_TRANSFERRING :: TaskExecutionStatus
+pattern TaskExecutionStatus_TRANSFERRING = TaskExecutionStatus' "TRANSFERRING"
+
+pattern TaskExecutionStatus_VERIFYING :: TaskExecutionStatus
+pattern TaskExecutionStatus_VERIFYING = TaskExecutionStatus' "VERIFYING"
+
+{-# COMPLETE
+  TaskExecutionStatus_ERROR,
+  TaskExecutionStatus_LAUNCHING,
+  TaskExecutionStatus_PREPARING,
+  TaskExecutionStatus_QUEUED,
+  TaskExecutionStatus_SUCCESS,
+  TaskExecutionStatus_TRANSFERRING,
+  TaskExecutionStatus_VERIFYING,
+  TaskExecutionStatus'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/TaskFilter.hs b/gen/Amazonka/DataSync/Types/TaskFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/TaskFilter.hs
@@ -0,0 +1,119 @@
+{-# 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.DataSync.Types.TaskFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.TaskFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types.Operator
+import Amazonka.DataSync.Types.TaskFilterName
+import qualified Amazonka.Prelude as Prelude
+
+-- | You can use API filters to narrow down the list of resources returned by
+-- @ListTasks@. For example, to retrieve all tasks on a source location,
+-- you can use @ListTasks@ with filter name @LocationId@ and
+-- @Operator Equals@ with the ARN for the location.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/query-resources.html filtering DataSync resources>.
+--
+-- /See:/ 'newTaskFilter' smart constructor.
+data TaskFilter = TaskFilter'
+  { -- | The name of the filter being used. Each API call supports a list of
+    -- filters that are available for it. For example, @LocationId@ for
+    -- @ListTasks@.
+    name :: TaskFilterName,
+    -- | The values that you want to filter for. For example, you might want to
+    -- display only tasks for a specific destination location.
+    values :: [Prelude.Text],
+    -- | The operator that is used to compare filter values (for example,
+    -- @Equals@ or @Contains@).
+    operator :: Operator
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TaskFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'taskFilter_name' - The name of the filter being used. Each API call supports a list of
+-- filters that are available for it. For example, @LocationId@ for
+-- @ListTasks@.
+--
+-- 'values', 'taskFilter_values' - The values that you want to filter for. For example, you might want to
+-- display only tasks for a specific destination location.
+--
+-- 'operator', 'taskFilter_operator' - The operator that is used to compare filter values (for example,
+-- @Equals@ or @Contains@).
+newTaskFilter ::
+  -- | 'name'
+  TaskFilterName ->
+  -- | 'operator'
+  Operator ->
+  TaskFilter
+newTaskFilter pName_ pOperator_ =
+  TaskFilter'
+    { name = pName_,
+      values = Prelude.mempty,
+      operator = pOperator_
+    }
+
+-- | The name of the filter being used. Each API call supports a list of
+-- filters that are available for it. For example, @LocationId@ for
+-- @ListTasks@.
+taskFilter_name :: Lens.Lens' TaskFilter TaskFilterName
+taskFilter_name = Lens.lens (\TaskFilter' {name} -> name) (\s@TaskFilter' {} a -> s {name = a} :: TaskFilter)
+
+-- | The values that you want to filter for. For example, you might want to
+-- display only tasks for a specific destination location.
+taskFilter_values :: Lens.Lens' TaskFilter [Prelude.Text]
+taskFilter_values = Lens.lens (\TaskFilter' {values} -> values) (\s@TaskFilter' {} a -> s {values = a} :: TaskFilter) Prelude.. Lens.coerced
+
+-- | The operator that is used to compare filter values (for example,
+-- @Equals@ or @Contains@).
+taskFilter_operator :: Lens.Lens' TaskFilter Operator
+taskFilter_operator = Lens.lens (\TaskFilter' {operator} -> operator) (\s@TaskFilter' {} a -> s {operator = a} :: TaskFilter)
+
+instance Prelude.Hashable TaskFilter where
+  hashWithSalt _salt TaskFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+      `Prelude.hashWithSalt` operator
+
+instance Prelude.NFData TaskFilter where
+  rnf TaskFilter' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf values
+      `Prelude.seq` Prelude.rnf operator
+
+instance Data.ToJSON TaskFilter where
+  toJSON TaskFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Values" Data..= values),
+            Prelude.Just ("Operator" Data..= operator)
+          ]
+      )
diff --git a/gen/Amazonka/DataSync/Types/TaskFilterName.hs b/gen/Amazonka/DataSync/Types/TaskFilterName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/TaskFilterName.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.DataSync.Types.TaskFilterName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.TaskFilterName
+  ( TaskFilterName
+      ( ..,
+        TaskFilterName_CreationTime,
+        TaskFilterName_LocationId
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TaskFilterName = TaskFilterName'
+  { fromTaskFilterName ::
+      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 TaskFilterName_CreationTime :: TaskFilterName
+pattern TaskFilterName_CreationTime = TaskFilterName' "CreationTime"
+
+pattern TaskFilterName_LocationId :: TaskFilterName
+pattern TaskFilterName_LocationId = TaskFilterName' "LocationId"
+
+{-# COMPLETE
+  TaskFilterName_CreationTime,
+  TaskFilterName_LocationId,
+  TaskFilterName'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/TaskListEntry.hs b/gen/Amazonka/DataSync/Types/TaskListEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/TaskListEntry.hs
@@ -0,0 +1,101 @@
+{-# 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.DataSync.Types.TaskListEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.TaskListEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types.TaskStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a single entry in a list of tasks. @TaskListEntry@ returns an
+-- array that contains a list of tasks when the
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/API_ListTasks.html ListTasks>
+-- operation is called. A task includes the source and destination file
+-- systems to sync and the options to use for the tasks.
+--
+-- /See:/ 'newTaskListEntry' smart constructor.
+data TaskListEntry = TaskListEntry'
+  { -- | The name of the task.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The status of the task.
+    status :: Prelude.Maybe TaskStatus,
+    -- | The Amazon Resource Name (ARN) of the task.
+    taskArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TaskListEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'taskListEntry_name' - The name of the task.
+--
+-- 'status', 'taskListEntry_status' - The status of the task.
+--
+-- 'taskArn', 'taskListEntry_taskArn' - The Amazon Resource Name (ARN) of the task.
+newTaskListEntry ::
+  TaskListEntry
+newTaskListEntry =
+  TaskListEntry'
+    { name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      taskArn = Prelude.Nothing
+    }
+
+-- | The name of the task.
+taskListEntry_name :: Lens.Lens' TaskListEntry (Prelude.Maybe Prelude.Text)
+taskListEntry_name = Lens.lens (\TaskListEntry' {name} -> name) (\s@TaskListEntry' {} a -> s {name = a} :: TaskListEntry)
+
+-- | The status of the task.
+taskListEntry_status :: Lens.Lens' TaskListEntry (Prelude.Maybe TaskStatus)
+taskListEntry_status = Lens.lens (\TaskListEntry' {status} -> status) (\s@TaskListEntry' {} a -> s {status = a} :: TaskListEntry)
+
+-- | The Amazon Resource Name (ARN) of the task.
+taskListEntry_taskArn :: Lens.Lens' TaskListEntry (Prelude.Maybe Prelude.Text)
+taskListEntry_taskArn = Lens.lens (\TaskListEntry' {taskArn} -> taskArn) (\s@TaskListEntry' {} a -> s {taskArn = a} :: TaskListEntry)
+
+instance Data.FromJSON TaskListEntry where
+  parseJSON =
+    Data.withObject
+      "TaskListEntry"
+      ( \x ->
+          TaskListEntry'
+            Prelude.<$> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "TaskArn")
+      )
+
+instance Prelude.Hashable TaskListEntry where
+  hashWithSalt _salt TaskListEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` taskArn
+
+instance Prelude.NFData TaskListEntry where
+  rnf TaskListEntry' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf taskArn
diff --git a/gen/Amazonka/DataSync/Types/TaskQueueing.hs b/gen/Amazonka/DataSync/Types/TaskQueueing.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/TaskQueueing.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.DataSync.Types.TaskQueueing
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.TaskQueueing
+  ( TaskQueueing
+      ( ..,
+        TaskQueueing_DISABLED,
+        TaskQueueing_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TaskQueueing = TaskQueueing'
+  { fromTaskQueueing ::
+      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 TaskQueueing_DISABLED :: TaskQueueing
+pattern TaskQueueing_DISABLED = TaskQueueing' "DISABLED"
+
+pattern TaskQueueing_ENABLED :: TaskQueueing
+pattern TaskQueueing_ENABLED = TaskQueueing' "ENABLED"
+
+{-# COMPLETE
+  TaskQueueing_DISABLED,
+  TaskQueueing_ENABLED,
+  TaskQueueing'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/TaskSchedule.hs b/gen/Amazonka/DataSync/Types/TaskSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/TaskSchedule.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.Types.TaskSchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.TaskSchedule 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
+
+-- | Specifies the schedule you want your task to use for repeated
+-- executions. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html Schedule Expressions for Rules>.
+--
+-- /See:/ 'newTaskSchedule' smart constructor.
+data TaskSchedule = TaskSchedule'
+  { -- | A cron expression that specifies when DataSync initiates a scheduled
+    -- transfer from a source to a destination location.
+    scheduleExpression :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TaskSchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'scheduleExpression', 'taskSchedule_scheduleExpression' - A cron expression that specifies when DataSync initiates a scheduled
+-- transfer from a source to a destination location.
+newTaskSchedule ::
+  -- | 'scheduleExpression'
+  Prelude.Text ->
+  TaskSchedule
+newTaskSchedule pScheduleExpression_ =
+  TaskSchedule'
+    { scheduleExpression =
+        pScheduleExpression_
+    }
+
+-- | A cron expression that specifies when DataSync initiates a scheduled
+-- transfer from a source to a destination location.
+taskSchedule_scheduleExpression :: Lens.Lens' TaskSchedule Prelude.Text
+taskSchedule_scheduleExpression = Lens.lens (\TaskSchedule' {scheduleExpression} -> scheduleExpression) (\s@TaskSchedule' {} a -> s {scheduleExpression = a} :: TaskSchedule)
+
+instance Data.FromJSON TaskSchedule where
+  parseJSON =
+    Data.withObject
+      "TaskSchedule"
+      ( \x ->
+          TaskSchedule'
+            Prelude.<$> (x Data..: "ScheduleExpression")
+      )
+
+instance Prelude.Hashable TaskSchedule where
+  hashWithSalt _salt TaskSchedule' {..} =
+    _salt `Prelude.hashWithSalt` scheduleExpression
+
+instance Prelude.NFData TaskSchedule where
+  rnf TaskSchedule' {..} =
+    Prelude.rnf scheduleExpression
+
+instance Data.ToJSON TaskSchedule where
+  toJSON TaskSchedule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ScheduleExpression" Data..= scheduleExpression)
+          ]
+      )
diff --git a/gen/Amazonka/DataSync/Types/TaskStatus.hs b/gen/Amazonka/DataSync/Types/TaskStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/TaskStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.Types.TaskStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.TaskStatus
+  ( TaskStatus
+      ( ..,
+        TaskStatus_AVAILABLE,
+        TaskStatus_CREATING,
+        TaskStatus_QUEUED,
+        TaskStatus_RUNNING,
+        TaskStatus_UNAVAILABLE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TaskStatus = TaskStatus'
+  { fromTaskStatus ::
+      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 TaskStatus_AVAILABLE :: TaskStatus
+pattern TaskStatus_AVAILABLE = TaskStatus' "AVAILABLE"
+
+pattern TaskStatus_CREATING :: TaskStatus
+pattern TaskStatus_CREATING = TaskStatus' "CREATING"
+
+pattern TaskStatus_QUEUED :: TaskStatus
+pattern TaskStatus_QUEUED = TaskStatus' "QUEUED"
+
+pattern TaskStatus_RUNNING :: TaskStatus
+pattern TaskStatus_RUNNING = TaskStatus' "RUNNING"
+
+pattern TaskStatus_UNAVAILABLE :: TaskStatus
+pattern TaskStatus_UNAVAILABLE = TaskStatus' "UNAVAILABLE"
+
+{-# COMPLETE
+  TaskStatus_AVAILABLE,
+  TaskStatus_CREATING,
+  TaskStatus_QUEUED,
+  TaskStatus_RUNNING,
+  TaskStatus_UNAVAILABLE,
+  TaskStatus'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/TransferMode.hs b/gen/Amazonka/DataSync/Types/TransferMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/TransferMode.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.DataSync.Types.TransferMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.TransferMode
+  ( TransferMode
+      ( ..,
+        TransferMode_ALL,
+        TransferMode_CHANGED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransferMode = TransferMode'
+  { fromTransferMode ::
+      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 TransferMode_ALL :: TransferMode
+pattern TransferMode_ALL = TransferMode' "ALL"
+
+pattern TransferMode_CHANGED :: TransferMode
+pattern TransferMode_CHANGED = TransferMode' "CHANGED"
+
+{-# COMPLETE
+  TransferMode_ALL,
+  TransferMode_CHANGED,
+  TransferMode'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/Uid.hs b/gen/Amazonka/DataSync/Types/Uid.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/Uid.hs
@@ -0,0 +1,78 @@
+{-# 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.DataSync.Types.Uid
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.Uid
+  ( Uid
+      ( ..,
+        Uid_BOTH,
+        Uid_INT_VALUE,
+        Uid_NAME,
+        Uid_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Uid = Uid' {fromUid :: 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 Uid_BOTH :: Uid
+pattern Uid_BOTH = Uid' "BOTH"
+
+pattern Uid_INT_VALUE :: Uid
+pattern Uid_INT_VALUE = Uid' "INT_VALUE"
+
+pattern Uid_NAME :: Uid
+pattern Uid_NAME = Uid' "NAME"
+
+pattern Uid_NONE :: Uid
+pattern Uid_NONE = Uid' "NONE"
+
+{-# COMPLETE
+  Uid_BOTH,
+  Uid_INT_VALUE,
+  Uid_NAME,
+  Uid_NONE,
+  Uid'
+  #-}
diff --git a/gen/Amazonka/DataSync/Types/VerifyMode.hs b/gen/Amazonka/DataSync/Types/VerifyMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/Types/VerifyMode.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.DataSync.Types.VerifyMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataSync.Types.VerifyMode
+  ( VerifyMode
+      ( ..,
+        VerifyMode_NONE,
+        VerifyMode_ONLY_FILES_TRANSFERRED,
+        VerifyMode_POINT_IN_TIME_CONSISTENT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype VerifyMode = VerifyMode'
+  { fromVerifyMode ::
+      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 VerifyMode_NONE :: VerifyMode
+pattern VerifyMode_NONE = VerifyMode' "NONE"
+
+pattern VerifyMode_ONLY_FILES_TRANSFERRED :: VerifyMode
+pattern VerifyMode_ONLY_FILES_TRANSFERRED = VerifyMode' "ONLY_FILES_TRANSFERRED"
+
+pattern VerifyMode_POINT_IN_TIME_CONSISTENT :: VerifyMode
+pattern VerifyMode_POINT_IN_TIME_CONSISTENT = VerifyMode' "POINT_IN_TIME_CONSISTENT"
+
+{-# COMPLETE
+  VerifyMode_NONE,
+  VerifyMode_ONLY_FILES_TRANSFERRED,
+  VerifyMode_POINT_IN_TIME_CONSISTENT,
+  VerifyMode'
+  #-}
diff --git a/gen/Amazonka/DataSync/UntagResource.hs b/gen/Amazonka/DataSync/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/UntagResource.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.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 tags from an Amazon Web Services resource.
+module Amazonka.DataSync.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_keys,
+
+    -- * 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.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | UntagResourceRequest
+--
+-- /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | Specifies the Amazon Resource Name (ARN) of the resource to remove the
+    -- tags from.
+    resourceArn :: Prelude.Text,
+    -- | Specifies the keys in the tags that you want to remove.
+    keys :: 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' - Specifies the Amazon Resource Name (ARN) of the resource to remove the
+-- tags from.
+--
+-- 'keys', 'untagResource_keys' - Specifies the keys in the tags that you want to remove.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'keys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      keys = Lens.coerced Lens.# pKeys_
+    }
+
+-- | Specifies the Amazon Resource Name (ARN) of the resource to remove the
+-- tags from.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | Specifies the keys in the tags that you want to remove.
+untagResource_keys :: Lens.Lens' UntagResource (Prelude.NonEmpty Prelude.Text)
+untagResource_keys = Lens.lens (\UntagResource' {keys} -> keys) (\s@UntagResource' {} a -> s {keys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` keys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf keys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("FmrsService.UntagResource" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UntagResource where
+  toJSON UntagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceArn" Data..= resourceArn),
+            Prelude.Just ("Keys" Data..= keys)
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UntagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/UpdateAgent.hs b/gen/Amazonka/DataSync/UpdateAgent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/UpdateAgent.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.UpdateAgent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the name of an agent.
+module Amazonka.DataSync.UpdateAgent
+  ( -- * Creating a Request
+    UpdateAgent (..),
+    newUpdateAgent,
+
+    -- * Request Lenses
+    updateAgent_name,
+    updateAgent_agentArn,
+
+    -- * Destructuring the Response
+    UpdateAgentResponse (..),
+    newUpdateAgentResponse,
+
+    -- * Response Lenses
+    updateAgentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | UpdateAgentRequest
+--
+-- /See:/ 'newUpdateAgent' smart constructor.
+data UpdateAgent = UpdateAgent'
+  { -- | The name that you want to use to configure the agent.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the agent to update.
+    agentArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAgent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateAgent_name' - The name that you want to use to configure the agent.
+--
+-- 'agentArn', 'updateAgent_agentArn' - The Amazon Resource Name (ARN) of the agent to update.
+newUpdateAgent ::
+  -- | 'agentArn'
+  Prelude.Text ->
+  UpdateAgent
+newUpdateAgent pAgentArn_ =
+  UpdateAgent'
+    { name = Prelude.Nothing,
+      agentArn = pAgentArn_
+    }
+
+-- | The name that you want to use to configure the agent.
+updateAgent_name :: Lens.Lens' UpdateAgent (Prelude.Maybe Prelude.Text)
+updateAgent_name = Lens.lens (\UpdateAgent' {name} -> name) (\s@UpdateAgent' {} a -> s {name = a} :: UpdateAgent)
+
+-- | The Amazon Resource Name (ARN) of the agent to update.
+updateAgent_agentArn :: Lens.Lens' UpdateAgent Prelude.Text
+updateAgent_agentArn = Lens.lens (\UpdateAgent' {agentArn} -> agentArn) (\s@UpdateAgent' {} a -> s {agentArn = a} :: UpdateAgent)
+
+instance Core.AWSRequest UpdateAgent where
+  type AWSResponse UpdateAgent = UpdateAgentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateAgentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAgent where
+  hashWithSalt _salt UpdateAgent' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` agentArn
+
+instance Prelude.NFData UpdateAgent where
+  rnf UpdateAgent' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf agentArn
+
+instance Data.ToHeaders UpdateAgent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("FmrsService.UpdateAgent" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateAgent where
+  toJSON UpdateAgent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Name" Data..=) Prelude.<$> name,
+            Prelude.Just ("AgentArn" Data..= agentArn)
+          ]
+      )
+
+instance Data.ToPath UpdateAgent where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateAgent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAgentResponse' smart constructor.
+data UpdateAgentResponse = UpdateAgentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAgentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateAgentResponse_httpStatus' - The response's http status code.
+newUpdateAgentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAgentResponse
+newUpdateAgentResponse pHttpStatus_ =
+  UpdateAgentResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateAgentResponse_httpStatus :: Lens.Lens' UpdateAgentResponse Prelude.Int
+updateAgentResponse_httpStatus = Lens.lens (\UpdateAgentResponse' {httpStatus} -> httpStatus) (\s@UpdateAgentResponse' {} a -> s {httpStatus = a} :: UpdateAgentResponse)
+
+instance Prelude.NFData UpdateAgentResponse where
+  rnf UpdateAgentResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/UpdateLocationHdfs.hs b/gen/Amazonka/DataSync/UpdateLocationHdfs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/UpdateLocationHdfs.hs
@@ -0,0 +1,386 @@
+{-# 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.DataSync.UpdateLocationHdfs
+-- 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 some parameters of a previously created location for a Hadoop
+-- Distributed File System cluster.
+module Amazonka.DataSync.UpdateLocationHdfs
+  ( -- * Creating a Request
+    UpdateLocationHdfs (..),
+    newUpdateLocationHdfs,
+
+    -- * Request Lenses
+    updateLocationHdfs_agentArns,
+    updateLocationHdfs_authenticationType,
+    updateLocationHdfs_blockSize,
+    updateLocationHdfs_kerberosKeytab,
+    updateLocationHdfs_kerberosKrb5Conf,
+    updateLocationHdfs_kerberosPrincipal,
+    updateLocationHdfs_kmsKeyProviderUri,
+    updateLocationHdfs_nameNodes,
+    updateLocationHdfs_qopConfiguration,
+    updateLocationHdfs_replicationFactor,
+    updateLocationHdfs_simpleUser,
+    updateLocationHdfs_subdirectory,
+    updateLocationHdfs_locationArn,
+
+    -- * Destructuring the Response
+    UpdateLocationHdfsResponse (..),
+    newUpdateLocationHdfsResponse,
+
+    -- * Response Lenses
+    updateLocationHdfsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateLocationHdfs' smart constructor.
+data UpdateLocationHdfs = UpdateLocationHdfs'
+  { -- | The ARNs of the agents that are used to connect to the HDFS cluster.
+    agentArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The type of authentication used to determine the identity of the user.
+    authenticationType :: Prelude.Maybe HdfsAuthenticationType,
+    -- | The size of the data blocks to write into the HDFS cluster.
+    blockSize :: Prelude.Maybe Prelude.Natural,
+    -- | The Kerberos key table (keytab) that contains mappings between the
+    -- defined Kerberos principal and the encrypted keys. You can load the
+    -- keytab from a file by providing the file\'s address. If you use the CLI,
+    -- it performs base64 encoding for you. Otherwise, provide the
+    -- base64-encoded text.
+    kerberosKeytab :: Prelude.Maybe Data.Base64,
+    -- | The @krb5.conf@ file that contains the Kerberos configuration
+    -- information. You can load the @krb5.conf@ file by providing the file\'s
+    -- address. If you\'re using the CLI, it performs the base64 encoding for
+    -- you. Otherwise, provide the base64-encoded text.
+    kerberosKrb5Conf :: Prelude.Maybe Data.Base64,
+    -- | The Kerberos principal with access to the files and folders on the HDFS
+    -- cluster.
+    kerberosPrincipal :: Prelude.Maybe Prelude.Text,
+    -- | The URI of the HDFS cluster\'s Key Management Server (KMS).
+    kmsKeyProviderUri :: Prelude.Maybe Prelude.Text,
+    -- | The NameNode that manages the HDFS namespace. The NameNode performs
+    -- operations such as opening, closing, and renaming files and directories.
+    -- The NameNode contains the information to map blocks of data to the
+    -- DataNodes. You can use only one NameNode.
+    nameNodes :: Prelude.Maybe (Prelude.NonEmpty HdfsNameNode),
+    -- | The Quality of Protection (QOP) configuration specifies the Remote
+    -- Procedure Call (RPC) and data transfer privacy settings configured on
+    -- the Hadoop Distributed File System (HDFS) cluster.
+    qopConfiguration :: Prelude.Maybe QopConfiguration,
+    -- | The number of DataNodes to replicate the data to when writing to the
+    -- HDFS cluster.
+    replicationFactor :: Prelude.Maybe Prelude.Natural,
+    -- | The user name used to identify the client on the host operating system.
+    simpleUser :: Prelude.Maybe Prelude.Text,
+    -- | A subdirectory in the HDFS cluster. This subdirectory is used to read
+    -- data from or write data to the HDFS cluster.
+    subdirectory :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the source HDFS cluster location.
+    locationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLocationHdfs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'agentArns', 'updateLocationHdfs_agentArns' - The ARNs of the agents that are used to connect to the HDFS cluster.
+--
+-- 'authenticationType', 'updateLocationHdfs_authenticationType' - The type of authentication used to determine the identity of the user.
+--
+-- 'blockSize', 'updateLocationHdfs_blockSize' - The size of the data blocks to write into the HDFS cluster.
+--
+-- 'kerberosKeytab', 'updateLocationHdfs_kerberosKeytab' - The Kerberos key table (keytab) that contains mappings between the
+-- defined Kerberos principal and the encrypted keys. You can load the
+-- keytab from a file by providing the file\'s address. If you use the CLI,
+-- it performs base64 encoding for you. Otherwise, provide the
+-- base64-encoded text.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+--
+-- 'kerberosKrb5Conf', 'updateLocationHdfs_kerberosKrb5Conf' - The @krb5.conf@ file that contains the Kerberos configuration
+-- information. You can load the @krb5.conf@ file by providing the file\'s
+-- address. If you\'re using the CLI, it performs the base64 encoding for
+-- you. Otherwise, provide the base64-encoded text.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+--
+-- 'kerberosPrincipal', 'updateLocationHdfs_kerberosPrincipal' - The Kerberos principal with access to the files and folders on the HDFS
+-- cluster.
+--
+-- 'kmsKeyProviderUri', 'updateLocationHdfs_kmsKeyProviderUri' - The URI of the HDFS cluster\'s Key Management Server (KMS).
+--
+-- 'nameNodes', 'updateLocationHdfs_nameNodes' - The NameNode that manages the HDFS namespace. The NameNode performs
+-- operations such as opening, closing, and renaming files and directories.
+-- The NameNode contains the information to map blocks of data to the
+-- DataNodes. You can use only one NameNode.
+--
+-- 'qopConfiguration', 'updateLocationHdfs_qopConfiguration' - The Quality of Protection (QOP) configuration specifies the Remote
+-- Procedure Call (RPC) and data transfer privacy settings configured on
+-- the Hadoop Distributed File System (HDFS) cluster.
+--
+-- 'replicationFactor', 'updateLocationHdfs_replicationFactor' - The number of DataNodes to replicate the data to when writing to the
+-- HDFS cluster.
+--
+-- 'simpleUser', 'updateLocationHdfs_simpleUser' - The user name used to identify the client on the host operating system.
+--
+-- 'subdirectory', 'updateLocationHdfs_subdirectory' - A subdirectory in the HDFS cluster. This subdirectory is used to read
+-- data from or write data to the HDFS cluster.
+--
+-- 'locationArn', 'updateLocationHdfs_locationArn' - The Amazon Resource Name (ARN) of the source HDFS cluster location.
+newUpdateLocationHdfs ::
+  -- | 'locationArn'
+  Prelude.Text ->
+  UpdateLocationHdfs
+newUpdateLocationHdfs pLocationArn_ =
+  UpdateLocationHdfs'
+    { agentArns = Prelude.Nothing,
+      authenticationType = Prelude.Nothing,
+      blockSize = Prelude.Nothing,
+      kerberosKeytab = Prelude.Nothing,
+      kerberosKrb5Conf = Prelude.Nothing,
+      kerberosPrincipal = Prelude.Nothing,
+      kmsKeyProviderUri = Prelude.Nothing,
+      nameNodes = Prelude.Nothing,
+      qopConfiguration = Prelude.Nothing,
+      replicationFactor = Prelude.Nothing,
+      simpleUser = Prelude.Nothing,
+      subdirectory = Prelude.Nothing,
+      locationArn = pLocationArn_
+    }
+
+-- | The ARNs of the agents that are used to connect to the HDFS cluster.
+updateLocationHdfs_agentArns :: Lens.Lens' UpdateLocationHdfs (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateLocationHdfs_agentArns = Lens.lens (\UpdateLocationHdfs' {agentArns} -> agentArns) (\s@UpdateLocationHdfs' {} a -> s {agentArns = a} :: UpdateLocationHdfs) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of authentication used to determine the identity of the user.
+updateLocationHdfs_authenticationType :: Lens.Lens' UpdateLocationHdfs (Prelude.Maybe HdfsAuthenticationType)
+updateLocationHdfs_authenticationType = Lens.lens (\UpdateLocationHdfs' {authenticationType} -> authenticationType) (\s@UpdateLocationHdfs' {} a -> s {authenticationType = a} :: UpdateLocationHdfs)
+
+-- | The size of the data blocks to write into the HDFS cluster.
+updateLocationHdfs_blockSize :: Lens.Lens' UpdateLocationHdfs (Prelude.Maybe Prelude.Natural)
+updateLocationHdfs_blockSize = Lens.lens (\UpdateLocationHdfs' {blockSize} -> blockSize) (\s@UpdateLocationHdfs' {} a -> s {blockSize = a} :: UpdateLocationHdfs)
+
+-- | The Kerberos key table (keytab) that contains mappings between the
+-- defined Kerberos principal and the encrypted keys. You can load the
+-- keytab from a file by providing the file\'s address. If you use the CLI,
+-- it performs base64 encoding for you. Otherwise, provide the
+-- base64-encoded text.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+updateLocationHdfs_kerberosKeytab :: Lens.Lens' UpdateLocationHdfs (Prelude.Maybe Prelude.ByteString)
+updateLocationHdfs_kerberosKeytab = Lens.lens (\UpdateLocationHdfs' {kerberosKeytab} -> kerberosKeytab) (\s@UpdateLocationHdfs' {} a -> s {kerberosKeytab = a} :: UpdateLocationHdfs) Prelude.. Lens.mapping Data._Base64
+
+-- | The @krb5.conf@ file that contains the Kerberos configuration
+-- information. You can load the @krb5.conf@ file by providing the file\'s
+-- address. If you\'re using the CLI, it performs the base64 encoding for
+-- you. Otherwise, provide the base64-encoded text.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+updateLocationHdfs_kerberosKrb5Conf :: Lens.Lens' UpdateLocationHdfs (Prelude.Maybe Prelude.ByteString)
+updateLocationHdfs_kerberosKrb5Conf = Lens.lens (\UpdateLocationHdfs' {kerberosKrb5Conf} -> kerberosKrb5Conf) (\s@UpdateLocationHdfs' {} a -> s {kerberosKrb5Conf = a} :: UpdateLocationHdfs) Prelude.. Lens.mapping Data._Base64
+
+-- | The Kerberos principal with access to the files and folders on the HDFS
+-- cluster.
+updateLocationHdfs_kerberosPrincipal :: Lens.Lens' UpdateLocationHdfs (Prelude.Maybe Prelude.Text)
+updateLocationHdfs_kerberosPrincipal = Lens.lens (\UpdateLocationHdfs' {kerberosPrincipal} -> kerberosPrincipal) (\s@UpdateLocationHdfs' {} a -> s {kerberosPrincipal = a} :: UpdateLocationHdfs)
+
+-- | The URI of the HDFS cluster\'s Key Management Server (KMS).
+updateLocationHdfs_kmsKeyProviderUri :: Lens.Lens' UpdateLocationHdfs (Prelude.Maybe Prelude.Text)
+updateLocationHdfs_kmsKeyProviderUri = Lens.lens (\UpdateLocationHdfs' {kmsKeyProviderUri} -> kmsKeyProviderUri) (\s@UpdateLocationHdfs' {} a -> s {kmsKeyProviderUri = a} :: UpdateLocationHdfs)
+
+-- | The NameNode that manages the HDFS namespace. The NameNode performs
+-- operations such as opening, closing, and renaming files and directories.
+-- The NameNode contains the information to map blocks of data to the
+-- DataNodes. You can use only one NameNode.
+updateLocationHdfs_nameNodes :: Lens.Lens' UpdateLocationHdfs (Prelude.Maybe (Prelude.NonEmpty HdfsNameNode))
+updateLocationHdfs_nameNodes = Lens.lens (\UpdateLocationHdfs' {nameNodes} -> nameNodes) (\s@UpdateLocationHdfs' {} a -> s {nameNodes = a} :: UpdateLocationHdfs) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Quality of Protection (QOP) configuration specifies the Remote
+-- Procedure Call (RPC) and data transfer privacy settings configured on
+-- the Hadoop Distributed File System (HDFS) cluster.
+updateLocationHdfs_qopConfiguration :: Lens.Lens' UpdateLocationHdfs (Prelude.Maybe QopConfiguration)
+updateLocationHdfs_qopConfiguration = Lens.lens (\UpdateLocationHdfs' {qopConfiguration} -> qopConfiguration) (\s@UpdateLocationHdfs' {} a -> s {qopConfiguration = a} :: UpdateLocationHdfs)
+
+-- | The number of DataNodes to replicate the data to when writing to the
+-- HDFS cluster.
+updateLocationHdfs_replicationFactor :: Lens.Lens' UpdateLocationHdfs (Prelude.Maybe Prelude.Natural)
+updateLocationHdfs_replicationFactor = Lens.lens (\UpdateLocationHdfs' {replicationFactor} -> replicationFactor) (\s@UpdateLocationHdfs' {} a -> s {replicationFactor = a} :: UpdateLocationHdfs)
+
+-- | The user name used to identify the client on the host operating system.
+updateLocationHdfs_simpleUser :: Lens.Lens' UpdateLocationHdfs (Prelude.Maybe Prelude.Text)
+updateLocationHdfs_simpleUser = Lens.lens (\UpdateLocationHdfs' {simpleUser} -> simpleUser) (\s@UpdateLocationHdfs' {} a -> s {simpleUser = a} :: UpdateLocationHdfs)
+
+-- | A subdirectory in the HDFS cluster. This subdirectory is used to read
+-- data from or write data to the HDFS cluster.
+updateLocationHdfs_subdirectory :: Lens.Lens' UpdateLocationHdfs (Prelude.Maybe Prelude.Text)
+updateLocationHdfs_subdirectory = Lens.lens (\UpdateLocationHdfs' {subdirectory} -> subdirectory) (\s@UpdateLocationHdfs' {} a -> s {subdirectory = a} :: UpdateLocationHdfs)
+
+-- | The Amazon Resource Name (ARN) of the source HDFS cluster location.
+updateLocationHdfs_locationArn :: Lens.Lens' UpdateLocationHdfs Prelude.Text
+updateLocationHdfs_locationArn = Lens.lens (\UpdateLocationHdfs' {locationArn} -> locationArn) (\s@UpdateLocationHdfs' {} a -> s {locationArn = a} :: UpdateLocationHdfs)
+
+instance Core.AWSRequest UpdateLocationHdfs where
+  type
+    AWSResponse UpdateLocationHdfs =
+      UpdateLocationHdfsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateLocationHdfsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateLocationHdfs where
+  hashWithSalt _salt UpdateLocationHdfs' {..} =
+    _salt
+      `Prelude.hashWithSalt` agentArns
+      `Prelude.hashWithSalt` authenticationType
+      `Prelude.hashWithSalt` blockSize
+      `Prelude.hashWithSalt` kerberosKeytab
+      `Prelude.hashWithSalt` kerberosKrb5Conf
+      `Prelude.hashWithSalt` kerberosPrincipal
+      `Prelude.hashWithSalt` kmsKeyProviderUri
+      `Prelude.hashWithSalt` nameNodes
+      `Prelude.hashWithSalt` qopConfiguration
+      `Prelude.hashWithSalt` replicationFactor
+      `Prelude.hashWithSalt` simpleUser
+      `Prelude.hashWithSalt` subdirectory
+      `Prelude.hashWithSalt` locationArn
+
+instance Prelude.NFData UpdateLocationHdfs where
+  rnf UpdateLocationHdfs' {..} =
+    Prelude.rnf agentArns
+      `Prelude.seq` Prelude.rnf authenticationType
+      `Prelude.seq` Prelude.rnf blockSize
+      `Prelude.seq` Prelude.rnf kerberosKeytab
+      `Prelude.seq` Prelude.rnf kerberosKrb5Conf
+      `Prelude.seq` Prelude.rnf kerberosPrincipal
+      `Prelude.seq` Prelude.rnf kmsKeyProviderUri
+      `Prelude.seq` Prelude.rnf nameNodes
+      `Prelude.seq` Prelude.rnf qopConfiguration
+      `Prelude.seq` Prelude.rnf replicationFactor
+      `Prelude.seq` Prelude.rnf simpleUser
+      `Prelude.seq` Prelude.rnf subdirectory
+      `Prelude.seq` Prelude.rnf locationArn
+
+instance Data.ToHeaders UpdateLocationHdfs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.UpdateLocationHdfs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateLocationHdfs where
+  toJSON UpdateLocationHdfs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AgentArns" Data..=) Prelude.<$> agentArns,
+            ("AuthenticationType" Data..=)
+              Prelude.<$> authenticationType,
+            ("BlockSize" Data..=) Prelude.<$> blockSize,
+            ("KerberosKeytab" Data..=)
+              Prelude.<$> kerberosKeytab,
+            ("KerberosKrb5Conf" Data..=)
+              Prelude.<$> kerberosKrb5Conf,
+            ("KerberosPrincipal" Data..=)
+              Prelude.<$> kerberosPrincipal,
+            ("KmsKeyProviderUri" Data..=)
+              Prelude.<$> kmsKeyProviderUri,
+            ("NameNodes" Data..=) Prelude.<$> nameNodes,
+            ("QopConfiguration" Data..=)
+              Prelude.<$> qopConfiguration,
+            ("ReplicationFactor" Data..=)
+              Prelude.<$> replicationFactor,
+            ("SimpleUser" Data..=) Prelude.<$> simpleUser,
+            ("Subdirectory" Data..=) Prelude.<$> subdirectory,
+            Prelude.Just ("LocationArn" Data..= locationArn)
+          ]
+      )
+
+instance Data.ToPath UpdateLocationHdfs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateLocationHdfs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateLocationHdfsResponse' smart constructor.
+data UpdateLocationHdfsResponse = UpdateLocationHdfsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLocationHdfsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateLocationHdfsResponse_httpStatus' - The response's http status code.
+newUpdateLocationHdfsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateLocationHdfsResponse
+newUpdateLocationHdfsResponse pHttpStatus_ =
+  UpdateLocationHdfsResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateLocationHdfsResponse_httpStatus :: Lens.Lens' UpdateLocationHdfsResponse Prelude.Int
+updateLocationHdfsResponse_httpStatus = Lens.lens (\UpdateLocationHdfsResponse' {httpStatus} -> httpStatus) (\s@UpdateLocationHdfsResponse' {} a -> s {httpStatus = a} :: UpdateLocationHdfsResponse)
+
+instance Prelude.NFData UpdateLocationHdfsResponse where
+  rnf UpdateLocationHdfsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/UpdateLocationNfs.hs b/gen/Amazonka/DataSync/UpdateLocationNfs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/UpdateLocationNfs.hs
@@ -0,0 +1,279 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.UpdateLocationNfs
+-- 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 some of the parameters of a previously created location for
+-- Network File System (NFS) access. For information about creating an NFS
+-- location, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html Creating a location for NFS>.
+module Amazonka.DataSync.UpdateLocationNfs
+  ( -- * Creating a Request
+    UpdateLocationNfs (..),
+    newUpdateLocationNfs,
+
+    -- * Request Lenses
+    updateLocationNfs_mountOptions,
+    updateLocationNfs_onPremConfig,
+    updateLocationNfs_subdirectory,
+    updateLocationNfs_locationArn,
+
+    -- * Destructuring the Response
+    UpdateLocationNfsResponse (..),
+    newUpdateLocationNfsResponse,
+
+    -- * Response Lenses
+    updateLocationNfsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateLocationNfs' smart constructor.
+data UpdateLocationNfs = UpdateLocationNfs'
+  { mountOptions :: Prelude.Maybe NfsMountOptions,
+    onPremConfig :: Prelude.Maybe OnPremConfig,
+    -- | The subdirectory in the NFS file system that is used to read data from
+    -- the NFS source location or write data to the NFS destination. The NFS
+    -- path should be a path that\'s exported by the NFS server, or a
+    -- subdirectory of that path. The path should be such that it can be
+    -- mounted by other NFS clients in your network.
+    --
+    -- To see all the paths exported by your NFS server, run
+    -- \"@showmount -e nfs-server-name@\" from an NFS client that has access to
+    -- your server. You can specify any directory that appears in the results,
+    -- and any subdirectory of that directory. Ensure that the NFS export is
+    -- accessible without Kerberos authentication.
+    --
+    -- To transfer all the data in the folder that you specified, DataSync must
+    -- have permissions to read all the data. To ensure this, either configure
+    -- the NFS export with @no_root_squash@, or ensure that the files you want
+    -- DataSync to access have permissions that allow read access for all
+    -- users. Doing either option enables the agent to read the files. For the
+    -- agent to access directories, you must additionally enable all execute
+    -- access.
+    --
+    -- If you are copying data to or from your Snowcone device, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone NFS Server on Snowcone>
+    -- for more information.
+    --
+    -- For information about NFS export configuration, see 18.7. The
+    -- \/etc\/exports Configuration File in the Red Hat Enterprise Linux
+    -- documentation.
+    subdirectory :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the NFS location to update.
+    locationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLocationNfs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'mountOptions', 'updateLocationNfs_mountOptions' - Undocumented member.
+--
+-- 'onPremConfig', 'updateLocationNfs_onPremConfig' - Undocumented member.
+--
+-- 'subdirectory', 'updateLocationNfs_subdirectory' - The subdirectory in the NFS file system that is used to read data from
+-- the NFS source location or write data to the NFS destination. The NFS
+-- path should be a path that\'s exported by the NFS server, or a
+-- subdirectory of that path. The path should be such that it can be
+-- mounted by other NFS clients in your network.
+--
+-- To see all the paths exported by your NFS server, run
+-- \"@showmount -e nfs-server-name@\" from an NFS client that has access to
+-- your server. You can specify any directory that appears in the results,
+-- and any subdirectory of that directory. Ensure that the NFS export is
+-- accessible without Kerberos authentication.
+--
+-- To transfer all the data in the folder that you specified, DataSync must
+-- have permissions to read all the data. To ensure this, either configure
+-- the NFS export with @no_root_squash@, or ensure that the files you want
+-- DataSync to access have permissions that allow read access for all
+-- users. Doing either option enables the agent to read the files. For the
+-- agent to access directories, you must additionally enable all execute
+-- access.
+--
+-- If you are copying data to or from your Snowcone device, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone NFS Server on Snowcone>
+-- for more information.
+--
+-- For information about NFS export configuration, see 18.7. The
+-- \/etc\/exports Configuration File in the Red Hat Enterprise Linux
+-- documentation.
+--
+-- 'locationArn', 'updateLocationNfs_locationArn' - The Amazon Resource Name (ARN) of the NFS location to update.
+newUpdateLocationNfs ::
+  -- | 'locationArn'
+  Prelude.Text ->
+  UpdateLocationNfs
+newUpdateLocationNfs pLocationArn_ =
+  UpdateLocationNfs'
+    { mountOptions = Prelude.Nothing,
+      onPremConfig = Prelude.Nothing,
+      subdirectory = Prelude.Nothing,
+      locationArn = pLocationArn_
+    }
+
+-- | Undocumented member.
+updateLocationNfs_mountOptions :: Lens.Lens' UpdateLocationNfs (Prelude.Maybe NfsMountOptions)
+updateLocationNfs_mountOptions = Lens.lens (\UpdateLocationNfs' {mountOptions} -> mountOptions) (\s@UpdateLocationNfs' {} a -> s {mountOptions = a} :: UpdateLocationNfs)
+
+-- | Undocumented member.
+updateLocationNfs_onPremConfig :: Lens.Lens' UpdateLocationNfs (Prelude.Maybe OnPremConfig)
+updateLocationNfs_onPremConfig = Lens.lens (\UpdateLocationNfs' {onPremConfig} -> onPremConfig) (\s@UpdateLocationNfs' {} a -> s {onPremConfig = a} :: UpdateLocationNfs)
+
+-- | The subdirectory in the NFS file system that is used to read data from
+-- the NFS source location or write data to the NFS destination. The NFS
+-- path should be a path that\'s exported by the NFS server, or a
+-- subdirectory of that path. The path should be such that it can be
+-- mounted by other NFS clients in your network.
+--
+-- To see all the paths exported by your NFS server, run
+-- \"@showmount -e nfs-server-name@\" from an NFS client that has access to
+-- your server. You can specify any directory that appears in the results,
+-- and any subdirectory of that directory. Ensure that the NFS export is
+-- accessible without Kerberos authentication.
+--
+-- To transfer all the data in the folder that you specified, DataSync must
+-- have permissions to read all the data. To ensure this, either configure
+-- the NFS export with @no_root_squash@, or ensure that the files you want
+-- DataSync to access have permissions that allow read access for all
+-- users. Doing either option enables the agent to read the files. For the
+-- agent to access directories, you must additionally enable all execute
+-- access.
+--
+-- If you are copying data to or from your Snowcone device, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone NFS Server on Snowcone>
+-- for more information.
+--
+-- For information about NFS export configuration, see 18.7. The
+-- \/etc\/exports Configuration File in the Red Hat Enterprise Linux
+-- documentation.
+updateLocationNfs_subdirectory :: Lens.Lens' UpdateLocationNfs (Prelude.Maybe Prelude.Text)
+updateLocationNfs_subdirectory = Lens.lens (\UpdateLocationNfs' {subdirectory} -> subdirectory) (\s@UpdateLocationNfs' {} a -> s {subdirectory = a} :: UpdateLocationNfs)
+
+-- | The Amazon Resource Name (ARN) of the NFS location to update.
+updateLocationNfs_locationArn :: Lens.Lens' UpdateLocationNfs Prelude.Text
+updateLocationNfs_locationArn = Lens.lens (\UpdateLocationNfs' {locationArn} -> locationArn) (\s@UpdateLocationNfs' {} a -> s {locationArn = a} :: UpdateLocationNfs)
+
+instance Core.AWSRequest UpdateLocationNfs where
+  type
+    AWSResponse UpdateLocationNfs =
+      UpdateLocationNfsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateLocationNfsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateLocationNfs where
+  hashWithSalt _salt UpdateLocationNfs' {..} =
+    _salt
+      `Prelude.hashWithSalt` mountOptions
+      `Prelude.hashWithSalt` onPremConfig
+      `Prelude.hashWithSalt` subdirectory
+      `Prelude.hashWithSalt` locationArn
+
+instance Prelude.NFData UpdateLocationNfs where
+  rnf UpdateLocationNfs' {..} =
+    Prelude.rnf mountOptions
+      `Prelude.seq` Prelude.rnf onPremConfig
+      `Prelude.seq` Prelude.rnf subdirectory
+      `Prelude.seq` Prelude.rnf locationArn
+
+instance Data.ToHeaders UpdateLocationNfs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.UpdateLocationNfs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateLocationNfs where
+  toJSON UpdateLocationNfs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MountOptions" Data..=) Prelude.<$> mountOptions,
+            ("OnPremConfig" Data..=) Prelude.<$> onPremConfig,
+            ("Subdirectory" Data..=) Prelude.<$> subdirectory,
+            Prelude.Just ("LocationArn" Data..= locationArn)
+          ]
+      )
+
+instance Data.ToPath UpdateLocationNfs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateLocationNfs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateLocationNfsResponse' smart constructor.
+data UpdateLocationNfsResponse = UpdateLocationNfsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLocationNfsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateLocationNfsResponse_httpStatus' - The response's http status code.
+newUpdateLocationNfsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateLocationNfsResponse
+newUpdateLocationNfsResponse pHttpStatus_ =
+  UpdateLocationNfsResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateLocationNfsResponse_httpStatus :: Lens.Lens' UpdateLocationNfsResponse Prelude.Int
+updateLocationNfsResponse_httpStatus = Lens.lens (\UpdateLocationNfsResponse' {httpStatus} -> httpStatus) (\s@UpdateLocationNfsResponse' {} a -> s {httpStatus = a} :: UpdateLocationNfsResponse)
+
+instance Prelude.NFData UpdateLocationNfsResponse where
+  rnf UpdateLocationNfsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/UpdateLocationObjectStorage.hs b/gen/Amazonka/DataSync/UpdateLocationObjectStorage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/UpdateLocationObjectStorage.hs
@@ -0,0 +1,320 @@
+{-# 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.DataSync.UpdateLocationObjectStorage
+-- 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 some parameters of an existing object storage location that
+-- DataSync accesses for a transfer. For information about creating a
+-- self-managed object storage location, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-object-location.html Creating a location for object storage>.
+module Amazonka.DataSync.UpdateLocationObjectStorage
+  ( -- * Creating a Request
+    UpdateLocationObjectStorage (..),
+    newUpdateLocationObjectStorage,
+
+    -- * Request Lenses
+    updateLocationObjectStorage_accessKey,
+    updateLocationObjectStorage_agentArns,
+    updateLocationObjectStorage_secretKey,
+    updateLocationObjectStorage_serverCertificate,
+    updateLocationObjectStorage_serverPort,
+    updateLocationObjectStorage_serverProtocol,
+    updateLocationObjectStorage_subdirectory,
+    updateLocationObjectStorage_locationArn,
+
+    -- * Destructuring the Response
+    UpdateLocationObjectStorageResponse (..),
+    newUpdateLocationObjectStorageResponse,
+
+    -- * Response Lenses
+    updateLocationObjectStorageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateLocationObjectStorage' smart constructor.
+data UpdateLocationObjectStorage = UpdateLocationObjectStorage'
+  { -- | Specifies the access key (for example, a user name) if credentials are
+    -- required to authenticate with the object storage server.
+    accessKey :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the Amazon Resource Names (ARNs) of the DataSync agents that
+    -- can securely connect with your location.
+    agentArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | Specifies the secret key (for example, a password) if credentials are
+    -- required to authenticate with the object storage server.
+    secretKey :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | Specifies a certificate to authenticate with an object storage system
+    -- that uses a private or self-signed certificate authority (CA). You must
+    -- specify a Base64-encoded @.pem@ file (for example,
+    -- @file:\/\/\/home\/user\/.ssh\/storage_sys_certificate.pem@). The
+    -- certificate can be up to 32768 bytes (before Base64 encoding).
+    --
+    -- To use this parameter, configure @ServerProtocol@ to @HTTPS@.
+    --
+    -- Updating the certificate doesn\'t interfere with tasks that you have in
+    -- progress.
+    serverCertificate :: Prelude.Maybe Data.Base64,
+    -- | Specifies the port that your object storage server accepts inbound
+    -- network traffic on (for example, port 443).
+    serverPort :: Prelude.Maybe Prelude.Natural,
+    -- | Specifies the protocol that your object storage server uses to
+    -- communicate.
+    serverProtocol :: Prelude.Maybe ObjectStorageServerProtocol,
+    -- | Specifies the object prefix for your object storage server. If this is a
+    -- source location, DataSync only copies objects with this prefix. If this
+    -- is a destination location, DataSync writes all objects with this prefix.
+    subdirectory :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the ARN of the object storage system location that you\'re
+    -- updating.
+    locationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLocationObjectStorage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessKey', 'updateLocationObjectStorage_accessKey' - Specifies the access key (for example, a user name) if credentials are
+-- required to authenticate with the object storage server.
+--
+-- 'agentArns', 'updateLocationObjectStorage_agentArns' - Specifies the Amazon Resource Names (ARNs) of the DataSync agents that
+-- can securely connect with your location.
+--
+-- 'secretKey', 'updateLocationObjectStorage_secretKey' - Specifies the secret key (for example, a password) if credentials are
+-- required to authenticate with the object storage server.
+--
+-- 'serverCertificate', 'updateLocationObjectStorage_serverCertificate' - Specifies a certificate to authenticate with an object storage system
+-- that uses a private or self-signed certificate authority (CA). You must
+-- specify a Base64-encoded @.pem@ file (for example,
+-- @file:\/\/\/home\/user\/.ssh\/storage_sys_certificate.pem@). The
+-- certificate can be up to 32768 bytes (before Base64 encoding).
+--
+-- To use this parameter, configure @ServerProtocol@ to @HTTPS@.
+--
+-- Updating the certificate doesn\'t interfere with tasks that you have in
+-- progress.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+--
+-- 'serverPort', 'updateLocationObjectStorage_serverPort' - Specifies the port that your object storage server accepts inbound
+-- network traffic on (for example, port 443).
+--
+-- 'serverProtocol', 'updateLocationObjectStorage_serverProtocol' - Specifies the protocol that your object storage server uses to
+-- communicate.
+--
+-- 'subdirectory', 'updateLocationObjectStorage_subdirectory' - Specifies the object prefix for your object storage server. If this is a
+-- source location, DataSync only copies objects with this prefix. If this
+-- is a destination location, DataSync writes all objects with this prefix.
+--
+-- 'locationArn', 'updateLocationObjectStorage_locationArn' - Specifies the ARN of the object storage system location that you\'re
+-- updating.
+newUpdateLocationObjectStorage ::
+  -- | 'locationArn'
+  Prelude.Text ->
+  UpdateLocationObjectStorage
+newUpdateLocationObjectStorage pLocationArn_ =
+  UpdateLocationObjectStorage'
+    { accessKey =
+        Prelude.Nothing,
+      agentArns = Prelude.Nothing,
+      secretKey = Prelude.Nothing,
+      serverCertificate = Prelude.Nothing,
+      serverPort = Prelude.Nothing,
+      serverProtocol = Prelude.Nothing,
+      subdirectory = Prelude.Nothing,
+      locationArn = pLocationArn_
+    }
+
+-- | Specifies the access key (for example, a user name) if credentials are
+-- required to authenticate with the object storage server.
+updateLocationObjectStorage_accessKey :: Lens.Lens' UpdateLocationObjectStorage (Prelude.Maybe Prelude.Text)
+updateLocationObjectStorage_accessKey = Lens.lens (\UpdateLocationObjectStorage' {accessKey} -> accessKey) (\s@UpdateLocationObjectStorage' {} a -> s {accessKey = a} :: UpdateLocationObjectStorage)
+
+-- | Specifies the Amazon Resource Names (ARNs) of the DataSync agents that
+-- can securely connect with your location.
+updateLocationObjectStorage_agentArns :: Lens.Lens' UpdateLocationObjectStorage (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateLocationObjectStorage_agentArns = Lens.lens (\UpdateLocationObjectStorage' {agentArns} -> agentArns) (\s@UpdateLocationObjectStorage' {} a -> s {agentArns = a} :: UpdateLocationObjectStorage) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the secret key (for example, a password) if credentials are
+-- required to authenticate with the object storage server.
+updateLocationObjectStorage_secretKey :: Lens.Lens' UpdateLocationObjectStorage (Prelude.Maybe Prelude.Text)
+updateLocationObjectStorage_secretKey = Lens.lens (\UpdateLocationObjectStorage' {secretKey} -> secretKey) (\s@UpdateLocationObjectStorage' {} a -> s {secretKey = a} :: UpdateLocationObjectStorage) Prelude.. Lens.mapping Data._Sensitive
+
+-- | Specifies a certificate to authenticate with an object storage system
+-- that uses a private or self-signed certificate authority (CA). You must
+-- specify a Base64-encoded @.pem@ file (for example,
+-- @file:\/\/\/home\/user\/.ssh\/storage_sys_certificate.pem@). The
+-- certificate can be up to 32768 bytes (before Base64 encoding).
+--
+-- To use this parameter, configure @ServerProtocol@ to @HTTPS@.
+--
+-- Updating the certificate doesn\'t interfere with tasks that you have in
+-- progress.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+updateLocationObjectStorage_serverCertificate :: Lens.Lens' UpdateLocationObjectStorage (Prelude.Maybe Prelude.ByteString)
+updateLocationObjectStorage_serverCertificate = Lens.lens (\UpdateLocationObjectStorage' {serverCertificate} -> serverCertificate) (\s@UpdateLocationObjectStorage' {} a -> s {serverCertificate = a} :: UpdateLocationObjectStorage) Prelude.. Lens.mapping Data._Base64
+
+-- | Specifies the port that your object storage server accepts inbound
+-- network traffic on (for example, port 443).
+updateLocationObjectStorage_serverPort :: Lens.Lens' UpdateLocationObjectStorage (Prelude.Maybe Prelude.Natural)
+updateLocationObjectStorage_serverPort = Lens.lens (\UpdateLocationObjectStorage' {serverPort} -> serverPort) (\s@UpdateLocationObjectStorage' {} a -> s {serverPort = a} :: UpdateLocationObjectStorage)
+
+-- | Specifies the protocol that your object storage server uses to
+-- communicate.
+updateLocationObjectStorage_serverProtocol :: Lens.Lens' UpdateLocationObjectStorage (Prelude.Maybe ObjectStorageServerProtocol)
+updateLocationObjectStorage_serverProtocol = Lens.lens (\UpdateLocationObjectStorage' {serverProtocol} -> serverProtocol) (\s@UpdateLocationObjectStorage' {} a -> s {serverProtocol = a} :: UpdateLocationObjectStorage)
+
+-- | Specifies the object prefix for your object storage server. If this is a
+-- source location, DataSync only copies objects with this prefix. If this
+-- is a destination location, DataSync writes all objects with this prefix.
+updateLocationObjectStorage_subdirectory :: Lens.Lens' UpdateLocationObjectStorage (Prelude.Maybe Prelude.Text)
+updateLocationObjectStorage_subdirectory = Lens.lens (\UpdateLocationObjectStorage' {subdirectory} -> subdirectory) (\s@UpdateLocationObjectStorage' {} a -> s {subdirectory = a} :: UpdateLocationObjectStorage)
+
+-- | Specifies the ARN of the object storage system location that you\'re
+-- updating.
+updateLocationObjectStorage_locationArn :: Lens.Lens' UpdateLocationObjectStorage Prelude.Text
+updateLocationObjectStorage_locationArn = Lens.lens (\UpdateLocationObjectStorage' {locationArn} -> locationArn) (\s@UpdateLocationObjectStorage' {} a -> s {locationArn = a} :: UpdateLocationObjectStorage)
+
+instance Core.AWSRequest UpdateLocationObjectStorage where
+  type
+    AWSResponse UpdateLocationObjectStorage =
+      UpdateLocationObjectStorageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateLocationObjectStorageResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateLocationObjectStorage where
+  hashWithSalt _salt UpdateLocationObjectStorage' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessKey
+      `Prelude.hashWithSalt` agentArns
+      `Prelude.hashWithSalt` secretKey
+      `Prelude.hashWithSalt` serverCertificate
+      `Prelude.hashWithSalt` serverPort
+      `Prelude.hashWithSalt` serverProtocol
+      `Prelude.hashWithSalt` subdirectory
+      `Prelude.hashWithSalt` locationArn
+
+instance Prelude.NFData UpdateLocationObjectStorage where
+  rnf UpdateLocationObjectStorage' {..} =
+    Prelude.rnf accessKey
+      `Prelude.seq` Prelude.rnf agentArns
+      `Prelude.seq` Prelude.rnf secretKey
+      `Prelude.seq` Prelude.rnf serverCertificate
+      `Prelude.seq` Prelude.rnf serverPort
+      `Prelude.seq` Prelude.rnf serverProtocol
+      `Prelude.seq` Prelude.rnf subdirectory
+      `Prelude.seq` Prelude.rnf locationArn
+
+instance Data.ToHeaders UpdateLocationObjectStorage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.UpdateLocationObjectStorage" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateLocationObjectStorage where
+  toJSON UpdateLocationObjectStorage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccessKey" Data..=) Prelude.<$> accessKey,
+            ("AgentArns" Data..=) Prelude.<$> agentArns,
+            ("SecretKey" Data..=) Prelude.<$> secretKey,
+            ("ServerCertificate" Data..=)
+              Prelude.<$> serverCertificate,
+            ("ServerPort" Data..=) Prelude.<$> serverPort,
+            ("ServerProtocol" Data..=)
+              Prelude.<$> serverProtocol,
+            ("Subdirectory" Data..=) Prelude.<$> subdirectory,
+            Prelude.Just ("LocationArn" Data..= locationArn)
+          ]
+      )
+
+instance Data.ToPath UpdateLocationObjectStorage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateLocationObjectStorage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateLocationObjectStorageResponse' smart constructor.
+data UpdateLocationObjectStorageResponse = UpdateLocationObjectStorageResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLocationObjectStorageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateLocationObjectStorageResponse_httpStatus' - The response's http status code.
+newUpdateLocationObjectStorageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateLocationObjectStorageResponse
+newUpdateLocationObjectStorageResponse pHttpStatus_ =
+  UpdateLocationObjectStorageResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateLocationObjectStorageResponse_httpStatus :: Lens.Lens' UpdateLocationObjectStorageResponse Prelude.Int
+updateLocationObjectStorageResponse_httpStatus = Lens.lens (\UpdateLocationObjectStorageResponse' {httpStatus} -> httpStatus) (\s@UpdateLocationObjectStorageResponse' {} a -> s {httpStatus = a} :: UpdateLocationObjectStorageResponse)
+
+instance
+  Prelude.NFData
+    UpdateLocationObjectStorageResponse
+  where
+  rnf UpdateLocationObjectStorageResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/UpdateLocationSmb.hs b/gen/Amazonka/DataSync/UpdateLocationSmb.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/UpdateLocationSmb.hs
@@ -0,0 +1,316 @@
+{-# 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.DataSync.UpdateLocationSmb
+-- 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 some of the parameters of a previously created location for
+-- Server Message Block (SMB) file system access. For information about
+-- creating an SMB location, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html Creating a location for SMB>.
+module Amazonka.DataSync.UpdateLocationSmb
+  ( -- * Creating a Request
+    UpdateLocationSmb (..),
+    newUpdateLocationSmb,
+
+    -- * Request Lenses
+    updateLocationSmb_agentArns,
+    updateLocationSmb_domain,
+    updateLocationSmb_mountOptions,
+    updateLocationSmb_password,
+    updateLocationSmb_subdirectory,
+    updateLocationSmb_user,
+    updateLocationSmb_locationArn,
+
+    -- * Destructuring the Response
+    UpdateLocationSmbResponse (..),
+    newUpdateLocationSmbResponse,
+
+    -- * Response Lenses
+    updateLocationSmbResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateLocationSmb' smart constructor.
+data UpdateLocationSmb = UpdateLocationSmb'
+  { -- | The Amazon Resource Names (ARNs) of agents to use for a Simple Message
+    -- Block (SMB) location.
+    agentArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The name of the Windows domain that the SMB server belongs to.
+    domain :: Prelude.Maybe Prelude.Text,
+    mountOptions :: Prelude.Maybe SmbMountOptions,
+    -- | The password of the user who can mount the share has the permissions to
+    -- access files and folders in the SMB share.
+    password :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The subdirectory in the SMB file system that is used to read data from
+    -- the SMB source location or write data to the SMB destination. The SMB
+    -- path should be a path that\'s exported by the SMB server, or a
+    -- subdirectory of that path. The path should be such that it can be
+    -- mounted by other SMB clients in your network.
+    --
+    -- @Subdirectory@ must be specified with forward slashes. For example,
+    -- @\/path\/to\/folder@.
+    --
+    -- To transfer all the data in the folder that you specified, DataSync must
+    -- have permissions to mount the SMB share and to access all the data in
+    -- that share. To ensure this, do either of the following:
+    --
+    -- -   Ensure that the user\/password specified belongs to the user who can
+    --     mount the share and who has the appropriate permissions for all of
+    --     the files and directories that you want DataSync to access.
+    --
+    -- -   Use credentials of a member of the Backup Operators group to mount
+    --     the share.
+    --
+    -- Doing either of these options enables the agent to access the data. For
+    -- the agent to access directories, you must also enable all execute
+    -- access.
+    subdirectory :: Prelude.Maybe Prelude.Text,
+    -- | The user who can mount the share has the permissions to access files and
+    -- folders in the SMB share.
+    user :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the SMB location to update.
+    locationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLocationSmb' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'agentArns', 'updateLocationSmb_agentArns' - The Amazon Resource Names (ARNs) of agents to use for a Simple Message
+-- Block (SMB) location.
+--
+-- 'domain', 'updateLocationSmb_domain' - The name of the Windows domain that the SMB server belongs to.
+--
+-- 'mountOptions', 'updateLocationSmb_mountOptions' - Undocumented member.
+--
+-- 'password', 'updateLocationSmb_password' - The password of the user who can mount the share has the permissions to
+-- access files and folders in the SMB share.
+--
+-- 'subdirectory', 'updateLocationSmb_subdirectory' - The subdirectory in the SMB file system that is used to read data from
+-- the SMB source location or write data to the SMB destination. The SMB
+-- path should be a path that\'s exported by the SMB server, or a
+-- subdirectory of that path. The path should be such that it can be
+-- mounted by other SMB clients in your network.
+--
+-- @Subdirectory@ must be specified with forward slashes. For example,
+-- @\/path\/to\/folder@.
+--
+-- To transfer all the data in the folder that you specified, DataSync must
+-- have permissions to mount the SMB share and to access all the data in
+-- that share. To ensure this, do either of the following:
+--
+-- -   Ensure that the user\/password specified belongs to the user who can
+--     mount the share and who has the appropriate permissions for all of
+--     the files and directories that you want DataSync to access.
+--
+-- -   Use credentials of a member of the Backup Operators group to mount
+--     the share.
+--
+-- Doing either of these options enables the agent to access the data. For
+-- the agent to access directories, you must also enable all execute
+-- access.
+--
+-- 'user', 'updateLocationSmb_user' - The user who can mount the share has the permissions to access files and
+-- folders in the SMB share.
+--
+-- 'locationArn', 'updateLocationSmb_locationArn' - The Amazon Resource Name (ARN) of the SMB location to update.
+newUpdateLocationSmb ::
+  -- | 'locationArn'
+  Prelude.Text ->
+  UpdateLocationSmb
+newUpdateLocationSmb pLocationArn_ =
+  UpdateLocationSmb'
+    { agentArns = Prelude.Nothing,
+      domain = Prelude.Nothing,
+      mountOptions = Prelude.Nothing,
+      password = Prelude.Nothing,
+      subdirectory = Prelude.Nothing,
+      user = Prelude.Nothing,
+      locationArn = pLocationArn_
+    }
+
+-- | The Amazon Resource Names (ARNs) of agents to use for a Simple Message
+-- Block (SMB) location.
+updateLocationSmb_agentArns :: Lens.Lens' UpdateLocationSmb (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateLocationSmb_agentArns = Lens.lens (\UpdateLocationSmb' {agentArns} -> agentArns) (\s@UpdateLocationSmb' {} a -> s {agentArns = a} :: UpdateLocationSmb) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the Windows domain that the SMB server belongs to.
+updateLocationSmb_domain :: Lens.Lens' UpdateLocationSmb (Prelude.Maybe Prelude.Text)
+updateLocationSmb_domain = Lens.lens (\UpdateLocationSmb' {domain} -> domain) (\s@UpdateLocationSmb' {} a -> s {domain = a} :: UpdateLocationSmb)
+
+-- | Undocumented member.
+updateLocationSmb_mountOptions :: Lens.Lens' UpdateLocationSmb (Prelude.Maybe SmbMountOptions)
+updateLocationSmb_mountOptions = Lens.lens (\UpdateLocationSmb' {mountOptions} -> mountOptions) (\s@UpdateLocationSmb' {} a -> s {mountOptions = a} :: UpdateLocationSmb)
+
+-- | The password of the user who can mount the share has the permissions to
+-- access files and folders in the SMB share.
+updateLocationSmb_password :: Lens.Lens' UpdateLocationSmb (Prelude.Maybe Prelude.Text)
+updateLocationSmb_password = Lens.lens (\UpdateLocationSmb' {password} -> password) (\s@UpdateLocationSmb' {} a -> s {password = a} :: UpdateLocationSmb) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The subdirectory in the SMB file system that is used to read data from
+-- the SMB source location or write data to the SMB destination. The SMB
+-- path should be a path that\'s exported by the SMB server, or a
+-- subdirectory of that path. The path should be such that it can be
+-- mounted by other SMB clients in your network.
+--
+-- @Subdirectory@ must be specified with forward slashes. For example,
+-- @\/path\/to\/folder@.
+--
+-- To transfer all the data in the folder that you specified, DataSync must
+-- have permissions to mount the SMB share and to access all the data in
+-- that share. To ensure this, do either of the following:
+--
+-- -   Ensure that the user\/password specified belongs to the user who can
+--     mount the share and who has the appropriate permissions for all of
+--     the files and directories that you want DataSync to access.
+--
+-- -   Use credentials of a member of the Backup Operators group to mount
+--     the share.
+--
+-- Doing either of these options enables the agent to access the data. For
+-- the agent to access directories, you must also enable all execute
+-- access.
+updateLocationSmb_subdirectory :: Lens.Lens' UpdateLocationSmb (Prelude.Maybe Prelude.Text)
+updateLocationSmb_subdirectory = Lens.lens (\UpdateLocationSmb' {subdirectory} -> subdirectory) (\s@UpdateLocationSmb' {} a -> s {subdirectory = a} :: UpdateLocationSmb)
+
+-- | The user who can mount the share has the permissions to access files and
+-- folders in the SMB share.
+updateLocationSmb_user :: Lens.Lens' UpdateLocationSmb (Prelude.Maybe Prelude.Text)
+updateLocationSmb_user = Lens.lens (\UpdateLocationSmb' {user} -> user) (\s@UpdateLocationSmb' {} a -> s {user = a} :: UpdateLocationSmb)
+
+-- | The Amazon Resource Name (ARN) of the SMB location to update.
+updateLocationSmb_locationArn :: Lens.Lens' UpdateLocationSmb Prelude.Text
+updateLocationSmb_locationArn = Lens.lens (\UpdateLocationSmb' {locationArn} -> locationArn) (\s@UpdateLocationSmb' {} a -> s {locationArn = a} :: UpdateLocationSmb)
+
+instance Core.AWSRequest UpdateLocationSmb where
+  type
+    AWSResponse UpdateLocationSmb =
+      UpdateLocationSmbResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateLocationSmbResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateLocationSmb where
+  hashWithSalt _salt UpdateLocationSmb' {..} =
+    _salt
+      `Prelude.hashWithSalt` agentArns
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` mountOptions
+      `Prelude.hashWithSalt` password
+      `Prelude.hashWithSalt` subdirectory
+      `Prelude.hashWithSalt` user
+      `Prelude.hashWithSalt` locationArn
+
+instance Prelude.NFData UpdateLocationSmb where
+  rnf UpdateLocationSmb' {..} =
+    Prelude.rnf agentArns
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf mountOptions
+      `Prelude.seq` Prelude.rnf password
+      `Prelude.seq` Prelude.rnf subdirectory
+      `Prelude.seq` Prelude.rnf user
+      `Prelude.seq` Prelude.rnf locationArn
+
+instance Data.ToHeaders UpdateLocationSmb where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.UpdateLocationSmb" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateLocationSmb where
+  toJSON UpdateLocationSmb' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AgentArns" Data..=) Prelude.<$> agentArns,
+            ("Domain" Data..=) Prelude.<$> domain,
+            ("MountOptions" Data..=) Prelude.<$> mountOptions,
+            ("Password" Data..=) Prelude.<$> password,
+            ("Subdirectory" Data..=) Prelude.<$> subdirectory,
+            ("User" Data..=) Prelude.<$> user,
+            Prelude.Just ("LocationArn" Data..= locationArn)
+          ]
+      )
+
+instance Data.ToPath UpdateLocationSmb where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateLocationSmb where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateLocationSmbResponse' smart constructor.
+data UpdateLocationSmbResponse = UpdateLocationSmbResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLocationSmbResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateLocationSmbResponse_httpStatus' - The response's http status code.
+newUpdateLocationSmbResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateLocationSmbResponse
+newUpdateLocationSmbResponse pHttpStatus_ =
+  UpdateLocationSmbResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateLocationSmbResponse_httpStatus :: Lens.Lens' UpdateLocationSmbResponse Prelude.Int
+updateLocationSmbResponse_httpStatus = Lens.lens (\UpdateLocationSmbResponse' {httpStatus} -> httpStatus) (\s@UpdateLocationSmbResponse' {} a -> s {httpStatus = a} :: UpdateLocationSmbResponse)
+
+instance Prelude.NFData UpdateLocationSmbResponse where
+  rnf UpdateLocationSmbResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/UpdateTask.hs b/gen/Amazonka/DataSync/UpdateTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/UpdateTask.hs
@@ -0,0 +1,267 @@
+{-# 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.DataSync.UpdateTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the metadata associated with a task.
+module Amazonka.DataSync.UpdateTask
+  ( -- * Creating a Request
+    UpdateTask (..),
+    newUpdateTask,
+
+    -- * Request Lenses
+    updateTask_cloudWatchLogGroupArn,
+    updateTask_excludes,
+    updateTask_includes,
+    updateTask_name,
+    updateTask_options,
+    updateTask_schedule,
+    updateTask_taskArn,
+
+    -- * Destructuring the Response
+    UpdateTaskResponse (..),
+    newUpdateTaskResponse,
+
+    -- * Response Lenses
+    updateTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | UpdateTaskResponse
+--
+-- /See:/ 'newUpdateTask' smart constructor.
+data UpdateTask = UpdateTask'
+  { -- | The Amazon Resource Name (ARN) of the resource name of the Amazon
+    -- CloudWatch log group.
+    cloudWatchLogGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | Specifies a list of filter rules that exclude specific data during your
+    -- transfer. For more information and examples, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+    excludes :: Prelude.Maybe [FilterRule],
+    -- | Specifies a list of filter rules that include specific data during your
+    -- transfer. For more information and examples, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+    includes :: Prelude.Maybe [FilterRule],
+    -- | The name of the task to update.
+    name :: Prelude.Maybe Prelude.Text,
+    options :: Prelude.Maybe Options,
+    -- | Specifies a schedule used to periodically transfer files from a source
+    -- to a destination location. You can configure your task to execute
+    -- hourly, daily, weekly or on specific days of the week. You control when
+    -- in the day or hour you want the task to execute. The time you specify is
+    -- UTC time. For more information, see
+    -- <https://docs.aws.amazon.com/datasync/latest/userguide/task-scheduling.html Scheduling your task>.
+    schedule :: Prelude.Maybe TaskSchedule,
+    -- | The Amazon Resource Name (ARN) of the resource name of the task to
+    -- update.
+    taskArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cloudWatchLogGroupArn', 'updateTask_cloudWatchLogGroupArn' - The Amazon Resource Name (ARN) of the resource name of the Amazon
+-- CloudWatch log group.
+--
+-- 'excludes', 'updateTask_excludes' - Specifies a list of filter rules that exclude specific data during your
+-- transfer. For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+--
+-- 'includes', 'updateTask_includes' - Specifies a list of filter rules that include specific data during your
+-- transfer. For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+--
+-- 'name', 'updateTask_name' - The name of the task to update.
+--
+-- 'options', 'updateTask_options' - Undocumented member.
+--
+-- 'schedule', 'updateTask_schedule' - Specifies a schedule used to periodically transfer files from a source
+-- to a destination location. You can configure your task to execute
+-- hourly, daily, weekly or on specific days of the week. You control when
+-- in the day or hour you want the task to execute. The time you specify is
+-- UTC time. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/task-scheduling.html Scheduling your task>.
+--
+-- 'taskArn', 'updateTask_taskArn' - The Amazon Resource Name (ARN) of the resource name of the task to
+-- update.
+newUpdateTask ::
+  -- | 'taskArn'
+  Prelude.Text ->
+  UpdateTask
+newUpdateTask pTaskArn_ =
+  UpdateTask'
+    { cloudWatchLogGroupArn =
+        Prelude.Nothing,
+      excludes = Prelude.Nothing,
+      includes = Prelude.Nothing,
+      name = Prelude.Nothing,
+      options = Prelude.Nothing,
+      schedule = Prelude.Nothing,
+      taskArn = pTaskArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource name of the Amazon
+-- CloudWatch log group.
+updateTask_cloudWatchLogGroupArn :: Lens.Lens' UpdateTask (Prelude.Maybe Prelude.Text)
+updateTask_cloudWatchLogGroupArn = Lens.lens (\UpdateTask' {cloudWatchLogGroupArn} -> cloudWatchLogGroupArn) (\s@UpdateTask' {} a -> s {cloudWatchLogGroupArn = a} :: UpdateTask)
+
+-- | Specifies a list of filter rules that exclude specific data during your
+-- transfer. For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+updateTask_excludes :: Lens.Lens' UpdateTask (Prelude.Maybe [FilterRule])
+updateTask_excludes = Lens.lens (\UpdateTask' {excludes} -> excludes) (\s@UpdateTask' {} a -> s {excludes = a} :: UpdateTask) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies a list of filter rules that include specific data during your
+-- transfer. For more information and examples, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html Filtering data transferred by DataSync>.
+updateTask_includes :: Lens.Lens' UpdateTask (Prelude.Maybe [FilterRule])
+updateTask_includes = Lens.lens (\UpdateTask' {includes} -> includes) (\s@UpdateTask' {} a -> s {includes = a} :: UpdateTask) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the task to update.
+updateTask_name :: Lens.Lens' UpdateTask (Prelude.Maybe Prelude.Text)
+updateTask_name = Lens.lens (\UpdateTask' {name} -> name) (\s@UpdateTask' {} a -> s {name = a} :: UpdateTask)
+
+-- | Undocumented member.
+updateTask_options :: Lens.Lens' UpdateTask (Prelude.Maybe Options)
+updateTask_options = Lens.lens (\UpdateTask' {options} -> options) (\s@UpdateTask' {} a -> s {options = a} :: UpdateTask)
+
+-- | Specifies a schedule used to periodically transfer files from a source
+-- to a destination location. You can configure your task to execute
+-- hourly, daily, weekly or on specific days of the week. You control when
+-- in the day or hour you want the task to execute. The time you specify is
+-- UTC time. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/task-scheduling.html Scheduling your task>.
+updateTask_schedule :: Lens.Lens' UpdateTask (Prelude.Maybe TaskSchedule)
+updateTask_schedule = Lens.lens (\UpdateTask' {schedule} -> schedule) (\s@UpdateTask' {} a -> s {schedule = a} :: UpdateTask)
+
+-- | The Amazon Resource Name (ARN) of the resource name of the task to
+-- update.
+updateTask_taskArn :: Lens.Lens' UpdateTask Prelude.Text
+updateTask_taskArn = Lens.lens (\UpdateTask' {taskArn} -> taskArn) (\s@UpdateTask' {} a -> s {taskArn = a} :: UpdateTask)
+
+instance Core.AWSRequest UpdateTask where
+  type AWSResponse UpdateTask = UpdateTaskResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateTaskResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateTask where
+  hashWithSalt _salt UpdateTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` cloudWatchLogGroupArn
+      `Prelude.hashWithSalt` excludes
+      `Prelude.hashWithSalt` includes
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` options
+      `Prelude.hashWithSalt` schedule
+      `Prelude.hashWithSalt` taskArn
+
+instance Prelude.NFData UpdateTask where
+  rnf UpdateTask' {..} =
+    Prelude.rnf cloudWatchLogGroupArn
+      `Prelude.seq` Prelude.rnf excludes
+      `Prelude.seq` Prelude.rnf includes
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf schedule
+      `Prelude.seq` Prelude.rnf taskArn
+
+instance Data.ToHeaders UpdateTask where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("FmrsService.UpdateTask" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateTask where
+  toJSON UpdateTask' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CloudWatchLogGroupArn" Data..=)
+              Prelude.<$> cloudWatchLogGroupArn,
+            ("Excludes" Data..=) Prelude.<$> excludes,
+            ("Includes" Data..=) Prelude.<$> includes,
+            ("Name" Data..=) Prelude.<$> name,
+            ("Options" Data..=) Prelude.<$> options,
+            ("Schedule" Data..=) Prelude.<$> schedule,
+            Prelude.Just ("TaskArn" Data..= taskArn)
+          ]
+      )
+
+instance Data.ToPath UpdateTask where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateTaskResponse' smart constructor.
+data UpdateTaskResponse = UpdateTaskResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateTaskResponse_httpStatus' - The response's http status code.
+newUpdateTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateTaskResponse
+newUpdateTaskResponse pHttpStatus_ =
+  UpdateTaskResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateTaskResponse_httpStatus :: Lens.Lens' UpdateTaskResponse Prelude.Int
+updateTaskResponse_httpStatus = Lens.lens (\UpdateTaskResponse' {httpStatus} -> httpStatus) (\s@UpdateTaskResponse' {} a -> s {httpStatus = a} :: UpdateTaskResponse)
+
+instance Prelude.NFData UpdateTaskResponse where
+  rnf UpdateTaskResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/UpdateTaskExecution.hs b/gen/Amazonka/DataSync/UpdateTaskExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/UpdateTaskExecution.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataSync.UpdateTaskExecution
+-- 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 execution of a task.
+--
+-- You can modify bandwidth throttling for a task execution that is running
+-- or queued. For more information, see
+-- <https://docs.aws.amazon.com/datasync/latest/userguide/working-with-task-executions.html#adjust-bandwidth-throttling Adjusting Bandwidth Throttling for a Task Execution>.
+--
+-- The only @Option@ that can be modified by @UpdateTaskExecution@ is
+-- @ @<https://docs.aws.amazon.com/datasync/latest/userguide/API_Options.html#DataSync-Type-Options-BytesPerSecond BytesPerSecond>@ @.
+module Amazonka.DataSync.UpdateTaskExecution
+  ( -- * Creating a Request
+    UpdateTaskExecution (..),
+    newUpdateTaskExecution,
+
+    -- * Request Lenses
+    updateTaskExecution_taskExecutionArn,
+    updateTaskExecution_options,
+
+    -- * Destructuring the Response
+    UpdateTaskExecutionResponse (..),
+    newUpdateTaskExecutionResponse,
+
+    -- * Response Lenses
+    updateTaskExecutionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateTaskExecution' smart constructor.
+data UpdateTaskExecution = UpdateTaskExecution'
+  { -- | The Amazon Resource Name (ARN) of the specific task execution that is
+    -- being updated.
+    taskExecutionArn :: Prelude.Text,
+    options :: Options
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateTaskExecution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'taskExecutionArn', 'updateTaskExecution_taskExecutionArn' - The Amazon Resource Name (ARN) of the specific task execution that is
+-- being updated.
+--
+-- 'options', 'updateTaskExecution_options' - Undocumented member.
+newUpdateTaskExecution ::
+  -- | 'taskExecutionArn'
+  Prelude.Text ->
+  -- | 'options'
+  Options ->
+  UpdateTaskExecution
+newUpdateTaskExecution pTaskExecutionArn_ pOptions_ =
+  UpdateTaskExecution'
+    { taskExecutionArn =
+        pTaskExecutionArn_,
+      options = pOptions_
+    }
+
+-- | The Amazon Resource Name (ARN) of the specific task execution that is
+-- being updated.
+updateTaskExecution_taskExecutionArn :: Lens.Lens' UpdateTaskExecution Prelude.Text
+updateTaskExecution_taskExecutionArn = Lens.lens (\UpdateTaskExecution' {taskExecutionArn} -> taskExecutionArn) (\s@UpdateTaskExecution' {} a -> s {taskExecutionArn = a} :: UpdateTaskExecution)
+
+-- | Undocumented member.
+updateTaskExecution_options :: Lens.Lens' UpdateTaskExecution Options
+updateTaskExecution_options = Lens.lens (\UpdateTaskExecution' {options} -> options) (\s@UpdateTaskExecution' {} a -> s {options = a} :: UpdateTaskExecution)
+
+instance Core.AWSRequest UpdateTaskExecution where
+  type
+    AWSResponse UpdateTaskExecution =
+      UpdateTaskExecutionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateTaskExecutionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateTaskExecution where
+  hashWithSalt _salt UpdateTaskExecution' {..} =
+    _salt
+      `Prelude.hashWithSalt` taskExecutionArn
+      `Prelude.hashWithSalt` options
+
+instance Prelude.NFData UpdateTaskExecution where
+  rnf UpdateTaskExecution' {..} =
+    Prelude.rnf taskExecutionArn
+      `Prelude.seq` Prelude.rnf options
+
+instance Data.ToHeaders UpdateTaskExecution where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "FmrsService.UpdateTaskExecution" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateTaskExecution where
+  toJSON UpdateTaskExecution' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("TaskExecutionArn" Data..= taskExecutionArn),
+            Prelude.Just ("Options" Data..= options)
+          ]
+      )
+
+instance Data.ToPath UpdateTaskExecution where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateTaskExecution where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateTaskExecutionResponse' smart constructor.
+data UpdateTaskExecutionResponse = UpdateTaskExecutionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateTaskExecutionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateTaskExecutionResponse_httpStatus' - The response's http status code.
+newUpdateTaskExecutionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateTaskExecutionResponse
+newUpdateTaskExecutionResponse pHttpStatus_ =
+  UpdateTaskExecutionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateTaskExecutionResponse_httpStatus :: Lens.Lens' UpdateTaskExecutionResponse Prelude.Int
+updateTaskExecutionResponse_httpStatus = Lens.lens (\UpdateTaskExecutionResponse' {httpStatus} -> httpStatus) (\s@UpdateTaskExecutionResponse' {} a -> s {httpStatus = a} :: UpdateTaskExecutionResponse)
+
+instance Prelude.NFData UpdateTaskExecutionResponse where
+  rnf UpdateTaskExecutionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataSync/Waiters.hs b/gen/Amazonka/DataSync/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataSync/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.DataSync.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.DataSync.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataSync.Lens
+import Amazonka.DataSync.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.DataSync
+import Test.Amazonka.DataSync.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "DataSync"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/DataSync.hs b/test/Test/Amazonka/DataSync.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/DataSync.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.DataSync
+-- Copyright   : (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.DataSync
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/DataSync/Internal.hs b/test/Test/Amazonka/DataSync/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/DataSync/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.DataSync.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.DataSync.Internal where
diff --git a/test/Test/Amazonka/Gen/DataSync.hs b/test/Test/Amazonka/Gen/DataSync.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/DataSync.hs
@@ -0,0 +1,918 @@
+{-# 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.DataSync
+-- Copyright   : (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.DataSync where
+
+import Amazonka.DataSync
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.DataSync.Internal
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestCancelTaskExecution $
+--             newCancelTaskExecution
+--
+--         , requestCreateAgent $
+--             newCreateAgent
+--
+--         , requestCreateLocationEfs $
+--             newCreateLocationEfs
+--
+--         , requestCreateLocationFsxLustre $
+--             newCreateLocationFsxLustre
+--
+--         , requestCreateLocationFsxOntap $
+--             newCreateLocationFsxOntap
+--
+--         , requestCreateLocationFsxOpenZfs $
+--             newCreateLocationFsxOpenZfs
+--
+--         , requestCreateLocationFsxWindows $
+--             newCreateLocationFsxWindows
+--
+--         , requestCreateLocationHdfs $
+--             newCreateLocationHdfs
+--
+--         , requestCreateLocationNfs $
+--             newCreateLocationNfs
+--
+--         , requestCreateLocationObjectStorage $
+--             newCreateLocationObjectStorage
+--
+--         , requestCreateLocationS3 $
+--             newCreateLocationS3
+--
+--         , requestCreateLocationSmb $
+--             newCreateLocationSmb
+--
+--         , requestCreateTask $
+--             newCreateTask
+--
+--         , requestDeleteAgent $
+--             newDeleteAgent
+--
+--         , requestDeleteLocation $
+--             newDeleteLocation
+--
+--         , requestDeleteTask $
+--             newDeleteTask
+--
+--         , requestDescribeAgent $
+--             newDescribeAgent
+--
+--         , requestDescribeLocationEfs $
+--             newDescribeLocationEfs
+--
+--         , requestDescribeLocationFsxLustre $
+--             newDescribeLocationFsxLustre
+--
+--         , requestDescribeLocationFsxOntap $
+--             newDescribeLocationFsxOntap
+--
+--         , requestDescribeLocationFsxOpenZfs $
+--             newDescribeLocationFsxOpenZfs
+--
+--         , requestDescribeLocationFsxWindows $
+--             newDescribeLocationFsxWindows
+--
+--         , requestDescribeLocationHdfs $
+--             newDescribeLocationHdfs
+--
+--         , requestDescribeLocationNfs $
+--             newDescribeLocationNfs
+--
+--         , requestDescribeLocationObjectStorage $
+--             newDescribeLocationObjectStorage
+--
+--         , requestDescribeLocationS3 $
+--             newDescribeLocationS3
+--
+--         , requestDescribeLocationSmb $
+--             newDescribeLocationSmb
+--
+--         , requestDescribeTask $
+--             newDescribeTask
+--
+--         , requestDescribeTaskExecution $
+--             newDescribeTaskExecution
+--
+--         , requestListAgents $
+--             newListAgents
+--
+--         , requestListLocations $
+--             newListLocations
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListTaskExecutions $
+--             newListTaskExecutions
+--
+--         , requestListTasks $
+--             newListTasks
+--
+--         , requestStartTaskExecution $
+--             newStartTaskExecution
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateAgent $
+--             newUpdateAgent
+--
+--         , requestUpdateLocationHdfs $
+--             newUpdateLocationHdfs
+--
+--         , requestUpdateLocationNfs $
+--             newUpdateLocationNfs
+--
+--         , requestUpdateLocationObjectStorage $
+--             newUpdateLocationObjectStorage
+--
+--         , requestUpdateLocationSmb $
+--             newUpdateLocationSmb
+--
+--         , requestUpdateTask $
+--             newUpdateTask
+--
+--         , requestUpdateTaskExecution $
+--             newUpdateTaskExecution
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCancelTaskExecution $
+--             newCancelTaskExecutionResponse
+--
+--         , responseCreateAgent $
+--             newCreateAgentResponse
+--
+--         , responseCreateLocationEfs $
+--             newCreateLocationEfsResponse
+--
+--         , responseCreateLocationFsxLustre $
+--             newCreateLocationFsxLustreResponse
+--
+--         , responseCreateLocationFsxOntap $
+--             newCreateLocationFsxOntapResponse
+--
+--         , responseCreateLocationFsxOpenZfs $
+--             newCreateLocationFsxOpenZfsResponse
+--
+--         , responseCreateLocationFsxWindows $
+--             newCreateLocationFsxWindowsResponse
+--
+--         , responseCreateLocationHdfs $
+--             newCreateLocationHdfsResponse
+--
+--         , responseCreateLocationNfs $
+--             newCreateLocationNfsResponse
+--
+--         , responseCreateLocationObjectStorage $
+--             newCreateLocationObjectStorageResponse
+--
+--         , responseCreateLocationS3 $
+--             newCreateLocationS3Response
+--
+--         , responseCreateLocationSmb $
+--             newCreateLocationSmbResponse
+--
+--         , responseCreateTask $
+--             newCreateTaskResponse
+--
+--         , responseDeleteAgent $
+--             newDeleteAgentResponse
+--
+--         , responseDeleteLocation $
+--             newDeleteLocationResponse
+--
+--         , responseDeleteTask $
+--             newDeleteTaskResponse
+--
+--         , responseDescribeAgent $
+--             newDescribeAgentResponse
+--
+--         , responseDescribeLocationEfs $
+--             newDescribeLocationEfsResponse
+--
+--         , responseDescribeLocationFsxLustre $
+--             newDescribeLocationFsxLustreResponse
+--
+--         , responseDescribeLocationFsxOntap $
+--             newDescribeLocationFsxOntapResponse
+--
+--         , responseDescribeLocationFsxOpenZfs $
+--             newDescribeLocationFsxOpenZfsResponse
+--
+--         , responseDescribeLocationFsxWindows $
+--             newDescribeLocationFsxWindowsResponse
+--
+--         , responseDescribeLocationHdfs $
+--             newDescribeLocationHdfsResponse
+--
+--         , responseDescribeLocationNfs $
+--             newDescribeLocationNfsResponse
+--
+--         , responseDescribeLocationObjectStorage $
+--             newDescribeLocationObjectStorageResponse
+--
+--         , responseDescribeLocationS3 $
+--             newDescribeLocationS3Response
+--
+--         , responseDescribeLocationSmb $
+--             newDescribeLocationSmbResponse
+--
+--         , responseDescribeTask $
+--             newDescribeTaskResponse
+--
+--         , responseDescribeTaskExecution $
+--             newDescribeTaskExecutionResponse
+--
+--         , responseListAgents $
+--             newListAgentsResponse
+--
+--         , responseListLocations $
+--             newListLocationsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListTaskExecutions $
+--             newListTaskExecutionsResponse
+--
+--         , responseListTasks $
+--             newListTasksResponse
+--
+--         , responseStartTaskExecution $
+--             newStartTaskExecutionResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateAgent $
+--             newUpdateAgentResponse
+--
+--         , responseUpdateLocationHdfs $
+--             newUpdateLocationHdfsResponse
+--
+--         , responseUpdateLocationNfs $
+--             newUpdateLocationNfsResponse
+--
+--         , responseUpdateLocationObjectStorage $
+--             newUpdateLocationObjectStorageResponse
+--
+--         , responseUpdateLocationSmb $
+--             newUpdateLocationSmbResponse
+--
+--         , responseUpdateTask $
+--             newUpdateTaskResponse
+--
+--         , responseUpdateTaskExecution $
+--             newUpdateTaskExecutionResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCancelTaskExecution :: CancelTaskExecution -> TestTree
+requestCancelTaskExecution =
+  req
+    "CancelTaskExecution"
+    "fixture/CancelTaskExecution.yaml"
+
+requestCreateAgent :: CreateAgent -> TestTree
+requestCreateAgent =
+  req
+    "CreateAgent"
+    "fixture/CreateAgent.yaml"
+
+requestCreateLocationEfs :: CreateLocationEfs -> TestTree
+requestCreateLocationEfs =
+  req
+    "CreateLocationEfs"
+    "fixture/CreateLocationEfs.yaml"
+
+requestCreateLocationFsxLustre :: CreateLocationFsxLustre -> TestTree
+requestCreateLocationFsxLustre =
+  req
+    "CreateLocationFsxLustre"
+    "fixture/CreateLocationFsxLustre.yaml"
+
+requestCreateLocationFsxOntap :: CreateLocationFsxOntap -> TestTree
+requestCreateLocationFsxOntap =
+  req
+    "CreateLocationFsxOntap"
+    "fixture/CreateLocationFsxOntap.yaml"
+
+requestCreateLocationFsxOpenZfs :: CreateLocationFsxOpenZfs -> TestTree
+requestCreateLocationFsxOpenZfs =
+  req
+    "CreateLocationFsxOpenZfs"
+    "fixture/CreateLocationFsxOpenZfs.yaml"
+
+requestCreateLocationFsxWindows :: CreateLocationFsxWindows -> TestTree
+requestCreateLocationFsxWindows =
+  req
+    "CreateLocationFsxWindows"
+    "fixture/CreateLocationFsxWindows.yaml"
+
+requestCreateLocationHdfs :: CreateLocationHdfs -> TestTree
+requestCreateLocationHdfs =
+  req
+    "CreateLocationHdfs"
+    "fixture/CreateLocationHdfs.yaml"
+
+requestCreateLocationNfs :: CreateLocationNfs -> TestTree
+requestCreateLocationNfs =
+  req
+    "CreateLocationNfs"
+    "fixture/CreateLocationNfs.yaml"
+
+requestCreateLocationObjectStorage :: CreateLocationObjectStorage -> TestTree
+requestCreateLocationObjectStorage =
+  req
+    "CreateLocationObjectStorage"
+    "fixture/CreateLocationObjectStorage.yaml"
+
+requestCreateLocationS3 :: CreateLocationS3 -> TestTree
+requestCreateLocationS3 =
+  req
+    "CreateLocationS3"
+    "fixture/CreateLocationS3.yaml"
+
+requestCreateLocationSmb :: CreateLocationSmb -> TestTree
+requestCreateLocationSmb =
+  req
+    "CreateLocationSmb"
+    "fixture/CreateLocationSmb.yaml"
+
+requestCreateTask :: CreateTask -> TestTree
+requestCreateTask =
+  req
+    "CreateTask"
+    "fixture/CreateTask.yaml"
+
+requestDeleteAgent :: DeleteAgent -> TestTree
+requestDeleteAgent =
+  req
+    "DeleteAgent"
+    "fixture/DeleteAgent.yaml"
+
+requestDeleteLocation :: DeleteLocation -> TestTree
+requestDeleteLocation =
+  req
+    "DeleteLocation"
+    "fixture/DeleteLocation.yaml"
+
+requestDeleteTask :: DeleteTask -> TestTree
+requestDeleteTask =
+  req
+    "DeleteTask"
+    "fixture/DeleteTask.yaml"
+
+requestDescribeAgent :: DescribeAgent -> TestTree
+requestDescribeAgent =
+  req
+    "DescribeAgent"
+    "fixture/DescribeAgent.yaml"
+
+requestDescribeLocationEfs :: DescribeLocationEfs -> TestTree
+requestDescribeLocationEfs =
+  req
+    "DescribeLocationEfs"
+    "fixture/DescribeLocationEfs.yaml"
+
+requestDescribeLocationFsxLustre :: DescribeLocationFsxLustre -> TestTree
+requestDescribeLocationFsxLustre =
+  req
+    "DescribeLocationFsxLustre"
+    "fixture/DescribeLocationFsxLustre.yaml"
+
+requestDescribeLocationFsxOntap :: DescribeLocationFsxOntap -> TestTree
+requestDescribeLocationFsxOntap =
+  req
+    "DescribeLocationFsxOntap"
+    "fixture/DescribeLocationFsxOntap.yaml"
+
+requestDescribeLocationFsxOpenZfs :: DescribeLocationFsxOpenZfs -> TestTree
+requestDescribeLocationFsxOpenZfs =
+  req
+    "DescribeLocationFsxOpenZfs"
+    "fixture/DescribeLocationFsxOpenZfs.yaml"
+
+requestDescribeLocationFsxWindows :: DescribeLocationFsxWindows -> TestTree
+requestDescribeLocationFsxWindows =
+  req
+    "DescribeLocationFsxWindows"
+    "fixture/DescribeLocationFsxWindows.yaml"
+
+requestDescribeLocationHdfs :: DescribeLocationHdfs -> TestTree
+requestDescribeLocationHdfs =
+  req
+    "DescribeLocationHdfs"
+    "fixture/DescribeLocationHdfs.yaml"
+
+requestDescribeLocationNfs :: DescribeLocationNfs -> TestTree
+requestDescribeLocationNfs =
+  req
+    "DescribeLocationNfs"
+    "fixture/DescribeLocationNfs.yaml"
+
+requestDescribeLocationObjectStorage :: DescribeLocationObjectStorage -> TestTree
+requestDescribeLocationObjectStorage =
+  req
+    "DescribeLocationObjectStorage"
+    "fixture/DescribeLocationObjectStorage.yaml"
+
+requestDescribeLocationS3 :: DescribeLocationS3 -> TestTree
+requestDescribeLocationS3 =
+  req
+    "DescribeLocationS3"
+    "fixture/DescribeLocationS3.yaml"
+
+requestDescribeLocationSmb :: DescribeLocationSmb -> TestTree
+requestDescribeLocationSmb =
+  req
+    "DescribeLocationSmb"
+    "fixture/DescribeLocationSmb.yaml"
+
+requestDescribeTask :: DescribeTask -> TestTree
+requestDescribeTask =
+  req
+    "DescribeTask"
+    "fixture/DescribeTask.yaml"
+
+requestDescribeTaskExecution :: DescribeTaskExecution -> TestTree
+requestDescribeTaskExecution =
+  req
+    "DescribeTaskExecution"
+    "fixture/DescribeTaskExecution.yaml"
+
+requestListAgents :: ListAgents -> TestTree
+requestListAgents =
+  req
+    "ListAgents"
+    "fixture/ListAgents.yaml"
+
+requestListLocations :: ListLocations -> TestTree
+requestListLocations =
+  req
+    "ListLocations"
+    "fixture/ListLocations.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListTaskExecutions :: ListTaskExecutions -> TestTree
+requestListTaskExecutions =
+  req
+    "ListTaskExecutions"
+    "fixture/ListTaskExecutions.yaml"
+
+requestListTasks :: ListTasks -> TestTree
+requestListTasks =
+  req
+    "ListTasks"
+    "fixture/ListTasks.yaml"
+
+requestStartTaskExecution :: StartTaskExecution -> TestTree
+requestStartTaskExecution =
+  req
+    "StartTaskExecution"
+    "fixture/StartTaskExecution.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateAgent :: UpdateAgent -> TestTree
+requestUpdateAgent =
+  req
+    "UpdateAgent"
+    "fixture/UpdateAgent.yaml"
+
+requestUpdateLocationHdfs :: UpdateLocationHdfs -> TestTree
+requestUpdateLocationHdfs =
+  req
+    "UpdateLocationHdfs"
+    "fixture/UpdateLocationHdfs.yaml"
+
+requestUpdateLocationNfs :: UpdateLocationNfs -> TestTree
+requestUpdateLocationNfs =
+  req
+    "UpdateLocationNfs"
+    "fixture/UpdateLocationNfs.yaml"
+
+requestUpdateLocationObjectStorage :: UpdateLocationObjectStorage -> TestTree
+requestUpdateLocationObjectStorage =
+  req
+    "UpdateLocationObjectStorage"
+    "fixture/UpdateLocationObjectStorage.yaml"
+
+requestUpdateLocationSmb :: UpdateLocationSmb -> TestTree
+requestUpdateLocationSmb =
+  req
+    "UpdateLocationSmb"
+    "fixture/UpdateLocationSmb.yaml"
+
+requestUpdateTask :: UpdateTask -> TestTree
+requestUpdateTask =
+  req
+    "UpdateTask"
+    "fixture/UpdateTask.yaml"
+
+requestUpdateTaskExecution :: UpdateTaskExecution -> TestTree
+requestUpdateTaskExecution =
+  req
+    "UpdateTaskExecution"
+    "fixture/UpdateTaskExecution.yaml"
+
+-- Responses
+
+responseCancelTaskExecution :: CancelTaskExecutionResponse -> TestTree
+responseCancelTaskExecution =
+  res
+    "CancelTaskExecutionResponse"
+    "fixture/CancelTaskExecutionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelTaskExecution)
+
+responseCreateAgent :: CreateAgentResponse -> TestTree
+responseCreateAgent =
+  res
+    "CreateAgentResponse"
+    "fixture/CreateAgentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAgent)
+
+responseCreateLocationEfs :: CreateLocationEfsResponse -> TestTree
+responseCreateLocationEfs =
+  res
+    "CreateLocationEfsResponse"
+    "fixture/CreateLocationEfsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLocationEfs)
+
+responseCreateLocationFsxLustre :: CreateLocationFsxLustreResponse -> TestTree
+responseCreateLocationFsxLustre =
+  res
+    "CreateLocationFsxLustreResponse"
+    "fixture/CreateLocationFsxLustreResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLocationFsxLustre)
+
+responseCreateLocationFsxOntap :: CreateLocationFsxOntapResponse -> TestTree
+responseCreateLocationFsxOntap =
+  res
+    "CreateLocationFsxOntapResponse"
+    "fixture/CreateLocationFsxOntapResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLocationFsxOntap)
+
+responseCreateLocationFsxOpenZfs :: CreateLocationFsxOpenZfsResponse -> TestTree
+responseCreateLocationFsxOpenZfs =
+  res
+    "CreateLocationFsxOpenZfsResponse"
+    "fixture/CreateLocationFsxOpenZfsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLocationFsxOpenZfs)
+
+responseCreateLocationFsxWindows :: CreateLocationFsxWindowsResponse -> TestTree
+responseCreateLocationFsxWindows =
+  res
+    "CreateLocationFsxWindowsResponse"
+    "fixture/CreateLocationFsxWindowsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLocationFsxWindows)
+
+responseCreateLocationHdfs :: CreateLocationHdfsResponse -> TestTree
+responseCreateLocationHdfs =
+  res
+    "CreateLocationHdfsResponse"
+    "fixture/CreateLocationHdfsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLocationHdfs)
+
+responseCreateLocationNfs :: CreateLocationNfsResponse -> TestTree
+responseCreateLocationNfs =
+  res
+    "CreateLocationNfsResponse"
+    "fixture/CreateLocationNfsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLocationNfs)
+
+responseCreateLocationObjectStorage :: CreateLocationObjectStorageResponse -> TestTree
+responseCreateLocationObjectStorage =
+  res
+    "CreateLocationObjectStorageResponse"
+    "fixture/CreateLocationObjectStorageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLocationObjectStorage)
+
+responseCreateLocationS3 :: CreateLocationS3Response -> TestTree
+responseCreateLocationS3 =
+  res
+    "CreateLocationS3Response"
+    "fixture/CreateLocationS3Response.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLocationS3)
+
+responseCreateLocationSmb :: CreateLocationSmbResponse -> TestTree
+responseCreateLocationSmb =
+  res
+    "CreateLocationSmbResponse"
+    "fixture/CreateLocationSmbResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLocationSmb)
+
+responseCreateTask :: CreateTaskResponse -> TestTree
+responseCreateTask =
+  res
+    "CreateTaskResponse"
+    "fixture/CreateTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTask)
+
+responseDeleteAgent :: DeleteAgentResponse -> TestTree
+responseDeleteAgent =
+  res
+    "DeleteAgentResponse"
+    "fixture/DeleteAgentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAgent)
+
+responseDeleteLocation :: DeleteLocationResponse -> TestTree
+responseDeleteLocation =
+  res
+    "DeleteLocationResponse"
+    "fixture/DeleteLocationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteLocation)
+
+responseDeleteTask :: DeleteTaskResponse -> TestTree
+responseDeleteTask =
+  res
+    "DeleteTaskResponse"
+    "fixture/DeleteTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTask)
+
+responseDescribeAgent :: DescribeAgentResponse -> TestTree
+responseDescribeAgent =
+  res
+    "DescribeAgentResponse"
+    "fixture/DescribeAgentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAgent)
+
+responseDescribeLocationEfs :: DescribeLocationEfsResponse -> TestTree
+responseDescribeLocationEfs =
+  res
+    "DescribeLocationEfsResponse"
+    "fixture/DescribeLocationEfsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocationEfs)
+
+responseDescribeLocationFsxLustre :: DescribeLocationFsxLustreResponse -> TestTree
+responseDescribeLocationFsxLustre =
+  res
+    "DescribeLocationFsxLustreResponse"
+    "fixture/DescribeLocationFsxLustreResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocationFsxLustre)
+
+responseDescribeLocationFsxOntap :: DescribeLocationFsxOntapResponse -> TestTree
+responseDescribeLocationFsxOntap =
+  res
+    "DescribeLocationFsxOntapResponse"
+    "fixture/DescribeLocationFsxOntapResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocationFsxOntap)
+
+responseDescribeLocationFsxOpenZfs :: DescribeLocationFsxOpenZfsResponse -> TestTree
+responseDescribeLocationFsxOpenZfs =
+  res
+    "DescribeLocationFsxOpenZfsResponse"
+    "fixture/DescribeLocationFsxOpenZfsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocationFsxOpenZfs)
+
+responseDescribeLocationFsxWindows :: DescribeLocationFsxWindowsResponse -> TestTree
+responseDescribeLocationFsxWindows =
+  res
+    "DescribeLocationFsxWindowsResponse"
+    "fixture/DescribeLocationFsxWindowsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocationFsxWindows)
+
+responseDescribeLocationHdfs :: DescribeLocationHdfsResponse -> TestTree
+responseDescribeLocationHdfs =
+  res
+    "DescribeLocationHdfsResponse"
+    "fixture/DescribeLocationHdfsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocationHdfs)
+
+responseDescribeLocationNfs :: DescribeLocationNfsResponse -> TestTree
+responseDescribeLocationNfs =
+  res
+    "DescribeLocationNfsResponse"
+    "fixture/DescribeLocationNfsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocationNfs)
+
+responseDescribeLocationObjectStorage :: DescribeLocationObjectStorageResponse -> TestTree
+responseDescribeLocationObjectStorage =
+  res
+    "DescribeLocationObjectStorageResponse"
+    "fixture/DescribeLocationObjectStorageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocationObjectStorage)
+
+responseDescribeLocationS3 :: DescribeLocationS3Response -> TestTree
+responseDescribeLocationS3 =
+  res
+    "DescribeLocationS3Response"
+    "fixture/DescribeLocationS3Response.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocationS3)
+
+responseDescribeLocationSmb :: DescribeLocationSmbResponse -> TestTree
+responseDescribeLocationSmb =
+  res
+    "DescribeLocationSmbResponse"
+    "fixture/DescribeLocationSmbResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocationSmb)
+
+responseDescribeTask :: DescribeTaskResponse -> TestTree
+responseDescribeTask =
+  res
+    "DescribeTaskResponse"
+    "fixture/DescribeTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTask)
+
+responseDescribeTaskExecution :: DescribeTaskExecutionResponse -> TestTree
+responseDescribeTaskExecution =
+  res
+    "DescribeTaskExecutionResponse"
+    "fixture/DescribeTaskExecutionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTaskExecution)
+
+responseListAgents :: ListAgentsResponse -> TestTree
+responseListAgents =
+  res
+    "ListAgentsResponse"
+    "fixture/ListAgentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAgents)
+
+responseListLocations :: ListLocationsResponse -> TestTree
+responseListLocations =
+  res
+    "ListLocationsResponse"
+    "fixture/ListLocationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListLocations)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListTaskExecutions :: ListTaskExecutionsResponse -> TestTree
+responseListTaskExecutions =
+  res
+    "ListTaskExecutionsResponse"
+    "fixture/ListTaskExecutionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTaskExecutions)
+
+responseListTasks :: ListTasksResponse -> TestTree
+responseListTasks =
+  res
+    "ListTasksResponse"
+    "fixture/ListTasksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTasks)
+
+responseStartTaskExecution :: StartTaskExecutionResponse -> TestTree
+responseStartTaskExecution =
+  res
+    "StartTaskExecutionResponse"
+    "fixture/StartTaskExecutionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartTaskExecution)
+
+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)
+
+responseUpdateAgent :: UpdateAgentResponse -> TestTree
+responseUpdateAgent =
+  res
+    "UpdateAgentResponse"
+    "fixture/UpdateAgentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAgent)
+
+responseUpdateLocationHdfs :: UpdateLocationHdfsResponse -> TestTree
+responseUpdateLocationHdfs =
+  res
+    "UpdateLocationHdfsResponse"
+    "fixture/UpdateLocationHdfsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateLocationHdfs)
+
+responseUpdateLocationNfs :: UpdateLocationNfsResponse -> TestTree
+responseUpdateLocationNfs =
+  res
+    "UpdateLocationNfsResponse"
+    "fixture/UpdateLocationNfsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateLocationNfs)
+
+responseUpdateLocationObjectStorage :: UpdateLocationObjectStorageResponse -> TestTree
+responseUpdateLocationObjectStorage =
+  res
+    "UpdateLocationObjectStorageResponse"
+    "fixture/UpdateLocationObjectStorageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateLocationObjectStorage)
+
+responseUpdateLocationSmb :: UpdateLocationSmbResponse -> TestTree
+responseUpdateLocationSmb =
+  res
+    "UpdateLocationSmbResponse"
+    "fixture/UpdateLocationSmbResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateLocationSmb)
+
+responseUpdateTask :: UpdateTaskResponse -> TestTree
+responseUpdateTask =
+  res
+    "UpdateTaskResponse"
+    "fixture/UpdateTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateTask)
+
+responseUpdateTaskExecution :: UpdateTaskExecutionResponse -> TestTree
+responseUpdateTaskExecution =
+  res
+    "UpdateTaskExecutionResponse"
+    "fixture/UpdateTaskExecutionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateTaskExecution)
