diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.4.5`
+`1.5.0`
 
 
 ## Description
diff --git a/amazonka-lightsail.cabal b/amazonka-lightsail.cabal
--- a/amazonka-lightsail.cabal
+++ b/amazonka-lightsail.cabal
@@ -1,13 +1,13 @@
 name:                  amazonka-lightsail
-version:               1.4.5
+version:               1.5.0
 synopsis:              Amazon Lightsail SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
-license:               OtherLicense
+license:               MPL-2.0
 license-file:          LICENSE
 author:                Brendan Hay
-maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2016 Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+copyright:             Copyright (c) 2013-2017 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 cabal-version:         >= 1.10
@@ -29,14 +29,19 @@
     to get started.
 
 source-repository head
-    type:     git
-    location: git://github.com/brendanhay/amazonka.git
+    type:              git
+    location:          git://github.com/brendanhay/amazonka.git
+    subdir:            amazonka-lightsail
 
 library
     default-language:  Haskell2010
     hs-source-dirs:    src gen
 
-    ghc-options:       -Wall
+    ghc-options:
+        -Wall
+        -fwarn-incomplete-uni-patterns
+        -fwarn-incomplete-record-updates
+        -funbox-strict-fields
 
     exposed-modules:
           Network.AWS.Lightsail
@@ -81,6 +86,7 @@
         , Network.AWS.Lightsail.IsVPCPeered
         , Network.AWS.Lightsail.OpenInstancePublicPorts
         , Network.AWS.Lightsail.PeerVPC
+        , Network.AWS.Lightsail.PutInstancePublicPorts
         , Network.AWS.Lightsail.RebootInstance
         , Network.AWS.Lightsail.ReleaseStaticIP
         , Network.AWS.Lightsail.StartInstance
@@ -95,7 +101,7 @@
         , Network.AWS.Lightsail.Types.Sum
 
     build-depends:
-          amazonka-core == 1.4.5.*
+          amazonka-core == 1.5.0.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-lightsail-test
@@ -115,9 +121,9 @@
         , Test.AWS.Lightsail.Internal
 
     build-depends:
-          amazonka-core == 1.4.5.*
-        , amazonka-test == 1.4.5.*
-        , amazonka-lightsail == 1.4.5.*
+          amazonka-core == 1.5.0.*
+        , amazonka-test == 1.5.0.*
+        , amazonka-lightsail
         , base
         , bytestring
         , tasty
diff --git a/fixture/PutInstancePublicPorts.yaml b/fixture/PutInstancePublicPorts.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutInstancePublicPorts.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lightsail/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lightsail.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/PutInstancePublicPortsResponse.proto b/fixture/PutInstancePublicPortsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutInstancePublicPortsResponse.proto
diff --git a/gen/Network/AWS/Lightsail.hs b/gen/Network/AWS/Lightsail.hs
--- a/gen/Network/AWS/Lightsail.hs
+++ b/gen/Network/AWS/Lightsail.hs
@@ -5,18 +5,18 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Amazon Lightsail is the easiest way to get started with AWS for developers who just need virtual private servers. Lightsail includes everything you need to launch your project quickly - a virtual machine, SSD-based storage, data transfer, DNS management, and a static IP - for a low, predictable price. You manage those Lightsail servers through the Lightsail console or by using the API or command-line interface (CLI).
 --
 --
--- For more information about Lightsail concepts and tasks, see the <http://lightsail.aws.amazon.com/ls/docs Lightsail Dev Guide> .
+-- For more information about Lightsail concepts and tasks, see the <https://lightsail.aws.amazon.com/ls/docs/all Lightsail Dev Guide> .
 --
--- To use the Lightsail API or the CLI, you will need to use AWS Identity and Access Management (IAM) to generate access keys. For details about how to set this up, see the <http://lightsail.aws.amazon.com/ls/docs/how-to/articles/lightsail-how-to-set-up-access-keys-to-use-sdk-api-cli Lightsail Dev Guide> .
+-- To use the Lightsail API or the CLI, you will need to use AWS Identity and Access Management (IAM) to generate access keys. For details about how to set this up, see the <http://lightsail.aws.amazon.com/ls/docs/how-to/article/lightsail-how-to-set-up-access-keys-to-use-sdk-api-cli Lightsail Dev Guide> .
 --
 module Network.AWS.Lightsail
     (
@@ -65,7 +65,7 @@
     -- ** DeleteInstanceSnapshot
     , module Network.AWS.Lightsail.DeleteInstanceSnapshot
 
-    -- ** GetInstances
+    -- ** GetInstances (Paginated)
     , module Network.AWS.Lightsail.GetInstances
 
     -- ** GetInstance
@@ -77,7 +77,7 @@
     -- ** DownloadDefaultKeyPair
     , module Network.AWS.Lightsail.DownloadDefaultKeyPair
 
-    -- ** GetDomains
+    -- ** GetDomains (Paginated)
     , module Network.AWS.Lightsail.GetDomains
 
     -- ** CreateDomainEntry
@@ -86,7 +86,7 @@
     -- ** ImportKeyPair
     , module Network.AWS.Lightsail.ImportKeyPair
 
-    -- ** GetInstanceSnapshots
+    -- ** GetInstanceSnapshots (Paginated)
     , module Network.AWS.Lightsail.GetInstanceSnapshots
 
     -- ** ReleaseStaticIP
@@ -104,7 +104,7 @@
     -- ** GetDomain
     , module Network.AWS.Lightsail.GetDomain
 
-    -- ** GetActiveNames
+    -- ** GetActiveNames (Paginated)
     , module Network.AWS.Lightsail.GetActiveNames
 
     -- ** GetInstanceAccessDetails
@@ -119,7 +119,7 @@
     -- ** IsVPCPeered
     , module Network.AWS.Lightsail.IsVPCPeered
 
-    -- ** GetStaticIPs
+    -- ** GetStaticIPs (Paginated)
     , module Network.AWS.Lightsail.GetStaticIPs
 
     -- ** UnpeerVPC
@@ -137,7 +137,7 @@
     -- ** GetStaticIP
     , module Network.AWS.Lightsail.GetStaticIP
 
-    -- ** GetBlueprints
+    -- ** GetBlueprints (Paginated)
     , module Network.AWS.Lightsail.GetBlueprints
 
     -- ** GetInstancePortStates
@@ -155,10 +155,10 @@
     -- ** GetInstanceState
     , module Network.AWS.Lightsail.GetInstanceState
 
-    -- ** GetKeyPairs
+    -- ** GetKeyPairs (Paginated)
     , module Network.AWS.Lightsail.GetKeyPairs
 
-    -- ** GetOperations
+    -- ** GetOperations (Paginated)
     , module Network.AWS.Lightsail.GetOperations
 
     -- ** GetOperation
@@ -170,6 +170,9 @@
     -- ** GetKeyPair
     , module Network.AWS.Lightsail.GetKeyPair
 
+    -- ** PutInstancePublicPorts
+    , module Network.AWS.Lightsail.PutInstancePublicPorts
+
     -- ** DetachStaticIP
     , module Network.AWS.Lightsail.DetachStaticIP
 
@@ -179,7 +182,7 @@
     -- ** OpenInstancePublicPorts
     , module Network.AWS.Lightsail.OpenInstancePublicPorts
 
-    -- ** GetBundles
+    -- ** GetBundles (Paginated)
     , module Network.AWS.Lightsail.GetBundles
 
     -- ** DeleteDomain
@@ -208,6 +211,9 @@
     -- ** InstanceMetricName
     , InstanceMetricName (..)
 
+    -- ** InstancePlatform
+    , InstancePlatform (..)
+
     -- ** InstanceSnapshotState
     , InstanceSnapshotState (..)
 
@@ -248,6 +254,7 @@
     , Blueprint
     , blueprint
     , bVersionCode
+    , bPlatform
     , bGroup
     , bMinPower
     , bProductURL
@@ -269,6 +276,7 @@
     , bunName
     , bunPower
     , bunDiskSizeInGb
+    , bunSupportedPlatforms
     , bunPrice
     , bunIsActive
     , bunRamSizeInGb
@@ -342,6 +350,7 @@
     , iadExpiresAt
     , iadUsername
     , iadProtocol
+    , iadPasswordData
     , iadPassword
     , iadInstanceName
 
@@ -369,6 +378,14 @@
     , ipiToPort
     , ipiAccessFrom
 
+    -- ** InstancePortState
+    , InstancePortState
+    , instancePortState
+    , ipsFromPort
+    , ipsState
+    , ipsProtocol
+    , ipsToPort
+
     -- ** InstanceSnapshot
     , InstanceSnapshot
     , instanceSnapshot
@@ -435,6 +452,12 @@
     , oOperationType
     , oIsTerminal
 
+    -- ** PasswordData
+    , PasswordData
+    , passwordData
+    , pdKeyPairName
+    , pdCiphertext
+
     -- ** PortInfo
     , PortInfo
     , portInfo
@@ -471,55 +494,56 @@
     , siAttachedTo
     ) where
 
-import           Network.AWS.Lightsail.AllocateStaticIP
-import           Network.AWS.Lightsail.AttachStaticIP
-import           Network.AWS.Lightsail.CloseInstancePublicPorts
-import           Network.AWS.Lightsail.CreateDomain
-import           Network.AWS.Lightsail.CreateDomainEntry
-import           Network.AWS.Lightsail.CreateInstances
-import           Network.AWS.Lightsail.CreateInstancesFromSnapshot
-import           Network.AWS.Lightsail.CreateInstanceSnapshot
-import           Network.AWS.Lightsail.CreateKeyPair
-import           Network.AWS.Lightsail.DeleteDomain
-import           Network.AWS.Lightsail.DeleteDomainEntry
-import           Network.AWS.Lightsail.DeleteInstance
-import           Network.AWS.Lightsail.DeleteInstanceSnapshot
-import           Network.AWS.Lightsail.DeleteKeyPair
-import           Network.AWS.Lightsail.DetachStaticIP
-import           Network.AWS.Lightsail.DownloadDefaultKeyPair
-import           Network.AWS.Lightsail.GetActiveNames
-import           Network.AWS.Lightsail.GetBlueprints
-import           Network.AWS.Lightsail.GetBundles
-import           Network.AWS.Lightsail.GetDomain
-import           Network.AWS.Lightsail.GetDomains
-import           Network.AWS.Lightsail.GetInstance
-import           Network.AWS.Lightsail.GetInstanceAccessDetails
-import           Network.AWS.Lightsail.GetInstanceMetricData
-import           Network.AWS.Lightsail.GetInstancePortStates
-import           Network.AWS.Lightsail.GetInstances
-import           Network.AWS.Lightsail.GetInstanceSnapshot
-import           Network.AWS.Lightsail.GetInstanceSnapshots
-import           Network.AWS.Lightsail.GetInstanceState
-import           Network.AWS.Lightsail.GetKeyPair
-import           Network.AWS.Lightsail.GetKeyPairs
-import           Network.AWS.Lightsail.GetOperation
-import           Network.AWS.Lightsail.GetOperations
-import           Network.AWS.Lightsail.GetOperationsForResource
-import           Network.AWS.Lightsail.GetRegions
-import           Network.AWS.Lightsail.GetStaticIP
-import           Network.AWS.Lightsail.GetStaticIPs
-import           Network.AWS.Lightsail.ImportKeyPair
-import           Network.AWS.Lightsail.IsVPCPeered
-import           Network.AWS.Lightsail.OpenInstancePublicPorts
-import           Network.AWS.Lightsail.PeerVPC
-import           Network.AWS.Lightsail.RebootInstance
-import           Network.AWS.Lightsail.ReleaseStaticIP
-import           Network.AWS.Lightsail.StartInstance
-import           Network.AWS.Lightsail.StopInstance
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.UnpeerVPC
-import           Network.AWS.Lightsail.UpdateDomainEntry
-import           Network.AWS.Lightsail.Waiters
+import Network.AWS.Lightsail.AllocateStaticIP
+import Network.AWS.Lightsail.AttachStaticIP
+import Network.AWS.Lightsail.CloseInstancePublicPorts
+import Network.AWS.Lightsail.CreateDomain
+import Network.AWS.Lightsail.CreateDomainEntry
+import Network.AWS.Lightsail.CreateInstances
+import Network.AWS.Lightsail.CreateInstancesFromSnapshot
+import Network.AWS.Lightsail.CreateInstanceSnapshot
+import Network.AWS.Lightsail.CreateKeyPair
+import Network.AWS.Lightsail.DeleteDomain
+import Network.AWS.Lightsail.DeleteDomainEntry
+import Network.AWS.Lightsail.DeleteInstance
+import Network.AWS.Lightsail.DeleteInstanceSnapshot
+import Network.AWS.Lightsail.DeleteKeyPair
+import Network.AWS.Lightsail.DetachStaticIP
+import Network.AWS.Lightsail.DownloadDefaultKeyPair
+import Network.AWS.Lightsail.GetActiveNames
+import Network.AWS.Lightsail.GetBlueprints
+import Network.AWS.Lightsail.GetBundles
+import Network.AWS.Lightsail.GetDomain
+import Network.AWS.Lightsail.GetDomains
+import Network.AWS.Lightsail.GetInstance
+import Network.AWS.Lightsail.GetInstanceAccessDetails
+import Network.AWS.Lightsail.GetInstanceMetricData
+import Network.AWS.Lightsail.GetInstancePortStates
+import Network.AWS.Lightsail.GetInstances
+import Network.AWS.Lightsail.GetInstanceSnapshot
+import Network.AWS.Lightsail.GetInstanceSnapshots
+import Network.AWS.Lightsail.GetInstanceState
+import Network.AWS.Lightsail.GetKeyPair
+import Network.AWS.Lightsail.GetKeyPairs
+import Network.AWS.Lightsail.GetOperation
+import Network.AWS.Lightsail.GetOperations
+import Network.AWS.Lightsail.GetOperationsForResource
+import Network.AWS.Lightsail.GetRegions
+import Network.AWS.Lightsail.GetStaticIP
+import Network.AWS.Lightsail.GetStaticIPs
+import Network.AWS.Lightsail.ImportKeyPair
+import Network.AWS.Lightsail.IsVPCPeered
+import Network.AWS.Lightsail.OpenInstancePublicPorts
+import Network.AWS.Lightsail.PeerVPC
+import Network.AWS.Lightsail.PutInstancePublicPorts
+import Network.AWS.Lightsail.RebootInstance
+import Network.AWS.Lightsail.ReleaseStaticIP
+import Network.AWS.Lightsail.StartInstance
+import Network.AWS.Lightsail.StopInstance
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.UnpeerVPC
+import Network.AWS.Lightsail.UpdateDomainEntry
+import Network.AWS.Lightsail.Waiters
 
 {- $errors
 Error matchers are designed for use with the functions provided by
diff --git a/gen/Network/AWS/Lightsail/AllocateStaticIP.hs b/gen/Network/AWS/Lightsail/AllocateStaticIP.hs
--- a/gen/Network/AWS/Lightsail/AllocateStaticIP.hs
+++ b/gen/Network/AWS/Lightsail/AllocateStaticIP.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.AllocateStaticIP
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , asirsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'allocateStaticIP' smart constructor.
 newtype AllocateStaticIP = AllocateStaticIP'
-    { _asiStaticIPName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _asiStaticIPName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'AllocateStaticIP' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,10 +59,9 @@
     :: Text -- ^ 'asiStaticIPName'
     -> AllocateStaticIP
 allocateStaticIP pStaticIPName_ =
-    AllocateStaticIP'
-    { _asiStaticIPName = pStaticIPName_
-    }
+  AllocateStaticIP' {_asiStaticIPName = pStaticIPName_}
 
+
 -- | The name of the static IP address.
 asiStaticIPName :: Lens' AllocateStaticIP Text
 asiStaticIPName = lens _asiStaticIPName (\ s a -> s{_asiStaticIPName = a});
@@ -76,9 +76,9 @@
                    (x .?> "operations" .!@ mempty) <*>
                      (pure (fromEnum s)))
 
-instance Hashable AllocateStaticIP
+instance Hashable AllocateStaticIP where
 
-instance NFData AllocateStaticIP
+instance NFData AllocateStaticIP where
 
 instance ToHeaders AllocateStaticIP where
         toHeaders
@@ -104,10 +104,11 @@
 
 -- | /See:/ 'allocateStaticIPResponse' smart constructor.
 data AllocateStaticIPResponse = AllocateStaticIPResponse'
-    { _asirsOperations     :: !(Maybe [Operation])
-    , _asirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _asirsOperations     :: !(Maybe [Operation])
+  , _asirsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'AllocateStaticIPResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -119,11 +120,10 @@
     :: Int -- ^ 'asirsResponseStatus'
     -> AllocateStaticIPResponse
 allocateStaticIPResponse pResponseStatus_ =
-    AllocateStaticIPResponse'
-    { _asirsOperations = Nothing
-    , _asirsResponseStatus = pResponseStatus_
-    }
+  AllocateStaticIPResponse'
+  {_asirsOperations = Nothing, _asirsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the static IP address you allocated.
 asirsOperations :: Lens' AllocateStaticIPResponse [Operation]
 asirsOperations = lens _asirsOperations (\ s a -> s{_asirsOperations = a}) . _Default . _Coerce;
@@ -132,4 +132,4 @@
 asirsResponseStatus :: Lens' AllocateStaticIPResponse Int
 asirsResponseStatus = lens _asirsResponseStatus (\ s a -> s{_asirsResponseStatus = a});
 
-instance NFData AllocateStaticIPResponse
+instance NFData AllocateStaticIPResponse where
diff --git a/gen/Network/AWS/Lightsail/AttachStaticIP.hs b/gen/Network/AWS/Lightsail/AttachStaticIP.hs
--- a/gen/Network/AWS/Lightsail/AttachStaticIP.hs
+++ b/gen/Network/AWS/Lightsail/AttachStaticIP.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.AttachStaticIP
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,19 +38,20 @@
     , asiprsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'attachStaticIP' smart constructor.
 data AttachStaticIP = AttachStaticIP'
-    { _asipStaticIPName :: !Text
-    , _asipInstanceName :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _asipStaticIPName :: !Text
+  , _asipInstanceName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'AttachStaticIP' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,11 +64,10 @@
     -> Text -- ^ 'asipInstanceName'
     -> AttachStaticIP
 attachStaticIP pStaticIPName_ pInstanceName_ =
-    AttachStaticIP'
-    { _asipStaticIPName = pStaticIPName_
-    , _asipInstanceName = pInstanceName_
-    }
+  AttachStaticIP'
+  {_asipStaticIPName = pStaticIPName_, _asipInstanceName = pInstanceName_}
 
+
 -- | The name of the static IP.
 asipStaticIPName :: Lens' AttachStaticIP Text
 asipStaticIPName = lens _asipStaticIPName (\ s a -> s{_asipStaticIPName = a});
@@ -86,9 +86,9 @@
                    (x .?> "operations" .!@ mempty) <*>
                      (pure (fromEnum s)))
 
-instance Hashable AttachStaticIP
+instance Hashable AttachStaticIP where
 
-instance NFData AttachStaticIP
+instance NFData AttachStaticIP where
 
 instance ToHeaders AttachStaticIP where
         toHeaders
@@ -114,10 +114,11 @@
 
 -- | /See:/ 'attachStaticIPResponse' smart constructor.
 data AttachStaticIPResponse = AttachStaticIPResponse'
-    { _asiprsOperations     :: !(Maybe [Operation])
-    , _asiprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _asiprsOperations     :: !(Maybe [Operation])
+  , _asiprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'AttachStaticIPResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -129,11 +130,10 @@
     :: Int -- ^ 'asiprsResponseStatus'
     -> AttachStaticIPResponse
 attachStaticIPResponse pResponseStatus_ =
-    AttachStaticIPResponse'
-    { _asiprsOperations = Nothing
-    , _asiprsResponseStatus = pResponseStatus_
-    }
+  AttachStaticIPResponse'
+  {_asiprsOperations = Nothing, _asiprsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about your API operations.
 asiprsOperations :: Lens' AttachStaticIPResponse [Operation]
 asiprsOperations = lens _asiprsOperations (\ s a -> s{_asiprsOperations = a}) . _Default . _Coerce;
@@ -142,4 +142,4 @@
 asiprsResponseStatus :: Lens' AttachStaticIPResponse Int
 asiprsResponseStatus = lens _asiprsResponseStatus (\ s a -> s{_asiprsResponseStatus = a});
 
-instance NFData AttachStaticIPResponse
+instance NFData AttachStaticIPResponse where
diff --git a/gen/Network/AWS/Lightsail/CloseInstancePublicPorts.hs b/gen/Network/AWS/Lightsail/CloseInstancePublicPorts.hs
--- a/gen/Network/AWS/Lightsail/CloseInstancePublicPorts.hs
+++ b/gen/Network/AWS/Lightsail/CloseInstancePublicPorts.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.CloseInstancePublicPorts
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,19 +38,20 @@
     , cipprsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'closeInstancePublicPorts' smart constructor.
 data CloseInstancePublicPorts = CloseInstancePublicPorts'
-    { _cippPortInfo     :: !PortInfo
-    , _cippInstanceName :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cippPortInfo     :: !PortInfo
+  , _cippInstanceName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CloseInstancePublicPorts' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,11 +64,10 @@
     -> Text -- ^ 'cippInstanceName'
     -> CloseInstancePublicPorts
 closeInstancePublicPorts pPortInfo_ pInstanceName_ =
-    CloseInstancePublicPorts'
-    { _cippPortInfo = pPortInfo_
-    , _cippInstanceName = pInstanceName_
-    }
+  CloseInstancePublicPorts'
+  {_cippPortInfo = pPortInfo_, _cippInstanceName = pInstanceName_}
 
+
 -- | Information about the public port you are trying to close.
 cippPortInfo :: Lens' CloseInstancePublicPorts PortInfo
 cippPortInfo = lens _cippPortInfo (\ s a -> s{_cippPortInfo = a});
@@ -86,9 +86,9 @@
                  CloseInstancePublicPortsResponse' <$>
                    (x .?> "operation") <*> (pure (fromEnum s)))
 
-instance Hashable CloseInstancePublicPorts
+instance Hashable CloseInstancePublicPorts where
 
-instance NFData CloseInstancePublicPorts
+instance NFData CloseInstancePublicPorts where
 
 instance ToHeaders CloseInstancePublicPorts where
         toHeaders
@@ -115,10 +115,11 @@
 
 -- | /See:/ 'closeInstancePublicPortsResponse' smart constructor.
 data CloseInstancePublicPortsResponse = CloseInstancePublicPortsResponse'
-    { _cipprsOperation      :: !(Maybe Operation)
-    , _cipprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cipprsOperation      :: !(Maybe Operation)
+  , _cipprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CloseInstancePublicPortsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -130,11 +131,10 @@
     :: Int -- ^ 'cipprsResponseStatus'
     -> CloseInstancePublicPortsResponse
 closeInstancePublicPortsResponse pResponseStatus_ =
-    CloseInstancePublicPortsResponse'
-    { _cipprsOperation = Nothing
-    , _cipprsResponseStatus = pResponseStatus_
-    }
+  CloseInstancePublicPortsResponse'
+  {_cipprsOperation = Nothing, _cipprsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs that contains information about the operation.
 cipprsOperation :: Lens' CloseInstancePublicPortsResponse (Maybe Operation)
 cipprsOperation = lens _cipprsOperation (\ s a -> s{_cipprsOperation = a});
@@ -144,3 +144,4 @@
 cipprsResponseStatus = lens _cipprsResponseStatus (\ s a -> s{_cipprsResponseStatus = a});
 
 instance NFData CloseInstancePublicPortsResponse
+         where
diff --git a/gen/Network/AWS/Lightsail/CreateDomain.hs b/gen/Network/AWS/Lightsail/CreateDomain.hs
--- a/gen/Network/AWS/Lightsail/CreateDomain.hs
+++ b/gen/Network/AWS/Lightsail/CreateDomain.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.CreateDomain
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , cdrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'createDomain' smart constructor.
 newtype CreateDomain = CreateDomain'
-    { _cdDomainName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cdDomainName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateDomain' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,11 +58,9 @@
 createDomain
     :: Text -- ^ 'cdDomainName'
     -> CreateDomain
-createDomain pDomainName_ =
-    CreateDomain'
-    { _cdDomainName = pDomainName_
-    }
+createDomain pDomainName_ = CreateDomain' {_cdDomainName = pDomainName_}
 
+
 -- | The domain name to manage (e.g., @example.com@ ).
 cdDomainName :: Lens' CreateDomain Text
 cdDomainName = lens _cdDomainName (\ s a -> s{_cdDomainName = a});
@@ -75,9 +74,9 @@
                  CreateDomainResponse' <$>
                    (x .?> "operation") <*> (pure (fromEnum s)))
 
-instance Hashable CreateDomain
+instance Hashable CreateDomain where
 
-instance NFData CreateDomain
+instance NFData CreateDomain where
 
 instance ToHeaders CreateDomain where
         toHeaders
@@ -101,10 +100,11 @@
 
 -- | /See:/ 'createDomainResponse' smart constructor.
 data CreateDomainResponse = CreateDomainResponse'
-    { _cdrsOperation      :: !(Maybe Operation)
-    , _cdrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cdrsOperation      :: !(Maybe Operation)
+  , _cdrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateDomainResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -116,11 +116,10 @@
     :: Int -- ^ 'cdrsResponseStatus'
     -> CreateDomainResponse
 createDomainResponse pResponseStatus_ =
-    CreateDomainResponse'
-    { _cdrsOperation = Nothing
-    , _cdrsResponseStatus = pResponseStatus_
-    }
+  CreateDomainResponse'
+  {_cdrsOperation = Nothing, _cdrsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the domain resource you created.
 cdrsOperation :: Lens' CreateDomainResponse (Maybe Operation)
 cdrsOperation = lens _cdrsOperation (\ s a -> s{_cdrsOperation = a});
@@ -129,4 +128,4 @@
 cdrsResponseStatus :: Lens' CreateDomainResponse Int
 cdrsResponseStatus = lens _cdrsResponseStatus (\ s a -> s{_cdrsResponseStatus = a});
 
-instance NFData CreateDomainResponse
+instance NFData CreateDomainResponse where
diff --git a/gen/Network/AWS/Lightsail/CreateDomainEntry.hs b/gen/Network/AWS/Lightsail/CreateDomainEntry.hs
--- a/gen/Network/AWS/Lightsail/CreateDomainEntry.hs
+++ b/gen/Network/AWS/Lightsail/CreateDomainEntry.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.CreateDomainEntry
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,19 +38,20 @@
     , cdersResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'createDomainEntry' smart constructor.
 data CreateDomainEntry = CreateDomainEntry'
-    { _cdeDomainName  :: !Text
-    , _cdeDomainEntry :: !DomainEntry
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cdeDomainName  :: !Text
+  , _cdeDomainEntry :: !DomainEntry
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateDomainEntry' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,11 +64,10 @@
     -> DomainEntry -- ^ 'cdeDomainEntry'
     -> CreateDomainEntry
 createDomainEntry pDomainName_ pDomainEntry_ =
-    CreateDomainEntry'
-    { _cdeDomainName = pDomainName_
-    , _cdeDomainEntry = pDomainEntry_
-    }
+  CreateDomainEntry'
+  {_cdeDomainName = pDomainName_, _cdeDomainEntry = pDomainEntry_}
 
+
 -- | The domain name (e.g., @example.com@ ) for which you want to create the domain entry.
 cdeDomainName :: Lens' CreateDomainEntry Text
 cdeDomainName = lens _cdeDomainName (\ s a -> s{_cdeDomainName = a});
@@ -85,9 +85,9 @@
                  CreateDomainEntryResponse' <$>
                    (x .?> "operation") <*> (pure (fromEnum s)))
 
-instance Hashable CreateDomainEntry
+instance Hashable CreateDomainEntry where
 
-instance NFData CreateDomainEntry
+instance NFData CreateDomainEntry where
 
 instance ToHeaders CreateDomainEntry where
         toHeaders
@@ -114,10 +114,11 @@
 
 -- | /See:/ 'createDomainEntryResponse' smart constructor.
 data CreateDomainEntryResponse = CreateDomainEntryResponse'
-    { _cdersOperation      :: !(Maybe Operation)
-    , _cdersResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cdersOperation      :: !(Maybe Operation)
+  , _cdersResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateDomainEntryResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -129,11 +130,10 @@
     :: Int -- ^ 'cdersResponseStatus'
     -> CreateDomainEntryResponse
 createDomainEntryResponse pResponseStatus_ =
-    CreateDomainEntryResponse'
-    { _cdersOperation = Nothing
-    , _cdersResponseStatus = pResponseStatus_
-    }
+  CreateDomainEntryResponse'
+  {_cdersOperation = Nothing, _cdersResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the operation.
 cdersOperation :: Lens' CreateDomainEntryResponse (Maybe Operation)
 cdersOperation = lens _cdersOperation (\ s a -> s{_cdersOperation = a});
@@ -142,4 +142,4 @@
 cdersResponseStatus :: Lens' CreateDomainEntryResponse Int
 cdersResponseStatus = lens _cdersResponseStatus (\ s a -> s{_cdersResponseStatus = a});
 
-instance NFData CreateDomainEntryResponse
+instance NFData CreateDomainEntryResponse where
diff --git a/gen/Network/AWS/Lightsail/CreateInstanceSnapshot.hs b/gen/Network/AWS/Lightsail/CreateInstanceSnapshot.hs
--- a/gen/Network/AWS/Lightsail/CreateInstanceSnapshot.hs
+++ b/gen/Network/AWS/Lightsail/CreateInstanceSnapshot.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.CreateInstanceSnapshot
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,19 +38,20 @@
     , cisrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'createInstanceSnapshot' smart constructor.
 data CreateInstanceSnapshot = CreateInstanceSnapshot'
-    { _cisInstanceSnapshotName :: !Text
-    , _cisInstanceName         :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cisInstanceSnapshotName :: !Text
+  , _cisInstanceName         :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateInstanceSnapshot' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,11 +64,12 @@
     -> Text -- ^ 'cisInstanceName'
     -> CreateInstanceSnapshot
 createInstanceSnapshot pInstanceSnapshotName_ pInstanceName_ =
-    CreateInstanceSnapshot'
-    { _cisInstanceSnapshotName = pInstanceSnapshotName_
-    , _cisInstanceName = pInstanceName_
-    }
+  CreateInstanceSnapshot'
+  { _cisInstanceSnapshotName = pInstanceSnapshotName_
+  , _cisInstanceName = pInstanceName_
+  }
 
+
 -- | The name for your new snapshot.
 cisInstanceSnapshotName :: Lens' CreateInstanceSnapshot Text
 cisInstanceSnapshotName = lens _cisInstanceSnapshotName (\ s a -> s{_cisInstanceSnapshotName = a});
@@ -87,9 +89,9 @@
                    (x .?> "operations" .!@ mempty) <*>
                      (pure (fromEnum s)))
 
-instance Hashable CreateInstanceSnapshot
+instance Hashable CreateInstanceSnapshot where
 
-instance NFData CreateInstanceSnapshot
+instance NFData CreateInstanceSnapshot where
 
 instance ToHeaders CreateInstanceSnapshot where
         toHeaders
@@ -117,10 +119,11 @@
 
 -- | /See:/ 'createInstanceSnapshotResponse' smart constructor.
 data CreateInstanceSnapshotResponse = CreateInstanceSnapshotResponse'
-    { _cisrsOperations     :: !(Maybe [Operation])
-    , _cisrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cisrsOperations     :: !(Maybe [Operation])
+  , _cisrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateInstanceSnapshotResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -132,11 +135,10 @@
     :: Int -- ^ 'cisrsResponseStatus'
     -> CreateInstanceSnapshotResponse
 createInstanceSnapshotResponse pResponseStatus_ =
-    CreateInstanceSnapshotResponse'
-    { _cisrsOperations = Nothing
-    , _cisrsResponseStatus = pResponseStatus_
-    }
+  CreateInstanceSnapshotResponse'
+  {_cisrsOperations = Nothing, _cisrsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the results of your create instances snapshot request.
 cisrsOperations :: Lens' CreateInstanceSnapshotResponse [Operation]
 cisrsOperations = lens _cisrsOperations (\ s a -> s{_cisrsOperations = a}) . _Default . _Coerce;
@@ -145,4 +147,4 @@
 cisrsResponseStatus :: Lens' CreateInstanceSnapshotResponse Int
 cisrsResponseStatus = lens _cisrsResponseStatus (\ s a -> s{_cisrsResponseStatus = a});
 
-instance NFData CreateInstanceSnapshotResponse
+instance NFData CreateInstanceSnapshotResponse where
diff --git a/gen/Network/AWS/Lightsail/CreateInstances.hs b/gen/Network/AWS/Lightsail/CreateInstances.hs
--- a/gen/Network/AWS/Lightsail/CreateInstances.hs
+++ b/gen/Network/AWS/Lightsail/CreateInstances.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.CreateInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -43,29 +43,30 @@
     , cirsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'createInstances' smart constructor.
 data CreateInstances = CreateInstances'
-    { _ciCustomImageName  :: !(Maybe Text)
-    , _ciUserData         :: !(Maybe Text)
-    , _ciKeyPairName      :: !(Maybe Text)
-    , _ciInstanceNames    :: ![Text]
-    , _ciAvailabilityZone :: !Text
-    , _ciBlueprintId      :: !Text
-    , _ciBundleId         :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ciCustomImageName  :: !(Maybe Text)
+  , _ciUserData         :: !(Maybe Text)
+  , _ciKeyPairName      :: !(Maybe Text)
+  , _ciInstanceNames    :: ![Text]
+  , _ciAvailabilityZone :: !Text
+  , _ciBlueprintId      :: !Text
+  , _ciBundleId         :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateInstances' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ciCustomImageName' - The name for your custom image.
+-- * 'ciCustomImageName' - (Deprecated) The name for your custom image.
 --
 -- * 'ciUserData' - A launch script you can create that configures a server with additional user data. For example, you might want to run @apt-get –y update@ .
 --
@@ -73,7 +74,7 @@
 --
 -- * 'ciInstanceNames' - The names to use for your new Lightsail instances. Separate multiple values using quotation marks and commas, for example: @["MyFirstInstance","MySecondInstance"]@
 --
--- * 'ciAvailabilityZone' - The Availability Zone in which to create your instance. Use the following format: @us-east-1a@ (case sensitive).
+-- * 'ciAvailabilityZone' - The Availability Zone in which to create your instance. Use the following format: @us-east-1a@ (case sensitive). You can get a list of availability zones by using the <http://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_GetRegions.html get regions> operation. Be sure to add the @include availability zones@ parameter to your request.
 --
 -- * 'ciBlueprintId' - The ID for a virtual private server image (e.g., @app_wordpress_4_4@ or @app_lamp_7_0@ ). Use the get blueprints operation to return a list of available images (or /blueprints/ ).
 --
@@ -84,17 +85,18 @@
     -> Text -- ^ 'ciBundleId'
     -> CreateInstances
 createInstances pAvailabilityZone_ pBlueprintId_ pBundleId_ =
-    CreateInstances'
-    { _ciCustomImageName = Nothing
-    , _ciUserData = Nothing
-    , _ciKeyPairName = Nothing
-    , _ciInstanceNames = mempty
-    , _ciAvailabilityZone = pAvailabilityZone_
-    , _ciBlueprintId = pBlueprintId_
-    , _ciBundleId = pBundleId_
-    }
+  CreateInstances'
+  { _ciCustomImageName = Nothing
+  , _ciUserData = Nothing
+  , _ciKeyPairName = Nothing
+  , _ciInstanceNames = mempty
+  , _ciAvailabilityZone = pAvailabilityZone_
+  , _ciBlueprintId = pBlueprintId_
+  , _ciBundleId = pBundleId_
+  }
 
--- | The name for your custom image.
+
+-- | (Deprecated) The name for your custom image.
 ciCustomImageName :: Lens' CreateInstances (Maybe Text)
 ciCustomImageName = lens _ciCustomImageName (\ s a -> s{_ciCustomImageName = a});
 
@@ -110,7 +112,7 @@
 ciInstanceNames :: Lens' CreateInstances [Text]
 ciInstanceNames = lens _ciInstanceNames (\ s a -> s{_ciInstanceNames = a}) . _Coerce;
 
--- | The Availability Zone in which to create your instance. Use the following format: @us-east-1a@ (case sensitive).
+-- | The Availability Zone in which to create your instance. Use the following format: @us-east-1a@ (case sensitive). You can get a list of availability zones by using the <http://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_GetRegions.html get regions> operation. Be sure to add the @include availability zones@ parameter to your request.
 ciAvailabilityZone :: Lens' CreateInstances Text
 ciAvailabilityZone = lens _ciAvailabilityZone (\ s a -> s{_ciAvailabilityZone = a});
 
@@ -132,9 +134,9 @@
                    (x .?> "operations" .!@ mempty) <*>
                      (pure (fromEnum s)))
 
-instance Hashable CreateInstances
+instance Hashable CreateInstances where
 
-instance NFData CreateInstances
+instance NFData CreateInstances where
 
 instance ToHeaders CreateInstances where
         toHeaders
@@ -165,10 +167,11 @@
 
 -- | /See:/ 'createInstancesResponse' smart constructor.
 data CreateInstancesResponse = CreateInstancesResponse'
-    { _cirsOperations     :: !(Maybe [Operation])
-    , _cirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cirsOperations     :: !(Maybe [Operation])
+  , _cirsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateInstancesResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -180,11 +183,10 @@
     :: Int -- ^ 'cirsResponseStatus'
     -> CreateInstancesResponse
 createInstancesResponse pResponseStatus_ =
-    CreateInstancesResponse'
-    { _cirsOperations = Nothing
-    , _cirsResponseStatus = pResponseStatus_
-    }
+  CreateInstancesResponse'
+  {_cirsOperations = Nothing, _cirsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the results of your create instances request.
 cirsOperations :: Lens' CreateInstancesResponse [Operation]
 cirsOperations = lens _cirsOperations (\ s a -> s{_cirsOperations = a}) . _Default . _Coerce;
@@ -193,4 +195,4 @@
 cirsResponseStatus :: Lens' CreateInstancesResponse Int
 cirsResponseStatus = lens _cirsResponseStatus (\ s a -> s{_cirsResponseStatus = a});
 
-instance NFData CreateInstancesResponse
+instance NFData CreateInstancesResponse where
diff --git a/gen/Network/AWS/Lightsail/CreateInstancesFromSnapshot.hs b/gen/Network/AWS/Lightsail/CreateInstancesFromSnapshot.hs
--- a/gen/Network/AWS/Lightsail/CreateInstancesFromSnapshot.hs
+++ b/gen/Network/AWS/Lightsail/CreateInstancesFromSnapshot.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.CreateInstancesFromSnapshot
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -42,23 +42,24 @@
     , cifsrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'createInstancesFromSnapshot' smart constructor.
 data CreateInstancesFromSnapshot = CreateInstancesFromSnapshot'
-    { _cifsUserData             :: !(Maybe Text)
-    , _cifsKeyPairName          :: !(Maybe Text)
-    , _cifsInstanceNames        :: ![Text]
-    , _cifsAvailabilityZone     :: !Text
-    , _cifsInstanceSnapshotName :: !Text
-    , _cifsBundleId             :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cifsUserData             :: !(Maybe Text)
+  , _cifsKeyPairName          :: !(Maybe Text)
+  , _cifsInstanceNames        :: ![Text]
+  , _cifsAvailabilityZone     :: !Text
+  , _cifsInstanceSnapshotName :: !Text
+  , _cifsBundleId             :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateInstancesFromSnapshot' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -69,7 +70,7 @@
 --
 -- * 'cifsInstanceNames' - The names for your new instances.
 --
--- * 'cifsAvailabilityZone' - The Availability Zone where you want to create your instances. Use the following formatting: @us-east-1a@ (case sensitive).
+-- * 'cifsAvailabilityZone' - The Availability Zone where you want to create your instances. Use the following formatting: @us-east-1a@ (case sensitive). You can get a list of availability zones by using the <http://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_GetRegions.html get regions> operation. Be sure to add the @include availability zones@ parameter to your request.
 --
 -- * 'cifsInstanceSnapshotName' - The name of the instance snapshot on which you are basing your new instances. Use the get instance snapshots operation to return information about your existing snapshots.
 --
@@ -80,15 +81,16 @@
     -> Text -- ^ 'cifsBundleId'
     -> CreateInstancesFromSnapshot
 createInstancesFromSnapshot pAvailabilityZone_ pInstanceSnapshotName_ pBundleId_ =
-    CreateInstancesFromSnapshot'
-    { _cifsUserData = Nothing
-    , _cifsKeyPairName = Nothing
-    , _cifsInstanceNames = mempty
-    , _cifsAvailabilityZone = pAvailabilityZone_
-    , _cifsInstanceSnapshotName = pInstanceSnapshotName_
-    , _cifsBundleId = pBundleId_
-    }
+  CreateInstancesFromSnapshot'
+  { _cifsUserData = Nothing
+  , _cifsKeyPairName = Nothing
+  , _cifsInstanceNames = mempty
+  , _cifsAvailabilityZone = pAvailabilityZone_
+  , _cifsInstanceSnapshotName = pInstanceSnapshotName_
+  , _cifsBundleId = pBundleId_
+  }
 
+
 -- | You can create a launch script that configures a server with additional user data. For example, @apt-get –y update@ .
 cifsUserData :: Lens' CreateInstancesFromSnapshot (Maybe Text)
 cifsUserData = lens _cifsUserData (\ s a -> s{_cifsUserData = a});
@@ -101,7 +103,7 @@
 cifsInstanceNames :: Lens' CreateInstancesFromSnapshot [Text]
 cifsInstanceNames = lens _cifsInstanceNames (\ s a -> s{_cifsInstanceNames = a}) . _Coerce;
 
--- | The Availability Zone where you want to create your instances. Use the following formatting: @us-east-1a@ (case sensitive).
+-- | The Availability Zone where you want to create your instances. Use the following formatting: @us-east-1a@ (case sensitive). You can get a list of availability zones by using the <http://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_GetRegions.html get regions> operation. Be sure to add the @include availability zones@ parameter to your request.
 cifsAvailabilityZone :: Lens' CreateInstancesFromSnapshot Text
 cifsAvailabilityZone = lens _cifsAvailabilityZone (\ s a -> s{_cifsAvailabilityZone = a});
 
@@ -124,9 +126,9 @@
                    (x .?> "operations" .!@ mempty) <*>
                      (pure (fromEnum s)))
 
-instance Hashable CreateInstancesFromSnapshot
+instance Hashable CreateInstancesFromSnapshot where
 
-instance NFData CreateInstancesFromSnapshot
+instance NFData CreateInstancesFromSnapshot where
 
 instance ToHeaders CreateInstancesFromSnapshot where
         toHeaders
@@ -159,10 +161,11 @@
 
 -- | /See:/ 'createInstancesFromSnapshotResponse' smart constructor.
 data CreateInstancesFromSnapshotResponse = CreateInstancesFromSnapshotResponse'
-    { _cifsrsOperations     :: !(Maybe [Operation])
-    , _cifsrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cifsrsOperations     :: !(Maybe [Operation])
+  , _cifsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateInstancesFromSnapshotResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -174,11 +177,10 @@
     :: Int -- ^ 'cifsrsResponseStatus'
     -> CreateInstancesFromSnapshotResponse
 createInstancesFromSnapshotResponse pResponseStatus_ =
-    CreateInstancesFromSnapshotResponse'
-    { _cifsrsOperations = Nothing
-    , _cifsrsResponseStatus = pResponseStatus_
-    }
+  CreateInstancesFromSnapshotResponse'
+  {_cifsrsOperations = Nothing, _cifsrsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the results of your create instances from snapshot request.
 cifsrsOperations :: Lens' CreateInstancesFromSnapshotResponse [Operation]
 cifsrsOperations = lens _cifsrsOperations (\ s a -> s{_cifsrsOperations = a}) . _Default . _Coerce;
@@ -188,3 +190,4 @@
 cifsrsResponseStatus = lens _cifsrsResponseStatus (\ s a -> s{_cifsrsResponseStatus = a});
 
 instance NFData CreateInstancesFromSnapshotResponse
+         where
diff --git a/gen/Network/AWS/Lightsail/CreateKeyPair.hs b/gen/Network/AWS/Lightsail/CreateKeyPair.hs
--- a/gen/Network/AWS/Lightsail/CreateKeyPair.hs
+++ b/gen/Network/AWS/Lightsail/CreateKeyPair.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.CreateKeyPair
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -40,18 +40,19 @@
     , ckprsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'createKeyPair' smart constructor.
 newtype CreateKeyPair = CreateKeyPair'
-    { _ckpKeyPairName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ckpKeyPairName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateKeyPair' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -60,11 +61,9 @@
 createKeyPair
     :: Text -- ^ 'ckpKeyPairName'
     -> CreateKeyPair
-createKeyPair pKeyPairName_ =
-    CreateKeyPair'
-    { _ckpKeyPairName = pKeyPairName_
-    }
+createKeyPair pKeyPairName_ = CreateKeyPair' {_ckpKeyPairName = pKeyPairName_}
 
+
 -- | The name for your new key pair.
 ckpKeyPairName :: Lens' CreateKeyPair Text
 ckpKeyPairName = lens _ckpKeyPairName (\ s a -> s{_ckpKeyPairName = a});
@@ -81,9 +80,9 @@
                      <*> (x .?> "privateKeyBase64")
                      <*> (pure (fromEnum s)))
 
-instance Hashable CreateKeyPair
+instance Hashable CreateKeyPair where
 
-instance NFData CreateKeyPair
+instance NFData CreateKeyPair where
 
 instance ToHeaders CreateKeyPair where
         toHeaders
@@ -107,13 +106,14 @@
 
 -- | /See:/ 'createKeyPairResponse' smart constructor.
 data CreateKeyPairResponse = CreateKeyPairResponse'
-    { _ckprsKeyPair          :: !(Maybe KeyPair)
-    , _ckprsOperation        :: !(Maybe Operation)
-    , _ckprsPublicKeyBase64  :: !(Maybe Text)
-    , _ckprsPrivateKeyBase64 :: !(Maybe Text)
-    , _ckprsResponseStatus   :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ckprsKeyPair          :: !(Maybe KeyPair)
+  , _ckprsOperation        :: !(Maybe Operation)
+  , _ckprsPublicKeyBase64  :: !(Maybe Text)
+  , _ckprsPrivateKeyBase64 :: !(Maybe Text)
+  , _ckprsResponseStatus   :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateKeyPairResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -131,14 +131,15 @@
     :: Int -- ^ 'ckprsResponseStatus'
     -> CreateKeyPairResponse
 createKeyPairResponse pResponseStatus_ =
-    CreateKeyPairResponse'
-    { _ckprsKeyPair = Nothing
-    , _ckprsOperation = Nothing
-    , _ckprsPublicKeyBase64 = Nothing
-    , _ckprsPrivateKeyBase64 = Nothing
-    , _ckprsResponseStatus = pResponseStatus_
-    }
+  CreateKeyPairResponse'
+  { _ckprsKeyPair = Nothing
+  , _ckprsOperation = Nothing
+  , _ckprsPublicKeyBase64 = Nothing
+  , _ckprsPrivateKeyBase64 = Nothing
+  , _ckprsResponseStatus = pResponseStatus_
+  }
 
+
 -- | An array of key-value pairs containing information about the new key pair you just created.
 ckprsKeyPair :: Lens' CreateKeyPairResponse (Maybe KeyPair)
 ckprsKeyPair = lens _ckprsKeyPair (\ s a -> s{_ckprsKeyPair = a});
@@ -159,4 +160,4 @@
 ckprsResponseStatus :: Lens' CreateKeyPairResponse Int
 ckprsResponseStatus = lens _ckprsResponseStatus (\ s a -> s{_ckprsResponseStatus = a});
 
-instance NFData CreateKeyPairResponse
+instance NFData CreateKeyPairResponse where
diff --git a/gen/Network/AWS/Lightsail/DeleteDomain.hs b/gen/Network/AWS/Lightsail/DeleteDomain.hs
--- a/gen/Network/AWS/Lightsail/DeleteDomain.hs
+++ b/gen/Network/AWS/Lightsail/DeleteDomain.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.DeleteDomain
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , ddrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'deleteDomain' smart constructor.
 newtype DeleteDomain = DeleteDomain'
-    { _ddDomainName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ddDomainName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteDomain' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,11 +58,9 @@
 deleteDomain
     :: Text -- ^ 'ddDomainName'
     -> DeleteDomain
-deleteDomain pDomainName_ =
-    DeleteDomain'
-    { _ddDomainName = pDomainName_
-    }
+deleteDomain pDomainName_ = DeleteDomain' {_ddDomainName = pDomainName_}
 
+
 -- | The specific domain name to delete.
 ddDomainName :: Lens' DeleteDomain Text
 ddDomainName = lens _ddDomainName (\ s a -> s{_ddDomainName = a});
@@ -75,9 +74,9 @@
                  DeleteDomainResponse' <$>
                    (x .?> "operation") <*> (pure (fromEnum s)))
 
-instance Hashable DeleteDomain
+instance Hashable DeleteDomain where
 
-instance NFData DeleteDomain
+instance NFData DeleteDomain where
 
 instance ToHeaders DeleteDomain where
         toHeaders
@@ -101,10 +100,11 @@
 
 -- | /See:/ 'deleteDomainResponse' smart constructor.
 data DeleteDomainResponse = DeleteDomainResponse'
-    { _ddrsOperation      :: !(Maybe Operation)
-    , _ddrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ddrsOperation      :: !(Maybe Operation)
+  , _ddrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteDomainResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -116,11 +116,10 @@
     :: Int -- ^ 'ddrsResponseStatus'
     -> DeleteDomainResponse
 deleteDomainResponse pResponseStatus_ =
-    DeleteDomainResponse'
-    { _ddrsOperation = Nothing
-    , _ddrsResponseStatus = pResponseStatus_
-    }
+  DeleteDomainResponse'
+  {_ddrsOperation = Nothing, _ddrsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the results of your delete domain request.
 ddrsOperation :: Lens' DeleteDomainResponse (Maybe Operation)
 ddrsOperation = lens _ddrsOperation (\ s a -> s{_ddrsOperation = a});
@@ -129,4 +128,4 @@
 ddrsResponseStatus :: Lens' DeleteDomainResponse Int
 ddrsResponseStatus = lens _ddrsResponseStatus (\ s a -> s{_ddrsResponseStatus = a});
 
-instance NFData DeleteDomainResponse
+instance NFData DeleteDomainResponse where
diff --git a/gen/Network/AWS/Lightsail/DeleteDomainEntry.hs b/gen/Network/AWS/Lightsail/DeleteDomainEntry.hs
--- a/gen/Network/AWS/Lightsail/DeleteDomainEntry.hs
+++ b/gen/Network/AWS/Lightsail/DeleteDomainEntry.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.DeleteDomainEntry
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,19 +38,20 @@
     , ddersResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'deleteDomainEntry' smart constructor.
 data DeleteDomainEntry = DeleteDomainEntry'
-    { _ddeDomainName  :: !Text
-    , _ddeDomainEntry :: !DomainEntry
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ddeDomainName  :: !Text
+  , _ddeDomainEntry :: !DomainEntry
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteDomainEntry' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,11 +64,10 @@
     -> DomainEntry -- ^ 'ddeDomainEntry'
     -> DeleteDomainEntry
 deleteDomainEntry pDomainName_ pDomainEntry_ =
-    DeleteDomainEntry'
-    { _ddeDomainName = pDomainName_
-    , _ddeDomainEntry = pDomainEntry_
-    }
+  DeleteDomainEntry'
+  {_ddeDomainName = pDomainName_, _ddeDomainEntry = pDomainEntry_}
 
+
 -- | The name of the domain entry to delete.
 ddeDomainName :: Lens' DeleteDomainEntry Text
 ddeDomainName = lens _ddeDomainName (\ s a -> s{_ddeDomainName = a});
@@ -85,9 +85,9 @@
                  DeleteDomainEntryResponse' <$>
                    (x .?> "operation") <*> (pure (fromEnum s)))
 
-instance Hashable DeleteDomainEntry
+instance Hashable DeleteDomainEntry where
 
-instance NFData DeleteDomainEntry
+instance NFData DeleteDomainEntry where
 
 instance ToHeaders DeleteDomainEntry where
         toHeaders
@@ -114,10 +114,11 @@
 
 -- | /See:/ 'deleteDomainEntryResponse' smart constructor.
 data DeleteDomainEntryResponse = DeleteDomainEntryResponse'
-    { _ddersOperation      :: !(Maybe Operation)
-    , _ddersResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ddersOperation      :: !(Maybe Operation)
+  , _ddersResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteDomainEntryResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -129,11 +130,10 @@
     :: Int -- ^ 'ddersResponseStatus'
     -> DeleteDomainEntryResponse
 deleteDomainEntryResponse pResponseStatus_ =
-    DeleteDomainEntryResponse'
-    { _ddersOperation = Nothing
-    , _ddersResponseStatus = pResponseStatus_
-    }
+  DeleteDomainEntryResponse'
+  {_ddersOperation = Nothing, _ddersResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the results of your delete domain entry request.
 ddersOperation :: Lens' DeleteDomainEntryResponse (Maybe Operation)
 ddersOperation = lens _ddersOperation (\ s a -> s{_ddersOperation = a});
@@ -142,4 +142,4 @@
 ddersResponseStatus :: Lens' DeleteDomainEntryResponse Int
 ddersResponseStatus = lens _ddersResponseStatus (\ s a -> s{_ddersResponseStatus = a});
 
-instance NFData DeleteDomainEntryResponse
+instance NFData DeleteDomainEntryResponse where
diff --git a/gen/Network/AWS/Lightsail/DeleteInstance.hs b/gen/Network/AWS/Lightsail/DeleteInstance.hs
--- a/gen/Network/AWS/Lightsail/DeleteInstance.hs
+++ b/gen/Network/AWS/Lightsail/DeleteInstance.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.DeleteInstance
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , dirsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'deleteInstance' smart constructor.
 newtype DeleteInstance = DeleteInstance'
-    { _diInstanceName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _diInstanceName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteInstance' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,10 +59,9 @@
     :: Text -- ^ 'diInstanceName'
     -> DeleteInstance
 deleteInstance pInstanceName_ =
-    DeleteInstance'
-    { _diInstanceName = pInstanceName_
-    }
+  DeleteInstance' {_diInstanceName = pInstanceName_}
 
+
 -- | The name of the instance to delete.
 diInstanceName :: Lens' DeleteInstance Text
 diInstanceName = lens _diInstanceName (\ s a -> s{_diInstanceName = a});
@@ -76,9 +76,9 @@
                    (x .?> "operations" .!@ mempty) <*>
                      (pure (fromEnum s)))
 
-instance Hashable DeleteInstance
+instance Hashable DeleteInstance where
 
-instance NFData DeleteInstance
+instance NFData DeleteInstance where
 
 instance ToHeaders DeleteInstance where
         toHeaders
@@ -103,10 +103,11 @@
 
 -- | /See:/ 'deleteInstanceResponse' smart constructor.
 data DeleteInstanceResponse = DeleteInstanceResponse'
-    { _dirsOperations     :: !(Maybe [Operation])
-    , _dirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dirsOperations     :: !(Maybe [Operation])
+  , _dirsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteInstanceResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -118,11 +119,10 @@
     :: Int -- ^ 'dirsResponseStatus'
     -> DeleteInstanceResponse
 deleteInstanceResponse pResponseStatus_ =
-    DeleteInstanceResponse'
-    { _dirsOperations = Nothing
-    , _dirsResponseStatus = pResponseStatus_
-    }
+  DeleteInstanceResponse'
+  {_dirsOperations = Nothing, _dirsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the results of your delete instance request.
 dirsOperations :: Lens' DeleteInstanceResponse [Operation]
 dirsOperations = lens _dirsOperations (\ s a -> s{_dirsOperations = a}) . _Default . _Coerce;
@@ -131,4 +131,4 @@
 dirsResponseStatus :: Lens' DeleteInstanceResponse Int
 dirsResponseStatus = lens _dirsResponseStatus (\ s a -> s{_dirsResponseStatus = a});
 
-instance NFData DeleteInstanceResponse
+instance NFData DeleteInstanceResponse where
diff --git a/gen/Network/AWS/Lightsail/DeleteInstanceSnapshot.hs b/gen/Network/AWS/Lightsail/DeleteInstanceSnapshot.hs
--- a/gen/Network/AWS/Lightsail/DeleteInstanceSnapshot.hs
+++ b/gen/Network/AWS/Lightsail/DeleteInstanceSnapshot.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.DeleteInstanceSnapshot
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , disrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'deleteInstanceSnapshot' smart constructor.
 newtype DeleteInstanceSnapshot = DeleteInstanceSnapshot'
-    { _disInstanceSnapshotName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _disInstanceSnapshotName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteInstanceSnapshot' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,10 +59,9 @@
     :: Text -- ^ 'disInstanceSnapshotName'
     -> DeleteInstanceSnapshot
 deleteInstanceSnapshot pInstanceSnapshotName_ =
-    DeleteInstanceSnapshot'
-    { _disInstanceSnapshotName = pInstanceSnapshotName_
-    }
+  DeleteInstanceSnapshot' {_disInstanceSnapshotName = pInstanceSnapshotName_}
 
+
 -- | The name of the snapshot to delete.
 disInstanceSnapshotName :: Lens' DeleteInstanceSnapshot Text
 disInstanceSnapshotName = lens _disInstanceSnapshotName (\ s a -> s{_disInstanceSnapshotName = a});
@@ -77,9 +77,9 @@
                    (x .?> "operations" .!@ mempty) <*>
                      (pure (fromEnum s)))
 
-instance Hashable DeleteInstanceSnapshot
+instance Hashable DeleteInstanceSnapshot where
 
-instance NFData DeleteInstanceSnapshot
+instance NFData DeleteInstanceSnapshot where
 
 instance ToHeaders DeleteInstanceSnapshot where
         toHeaders
@@ -107,10 +107,11 @@
 
 -- | /See:/ 'deleteInstanceSnapshotResponse' smart constructor.
 data DeleteInstanceSnapshotResponse = DeleteInstanceSnapshotResponse'
-    { _disrsOperations     :: !(Maybe [Operation])
-    , _disrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _disrsOperations     :: !(Maybe [Operation])
+  , _disrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteInstanceSnapshotResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -122,11 +123,10 @@
     :: Int -- ^ 'disrsResponseStatus'
     -> DeleteInstanceSnapshotResponse
 deleteInstanceSnapshotResponse pResponseStatus_ =
-    DeleteInstanceSnapshotResponse'
-    { _disrsOperations = Nothing
-    , _disrsResponseStatus = pResponseStatus_
-    }
+  DeleteInstanceSnapshotResponse'
+  {_disrsOperations = Nothing, _disrsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the results of your delete instance snapshot request.
 disrsOperations :: Lens' DeleteInstanceSnapshotResponse [Operation]
 disrsOperations = lens _disrsOperations (\ s a -> s{_disrsOperations = a}) . _Default . _Coerce;
@@ -135,4 +135,4 @@
 disrsResponseStatus :: Lens' DeleteInstanceSnapshotResponse Int
 disrsResponseStatus = lens _disrsResponseStatus (\ s a -> s{_disrsResponseStatus = a});
 
-instance NFData DeleteInstanceSnapshotResponse
+instance NFData DeleteInstanceSnapshotResponse where
diff --git a/gen/Network/AWS/Lightsail/DeleteKeyPair.hs b/gen/Network/AWS/Lightsail/DeleteKeyPair.hs
--- a/gen/Network/AWS/Lightsail/DeleteKeyPair.hs
+++ b/gen/Network/AWS/Lightsail/DeleteKeyPair.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.DeleteKeyPair
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , dkprsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'deleteKeyPair' smart constructor.
 newtype DeleteKeyPair = DeleteKeyPair'
-    { _dkpKeyPairName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dkpKeyPairName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteKeyPair' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,11 +58,9 @@
 deleteKeyPair
     :: Text -- ^ 'dkpKeyPairName'
     -> DeleteKeyPair
-deleteKeyPair pKeyPairName_ =
-    DeleteKeyPair'
-    { _dkpKeyPairName = pKeyPairName_
-    }
+deleteKeyPair pKeyPairName_ = DeleteKeyPair' {_dkpKeyPairName = pKeyPairName_}
 
+
 -- | The name of the key pair to delete.
 dkpKeyPairName :: Lens' DeleteKeyPair Text
 dkpKeyPairName = lens _dkpKeyPairName (\ s a -> s{_dkpKeyPairName = a});
@@ -75,9 +74,9 @@
                  DeleteKeyPairResponse' <$>
                    (x .?> "operation") <*> (pure (fromEnum s)))
 
-instance Hashable DeleteKeyPair
+instance Hashable DeleteKeyPair where
 
-instance NFData DeleteKeyPair
+instance NFData DeleteKeyPair where
 
 instance ToHeaders DeleteKeyPair where
         toHeaders
@@ -101,10 +100,11 @@
 
 -- | /See:/ 'deleteKeyPairResponse' smart constructor.
 data DeleteKeyPairResponse = DeleteKeyPairResponse'
-    { _dkprsOperation      :: !(Maybe Operation)
-    , _dkprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dkprsOperation      :: !(Maybe Operation)
+  , _dkprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteKeyPairResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -116,11 +116,10 @@
     :: Int -- ^ 'dkprsResponseStatus'
     -> DeleteKeyPairResponse
 deleteKeyPairResponse pResponseStatus_ =
-    DeleteKeyPairResponse'
-    { _dkprsOperation = Nothing
-    , _dkprsResponseStatus = pResponseStatus_
-    }
+  DeleteKeyPairResponse'
+  {_dkprsOperation = Nothing, _dkprsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the results of your delete key pair request.
 dkprsOperation :: Lens' DeleteKeyPairResponse (Maybe Operation)
 dkprsOperation = lens _dkprsOperation (\ s a -> s{_dkprsOperation = a});
@@ -129,4 +128,4 @@
 dkprsResponseStatus :: Lens' DeleteKeyPairResponse Int
 dkprsResponseStatus = lens _dkprsResponseStatus (\ s a -> s{_dkprsResponseStatus = a});
 
-instance NFData DeleteKeyPairResponse
+instance NFData DeleteKeyPairResponse where
diff --git a/gen/Network/AWS/Lightsail/DetachStaticIP.hs b/gen/Network/AWS/Lightsail/DetachStaticIP.hs
--- a/gen/Network/AWS/Lightsail/DetachStaticIP.hs
+++ b/gen/Network/AWS/Lightsail/DetachStaticIP.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.DetachStaticIP
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , dsirsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'detachStaticIP' smart constructor.
 newtype DetachStaticIP = DetachStaticIP'
-    { _dsiStaticIPName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dsiStaticIPName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DetachStaticIP' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,10 +59,9 @@
     :: Text -- ^ 'dsiStaticIPName'
     -> DetachStaticIP
 detachStaticIP pStaticIPName_ =
-    DetachStaticIP'
-    { _dsiStaticIPName = pStaticIPName_
-    }
+  DetachStaticIP' {_dsiStaticIPName = pStaticIPName_}
 
+
 -- | The name of the static IP to detach from the instance.
 dsiStaticIPName :: Lens' DetachStaticIP Text
 dsiStaticIPName = lens _dsiStaticIPName (\ s a -> s{_dsiStaticIPName = a});
@@ -76,9 +76,9 @@
                    (x .?> "operations" .!@ mempty) <*>
                      (pure (fromEnum s)))
 
-instance Hashable DetachStaticIP
+instance Hashable DetachStaticIP where
 
-instance NFData DetachStaticIP
+instance NFData DetachStaticIP where
 
 instance ToHeaders DetachStaticIP where
         toHeaders
@@ -103,10 +103,11 @@
 
 -- | /See:/ 'detachStaticIPResponse' smart constructor.
 data DetachStaticIPResponse = DetachStaticIPResponse'
-    { _dsirsOperations     :: !(Maybe [Operation])
-    , _dsirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dsirsOperations     :: !(Maybe [Operation])
+  , _dsirsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DetachStaticIPResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -118,11 +119,10 @@
     :: Int -- ^ 'dsirsResponseStatus'
     -> DetachStaticIPResponse
 detachStaticIPResponse pResponseStatus_ =
-    DetachStaticIPResponse'
-    { _dsirsOperations = Nothing
-    , _dsirsResponseStatus = pResponseStatus_
-    }
+  DetachStaticIPResponse'
+  {_dsirsOperations = Nothing, _dsirsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the results of your detach static IP request.
 dsirsOperations :: Lens' DetachStaticIPResponse [Operation]
 dsirsOperations = lens _dsirsOperations (\ s a -> s{_dsirsOperations = a}) . _Default . _Coerce;
@@ -131,4 +131,4 @@
 dsirsResponseStatus :: Lens' DetachStaticIPResponse Int
 dsirsResponseStatus = lens _dsirsResponseStatus (\ s a -> s{_dsirsResponseStatus = a});
 
-instance NFData DetachStaticIPResponse
+instance NFData DetachStaticIPResponse where
diff --git a/gen/Network/AWS/Lightsail/DownloadDefaultKeyPair.hs b/gen/Network/AWS/Lightsail/DownloadDefaultKeyPair.hs
--- a/gen/Network/AWS/Lightsail/DownloadDefaultKeyPair.hs
+++ b/gen/Network/AWS/Lightsail/DownloadDefaultKeyPair.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.DownloadDefaultKeyPair
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -36,24 +36,26 @@
     , ddkprsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'downloadDefaultKeyPair' smart constructor.
 data DownloadDefaultKeyPair =
-    DownloadDefaultKeyPair'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DownloadDefaultKeyPair'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DownloadDefaultKeyPair' with the minimum fields required to make a request.
 --
 downloadDefaultKeyPair
     :: DownloadDefaultKeyPair
 downloadDefaultKeyPair = DownloadDefaultKeyPair'
 
+
 instance AWSRequest DownloadDefaultKeyPair where
         type Rs DownloadDefaultKeyPair =
              DownloadDefaultKeyPairResponse
@@ -66,9 +68,9 @@
                      (x .?> "privateKeyBase64")
                      <*> (pure (fromEnum s)))
 
-instance Hashable DownloadDefaultKeyPair
+instance Hashable DownloadDefaultKeyPair where
 
-instance NFData DownloadDefaultKeyPair
+instance NFData DownloadDefaultKeyPair where
 
 instance ToHeaders DownloadDefaultKeyPair where
         toHeaders
@@ -91,11 +93,12 @@
 
 -- | /See:/ 'downloadDefaultKeyPairResponse' smart constructor.
 data DownloadDefaultKeyPairResponse = DownloadDefaultKeyPairResponse'
-    { _ddkprsPublicKeyBase64  :: !(Maybe Text)
-    , _ddkprsPrivateKeyBase64 :: !(Maybe Text)
-    , _ddkprsResponseStatus   :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ddkprsPublicKeyBase64  :: !(Maybe Text)
+  , _ddkprsPrivateKeyBase64 :: !(Maybe Text)
+  , _ddkprsResponseStatus   :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DownloadDefaultKeyPairResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -109,12 +112,13 @@
     :: Int -- ^ 'ddkprsResponseStatus'
     -> DownloadDefaultKeyPairResponse
 downloadDefaultKeyPairResponse pResponseStatus_ =
-    DownloadDefaultKeyPairResponse'
-    { _ddkprsPublicKeyBase64 = Nothing
-    , _ddkprsPrivateKeyBase64 = Nothing
-    , _ddkprsResponseStatus = pResponseStatus_
-    }
+  DownloadDefaultKeyPairResponse'
+  { _ddkprsPublicKeyBase64 = Nothing
+  , _ddkprsPrivateKeyBase64 = Nothing
+  , _ddkprsResponseStatus = pResponseStatus_
+  }
 
+
 -- | A base64-encoded public key of the @ssh-rsa@ type.
 ddkprsPublicKeyBase64 :: Lens' DownloadDefaultKeyPairResponse (Maybe Text)
 ddkprsPublicKeyBase64 = lens _ddkprsPublicKeyBase64 (\ s a -> s{_ddkprsPublicKeyBase64 = a});
@@ -127,4 +131,4 @@
 ddkprsResponseStatus :: Lens' DownloadDefaultKeyPairResponse Int
 ddkprsResponseStatus = lens _ddkprsResponseStatus (\ s a -> s{_ddkprsResponseStatus = a});
 
-instance NFData DownloadDefaultKeyPairResponse
+instance NFData DownloadDefaultKeyPairResponse where
diff --git a/gen/Network/AWS/Lightsail/GetActiveNames.hs b/gen/Network/AWS/Lightsail/GetActiveNames.hs
--- a/gen/Network/AWS/Lightsail/GetActiveNames.hs
+++ b/gen/Network/AWS/Lightsail/GetActiveNames.hs
@@ -12,15 +12,17 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetActiveNames
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Returns the names of all active (not deleted) resources.
 --
 --
+--
+-- This operation returns paginated results.
 module Network.AWS.Lightsail.GetActiveNames
     (
     -- * Creating a Request
@@ -38,18 +40,20 @@
     , ganrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getActiveNames' smart constructor.
 newtype GetActiveNames = GetActiveNames'
-    { _ganPageToken :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ganPageToken :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetActiveNames' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,15 +61,20 @@
 -- * 'ganPageToken' - A token used for paginating results from your get active names request.
 getActiveNames
     :: GetActiveNames
-getActiveNames =
-    GetActiveNames'
-    { _ganPageToken = Nothing
-    }
+getActiveNames = GetActiveNames' {_ganPageToken = Nothing}
 
+
 -- | A token used for paginating results from your get active names request.
 ganPageToken :: Lens' GetActiveNames (Maybe Text)
 ganPageToken = lens _ganPageToken (\ s a -> s{_ganPageToken = a});
 
+instance AWSPager GetActiveNames where
+        page rq rs
+          | stop (rs ^. ganrsNextPageToken) = Nothing
+          | stop (rs ^. ganrsActiveNames) = Nothing
+          | otherwise =
+            Just $ rq & ganPageToken .~ rs ^. ganrsNextPageToken
+
 instance AWSRequest GetActiveNames where
         type Rs GetActiveNames = GetActiveNamesResponse
         request = postJSON lightsail
@@ -77,9 +86,9 @@
                      (x .?> "activeNames" .!@ mempty)
                      <*> (pure (fromEnum s)))
 
-instance Hashable GetActiveNames
+instance Hashable GetActiveNames where
 
-instance NFData GetActiveNames
+instance NFData GetActiveNames where
 
 instance ToHeaders GetActiveNames where
         toHeaders
@@ -103,11 +112,12 @@
 
 -- | /See:/ 'getActiveNamesResponse' smart constructor.
 data GetActiveNamesResponse = GetActiveNamesResponse'
-    { _ganrsNextPageToken  :: !(Maybe Text)
-    , _ganrsActiveNames    :: !(Maybe [Text])
-    , _ganrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ganrsNextPageToken  :: !(Maybe Text)
+  , _ganrsActiveNames    :: !(Maybe [Text])
+  , _ganrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetActiveNamesResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -121,12 +131,13 @@
     :: Int -- ^ 'ganrsResponseStatus'
     -> GetActiveNamesResponse
 getActiveNamesResponse pResponseStatus_ =
-    GetActiveNamesResponse'
-    { _ganrsNextPageToken = Nothing
-    , _ganrsActiveNames = Nothing
-    , _ganrsResponseStatus = pResponseStatus_
-    }
+  GetActiveNamesResponse'
+  { _ganrsNextPageToken = Nothing
+  , _ganrsActiveNames = Nothing
+  , _ganrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | A token used for advancing to the next page of results from your get active names request.
 ganrsNextPageToken :: Lens' GetActiveNamesResponse (Maybe Text)
 ganrsNextPageToken = lens _ganrsNextPageToken (\ s a -> s{_ganrsNextPageToken = a});
@@ -139,4 +150,4 @@
 ganrsResponseStatus :: Lens' GetActiveNamesResponse Int
 ganrsResponseStatus = lens _ganrsResponseStatus (\ s a -> s{_ganrsResponseStatus = a});
 
-instance NFData GetActiveNamesResponse
+instance NFData GetActiveNamesResponse where
diff --git a/gen/Network/AWS/Lightsail/GetBlueprints.hs b/gen/Network/AWS/Lightsail/GetBlueprints.hs
--- a/gen/Network/AWS/Lightsail/GetBlueprints.hs
+++ b/gen/Network/AWS/Lightsail/GetBlueprints.hs
@@ -12,15 +12,17 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetBlueprints
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Returns the list of available instance images, or /blueprints/ . You can use a blueprint to create a new virtual private server already running a specific operating system, as well as a preinstalled app or development stack. The software each instance is running depends on the blueprint image you choose.
 --
 --
+--
+-- This operation returns paginated results.
 module Network.AWS.Lightsail.GetBlueprints
     (
     -- * Creating a Request
@@ -39,19 +41,21 @@
     , gbsrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getBlueprints' smart constructor.
 data GetBlueprints = GetBlueprints'
-    { _gbIncludeInactive :: !(Maybe Bool)
-    , _gbPageToken       :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbIncludeInactive :: !(Maybe Bool)
+  , _gbPageToken       :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBlueprints' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -62,11 +66,9 @@
 getBlueprints
     :: GetBlueprints
 getBlueprints =
-    GetBlueprints'
-    { _gbIncludeInactive = Nothing
-    , _gbPageToken = Nothing
-    }
+  GetBlueprints' {_gbIncludeInactive = Nothing, _gbPageToken = Nothing}
 
+
 -- | A Boolean value indicating whether to include inactive results in your request.
 gbIncludeInactive :: Lens' GetBlueprints (Maybe Bool)
 gbIncludeInactive = lens _gbIncludeInactive (\ s a -> s{_gbIncludeInactive = a});
@@ -75,6 +77,13 @@
 gbPageToken :: Lens' GetBlueprints (Maybe Text)
 gbPageToken = lens _gbPageToken (\ s a -> s{_gbPageToken = a});
 
+instance AWSPager GetBlueprints where
+        page rq rs
+          | stop (rs ^. gbsrsNextPageToken) = Nothing
+          | stop (rs ^. gbsrsBlueprints) = Nothing
+          | otherwise =
+            Just $ rq & gbPageToken .~ rs ^. gbsrsNextPageToken
+
 instance AWSRequest GetBlueprints where
         type Rs GetBlueprints = GetBlueprintsResponse
         request = postJSON lightsail
@@ -86,9 +95,9 @@
                      (x .?> "nextPageToken")
                      <*> (pure (fromEnum s)))
 
-instance Hashable GetBlueprints
+instance Hashable GetBlueprints where
 
-instance NFData GetBlueprints
+instance NFData GetBlueprints where
 
 instance ToHeaders GetBlueprints where
         toHeaders
@@ -114,11 +123,12 @@
 
 -- | /See:/ 'getBlueprintsResponse' smart constructor.
 data GetBlueprintsResponse = GetBlueprintsResponse'
-    { _gbsrsBlueprints     :: !(Maybe [Blueprint])
-    , _gbsrsNextPageToken  :: !(Maybe Text)
-    , _gbsrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbsrsBlueprints     :: !(Maybe [Blueprint])
+  , _gbsrsNextPageToken  :: !(Maybe Text)
+  , _gbsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBlueprintsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -132,12 +142,13 @@
     :: Int -- ^ 'gbsrsResponseStatus'
     -> GetBlueprintsResponse
 getBlueprintsResponse pResponseStatus_ =
-    GetBlueprintsResponse'
-    { _gbsrsBlueprints = Nothing
-    , _gbsrsNextPageToken = Nothing
-    , _gbsrsResponseStatus = pResponseStatus_
-    }
+  GetBlueprintsResponse'
+  { _gbsrsBlueprints = Nothing
+  , _gbsrsNextPageToken = Nothing
+  , _gbsrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | An array of key-value pairs that contains information about the available blueprints.
 gbsrsBlueprints :: Lens' GetBlueprintsResponse [Blueprint]
 gbsrsBlueprints = lens _gbsrsBlueprints (\ s a -> s{_gbsrsBlueprints = a}) . _Default . _Coerce;
@@ -150,4 +161,4 @@
 gbsrsResponseStatus :: Lens' GetBlueprintsResponse Int
 gbsrsResponseStatus = lens _gbsrsResponseStatus (\ s a -> s{_gbsrsResponseStatus = a});
 
-instance NFData GetBlueprintsResponse
+instance NFData GetBlueprintsResponse where
diff --git a/gen/Network/AWS/Lightsail/GetBundles.hs b/gen/Network/AWS/Lightsail/GetBundles.hs
--- a/gen/Network/AWS/Lightsail/GetBundles.hs
+++ b/gen/Network/AWS/Lightsail/GetBundles.hs
@@ -12,15 +12,17 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetBundles
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Returns the list of bundles that are available for purchase. A bundle describes the specs for your virtual private server (or /instance/ ).
 --
 --
+--
+-- This operation returns paginated results.
 module Network.AWS.Lightsail.GetBundles
     (
     -- * Creating a Request
@@ -39,19 +41,21 @@
     , gbrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getBundles' smart constructor.
 data GetBundles = GetBundles'
-    { _gIncludeInactive :: !(Maybe Bool)
-    , _gPageToken       :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gIncludeInactive :: !(Maybe Bool)
+  , _gPageToken       :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBundles' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -61,12 +65,9 @@
 -- * 'gPageToken' - A token used for advancing to the next page of results from your get bundles request.
 getBundles
     :: GetBundles
-getBundles =
-    GetBundles'
-    { _gIncludeInactive = Nothing
-    , _gPageToken = Nothing
-    }
+getBundles = GetBundles' {_gIncludeInactive = Nothing, _gPageToken = Nothing}
 
+
 -- | A Boolean value that indicates whether to include inactive bundle results in your request.
 gIncludeInactive :: Lens' GetBundles (Maybe Bool)
 gIncludeInactive = lens _gIncludeInactive (\ s a -> s{_gIncludeInactive = a});
@@ -75,6 +76,13 @@
 gPageToken :: Lens' GetBundles (Maybe Text)
 gPageToken = lens _gPageToken (\ s a -> s{_gPageToken = a});
 
+instance AWSPager GetBundles where
+        page rq rs
+          | stop (rs ^. gbrsNextPageToken) = Nothing
+          | stop (rs ^. gbrsBundles) = Nothing
+          | otherwise =
+            Just $ rq & gPageToken .~ rs ^. gbrsNextPageToken
+
 instance AWSRequest GetBundles where
         type Rs GetBundles = GetBundlesResponse
         request = postJSON lightsail
@@ -86,9 +94,9 @@
                      (x .?> "bundles" .!@ mempty)
                      <*> (pure (fromEnum s)))
 
-instance Hashable GetBundles
+instance Hashable GetBundles where
 
-instance NFData GetBundles
+instance NFData GetBundles where
 
 instance ToHeaders GetBundles where
         toHeaders
@@ -114,11 +122,12 @@
 
 -- | /See:/ 'getBundlesResponse' smart constructor.
 data GetBundlesResponse = GetBundlesResponse'
-    { _gbrsNextPageToken  :: !(Maybe Text)
-    , _gbrsBundles        :: !(Maybe [Bundle])
-    , _gbrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbrsNextPageToken  :: !(Maybe Text)
+  , _gbrsBundles        :: !(Maybe [Bundle])
+  , _gbrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBundlesResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -132,12 +141,13 @@
     :: Int -- ^ 'gbrsResponseStatus'
     -> GetBundlesResponse
 getBundlesResponse pResponseStatus_ =
-    GetBundlesResponse'
-    { _gbrsNextPageToken = Nothing
-    , _gbrsBundles = Nothing
-    , _gbrsResponseStatus = pResponseStatus_
-    }
+  GetBundlesResponse'
+  { _gbrsNextPageToken = Nothing
+  , _gbrsBundles = Nothing
+  , _gbrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | A token used for advancing to the next page of results from your get active names request.
 gbrsNextPageToken :: Lens' GetBundlesResponse (Maybe Text)
 gbrsNextPageToken = lens _gbrsNextPageToken (\ s a -> s{_gbrsNextPageToken = a});
@@ -150,4 +160,4 @@
 gbrsResponseStatus :: Lens' GetBundlesResponse Int
 gbrsResponseStatus = lens _gbrsResponseStatus (\ s a -> s{_gbrsResponseStatus = a});
 
-instance NFData GetBundlesResponse
+instance NFData GetBundlesResponse where
diff --git a/gen/Network/AWS/Lightsail/GetDomain.hs b/gen/Network/AWS/Lightsail/GetDomain.hs
--- a/gen/Network/AWS/Lightsail/GetDomain.hs
+++ b/gen/Network/AWS/Lightsail/GetDomain.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetDomain
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , gdrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getDomain' smart constructor.
 newtype GetDomain = GetDomain'
-    { _gdDomainName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gdDomainName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetDomain' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,11 +58,9 @@
 getDomain
     :: Text -- ^ 'gdDomainName'
     -> GetDomain
-getDomain pDomainName_ =
-    GetDomain'
-    { _gdDomainName = pDomainName_
-    }
+getDomain pDomainName_ = GetDomain' {_gdDomainName = pDomainName_}
 
+
 -- | The domain name for which your want to return information about.
 gdDomainName :: Lens' GetDomain Text
 gdDomainName = lens _gdDomainName (\ s a -> s{_gdDomainName = a});
@@ -75,9 +74,9 @@
                  GetDomainResponse' <$>
                    (x .?> "domain") <*> (pure (fromEnum s)))
 
-instance Hashable GetDomain
+instance Hashable GetDomain where
 
-instance NFData GetDomain
+instance NFData GetDomain where
 
 instance ToHeaders GetDomain where
         toHeaders
@@ -101,10 +100,11 @@
 
 -- | /See:/ 'getDomainResponse' smart constructor.
 data GetDomainResponse = GetDomainResponse'
-    { _gdrsDomain         :: !(Maybe Domain)
-    , _gdrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gdrsDomain         :: !(Maybe Domain)
+  , _gdrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetDomainResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -116,11 +116,10 @@
     :: Int -- ^ 'gdrsResponseStatus'
     -> GetDomainResponse
 getDomainResponse pResponseStatus_ =
-    GetDomainResponse'
-    { _gdrsDomain = Nothing
-    , _gdrsResponseStatus = pResponseStatus_
-    }
+  GetDomainResponse'
+  {_gdrsDomain = Nothing, _gdrsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about your get domain request.
 gdrsDomain :: Lens' GetDomainResponse (Maybe Domain)
 gdrsDomain = lens _gdrsDomain (\ s a -> s{_gdrsDomain = a});
@@ -129,4 +128,4 @@
 gdrsResponseStatus :: Lens' GetDomainResponse Int
 gdrsResponseStatus = lens _gdrsResponseStatus (\ s a -> s{_gdrsResponseStatus = a});
 
-instance NFData GetDomainResponse
+instance NFData GetDomainResponse where
diff --git a/gen/Network/AWS/Lightsail/GetDomains.hs b/gen/Network/AWS/Lightsail/GetDomains.hs
--- a/gen/Network/AWS/Lightsail/GetDomains.hs
+++ b/gen/Network/AWS/Lightsail/GetDomains.hs
@@ -12,15 +12,17 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetDomains
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Returns a list of all domains in the user's account.
 --
 --
+--
+-- This operation returns paginated results.
 module Network.AWS.Lightsail.GetDomains
     (
     -- * Creating a Request
@@ -38,18 +40,20 @@
     , gdsrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getDomains' smart constructor.
 newtype GetDomains = GetDomains'
-    { _gdPageToken :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gdPageToken :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetDomains' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,15 +61,20 @@
 -- * 'gdPageToken' - A token used for advancing to the next page of results from your get domains request.
 getDomains
     :: GetDomains
-getDomains =
-    GetDomains'
-    { _gdPageToken = Nothing
-    }
+getDomains = GetDomains' {_gdPageToken = Nothing}
 
+
 -- | A token used for advancing to the next page of results from your get domains request.
 gdPageToken :: Lens' GetDomains (Maybe Text)
 gdPageToken = lens _gdPageToken (\ s a -> s{_gdPageToken = a});
 
+instance AWSPager GetDomains where
+        page rq rs
+          | stop (rs ^. gdsrsNextPageToken) = Nothing
+          | stop (rs ^. gdsrsDomains) = Nothing
+          | otherwise =
+            Just $ rq & gdPageToken .~ rs ^. gdsrsNextPageToken
+
 instance AWSRequest GetDomains where
         type Rs GetDomains = GetDomainsResponse
         request = postJSON lightsail
@@ -77,9 +86,9 @@
                      (x .?> "domains" .!@ mempty)
                      <*> (pure (fromEnum s)))
 
-instance Hashable GetDomains
+instance Hashable GetDomains where
 
-instance NFData GetDomains
+instance NFData GetDomains where
 
 instance ToHeaders GetDomains where
         toHeaders
@@ -103,11 +112,12 @@
 
 -- | /See:/ 'getDomainsResponse' smart constructor.
 data GetDomainsResponse = GetDomainsResponse'
-    { _gdsrsNextPageToken  :: !(Maybe Text)
-    , _gdsrsDomains        :: !(Maybe [Domain])
-    , _gdsrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gdsrsNextPageToken  :: !(Maybe Text)
+  , _gdsrsDomains        :: !(Maybe [Domain])
+  , _gdsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetDomainsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -121,12 +131,13 @@
     :: Int -- ^ 'gdsrsResponseStatus'
     -> GetDomainsResponse
 getDomainsResponse pResponseStatus_ =
-    GetDomainsResponse'
-    { _gdsrsNextPageToken = Nothing
-    , _gdsrsDomains = Nothing
-    , _gdsrsResponseStatus = pResponseStatus_
-    }
+  GetDomainsResponse'
+  { _gdsrsNextPageToken = Nothing
+  , _gdsrsDomains = Nothing
+  , _gdsrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | A token used for advancing to the next page of results from your get active names request.
 gdsrsNextPageToken :: Lens' GetDomainsResponse (Maybe Text)
 gdsrsNextPageToken = lens _gdsrsNextPageToken (\ s a -> s{_gdsrsNextPageToken = a});
@@ -139,4 +150,4 @@
 gdsrsResponseStatus :: Lens' GetDomainsResponse Int
 gdsrsResponseStatus = lens _gdsrsResponseStatus (\ s a -> s{_gdsrsResponseStatus = a});
 
-instance NFData GetDomainsResponse
+instance NFData GetDomainsResponse where
diff --git a/gen/Network/AWS/Lightsail/GetInstance.hs b/gen/Network/AWS/Lightsail/GetInstance.hs
--- a/gen/Network/AWS/Lightsail/GetInstance.hs
+++ b/gen/Network/AWS/Lightsail/GetInstance.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetInstance
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , girsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getInstance' smart constructor.
 newtype GetInstance = GetInstance'
-    { _giInstanceName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _giInstanceName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstance' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,11 +58,9 @@
 getInstance
     :: Text -- ^ 'giInstanceName'
     -> GetInstance
-getInstance pInstanceName_ =
-    GetInstance'
-    { _giInstanceName = pInstanceName_
-    }
+getInstance pInstanceName_ = GetInstance' {_giInstanceName = pInstanceName_}
 
+
 -- | The name of the instance.
 giInstanceName :: Lens' GetInstance Text
 giInstanceName = lens _giInstanceName (\ s a -> s{_giInstanceName = a});
@@ -75,9 +74,9 @@
                  GetInstanceResponse' <$>
                    (x .?> "instance") <*> (pure (fromEnum s)))
 
-instance Hashable GetInstance
+instance Hashable GetInstance where
 
-instance NFData GetInstance
+instance NFData GetInstance where
 
 instance ToHeaders GetInstance where
         toHeaders
@@ -102,10 +101,11 @@
 
 -- | /See:/ 'getInstanceResponse' smart constructor.
 data GetInstanceResponse = GetInstanceResponse'
-    { _girsInstance       :: !(Maybe Instance)
-    , _girsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _girsInstance       :: !(Maybe Instance)
+  , _girsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstanceResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -117,11 +117,10 @@
     :: Int -- ^ 'girsResponseStatus'
     -> GetInstanceResponse
 getInstanceResponse pResponseStatus_ =
-    GetInstanceResponse'
-    { _girsInstance = Nothing
-    , _girsResponseStatus = pResponseStatus_
-    }
+  GetInstanceResponse'
+  {_girsInstance = Nothing, _girsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the specified instance.
 girsInstance :: Lens' GetInstanceResponse (Maybe Instance)
 girsInstance = lens _girsInstance (\ s a -> s{_girsInstance = a});
@@ -130,4 +129,4 @@
 girsResponseStatus :: Lens' GetInstanceResponse Int
 girsResponseStatus = lens _girsResponseStatus (\ s a -> s{_girsResponseStatus = a});
 
-instance NFData GetInstanceResponse
+instance NFData GetInstanceResponse where
diff --git a/gen/Network/AWS/Lightsail/GetInstanceAccessDetails.hs b/gen/Network/AWS/Lightsail/GetInstanceAccessDetails.hs
--- a/gen/Network/AWS/Lightsail/GetInstanceAccessDetails.hs
+++ b/gen/Network/AWS/Lightsail/GetInstanceAccessDetails.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetInstanceAccessDetails
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,19 +38,20 @@
     , giadrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getInstanceAccessDetails' smart constructor.
 data GetInstanceAccessDetails = GetInstanceAccessDetails'
-    { _giadProtocol     :: !(Maybe InstanceAccessProtocol)
-    , _giadInstanceName :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _giadProtocol     :: !(Maybe InstanceAccessProtocol)
+  , _giadInstanceName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstanceAccessDetails' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -62,11 +63,10 @@
     :: Text -- ^ 'giadInstanceName'
     -> GetInstanceAccessDetails
 getInstanceAccessDetails pInstanceName_ =
-    GetInstanceAccessDetails'
-    { _giadProtocol = Nothing
-    , _giadInstanceName = pInstanceName_
-    }
+  GetInstanceAccessDetails'
+  {_giadProtocol = Nothing, _giadInstanceName = pInstanceName_}
 
+
 -- | The protocol to use to connect to your instance. Defaults to @ssh@ .
 giadProtocol :: Lens' GetInstanceAccessDetails (Maybe InstanceAccessProtocol)
 giadProtocol = lens _giadProtocol (\ s a -> s{_giadProtocol = a});
@@ -85,9 +85,9 @@
                  GetInstanceAccessDetailsResponse' <$>
                    (x .?> "accessDetails") <*> (pure (fromEnum s)))
 
-instance Hashable GetInstanceAccessDetails
+instance Hashable GetInstanceAccessDetails where
 
-instance NFData GetInstanceAccessDetails
+instance NFData GetInstanceAccessDetails where
 
 instance ToHeaders GetInstanceAccessDetails where
         toHeaders
@@ -114,10 +114,11 @@
 
 -- | /See:/ 'getInstanceAccessDetailsResponse' smart constructor.
 data GetInstanceAccessDetailsResponse = GetInstanceAccessDetailsResponse'
-    { _giadrsAccessDetails  :: !(Maybe InstanceAccessDetails)
-    , _giadrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _giadrsAccessDetails  :: !(Maybe InstanceAccessDetails)
+  , _giadrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstanceAccessDetailsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -129,11 +130,10 @@
     :: Int -- ^ 'giadrsResponseStatus'
     -> GetInstanceAccessDetailsResponse
 getInstanceAccessDetailsResponse pResponseStatus_ =
-    GetInstanceAccessDetailsResponse'
-    { _giadrsAccessDetails = Nothing
-    , _giadrsResponseStatus = pResponseStatus_
-    }
+  GetInstanceAccessDetailsResponse'
+  {_giadrsAccessDetails = Nothing, _giadrsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about a get instance access request.
 giadrsAccessDetails :: Lens' GetInstanceAccessDetailsResponse (Maybe InstanceAccessDetails)
 giadrsAccessDetails = lens _giadrsAccessDetails (\ s a -> s{_giadrsAccessDetails = a});
@@ -143,3 +143,4 @@
 giadrsResponseStatus = lens _giadrsResponseStatus (\ s a -> s{_giadrsResponseStatus = a});
 
 instance NFData GetInstanceAccessDetailsResponse
+         where
diff --git a/gen/Network/AWS/Lightsail/GetInstanceMetricData.hs b/gen/Network/AWS/Lightsail/GetInstanceMetricData.hs
--- a/gen/Network/AWS/Lightsail/GetInstanceMetricData.hs
+++ b/gen/Network/AWS/Lightsail/GetInstanceMetricData.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetInstanceMetricData
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -44,24 +44,25 @@
     , gimdrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getInstanceMetricData' smart constructor.
 data GetInstanceMetricData = GetInstanceMetricData'
-    { _gimdInstanceName :: !Text
-    , _gimdMetricName   :: !InstanceMetricName
-    , _gimdPeriod       :: !Nat
-    , _gimdStartTime    :: !POSIX
-    , _gimdEndTime      :: !POSIX
-    , _gimdUnit         :: !MetricUnit
-    , _gimdStatistics   :: ![MetricStatistic]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gimdInstanceName :: !Text
+  , _gimdMetricName   :: !InstanceMetricName
+  , _gimdPeriod       :: !Nat
+  , _gimdStartTime    :: !POSIX
+  , _gimdEndTime      :: !POSIX
+  , _gimdUnit         :: !MetricUnit
+  , _gimdStatistics   :: ![MetricStatistic]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstanceMetricData' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -88,16 +89,17 @@
     -> MetricUnit -- ^ 'gimdUnit'
     -> GetInstanceMetricData
 getInstanceMetricData pInstanceName_ pMetricName_ pPeriod_ pStartTime_ pEndTime_ pUnit_ =
-    GetInstanceMetricData'
-    { _gimdInstanceName = pInstanceName_
-    , _gimdMetricName = pMetricName_
-    , _gimdPeriod = _Nat # pPeriod_
-    , _gimdStartTime = _Time # pStartTime_
-    , _gimdEndTime = _Time # pEndTime_
-    , _gimdUnit = pUnit_
-    , _gimdStatistics = mempty
-    }
+  GetInstanceMetricData'
+  { _gimdInstanceName = pInstanceName_
+  , _gimdMetricName = pMetricName_
+  , _gimdPeriod = _Nat # pPeriod_
+  , _gimdStartTime = _Time # pStartTime_
+  , _gimdEndTime = _Time # pEndTime_
+  , _gimdUnit = pUnit_
+  , _gimdStatistics = mempty
+  }
 
+
 -- | The name of the instance for which you want to get metrics data.
 gimdInstanceName :: Lens' GetInstanceMetricData Text
 gimdInstanceName = lens _gimdInstanceName (\ s a -> s{_gimdInstanceName = a});
@@ -138,9 +140,9 @@
                      (x .?> "metricData" .!@ mempty)
                      <*> (pure (fromEnum s)))
 
-instance Hashable GetInstanceMetricData
+instance Hashable GetInstanceMetricData where
 
-instance NFData GetInstanceMetricData
+instance NFData GetInstanceMetricData where
 
 instance ToHeaders GetInstanceMetricData where
         toHeaders
@@ -172,11 +174,12 @@
 
 -- | /See:/ 'getInstanceMetricDataResponse' smart constructor.
 data GetInstanceMetricDataResponse = GetInstanceMetricDataResponse'
-    { _gimdrsMetricName     :: !(Maybe InstanceMetricName)
-    , _gimdrsMetricData     :: !(Maybe [MetricDatapoint])
-    , _gimdrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gimdrsMetricName     :: !(Maybe InstanceMetricName)
+  , _gimdrsMetricData     :: !(Maybe [MetricDatapoint])
+  , _gimdrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstanceMetricDataResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -190,12 +193,13 @@
     :: Int -- ^ 'gimdrsResponseStatus'
     -> GetInstanceMetricDataResponse
 getInstanceMetricDataResponse pResponseStatus_ =
-    GetInstanceMetricDataResponse'
-    { _gimdrsMetricName = Nothing
-    , _gimdrsMetricData = Nothing
-    , _gimdrsResponseStatus = pResponseStatus_
-    }
+  GetInstanceMetricDataResponse'
+  { _gimdrsMetricName = Nothing
+  , _gimdrsMetricData = Nothing
+  , _gimdrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | The metric name to return data for.
 gimdrsMetricName :: Lens' GetInstanceMetricDataResponse (Maybe InstanceMetricName)
 gimdrsMetricName = lens _gimdrsMetricName (\ s a -> s{_gimdrsMetricName = a});
@@ -208,4 +212,4 @@
 gimdrsResponseStatus :: Lens' GetInstanceMetricDataResponse Int
 gimdrsResponseStatus = lens _gimdrsResponseStatus (\ s a -> s{_gimdrsResponseStatus = a});
 
-instance NFData GetInstanceMetricDataResponse
+instance NFData GetInstanceMetricDataResponse where
diff --git a/gen/Network/AWS/Lightsail/GetInstancePortStates.hs b/gen/Network/AWS/Lightsail/GetInstancePortStates.hs
--- a/gen/Network/AWS/Lightsail/GetInstancePortStates.hs
+++ b/gen/Network/AWS/Lightsail/GetInstancePortStates.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetInstancePortStates
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , gipsrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getInstancePortStates' smart constructor.
 newtype GetInstancePortStates = GetInstancePortStates'
-    { _gipsInstanceName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gipsInstanceName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstancePortStates' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,10 +59,9 @@
     :: Text -- ^ 'gipsInstanceName'
     -> GetInstancePortStates
 getInstancePortStates pInstanceName_ =
-    GetInstancePortStates'
-    { _gipsInstanceName = pInstanceName_
-    }
+  GetInstancePortStates' {_gipsInstanceName = pInstanceName_}
 
+
 -- | The name of the instance.
 gipsInstanceName :: Lens' GetInstancePortStates Text
 gipsInstanceName = lens _gipsInstanceName (\ s a -> s{_gipsInstanceName = a});
@@ -77,9 +77,9 @@
                    (x .?> "portStates" .!@ mempty) <*>
                      (pure (fromEnum s)))
 
-instance Hashable GetInstancePortStates
+instance Hashable GetInstancePortStates where
 
-instance NFData GetInstancePortStates
+instance NFData GetInstancePortStates where
 
 instance ToHeaders GetInstancePortStates where
         toHeaders
@@ -105,10 +105,11 @@
 
 -- | /See:/ 'getInstancePortStatesResponse' smart constructor.
 data GetInstancePortStatesResponse = GetInstancePortStatesResponse'
-    { _gipsrsPortStates     :: !(Maybe [PortState])
-    , _gipsrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gipsrsPortStates     :: !(Maybe [InstancePortState])
+  , _gipsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstancePortStatesResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -120,17 +121,16 @@
     :: Int -- ^ 'gipsrsResponseStatus'
     -> GetInstancePortStatesResponse
 getInstancePortStatesResponse pResponseStatus_ =
-    GetInstancePortStatesResponse'
-    { _gipsrsPortStates = Nothing
-    , _gipsrsResponseStatus = pResponseStatus_
-    }
+  GetInstancePortStatesResponse'
+  {_gipsrsPortStates = Nothing, _gipsrsResponseStatus = pResponseStatus_}
 
+
 -- | Information about the port states resulting from your request.
-gipsrsPortStates :: Lens' GetInstancePortStatesResponse [PortState]
+gipsrsPortStates :: Lens' GetInstancePortStatesResponse [InstancePortState]
 gipsrsPortStates = lens _gipsrsPortStates (\ s a -> s{_gipsrsPortStates = a}) . _Default . _Coerce;
 
 -- | -- | The response status code.
 gipsrsResponseStatus :: Lens' GetInstancePortStatesResponse Int
 gipsrsResponseStatus = lens _gipsrsResponseStatus (\ s a -> s{_gipsrsResponseStatus = a});
 
-instance NFData GetInstancePortStatesResponse
+instance NFData GetInstancePortStatesResponse where
diff --git a/gen/Network/AWS/Lightsail/GetInstanceSnapshot.hs b/gen/Network/AWS/Lightsail/GetInstanceSnapshot.hs
--- a/gen/Network/AWS/Lightsail/GetInstanceSnapshot.hs
+++ b/gen/Network/AWS/Lightsail/GetInstanceSnapshot.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetInstanceSnapshot
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , gisrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getInstanceSnapshot' smart constructor.
 newtype GetInstanceSnapshot = GetInstanceSnapshot'
-    { _gisInstanceSnapshotName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gisInstanceSnapshotName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstanceSnapshot' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,10 +59,9 @@
     :: Text -- ^ 'gisInstanceSnapshotName'
     -> GetInstanceSnapshot
 getInstanceSnapshot pInstanceSnapshotName_ =
-    GetInstanceSnapshot'
-    { _gisInstanceSnapshotName = pInstanceSnapshotName_
-    }
+  GetInstanceSnapshot' {_gisInstanceSnapshotName = pInstanceSnapshotName_}
 
+
 -- | The name of the snapshot for which you are requesting information.
 gisInstanceSnapshotName :: Lens' GetInstanceSnapshot Text
 gisInstanceSnapshotName = lens _gisInstanceSnapshotName (\ s a -> s{_gisInstanceSnapshotName = a});
@@ -76,9 +76,9 @@
                  GetInstanceSnapshotResponse' <$>
                    (x .?> "instanceSnapshot") <*> (pure (fromEnum s)))
 
-instance Hashable GetInstanceSnapshot
+instance Hashable GetInstanceSnapshot where
 
-instance NFData GetInstanceSnapshot
+instance NFData GetInstanceSnapshot where
 
 instance ToHeaders GetInstanceSnapshot where
         toHeaders
@@ -106,10 +106,11 @@
 
 -- | /See:/ 'getInstanceSnapshotResponse' smart constructor.
 data GetInstanceSnapshotResponse = GetInstanceSnapshotResponse'
-    { _gisrsInstanceSnapshot :: !(Maybe InstanceSnapshot)
-    , _gisrsResponseStatus   :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gisrsInstanceSnapshot :: !(Maybe InstanceSnapshot)
+  , _gisrsResponseStatus   :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstanceSnapshotResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -121,11 +122,10 @@
     :: Int -- ^ 'gisrsResponseStatus'
     -> GetInstanceSnapshotResponse
 getInstanceSnapshotResponse pResponseStatus_ =
-    GetInstanceSnapshotResponse'
-    { _gisrsInstanceSnapshot = Nothing
-    , _gisrsResponseStatus = pResponseStatus_
-    }
+  GetInstanceSnapshotResponse'
+  {_gisrsInstanceSnapshot = Nothing, _gisrsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the results of your get instance snapshot request.
 gisrsInstanceSnapshot :: Lens' GetInstanceSnapshotResponse (Maybe InstanceSnapshot)
 gisrsInstanceSnapshot = lens _gisrsInstanceSnapshot (\ s a -> s{_gisrsInstanceSnapshot = a});
@@ -134,4 +134,4 @@
 gisrsResponseStatus :: Lens' GetInstanceSnapshotResponse Int
 gisrsResponseStatus = lens _gisrsResponseStatus (\ s a -> s{_gisrsResponseStatus = a});
 
-instance NFData GetInstanceSnapshotResponse
+instance NFData GetInstanceSnapshotResponse where
diff --git a/gen/Network/AWS/Lightsail/GetInstanceSnapshots.hs b/gen/Network/AWS/Lightsail/GetInstanceSnapshots.hs
--- a/gen/Network/AWS/Lightsail/GetInstanceSnapshots.hs
+++ b/gen/Network/AWS/Lightsail/GetInstanceSnapshots.hs
@@ -12,15 +12,17 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetInstanceSnapshots
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Returns all instance snapshots for the user's account.
 --
 --
+--
+-- This operation returns paginated results.
 module Network.AWS.Lightsail.GetInstanceSnapshots
     (
     -- * Creating a Request
@@ -38,18 +40,20 @@
     , gissrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getInstanceSnapshots' smart constructor.
 newtype GetInstanceSnapshots = GetInstanceSnapshots'
-    { _gisPageToken :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gisPageToken :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstanceSnapshots' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,15 +61,20 @@
 -- * 'gisPageToken' - A token used for advancing to the next page of results from your get instance snapshots request.
 getInstanceSnapshots
     :: GetInstanceSnapshots
-getInstanceSnapshots =
-    GetInstanceSnapshots'
-    { _gisPageToken = Nothing
-    }
+getInstanceSnapshots = GetInstanceSnapshots' {_gisPageToken = Nothing}
 
+
 -- | A token used for advancing to the next page of results from your get instance snapshots request.
 gisPageToken :: Lens' GetInstanceSnapshots (Maybe Text)
 gisPageToken = lens _gisPageToken (\ s a -> s{_gisPageToken = a});
 
+instance AWSPager GetInstanceSnapshots where
+        page rq rs
+          | stop (rs ^. gissrsNextPageToken) = Nothing
+          | stop (rs ^. gissrsInstanceSnapshots) = Nothing
+          | otherwise =
+            Just $ rq & gisPageToken .~ rs ^. gissrsNextPageToken
+
 instance AWSRequest GetInstanceSnapshots where
         type Rs GetInstanceSnapshots =
              GetInstanceSnapshotsResponse
@@ -78,9 +87,9 @@
                      (x .?> "instanceSnapshots" .!@ mempty)
                      <*> (pure (fromEnum s)))
 
-instance Hashable GetInstanceSnapshots
+instance Hashable GetInstanceSnapshots where
 
-instance NFData GetInstanceSnapshots
+instance NFData GetInstanceSnapshots where
 
 instance ToHeaders GetInstanceSnapshots where
         toHeaders
@@ -105,11 +114,12 @@
 
 -- | /See:/ 'getInstanceSnapshotsResponse' smart constructor.
 data GetInstanceSnapshotsResponse = GetInstanceSnapshotsResponse'
-    { _gissrsNextPageToken     :: !(Maybe Text)
-    , _gissrsInstanceSnapshots :: !(Maybe [InstanceSnapshot])
-    , _gissrsResponseStatus    :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gissrsNextPageToken     :: !(Maybe Text)
+  , _gissrsInstanceSnapshots :: !(Maybe [InstanceSnapshot])
+  , _gissrsResponseStatus    :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstanceSnapshotsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -123,12 +133,13 @@
     :: Int -- ^ 'gissrsResponseStatus'
     -> GetInstanceSnapshotsResponse
 getInstanceSnapshotsResponse pResponseStatus_ =
-    GetInstanceSnapshotsResponse'
-    { _gissrsNextPageToken = Nothing
-    , _gissrsInstanceSnapshots = Nothing
-    , _gissrsResponseStatus = pResponseStatus_
-    }
+  GetInstanceSnapshotsResponse'
+  { _gissrsNextPageToken = Nothing
+  , _gissrsInstanceSnapshots = Nothing
+  , _gissrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | A token used for advancing to the next page of results from your get instance snapshots request.
 gissrsNextPageToken :: Lens' GetInstanceSnapshotsResponse (Maybe Text)
 gissrsNextPageToken = lens _gissrsNextPageToken (\ s a -> s{_gissrsNextPageToken = a});
@@ -141,4 +152,4 @@
 gissrsResponseStatus :: Lens' GetInstanceSnapshotsResponse Int
 gissrsResponseStatus = lens _gissrsResponseStatus (\ s a -> s{_gissrsResponseStatus = a});
 
-instance NFData GetInstanceSnapshotsResponse
+instance NFData GetInstanceSnapshotsResponse where
diff --git a/gen/Network/AWS/Lightsail/GetInstanceState.hs b/gen/Network/AWS/Lightsail/GetInstanceState.hs
--- a/gen/Network/AWS/Lightsail/GetInstanceState.hs
+++ b/gen/Network/AWS/Lightsail/GetInstanceState.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetInstanceState
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , getrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getInstanceState' smart constructor.
 newtype GetInstanceState = GetInstanceState'
-    { _gisInstanceName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gisInstanceName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstanceState' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,10 +59,9 @@
     :: Text -- ^ 'gisInstanceName'
     -> GetInstanceState
 getInstanceState pInstanceName_ =
-    GetInstanceState'
-    { _gisInstanceName = pInstanceName_
-    }
+  GetInstanceState' {_gisInstanceName = pInstanceName_}
 
+
 -- | The name of the instance to get state information about.
 gisInstanceName :: Lens' GetInstanceState Text
 gisInstanceName = lens _gisInstanceName (\ s a -> s{_gisInstanceName = a});
@@ -75,9 +75,9 @@
                  GetInstanceStateResponse' <$>
                    (x .?> "state") <*> (pure (fromEnum s)))
 
-instance Hashable GetInstanceState
+instance Hashable GetInstanceState where
 
-instance NFData GetInstanceState
+instance NFData GetInstanceState where
 
 instance ToHeaders GetInstanceState where
         toHeaders
@@ -103,10 +103,11 @@
 
 -- | /See:/ 'getInstanceStateResponse' smart constructor.
 data GetInstanceStateResponse = GetInstanceStateResponse'
-    { _getrsState          :: !(Maybe InstanceState)
-    , _getrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _getrsState          :: !(Maybe InstanceState)
+  , _getrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstanceStateResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -118,11 +119,10 @@
     :: Int -- ^ 'getrsResponseStatus'
     -> GetInstanceStateResponse
 getInstanceStateResponse pResponseStatus_ =
-    GetInstanceStateResponse'
-    { _getrsState = Nothing
-    , _getrsResponseStatus = pResponseStatus_
-    }
+  GetInstanceStateResponse'
+  {_getrsState = Nothing, _getrsResponseStatus = pResponseStatus_}
 
+
 -- | The state of the instance.
 getrsState :: Lens' GetInstanceStateResponse (Maybe InstanceState)
 getrsState = lens _getrsState (\ s a -> s{_getrsState = a});
@@ -131,4 +131,4 @@
 getrsResponseStatus :: Lens' GetInstanceStateResponse Int
 getrsResponseStatus = lens _getrsResponseStatus (\ s a -> s{_getrsResponseStatus = a});
 
-instance NFData GetInstanceStateResponse
+instance NFData GetInstanceStateResponse where
diff --git a/gen/Network/AWS/Lightsail/GetInstances.hs b/gen/Network/AWS/Lightsail/GetInstances.hs
--- a/gen/Network/AWS/Lightsail/GetInstances.hs
+++ b/gen/Network/AWS/Lightsail/GetInstances.hs
@@ -12,15 +12,17 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Returns information about all Amazon Lightsail virtual private servers, or /instances/ .
 --
 --
+--
+-- This operation returns paginated results.
 module Network.AWS.Lightsail.GetInstances
     (
     -- * Creating a Request
@@ -38,18 +40,20 @@
     , grsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getInstances' smart constructor.
 newtype GetInstances = GetInstances'
-    { _giPageToken :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _giPageToken :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstances' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,15 +61,20 @@
 -- * 'giPageToken' - A token used for advancing to the next page of results from your get instances request.
 getInstances
     :: GetInstances
-getInstances =
-    GetInstances'
-    { _giPageToken = Nothing
-    }
+getInstances = GetInstances' {_giPageToken = Nothing}
 
+
 -- | A token used for advancing to the next page of results from your get instances request.
 giPageToken :: Lens' GetInstances (Maybe Text)
 giPageToken = lens _giPageToken (\ s a -> s{_giPageToken = a});
 
+instance AWSPager GetInstances where
+        page rq rs
+          | stop (rs ^. grsNextPageToken) = Nothing
+          | stop (rs ^. grsInstances) = Nothing
+          | otherwise =
+            Just $ rq & giPageToken .~ rs ^. grsNextPageToken
+
 instance AWSRequest GetInstances where
         type Rs GetInstances = GetInstancesResponse
         request = postJSON lightsail
@@ -77,9 +86,9 @@
                      (x .?> "instances" .!@ mempty)
                      <*> (pure (fromEnum s)))
 
-instance Hashable GetInstances
+instance Hashable GetInstances where
 
-instance NFData GetInstances
+instance NFData GetInstances where
 
 instance ToHeaders GetInstances where
         toHeaders
@@ -103,11 +112,12 @@
 
 -- | /See:/ 'getInstancesResponse' smart constructor.
 data GetInstancesResponse = GetInstancesResponse'
-    { _grsNextPageToken  :: !(Maybe Text)
-    , _grsInstances      :: !(Maybe [Instance])
-    , _grsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _grsNextPageToken  :: !(Maybe Text)
+  , _grsInstances      :: !(Maybe [Instance])
+  , _grsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetInstancesResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -121,12 +131,13 @@
     :: Int -- ^ 'grsResponseStatus'
     -> GetInstancesResponse
 getInstancesResponse pResponseStatus_ =
-    GetInstancesResponse'
-    { _grsNextPageToken = Nothing
-    , _grsInstances = Nothing
-    , _grsResponseStatus = pResponseStatus_
-    }
+  GetInstancesResponse'
+  { _grsNextPageToken = Nothing
+  , _grsInstances = Nothing
+  , _grsResponseStatus = pResponseStatus_
+  }
 
+
 -- | A token used for advancing to the next page of results from your get instances request.
 grsNextPageToken :: Lens' GetInstancesResponse (Maybe Text)
 grsNextPageToken = lens _grsNextPageToken (\ s a -> s{_grsNextPageToken = a});
@@ -139,4 +150,4 @@
 grsResponseStatus :: Lens' GetInstancesResponse Int
 grsResponseStatus = lens _grsResponseStatus (\ s a -> s{_grsResponseStatus = a});
 
-instance NFData GetInstancesResponse
+instance NFData GetInstancesResponse where
diff --git a/gen/Network/AWS/Lightsail/GetKeyPair.hs b/gen/Network/AWS/Lightsail/GetKeyPair.hs
--- a/gen/Network/AWS/Lightsail/GetKeyPair.hs
+++ b/gen/Network/AWS/Lightsail/GetKeyPair.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetKeyPair
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , gkprsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getKeyPair' smart constructor.
 newtype GetKeyPair = GetKeyPair'
-    { _gkpKeyPairName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gkpKeyPairName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetKeyPair' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,11 +58,9 @@
 getKeyPair
     :: Text -- ^ 'gkpKeyPairName'
     -> GetKeyPair
-getKeyPair pKeyPairName_ =
-    GetKeyPair'
-    { _gkpKeyPairName = pKeyPairName_
-    }
+getKeyPair pKeyPairName_ = GetKeyPair' {_gkpKeyPairName = pKeyPairName_}
 
+
 -- | The name of the key pair for which you are requesting information.
 gkpKeyPairName :: Lens' GetKeyPair Text
 gkpKeyPairName = lens _gkpKeyPairName (\ s a -> s{_gkpKeyPairName = a});
@@ -75,9 +74,9 @@
                  GetKeyPairResponse' <$>
                    (x .?> "keyPair") <*> (pure (fromEnum s)))
 
-instance Hashable GetKeyPair
+instance Hashable GetKeyPair where
 
-instance NFData GetKeyPair
+instance NFData GetKeyPair where
 
 instance ToHeaders GetKeyPair where
         toHeaders
@@ -101,10 +100,11 @@
 
 -- | /See:/ 'getKeyPairResponse' smart constructor.
 data GetKeyPairResponse = GetKeyPairResponse'
-    { _gkprsKeyPair        :: !(Maybe KeyPair)
-    , _gkprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gkprsKeyPair        :: !(Maybe KeyPair)
+  , _gkprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetKeyPairResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -116,11 +116,10 @@
     :: Int -- ^ 'gkprsResponseStatus'
     -> GetKeyPairResponse
 getKeyPairResponse pResponseStatus_ =
-    GetKeyPairResponse'
-    { _gkprsKeyPair = Nothing
-    , _gkprsResponseStatus = pResponseStatus_
-    }
+  GetKeyPairResponse'
+  {_gkprsKeyPair = Nothing, _gkprsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the key pair.
 gkprsKeyPair :: Lens' GetKeyPairResponse (Maybe KeyPair)
 gkprsKeyPair = lens _gkprsKeyPair (\ s a -> s{_gkprsKeyPair = a});
@@ -129,4 +128,4 @@
 gkprsResponseStatus :: Lens' GetKeyPairResponse Int
 gkprsResponseStatus = lens _gkprsResponseStatus (\ s a -> s{_gkprsResponseStatus = a});
 
-instance NFData GetKeyPairResponse
+instance NFData GetKeyPairResponse where
diff --git a/gen/Network/AWS/Lightsail/GetKeyPairs.hs b/gen/Network/AWS/Lightsail/GetKeyPairs.hs
--- a/gen/Network/AWS/Lightsail/GetKeyPairs.hs
+++ b/gen/Network/AWS/Lightsail/GetKeyPairs.hs
@@ -12,15 +12,17 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetKeyPairs
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Returns information about all key pairs in the user's account.
 --
 --
+--
+-- This operation returns paginated results.
 module Network.AWS.Lightsail.GetKeyPairs
     (
     -- * Creating a Request
@@ -38,18 +40,20 @@
     , gkpsrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getKeyPairs' smart constructor.
 newtype GetKeyPairs = GetKeyPairs'
-    { _gkpPageToken :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gkpPageToken :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetKeyPairs' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,15 +61,20 @@
 -- * 'gkpPageToken' - A token used for advancing to the next page of results from your get key pairs request.
 getKeyPairs
     :: GetKeyPairs
-getKeyPairs =
-    GetKeyPairs'
-    { _gkpPageToken = Nothing
-    }
+getKeyPairs = GetKeyPairs' {_gkpPageToken = Nothing}
 
+
 -- | A token used for advancing to the next page of results from your get key pairs request.
 gkpPageToken :: Lens' GetKeyPairs (Maybe Text)
 gkpPageToken = lens _gkpPageToken (\ s a -> s{_gkpPageToken = a});
 
+instance AWSPager GetKeyPairs where
+        page rq rs
+          | stop (rs ^. gkpsrsNextPageToken) = Nothing
+          | stop (rs ^. gkpsrsKeyPairs) = Nothing
+          | otherwise =
+            Just $ rq & gkpPageToken .~ rs ^. gkpsrsNextPageToken
+
 instance AWSRequest GetKeyPairs where
         type Rs GetKeyPairs = GetKeyPairsResponse
         request = postJSON lightsail
@@ -77,9 +86,9 @@
                      (x .?> "keyPairs" .!@ mempty)
                      <*> (pure (fromEnum s)))
 
-instance Hashable GetKeyPairs
+instance Hashable GetKeyPairs where
 
-instance NFData GetKeyPairs
+instance NFData GetKeyPairs where
 
 instance ToHeaders GetKeyPairs where
         toHeaders
@@ -103,11 +112,12 @@
 
 -- | /See:/ 'getKeyPairsResponse' smart constructor.
 data GetKeyPairsResponse = GetKeyPairsResponse'
-    { _gkpsrsNextPageToken  :: !(Maybe Text)
-    , _gkpsrsKeyPairs       :: !(Maybe [KeyPair])
-    , _gkpsrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gkpsrsNextPageToken  :: !(Maybe Text)
+  , _gkpsrsKeyPairs       :: !(Maybe [KeyPair])
+  , _gkpsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetKeyPairsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -121,12 +131,13 @@
     :: Int -- ^ 'gkpsrsResponseStatus'
     -> GetKeyPairsResponse
 getKeyPairsResponse pResponseStatus_ =
-    GetKeyPairsResponse'
-    { _gkpsrsNextPageToken = Nothing
-    , _gkpsrsKeyPairs = Nothing
-    , _gkpsrsResponseStatus = pResponseStatus_
-    }
+  GetKeyPairsResponse'
+  { _gkpsrsNextPageToken = Nothing
+  , _gkpsrsKeyPairs = Nothing
+  , _gkpsrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | A token used for advancing to the next page of results from your get key pairs request.
 gkpsrsNextPageToken :: Lens' GetKeyPairsResponse (Maybe Text)
 gkpsrsNextPageToken = lens _gkpsrsNextPageToken (\ s a -> s{_gkpsrsNextPageToken = a});
@@ -139,4 +150,4 @@
 gkpsrsResponseStatus :: Lens' GetKeyPairsResponse Int
 gkpsrsResponseStatus = lens _gkpsrsResponseStatus (\ s a -> s{_gkpsrsResponseStatus = a});
 
-instance NFData GetKeyPairsResponse
+instance NFData GetKeyPairsResponse where
diff --git a/gen/Network/AWS/Lightsail/GetOperation.hs b/gen/Network/AWS/Lightsail/GetOperation.hs
--- a/gen/Network/AWS/Lightsail/GetOperation.hs
+++ b/gen/Network/AWS/Lightsail/GetOperation.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetOperation
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , gorsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getOperation' smart constructor.
 newtype GetOperation = GetOperation'
-    { _goOperationId :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _goOperationId :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetOperation' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,11 +58,9 @@
 getOperation
     :: Text -- ^ 'goOperationId'
     -> GetOperation
-getOperation pOperationId_ =
-    GetOperation'
-    { _goOperationId = pOperationId_
-    }
+getOperation pOperationId_ = GetOperation' {_goOperationId = pOperationId_}
 
+
 -- | A GUID used to identify the operation.
 goOperationId :: Lens' GetOperation Text
 goOperationId = lens _goOperationId (\ s a -> s{_goOperationId = a});
@@ -75,9 +74,9 @@
                  GetOperationResponse' <$>
                    (x .?> "operation") <*> (pure (fromEnum s)))
 
-instance Hashable GetOperation
+instance Hashable GetOperation where
 
-instance NFData GetOperation
+instance NFData GetOperation where
 
 instance ToHeaders GetOperation where
         toHeaders
@@ -101,10 +100,11 @@
 
 -- | /See:/ 'getOperationResponse' smart constructor.
 data GetOperationResponse = GetOperationResponse'
-    { _gorsOperation      :: !(Maybe Operation)
-    , _gorsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gorsOperation      :: !(Maybe Operation)
+  , _gorsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetOperationResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -116,11 +116,10 @@
     :: Int -- ^ 'gorsResponseStatus'
     -> GetOperationResponse
 getOperationResponse pResponseStatus_ =
-    GetOperationResponse'
-    { _gorsOperation = Nothing
-    , _gorsResponseStatus = pResponseStatus_
-    }
+  GetOperationResponse'
+  {_gorsOperation = Nothing, _gorsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the results of your get operation request.
 gorsOperation :: Lens' GetOperationResponse (Maybe Operation)
 gorsOperation = lens _gorsOperation (\ s a -> s{_gorsOperation = a});
@@ -129,4 +128,4 @@
 gorsResponseStatus :: Lens' GetOperationResponse Int
 gorsResponseStatus = lens _gorsResponseStatus (\ s a -> s{_gorsResponseStatus = a});
 
-instance NFData GetOperationResponse
+instance NFData GetOperationResponse where
diff --git a/gen/Network/AWS/Lightsail/GetOperations.hs b/gen/Network/AWS/Lightsail/GetOperations.hs
--- a/gen/Network/AWS/Lightsail/GetOperations.hs
+++ b/gen/Network/AWS/Lightsail/GetOperations.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetOperations
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -23,6 +23,8 @@
 --
 -- Results are returned from oldest to newest, up to a maximum of 200. Results can be paged by making each subsequent call to @GetOperations@ use the maximum (last) @statusChangedAt@ value from the previous request.
 --
+--
+-- This operation returns paginated results.
 module Network.AWS.Lightsail.GetOperations
     (
     -- * Creating a Request
@@ -40,18 +42,20 @@
     , gosrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getOperations' smart constructor.
 newtype GetOperations = GetOperations'
-    { _goPageToken :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _goPageToken :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetOperations' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -59,15 +63,20 @@
 -- * 'goPageToken' - A token used for advancing to the next page of results from your get operations request.
 getOperations
     :: GetOperations
-getOperations =
-    GetOperations'
-    { _goPageToken = Nothing
-    }
+getOperations = GetOperations' {_goPageToken = Nothing}
 
+
 -- | A token used for advancing to the next page of results from your get operations request.
 goPageToken :: Lens' GetOperations (Maybe Text)
 goPageToken = lens _goPageToken (\ s a -> s{_goPageToken = a});
 
+instance AWSPager GetOperations where
+        page rq rs
+          | stop (rs ^. gosrsNextPageToken) = Nothing
+          | stop (rs ^. gosrsOperations) = Nothing
+          | otherwise =
+            Just $ rq & goPageToken .~ rs ^. gosrsNextPageToken
+
 instance AWSRequest GetOperations where
         type Rs GetOperations = GetOperationsResponse
         request = postJSON lightsail
@@ -79,9 +88,9 @@
                      (x .?> "operations" .!@ mempty)
                      <*> (pure (fromEnum s)))
 
-instance Hashable GetOperations
+instance Hashable GetOperations where
 
-instance NFData GetOperations
+instance NFData GetOperations where
 
 instance ToHeaders GetOperations where
         toHeaders
@@ -105,11 +114,12 @@
 
 -- | /See:/ 'getOperationsResponse' smart constructor.
 data GetOperationsResponse = GetOperationsResponse'
-    { _gosrsNextPageToken  :: !(Maybe Text)
-    , _gosrsOperations     :: !(Maybe [Operation])
-    , _gosrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gosrsNextPageToken  :: !(Maybe Text)
+  , _gosrsOperations     :: !(Maybe [Operation])
+  , _gosrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetOperationsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -123,12 +133,13 @@
     :: Int -- ^ 'gosrsResponseStatus'
     -> GetOperationsResponse
 getOperationsResponse pResponseStatus_ =
-    GetOperationsResponse'
-    { _gosrsNextPageToken = Nothing
-    , _gosrsOperations = Nothing
-    , _gosrsResponseStatus = pResponseStatus_
-    }
+  GetOperationsResponse'
+  { _gosrsNextPageToken = Nothing
+  , _gosrsOperations = Nothing
+  , _gosrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | A token used for advancing to the next page of results from your get operations request.
 gosrsNextPageToken :: Lens' GetOperationsResponse (Maybe Text)
 gosrsNextPageToken = lens _gosrsNextPageToken (\ s a -> s{_gosrsNextPageToken = a});
@@ -141,4 +152,4 @@
 gosrsResponseStatus :: Lens' GetOperationsResponse Int
 gosrsResponseStatus = lens _gosrsResponseStatus (\ s a -> s{_gosrsResponseStatus = a});
 
-instance NFData GetOperationsResponse
+instance NFData GetOperationsResponse where
diff --git a/gen/Network/AWS/Lightsail/GetOperationsForResource.hs b/gen/Network/AWS/Lightsail/GetOperationsForResource.hs
--- a/gen/Network/AWS/Lightsail/GetOperationsForResource.hs
+++ b/gen/Network/AWS/Lightsail/GetOperationsForResource.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetOperationsForResource
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -35,23 +35,25 @@
     , GetOperationsForResourceResponse
     -- * Response Lenses
     , gofrrsNextPageCount
+    , gofrrsNextPageToken
     , gofrrsOperations
     , gofrrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getOperationsForResource' smart constructor.
 data GetOperationsForResource = GetOperationsForResource'
-    { _gofrPageToken    :: !(Maybe Text)
-    , _gofrResourceName :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gofrPageToken    :: !(Maybe Text)
+  , _gofrResourceName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetOperationsForResource' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,11 +65,10 @@
     :: Text -- ^ 'gofrResourceName'
     -> GetOperationsForResource
 getOperationsForResource pResourceName_ =
-    GetOperationsForResource'
-    { _gofrPageToken = Nothing
-    , _gofrResourceName = pResourceName_
-    }
+  GetOperationsForResource'
+  {_gofrPageToken = Nothing, _gofrResourceName = pResourceName_}
 
+
 -- | A token used for advancing to the next page of results from your get operations for resource request.
 gofrPageToken :: Lens' GetOperationsForResource (Maybe Text)
 gofrPageToken = lens _gofrPageToken (\ s a -> s{_gofrPageToken = a});
@@ -84,13 +85,13 @@
           = receiveJSON
               (\ s h x ->
                  GetOperationsForResourceResponse' <$>
-                   (x .?> "nextPageCount") <*>
-                     (x .?> "operations" .!@ mempty)
+                   (x .?> "nextPageCount") <*> (x .?> "nextPageToken")
+                     <*> (x .?> "operations" .!@ mempty)
                      <*> (pure (fromEnum s)))
 
-instance Hashable GetOperationsForResource
+instance Hashable GetOperationsForResource where
 
-instance NFData GetOperationsForResource
+instance NFData GetOperationsForResource where
 
 instance ToHeaders GetOperationsForResource where
         toHeaders
@@ -117,17 +118,21 @@
 
 -- | /See:/ 'getOperationsForResourceResponse' smart constructor.
 data GetOperationsForResourceResponse = GetOperationsForResourceResponse'
-    { _gofrrsNextPageCount  :: !(Maybe Text)
-    , _gofrrsOperations     :: !(Maybe [Operation])
-    , _gofrrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gofrrsNextPageCount  :: !(Maybe Text)
+  , _gofrrsNextPageToken  :: !(Maybe Text)
+  , _gofrrsOperations     :: !(Maybe [Operation])
+  , _gofrrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetOperationsForResourceResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gofrrsNextPageCount' - Returns the number of pages of results that remain.
+-- * 'gofrrsNextPageCount' - (Deprecated) Returns the number of pages of results that remain.
 --
+-- * 'gofrrsNextPageToken' - An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
+--
 -- * 'gofrrsOperations' - An array of key-value pairs containing information about the results of your get operations for resource request.
 --
 -- * 'gofrrsResponseStatus' - -- | The response status code.
@@ -135,16 +140,22 @@
     :: Int -- ^ 'gofrrsResponseStatus'
     -> GetOperationsForResourceResponse
 getOperationsForResourceResponse pResponseStatus_ =
-    GetOperationsForResourceResponse'
-    { _gofrrsNextPageCount = Nothing
-    , _gofrrsOperations = Nothing
-    , _gofrrsResponseStatus = pResponseStatus_
-    }
+  GetOperationsForResourceResponse'
+  { _gofrrsNextPageCount = Nothing
+  , _gofrrsNextPageToken = Nothing
+  , _gofrrsOperations = Nothing
+  , _gofrrsResponseStatus = pResponseStatus_
+  }
 
--- | Returns the number of pages of results that remain.
+
+-- | (Deprecated) Returns the number of pages of results that remain.
 gofrrsNextPageCount :: Lens' GetOperationsForResourceResponse (Maybe Text)
 gofrrsNextPageCount = lens _gofrrsNextPageCount (\ s a -> s{_gofrrsNextPageCount = a});
 
+-- | An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
+gofrrsNextPageToken :: Lens' GetOperationsForResourceResponse (Maybe Text)
+gofrrsNextPageToken = lens _gofrrsNextPageToken (\ s a -> s{_gofrrsNextPageToken = a});
+
 -- | An array of key-value pairs containing information about the results of your get operations for resource request.
 gofrrsOperations :: Lens' GetOperationsForResourceResponse [Operation]
 gofrrsOperations = lens _gofrrsOperations (\ s a -> s{_gofrrsOperations = a}) . _Default . _Coerce;
@@ -154,3 +165,4 @@
 gofrrsResponseStatus = lens _gofrrsResponseStatus (\ s a -> s{_gofrrsResponseStatus = a});
 
 instance NFData GetOperationsForResourceResponse
+         where
diff --git a/gen/Network/AWS/Lightsail/GetRegions.hs b/gen/Network/AWS/Lightsail/GetRegions.hs
--- a/gen/Network/AWS/Lightsail/GetRegions.hs
+++ b/gen/Network/AWS/Lightsail/GetRegions.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetRegions
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Returns a list of all valid regions for Amazon Lightsail.
+-- Returns a list of all valid regions for Amazon Lightsail. Use the @include availability zones@ parameter to also return the availability zones in a region.
 --
 --
 module Network.AWS.Lightsail.GetRegions
@@ -37,18 +37,19 @@
     , grrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getRegions' smart constructor.
 newtype GetRegions = GetRegions'
-    { _grIncludeAvailabilityZones :: Maybe Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _grIncludeAvailabilityZones :: Maybe Bool
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetRegions' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -56,11 +57,9 @@
 -- * 'grIncludeAvailabilityZones' - A Boolean value indicating whether to also include Availability Zones in your get regions request. Availability Zones are indicated with a letter: e.g., @us-east-1a@ .
 getRegions
     :: GetRegions
-getRegions =
-    GetRegions'
-    { _grIncludeAvailabilityZones = Nothing
-    }
+getRegions = GetRegions' {_grIncludeAvailabilityZones = Nothing}
 
+
 -- | A Boolean value indicating whether to also include Availability Zones in your get regions request. Availability Zones are indicated with a letter: e.g., @us-east-1a@ .
 grIncludeAvailabilityZones :: Lens' GetRegions (Maybe Bool)
 grIncludeAvailabilityZones = lens _grIncludeAvailabilityZones (\ s a -> s{_grIncludeAvailabilityZones = a});
@@ -74,9 +73,9 @@
                  GetRegionsResponse' <$>
                    (x .?> "regions" .!@ mempty) <*> (pure (fromEnum s)))
 
-instance Hashable GetRegions
+instance Hashable GetRegions where
 
-instance NFData GetRegions
+instance NFData GetRegions where
 
 instance ToHeaders GetRegions where
         toHeaders
@@ -102,10 +101,11 @@
 
 -- | /See:/ 'getRegionsResponse' smart constructor.
 data GetRegionsResponse = GetRegionsResponse'
-    { _grrsRegions        :: !(Maybe [RegionInfo])
-    , _grrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _grrsRegions        :: !(Maybe [RegionInfo])
+  , _grrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetRegionsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -117,11 +117,10 @@
     :: Int -- ^ 'grrsResponseStatus'
     -> GetRegionsResponse
 getRegionsResponse pResponseStatus_ =
-    GetRegionsResponse'
-    { _grrsRegions = Nothing
-    , _grrsResponseStatus = pResponseStatus_
-    }
+  GetRegionsResponse'
+  {_grrsRegions = Nothing, _grrsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about your get regions request.
 grrsRegions :: Lens' GetRegionsResponse [RegionInfo]
 grrsRegions = lens _grrsRegions (\ s a -> s{_grrsRegions = a}) . _Default . _Coerce;
@@ -130,4 +129,4 @@
 grrsResponseStatus :: Lens' GetRegionsResponse Int
 grrsResponseStatus = lens _grrsResponseStatus (\ s a -> s{_grrsResponseStatus = a});
 
-instance NFData GetRegionsResponse
+instance NFData GetRegionsResponse where
diff --git a/gen/Network/AWS/Lightsail/GetStaticIP.hs b/gen/Network/AWS/Lightsail/GetStaticIP.hs
--- a/gen/Network/AWS/Lightsail/GetStaticIP.hs
+++ b/gen/Network/AWS/Lightsail/GetStaticIP.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetStaticIP
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , gsirsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getStaticIP' smart constructor.
 newtype GetStaticIP = GetStaticIP'
-    { _gsiStaticIPName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gsiStaticIPName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetStaticIP' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,11 +58,9 @@
 getStaticIP
     :: Text -- ^ 'gsiStaticIPName'
     -> GetStaticIP
-getStaticIP pStaticIPName_ =
-    GetStaticIP'
-    { _gsiStaticIPName = pStaticIPName_
-    }
+getStaticIP pStaticIPName_ = GetStaticIP' {_gsiStaticIPName = pStaticIPName_}
 
+
 -- | The name of the static IP in Lightsail.
 gsiStaticIPName :: Lens' GetStaticIP Text
 gsiStaticIPName = lens _gsiStaticIPName (\ s a -> s{_gsiStaticIPName = a});
@@ -75,9 +74,9 @@
                  GetStaticIPResponse' <$>
                    (x .?> "staticIp") <*> (pure (fromEnum s)))
 
-instance Hashable GetStaticIP
+instance Hashable GetStaticIP where
 
-instance NFData GetStaticIP
+instance NFData GetStaticIP where
 
 instance ToHeaders GetStaticIP where
         toHeaders
@@ -102,10 +101,11 @@
 
 -- | /See:/ 'getStaticIPResponse' smart constructor.
 data GetStaticIPResponse = GetStaticIPResponse'
-    { _gsirsStaticIP       :: !(Maybe StaticIP)
-    , _gsirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gsirsStaticIP       :: !(Maybe StaticIP)
+  , _gsirsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetStaticIPResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -117,11 +117,10 @@
     :: Int -- ^ 'gsirsResponseStatus'
     -> GetStaticIPResponse
 getStaticIPResponse pResponseStatus_ =
-    GetStaticIPResponse'
-    { _gsirsStaticIP = Nothing
-    , _gsirsResponseStatus = pResponseStatus_
-    }
+  GetStaticIPResponse'
+  {_gsirsStaticIP = Nothing, _gsirsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the requested static IP.
 gsirsStaticIP :: Lens' GetStaticIPResponse (Maybe StaticIP)
 gsirsStaticIP = lens _gsirsStaticIP (\ s a -> s{_gsirsStaticIP = a});
@@ -130,4 +129,4 @@
 gsirsResponseStatus :: Lens' GetStaticIPResponse Int
 gsirsResponseStatus = lens _gsirsResponseStatus (\ s a -> s{_gsirsResponseStatus = a});
 
-instance NFData GetStaticIPResponse
+instance NFData GetStaticIPResponse where
diff --git a/gen/Network/AWS/Lightsail/GetStaticIPs.hs b/gen/Network/AWS/Lightsail/GetStaticIPs.hs
--- a/gen/Network/AWS/Lightsail/GetStaticIPs.hs
+++ b/gen/Network/AWS/Lightsail/GetStaticIPs.hs
@@ -12,15 +12,17 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.GetStaticIPs
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Returns information about all static IPs in the user's account.
 --
 --
+--
+-- This operation returns paginated results.
 module Network.AWS.Lightsail.GetStaticIPs
     (
     -- * Creating a Request
@@ -38,18 +40,20 @@
     , gsiprsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getStaticIPs' smart constructor.
 newtype GetStaticIPs = GetStaticIPs'
-    { _gsiPageToken :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gsiPageToken :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetStaticIPs' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,15 +61,20 @@
 -- * 'gsiPageToken' - A token used for advancing to the next page of results from your get static IPs request.
 getStaticIPs
     :: GetStaticIPs
-getStaticIPs =
-    GetStaticIPs'
-    { _gsiPageToken = Nothing
-    }
+getStaticIPs = GetStaticIPs' {_gsiPageToken = Nothing}
 
+
 -- | A token used for advancing to the next page of results from your get static IPs request.
 gsiPageToken :: Lens' GetStaticIPs (Maybe Text)
 gsiPageToken = lens _gsiPageToken (\ s a -> s{_gsiPageToken = a});
 
+instance AWSPager GetStaticIPs where
+        page rq rs
+          | stop (rs ^. gsiprsNextPageToken) = Nothing
+          | stop (rs ^. gsiprsStaticIPs) = Nothing
+          | otherwise =
+            Just $ rq & gsiPageToken .~ rs ^. gsiprsNextPageToken
+
 instance AWSRequest GetStaticIPs where
         type Rs GetStaticIPs = GetStaticIPsResponse
         request = postJSON lightsail
@@ -77,9 +86,9 @@
                      (x .?> "staticIps" .!@ mempty)
                      <*> (pure (fromEnum s)))
 
-instance Hashable GetStaticIPs
+instance Hashable GetStaticIPs where
 
-instance NFData GetStaticIPs
+instance NFData GetStaticIPs where
 
 instance ToHeaders GetStaticIPs where
         toHeaders
@@ -103,11 +112,12 @@
 
 -- | /See:/ 'getStaticIPsResponse' smart constructor.
 data GetStaticIPsResponse = GetStaticIPsResponse'
-    { _gsiprsNextPageToken  :: !(Maybe Text)
-    , _gsiprsStaticIPs      :: !(Maybe [StaticIP])
-    , _gsiprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gsiprsNextPageToken  :: !(Maybe Text)
+  , _gsiprsStaticIPs      :: !(Maybe [StaticIP])
+  , _gsiprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetStaticIPsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -121,12 +131,13 @@
     :: Int -- ^ 'gsiprsResponseStatus'
     -> GetStaticIPsResponse
 getStaticIPsResponse pResponseStatus_ =
-    GetStaticIPsResponse'
-    { _gsiprsNextPageToken = Nothing
-    , _gsiprsStaticIPs = Nothing
-    , _gsiprsResponseStatus = pResponseStatus_
-    }
+  GetStaticIPsResponse'
+  { _gsiprsNextPageToken = Nothing
+  , _gsiprsStaticIPs = Nothing
+  , _gsiprsResponseStatus = pResponseStatus_
+  }
 
+
 -- | A token used for advancing to the next page of results from your get static IPs request.
 gsiprsNextPageToken :: Lens' GetStaticIPsResponse (Maybe Text)
 gsiprsNextPageToken = lens _gsiprsNextPageToken (\ s a -> s{_gsiprsNextPageToken = a});
@@ -139,4 +150,4 @@
 gsiprsResponseStatus :: Lens' GetStaticIPsResponse Int
 gsiprsResponseStatus = lens _gsiprsResponseStatus (\ s a -> s{_gsiprsResponseStatus = a});
 
-instance NFData GetStaticIPsResponse
+instance NFData GetStaticIPsResponse where
diff --git a/gen/Network/AWS/Lightsail/ImportKeyPair.hs b/gen/Network/AWS/Lightsail/ImportKeyPair.hs
--- a/gen/Network/AWS/Lightsail/ImportKeyPair.hs
+++ b/gen/Network/AWS/Lightsail/ImportKeyPair.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.ImportKeyPair
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,19 +38,20 @@
     , ikprsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'importKeyPair' smart constructor.
 data ImportKeyPair = ImportKeyPair'
-    { _ikpKeyPairName     :: !Text
-    , _ikpPublicKeyBase64 :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ikpKeyPairName     :: !Text
+  , _ikpPublicKeyBase64 :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ImportKeyPair' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,11 +64,10 @@
     -> Text -- ^ 'ikpPublicKeyBase64'
     -> ImportKeyPair
 importKeyPair pKeyPairName_ pPublicKeyBase64_ =
-    ImportKeyPair'
-    { _ikpKeyPairName = pKeyPairName_
-    , _ikpPublicKeyBase64 = pPublicKeyBase64_
-    }
+  ImportKeyPair'
+  {_ikpKeyPairName = pKeyPairName_, _ikpPublicKeyBase64 = pPublicKeyBase64_}
 
+
 -- | The name of the key pair for which you want to import the public key.
 ikpKeyPairName :: Lens' ImportKeyPair Text
 ikpKeyPairName = lens _ikpKeyPairName (\ s a -> s{_ikpKeyPairName = a});
@@ -85,9 +85,9 @@
                  ImportKeyPairResponse' <$>
                    (x .?> "operation") <*> (pure (fromEnum s)))
 
-instance Hashable ImportKeyPair
+instance Hashable ImportKeyPair where
 
-instance NFData ImportKeyPair
+instance NFData ImportKeyPair where
 
 instance ToHeaders ImportKeyPair where
         toHeaders
@@ -113,10 +113,11 @@
 
 -- | /See:/ 'importKeyPairResponse' smart constructor.
 data ImportKeyPairResponse = ImportKeyPairResponse'
-    { _ikprsOperation      :: !(Maybe Operation)
-    , _ikprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ikprsOperation      :: !(Maybe Operation)
+  , _ikprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ImportKeyPairResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -128,11 +129,10 @@
     :: Int -- ^ 'ikprsResponseStatus'
     -> ImportKeyPairResponse
 importKeyPairResponse pResponseStatus_ =
-    ImportKeyPairResponse'
-    { _ikprsOperation = Nothing
-    , _ikprsResponseStatus = pResponseStatus_
-    }
+  ImportKeyPairResponse'
+  {_ikprsOperation = Nothing, _ikprsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the request operation.
 ikprsOperation :: Lens' ImportKeyPairResponse (Maybe Operation)
 ikprsOperation = lens _ikprsOperation (\ s a -> s{_ikprsOperation = a});
@@ -141,4 +141,4 @@
 ikprsResponseStatus :: Lens' ImportKeyPairResponse Int
 ikprsResponseStatus = lens _ikprsResponseStatus (\ s a -> s{_ikprsResponseStatus = a});
 
-instance NFData ImportKeyPairResponse
+instance NFData ImportKeyPairResponse where
diff --git a/gen/Network/AWS/Lightsail/IsVPCPeered.hs b/gen/Network/AWS/Lightsail/IsVPCPeered.hs
--- a/gen/Network/AWS/Lightsail/IsVPCPeered.hs
+++ b/gen/Network/AWS/Lightsail/IsVPCPeered.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.IsVPCPeered
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -35,24 +35,26 @@
     , ivprsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'isVPCPeered' smart constructor.
 data IsVPCPeered =
-    IsVPCPeered'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  IsVPCPeered'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'IsVPCPeered' with the minimum fields required to make a request.
 --
 isVPCPeered
     :: IsVPCPeered
 isVPCPeered = IsVPCPeered'
 
+
 instance AWSRequest IsVPCPeered where
         type Rs IsVPCPeered = IsVPCPeeredResponse
         request = postJSON lightsail
@@ -62,9 +64,9 @@
                  IsVPCPeeredResponse' <$>
                    (x .?> "isPeered") <*> (pure (fromEnum s)))
 
-instance Hashable IsVPCPeered
+instance Hashable IsVPCPeered where
 
-instance NFData IsVPCPeered
+instance NFData IsVPCPeered where
 
 instance ToHeaders IsVPCPeered where
         toHeaders
@@ -86,10 +88,11 @@
 
 -- | /See:/ 'isVPCPeeredResponse' smart constructor.
 data IsVPCPeeredResponse = IsVPCPeeredResponse'
-    { _ivprsIsPeered       :: !(Maybe Bool)
-    , _ivprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ivprsIsPeered       :: !(Maybe Bool)
+  , _ivprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'IsVPCPeeredResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -101,11 +104,10 @@
     :: Int -- ^ 'ivprsResponseStatus'
     -> IsVPCPeeredResponse
 isVPCPeeredResponse pResponseStatus_ =
-    IsVPCPeeredResponse'
-    { _ivprsIsPeered = Nothing
-    , _ivprsResponseStatus = pResponseStatus_
-    }
+  IsVPCPeeredResponse'
+  {_ivprsIsPeered = Nothing, _ivprsResponseStatus = pResponseStatus_}
 
+
 -- | Returns @true@ if the Lightsail VPC is peered; otherwise, @false@ .
 ivprsIsPeered :: Lens' IsVPCPeeredResponse (Maybe Bool)
 ivprsIsPeered = lens _ivprsIsPeered (\ s a -> s{_ivprsIsPeered = a});
@@ -114,4 +116,4 @@
 ivprsResponseStatus :: Lens' IsVPCPeeredResponse Int
 ivprsResponseStatus = lens _ivprsResponseStatus (\ s a -> s{_ivprsResponseStatus = a});
 
-instance NFData IsVPCPeeredResponse
+instance NFData IsVPCPeeredResponse where
diff --git a/gen/Network/AWS/Lightsail/OpenInstancePublicPorts.hs b/gen/Network/AWS/Lightsail/OpenInstancePublicPorts.hs
--- a/gen/Network/AWS/Lightsail/OpenInstancePublicPorts.hs
+++ b/gen/Network/AWS/Lightsail/OpenInstancePublicPorts.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.OpenInstancePublicPorts
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,19 +38,20 @@
     , oipprsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'openInstancePublicPorts' smart constructor.
 data OpenInstancePublicPorts = OpenInstancePublicPorts'
-    { _oippPortInfo     :: !PortInfo
-    , _oippInstanceName :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _oippPortInfo     :: !PortInfo
+  , _oippInstanceName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'OpenInstancePublicPorts' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,11 +64,10 @@
     -> Text -- ^ 'oippInstanceName'
     -> OpenInstancePublicPorts
 openInstancePublicPorts pPortInfo_ pInstanceName_ =
-    OpenInstancePublicPorts'
-    { _oippPortInfo = pPortInfo_
-    , _oippInstanceName = pInstanceName_
-    }
+  OpenInstancePublicPorts'
+  {_oippPortInfo = pPortInfo_, _oippInstanceName = pInstanceName_}
 
+
 -- | An array of key-value pairs containing information about the port mappings.
 oippPortInfo :: Lens' OpenInstancePublicPorts PortInfo
 oippPortInfo = lens _oippPortInfo (\ s a -> s{_oippPortInfo = a});
@@ -86,9 +86,9 @@
                  OpenInstancePublicPortsResponse' <$>
                    (x .?> "operation") <*> (pure (fromEnum s)))
 
-instance Hashable OpenInstancePublicPorts
+instance Hashable OpenInstancePublicPorts where
 
-instance NFData OpenInstancePublicPorts
+instance NFData OpenInstancePublicPorts where
 
 instance ToHeaders OpenInstancePublicPorts where
         toHeaders
@@ -115,10 +115,11 @@
 
 -- | /See:/ 'openInstancePublicPortsResponse' smart constructor.
 data OpenInstancePublicPortsResponse = OpenInstancePublicPortsResponse'
-    { _oipprsOperation      :: !(Maybe Operation)
-    , _oipprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _oipprsOperation      :: !(Maybe Operation)
+  , _oipprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'OpenInstancePublicPortsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -130,11 +131,10 @@
     :: Int -- ^ 'oipprsResponseStatus'
     -> OpenInstancePublicPortsResponse
 openInstancePublicPortsResponse pResponseStatus_ =
-    OpenInstancePublicPortsResponse'
-    { _oipprsOperation = Nothing
-    , _oipprsResponseStatus = pResponseStatus_
-    }
+  OpenInstancePublicPortsResponse'
+  {_oipprsOperation = Nothing, _oipprsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the request operation.
 oipprsOperation :: Lens' OpenInstancePublicPortsResponse (Maybe Operation)
 oipprsOperation = lens _oipprsOperation (\ s a -> s{_oipprsOperation = a});
@@ -143,4 +143,4 @@
 oipprsResponseStatus :: Lens' OpenInstancePublicPortsResponse Int
 oipprsResponseStatus = lens _oipprsResponseStatus (\ s a -> s{_oipprsResponseStatus = a});
 
-instance NFData OpenInstancePublicPortsResponse
+instance NFData OpenInstancePublicPortsResponse where
diff --git a/gen/Network/AWS/Lightsail/PeerVPC.hs b/gen/Network/AWS/Lightsail/PeerVPC.hs
--- a/gen/Network/AWS/Lightsail/PeerVPC.hs
+++ b/gen/Network/AWS/Lightsail/PeerVPC.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.PeerVPC
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -35,24 +35,26 @@
     , pvrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'peerVPC' smart constructor.
 data PeerVPC =
-    PeerVPC'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PeerVPC'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PeerVPC' with the minimum fields required to make a request.
 --
 peerVPC
     :: PeerVPC
 peerVPC = PeerVPC'
 
+
 instance AWSRequest PeerVPC where
         type Rs PeerVPC = PeerVPCResponse
         request = postJSON lightsail
@@ -62,9 +64,9 @@
                  PeerVPCResponse' <$>
                    (x .?> "operation") <*> (pure (fromEnum s)))
 
-instance Hashable PeerVPC
+instance Hashable PeerVPC where
 
-instance NFData PeerVPC
+instance NFData PeerVPC where
 
 instance ToHeaders PeerVPC where
         toHeaders
@@ -86,10 +88,11 @@
 
 -- | /See:/ 'peerVPCResponse' smart constructor.
 data PeerVPCResponse = PeerVPCResponse'
-    { _pvrsOperation      :: !(Maybe Operation)
-    , _pvrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pvrsOperation      :: !(Maybe Operation)
+  , _pvrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PeerVPCResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -101,11 +104,10 @@
     :: Int -- ^ 'pvrsResponseStatus'
     -> PeerVPCResponse
 peerVPCResponse pResponseStatus_ =
-    PeerVPCResponse'
-    { _pvrsOperation = Nothing
-    , _pvrsResponseStatus = pResponseStatus_
-    }
+  PeerVPCResponse'
+  {_pvrsOperation = Nothing, _pvrsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the request operation.
 pvrsOperation :: Lens' PeerVPCResponse (Maybe Operation)
 pvrsOperation = lens _pvrsOperation (\ s a -> s{_pvrsOperation = a});
@@ -114,4 +116,4 @@
 pvrsResponseStatus :: Lens' PeerVPCResponse Int
 pvrsResponseStatus = lens _pvrsResponseStatus (\ s a -> s{_pvrsResponseStatus = a});
 
-instance NFData PeerVPCResponse
+instance NFData PeerVPCResponse where
diff --git a/gen/Network/AWS/Lightsail/PutInstancePublicPorts.hs b/gen/Network/AWS/Lightsail/PutInstancePublicPorts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Lightsail/PutInstancePublicPorts.hs
@@ -0,0 +1,145 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Lightsail.PutInstancePublicPorts
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets the specified open ports for an Amazon Lightsail instance, and closes all ports for every protocol not included in the current request.
+--
+--
+module Network.AWS.Lightsail.PutInstancePublicPorts
+    (
+    -- * Creating a Request
+      putInstancePublicPorts
+    , PutInstancePublicPorts
+    -- * Request Lenses
+    , pippPortInfos
+    , pippInstanceName
+
+    -- * Destructuring the Response
+    , putInstancePublicPortsResponse
+    , PutInstancePublicPortsResponse
+    -- * Response Lenses
+    , pipprsOperation
+    , pipprsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'putInstancePublicPorts' smart constructor.
+data PutInstancePublicPorts = PutInstancePublicPorts'
+  { _pippPortInfos    :: ![PortInfo]
+  , _pippInstanceName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PutInstancePublicPorts' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pippPortInfos' - Specifies information about the public port(s).
+--
+-- * 'pippInstanceName' - The Lightsail instance name of the public port(s) you are setting.
+putInstancePublicPorts
+    :: Text -- ^ 'pippInstanceName'
+    -> PutInstancePublicPorts
+putInstancePublicPorts pInstanceName_ =
+  PutInstancePublicPorts'
+  {_pippPortInfos = mempty, _pippInstanceName = pInstanceName_}
+
+
+-- | Specifies information about the public port(s).
+pippPortInfos :: Lens' PutInstancePublicPorts [PortInfo]
+pippPortInfos = lens _pippPortInfos (\ s a -> s{_pippPortInfos = a}) . _Coerce;
+
+-- | The Lightsail instance name of the public port(s) you are setting.
+pippInstanceName :: Lens' PutInstancePublicPorts Text
+pippInstanceName = lens _pippInstanceName (\ s a -> s{_pippInstanceName = a});
+
+instance AWSRequest PutInstancePublicPorts where
+        type Rs PutInstancePublicPorts =
+             PutInstancePublicPortsResponse
+        request = postJSON lightsail
+        response
+          = receiveJSON
+              (\ s h x ->
+                 PutInstancePublicPortsResponse' <$>
+                   (x .?> "operation") <*> (pure (fromEnum s)))
+
+instance Hashable PutInstancePublicPorts where
+
+instance NFData PutInstancePublicPorts where
+
+instance ToHeaders PutInstancePublicPorts where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Lightsail_20161128.PutInstancePublicPorts" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutInstancePublicPorts where
+        toJSON PutInstancePublicPorts'{..}
+          = object
+              (catMaybes
+                 [Just ("portInfos" .= _pippPortInfos),
+                  Just ("instanceName" .= _pippInstanceName)])
+
+instance ToPath PutInstancePublicPorts where
+        toPath = const "/"
+
+instance ToQuery PutInstancePublicPorts where
+        toQuery = const mempty
+
+-- | /See:/ 'putInstancePublicPortsResponse' smart constructor.
+data PutInstancePublicPortsResponse = PutInstancePublicPortsResponse'
+  { _pipprsOperation      :: !(Maybe Operation)
+  , _pipprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PutInstancePublicPortsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pipprsOperation' - Describes metadata about the operation you just executed.
+--
+-- * 'pipprsResponseStatus' - -- | The response status code.
+putInstancePublicPortsResponse
+    :: Int -- ^ 'pipprsResponseStatus'
+    -> PutInstancePublicPortsResponse
+putInstancePublicPortsResponse pResponseStatus_ =
+  PutInstancePublicPortsResponse'
+  {_pipprsOperation = Nothing, _pipprsResponseStatus = pResponseStatus_}
+
+
+-- | Describes metadata about the operation you just executed.
+pipprsOperation :: Lens' PutInstancePublicPortsResponse (Maybe Operation)
+pipprsOperation = lens _pipprsOperation (\ s a -> s{_pipprsOperation = a});
+
+-- | -- | The response status code.
+pipprsResponseStatus :: Lens' PutInstancePublicPortsResponse Int
+pipprsResponseStatus = lens _pipprsResponseStatus (\ s a -> s{_pipprsResponseStatus = a});
+
+instance NFData PutInstancePublicPortsResponse where
diff --git a/gen/Network/AWS/Lightsail/RebootInstance.hs b/gen/Network/AWS/Lightsail/RebootInstance.hs
--- a/gen/Network/AWS/Lightsail/RebootInstance.hs
+++ b/gen/Network/AWS/Lightsail/RebootInstance.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.RebootInstance
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , rirsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'rebootInstance' smart constructor.
 newtype RebootInstance = RebootInstance'
-    { _riInstanceName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _riInstanceName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'RebootInstance' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,10 +59,9 @@
     :: Text -- ^ 'riInstanceName'
     -> RebootInstance
 rebootInstance pInstanceName_ =
-    RebootInstance'
-    { _riInstanceName = pInstanceName_
-    }
+  RebootInstance' {_riInstanceName = pInstanceName_}
 
+
 -- | The name of the instance to reboot.
 riInstanceName :: Lens' RebootInstance Text
 riInstanceName = lens _riInstanceName (\ s a -> s{_riInstanceName = a});
@@ -76,9 +76,9 @@
                    (x .?> "operations" .!@ mempty) <*>
                      (pure (fromEnum s)))
 
-instance Hashable RebootInstance
+instance Hashable RebootInstance where
 
-instance NFData RebootInstance
+instance NFData RebootInstance where
 
 instance ToHeaders RebootInstance where
         toHeaders
@@ -103,10 +103,11 @@
 
 -- | /See:/ 'rebootInstanceResponse' smart constructor.
 data RebootInstanceResponse = RebootInstanceResponse'
-    { _rirsOperations     :: !(Maybe [Operation])
-    , _rirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _rirsOperations     :: !(Maybe [Operation])
+  , _rirsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'RebootInstanceResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -118,11 +119,10 @@
     :: Int -- ^ 'rirsResponseStatus'
     -> RebootInstanceResponse
 rebootInstanceResponse pResponseStatus_ =
-    RebootInstanceResponse'
-    { _rirsOperations = Nothing
-    , _rirsResponseStatus = pResponseStatus_
-    }
+  RebootInstanceResponse'
+  {_rirsOperations = Nothing, _rirsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the request operation.
 rirsOperations :: Lens' RebootInstanceResponse [Operation]
 rirsOperations = lens _rirsOperations (\ s a -> s{_rirsOperations = a}) . _Default . _Coerce;
@@ -131,4 +131,4 @@
 rirsResponseStatus :: Lens' RebootInstanceResponse Int
 rirsResponseStatus = lens _rirsResponseStatus (\ s a -> s{_rirsResponseStatus = a});
 
-instance NFData RebootInstanceResponse
+instance NFData RebootInstanceResponse where
diff --git a/gen/Network/AWS/Lightsail/ReleaseStaticIP.hs b/gen/Network/AWS/Lightsail/ReleaseStaticIP.hs
--- a/gen/Network/AWS/Lightsail/ReleaseStaticIP.hs
+++ b/gen/Network/AWS/Lightsail/ReleaseStaticIP.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.ReleaseStaticIP
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , rsirsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'releaseStaticIP' smart constructor.
 newtype ReleaseStaticIP = ReleaseStaticIP'
-    { _rsiStaticIPName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _rsiStaticIPName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ReleaseStaticIP' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,10 +59,9 @@
     :: Text -- ^ 'rsiStaticIPName'
     -> ReleaseStaticIP
 releaseStaticIP pStaticIPName_ =
-    ReleaseStaticIP'
-    { _rsiStaticIPName = pStaticIPName_
-    }
+  ReleaseStaticIP' {_rsiStaticIPName = pStaticIPName_}
 
+
 -- | The name of the static IP to delete.
 rsiStaticIPName :: Lens' ReleaseStaticIP Text
 rsiStaticIPName = lens _rsiStaticIPName (\ s a -> s{_rsiStaticIPName = a});
@@ -76,9 +76,9 @@
                    (x .?> "operations" .!@ mempty) <*>
                      (pure (fromEnum s)))
 
-instance Hashable ReleaseStaticIP
+instance Hashable ReleaseStaticIP where
 
-instance NFData ReleaseStaticIP
+instance NFData ReleaseStaticIP where
 
 instance ToHeaders ReleaseStaticIP where
         toHeaders
@@ -103,10 +103,11 @@
 
 -- | /See:/ 'releaseStaticIPResponse' smart constructor.
 data ReleaseStaticIPResponse = ReleaseStaticIPResponse'
-    { _rsirsOperations     :: !(Maybe [Operation])
-    , _rsirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _rsirsOperations     :: !(Maybe [Operation])
+  , _rsirsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ReleaseStaticIPResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -118,11 +119,10 @@
     :: Int -- ^ 'rsirsResponseStatus'
     -> ReleaseStaticIPResponse
 releaseStaticIPResponse pResponseStatus_ =
-    ReleaseStaticIPResponse'
-    { _rsirsOperations = Nothing
-    , _rsirsResponseStatus = pResponseStatus_
-    }
+  ReleaseStaticIPResponse'
+  {_rsirsOperations = Nothing, _rsirsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the request operation.
 rsirsOperations :: Lens' ReleaseStaticIPResponse [Operation]
 rsirsOperations = lens _rsirsOperations (\ s a -> s{_rsirsOperations = a}) . _Default . _Coerce;
@@ -131,4 +131,4 @@
 rsirsResponseStatus :: Lens' ReleaseStaticIPResponse Int
 rsirsResponseStatus = lens _rsirsResponseStatus (\ s a -> s{_rsirsResponseStatus = a});
 
-instance NFData ReleaseStaticIPResponse
+instance NFData ReleaseStaticIPResponse where
diff --git a/gen/Network/AWS/Lightsail/StartInstance.hs b/gen/Network/AWS/Lightsail/StartInstance.hs
--- a/gen/Network/AWS/Lightsail/StartInstance.hs
+++ b/gen/Network/AWS/Lightsail/StartInstance.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.StartInstance
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , srsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'startInstance' smart constructor.
 newtype StartInstance = StartInstance'
-    { _sInstanceName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _sInstanceName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'StartInstance' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,11 +58,9 @@
 startInstance
     :: Text -- ^ 'sInstanceName'
     -> StartInstance
-startInstance pInstanceName_ =
-    StartInstance'
-    { _sInstanceName = pInstanceName_
-    }
+startInstance pInstanceName_ = StartInstance' {_sInstanceName = pInstanceName_}
 
+
 -- | The name of the instance (a virtual private server) to start.
 sInstanceName :: Lens' StartInstance Text
 sInstanceName = lens _sInstanceName (\ s a -> s{_sInstanceName = a});
@@ -76,9 +75,9 @@
                    (x .?> "operations" .!@ mempty) <*>
                      (pure (fromEnum s)))
 
-instance Hashable StartInstance
+instance Hashable StartInstance where
 
-instance NFData StartInstance
+instance NFData StartInstance where
 
 instance ToHeaders StartInstance where
         toHeaders
@@ -102,10 +101,11 @@
 
 -- | /See:/ 'startInstanceResponse' smart constructor.
 data StartInstanceResponse = StartInstanceResponse'
-    { _srsOperations     :: !(Maybe [Operation])
-    , _srsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _srsOperations     :: !(Maybe [Operation])
+  , _srsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'StartInstanceResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -117,11 +117,10 @@
     :: Int -- ^ 'srsResponseStatus'
     -> StartInstanceResponse
 startInstanceResponse pResponseStatus_ =
-    StartInstanceResponse'
-    { _srsOperations = Nothing
-    , _srsResponseStatus = pResponseStatus_
-    }
+  StartInstanceResponse'
+  {_srsOperations = Nothing, _srsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the request operation.
 srsOperations :: Lens' StartInstanceResponse [Operation]
 srsOperations = lens _srsOperations (\ s a -> s{_srsOperations = a}) . _Default . _Coerce;
@@ -130,4 +129,4 @@
 srsResponseStatus :: Lens' StartInstanceResponse Int
 srsResponseStatus = lens _srsResponseStatus (\ s a -> s{_srsResponseStatus = a});
 
-instance NFData StartInstanceResponse
+instance NFData StartInstanceResponse where
diff --git a/gen/Network/AWS/Lightsail/StopInstance.hs b/gen/Network/AWS/Lightsail/StopInstance.hs
--- a/gen/Network/AWS/Lightsail/StopInstance.hs
+++ b/gen/Network/AWS/Lightsail/StopInstance.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.StopInstance
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,18 +37,19 @@
     , sirsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'stopInstance' smart constructor.
 newtype StopInstance = StopInstance'
-    { _siInstanceName :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _siInstanceName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'StopInstance' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,11 +58,9 @@
 stopInstance
     :: Text -- ^ 'siInstanceName'
     -> StopInstance
-stopInstance pInstanceName_ =
-    StopInstance'
-    { _siInstanceName = pInstanceName_
-    }
+stopInstance pInstanceName_ = StopInstance' {_siInstanceName = pInstanceName_}
 
+
 -- | The name of the instance (a virtual private server) to stop.
 siInstanceName :: Lens' StopInstance Text
 siInstanceName = lens _siInstanceName (\ s a -> s{_siInstanceName = a});
@@ -76,9 +75,9 @@
                    (x .?> "operations" .!@ mempty) <*>
                      (pure (fromEnum s)))
 
-instance Hashable StopInstance
+instance Hashable StopInstance where
 
-instance NFData StopInstance
+instance NFData StopInstance where
 
 instance ToHeaders StopInstance where
         toHeaders
@@ -103,10 +102,11 @@
 
 -- | /See:/ 'stopInstanceResponse' smart constructor.
 data StopInstanceResponse = StopInstanceResponse'
-    { _sirsOperations     :: !(Maybe [Operation])
-    , _sirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _sirsOperations     :: !(Maybe [Operation])
+  , _sirsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'StopInstanceResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -118,11 +118,10 @@
     :: Int -- ^ 'sirsResponseStatus'
     -> StopInstanceResponse
 stopInstanceResponse pResponseStatus_ =
-    StopInstanceResponse'
-    { _sirsOperations = Nothing
-    , _sirsResponseStatus = pResponseStatus_
-    }
+  StopInstanceResponse'
+  {_sirsOperations = Nothing, _sirsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the request operation.
 sirsOperations :: Lens' StopInstanceResponse [Operation]
 sirsOperations = lens _sirsOperations (\ s a -> s{_sirsOperations = a}) . _Default . _Coerce;
@@ -131,4 +130,4 @@
 sirsResponseStatus :: Lens' StopInstanceResponse Int
 sirsResponseStatus = lens _sirsResponseStatus (\ s a -> s{_sirsResponseStatus = a});
 
-instance NFData StopInstanceResponse
+instance NFData StopInstanceResponse where
diff --git a/gen/Network/AWS/Lightsail/Types.hs b/gen/Network/AWS/Lightsail/Types.hs
--- a/gen/Network/AWS/Lightsail/Types.hs
+++ b/gen/Network/AWS/Lightsail/Types.hs
@@ -4,9 +4,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.Types
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -36,6 +36,9 @@
     -- * InstanceMetricName
     , InstanceMetricName (..)
 
+    -- * InstancePlatform
+    , InstancePlatform (..)
+
     -- * InstanceSnapshotState
     , InstanceSnapshotState (..)
 
@@ -76,6 +79,7 @@
     , Blueprint
     , blueprint
     , bVersionCode
+    , bPlatform
     , bGroup
     , bMinPower
     , bProductURL
@@ -97,6 +101,7 @@
     , bunName
     , bunPower
     , bunDiskSizeInGb
+    , bunSupportedPlatforms
     , bunPrice
     , bunIsActive
     , bunRamSizeInGb
@@ -170,6 +175,7 @@
     , iadExpiresAt
     , iadUsername
     , iadProtocol
+    , iadPasswordData
     , iadPassword
     , iadInstanceName
 
@@ -197,6 +203,14 @@
     , ipiToPort
     , ipiAccessFrom
 
+    -- * InstancePortState
+    , InstancePortState
+    , instancePortState
+    , ipsFromPort
+    , ipsState
+    , ipsProtocol
+    , ipsToPort
+
     -- * InstanceSnapshot
     , InstanceSnapshot
     , instanceSnapshot
@@ -263,6 +277,12 @@
     , oOperationType
     , oIsTerminal
 
+    -- * PasswordData
+    , PasswordData
+    , passwordData
+    , pdKeyPairName
+    , pdCiphertext
+
     -- * PortInfo
     , PortInfo
     , portInfo
@@ -299,38 +319,40 @@
     , siAttachedTo
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Lightsail.Types.Sum
-import           Network.AWS.Prelude
-import           Network.AWS.Sign.V4
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Lightsail.Types.Sum
+import Network.AWS.Prelude
+import Network.AWS.Sign.V4
 
 -- | API version @2016-11-28@ of the Amazon Lightsail SDK configuration.
 lightsail :: Service
 lightsail =
-    Service
-    { _svcAbbrev = "Lightsail"
-    , _svcSigner = v4
-    , _svcPrefix = "lightsail"
-    , _svcVersion = "2016-11-28"
-    , _svcEndpoint = defaultEndpoint lightsail
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseJSONError "Lightsail"
-    , _svcRetry = retry
-    }
+  Service
+  { _svcAbbrev = "Lightsail"
+  , _svcSigner = v4
+  , _svcPrefix = "lightsail"
+  , _svcVersion = "2016-11-28"
+  , _svcEndpoint = defaultEndpoint lightsail
+  , _svcTimeout = Just 70
+  , _svcCheck = statusSuccess
+  , _svcError = parseJSONError "Lightsail"
+  , _svcRetry = retry
+  }
   where
     retry =
-        Exponential
-        { _retryBase = 5.0e-2
-        , _retryGrowth = 2
-        , _retryAttempts = 5
-        , _retryCheck = check
-        }
+      Exponential
+      { _retryBase = 5.0e-2
+      , _retryGrowth = 2
+      , _retryAttempts = 5
+      , _retryCheck = check
+      }
     check e
+      | has (hasCode "ThrottledException" . hasStatus 400) e =
+        Just "throttled_exception"
       | has (hasStatus 429) e = Just "too_many_requests"
       | has (hasCode "ThrottlingException" . hasStatus 400) e =
-          Just "throttling_exception"
+        Just "throttling_exception"
       | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
       | has (hasStatus 504) e = Just "gateway_timeout"
       | has (hasStatus 502) e = Just "bad_gateway"
@@ -339,46 +361,55 @@
       | has (hasStatus 509) e = Just "limit_exceeded"
       | otherwise = Nothing
 
+
 -- | Lightsail throws this exception when the user cannot be authenticated or uses invalid credentials to access a resource.
 --
 --
 _AccessDeniedException :: AsError a => Getting (First ServiceError) a ServiceError
-_AccessDeniedException = _ServiceError . hasCode "AccessDeniedException"
+_AccessDeniedException = _MatchServiceError lightsail "AccessDeniedException"
 
+
 -- | Lightsail throws this exception when an account is still in the setup in progress state.
 --
 --
 _AccountSetupInProgressException :: AsError a => Getting (First ServiceError) a ServiceError
 _AccountSetupInProgressException =
-    _ServiceError . hasCode "AccountSetupInProgressException"
+  _MatchServiceError lightsail "AccountSetupInProgressException"
 
+
 -- | Lightsail throws this exception when it cannot find a resource.
 --
 --
 _NotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
-_NotFoundException = _ServiceError . hasCode "NotFoundException"
+_NotFoundException = _MatchServiceError lightsail "NotFoundException"
 
+
 -- | Lightsail throws this exception when an operation fails to execute.
 --
 --
 _OperationFailureException :: AsError a => Getting (First ServiceError) a ServiceError
 _OperationFailureException =
-    _ServiceError . hasCode "OperationFailureException"
+  _MatchServiceError lightsail "OperationFailureException"
 
+
 -- | A general service exception.
 --
 --
 _ServiceException :: AsError a => Getting (First ServiceError) a ServiceError
-_ServiceException = _ServiceError . hasCode "ServiceException"
+_ServiceException = _MatchServiceError lightsail "ServiceException"
 
+
 -- | Lightsail throws this exception when the user has not been authenticated.
 --
 --
 _UnauthenticatedException :: AsError a => Getting (First ServiceError) a ServiceError
-_UnauthenticatedException = _ServiceError . hasCode "UnauthenticatedException"
+_UnauthenticatedException =
+  _MatchServiceError lightsail "UnauthenticatedException"
 
+
 -- | Lightsail throws this exception when user input does not conform to the validation rules of an input field.
 --
 --
 _InvalidInputException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidInputException = _ServiceError . hasCode "InvalidInputException"
+_InvalidInputException = _MatchServiceError lightsail "InvalidInputException"
+
diff --git a/gen/Network/AWS/Lightsail/Types/Product.hs b/gen/Network/AWS/Lightsail/Types/Product.hs
--- a/gen/Network/AWS/Lightsail/Types/Product.hs
+++ b/gen/Network/AWS/Lightsail/Types/Product.hs
@@ -9,1903 +9,2054 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.Types.Product
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.Lightsail.Types.Product where
-
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types.Sum
-import           Network.AWS.Prelude
-
--- | Describes an Availability Zone.
---
---
---
--- /See:/ 'availabilityZone' smart constructor.
-data AvailabilityZone = AvailabilityZone'
-    { _azState    :: !(Maybe Text)
-    , _azZoneName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AvailabilityZone' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'azState' - The state of the Availability Zone.
---
--- * 'azZoneName' - The name of the Availability Zone.
-availabilityZone
-    :: AvailabilityZone
-availabilityZone =
-    AvailabilityZone'
-    { _azState = Nothing
-    , _azZoneName = Nothing
-    }
-
--- | The state of the Availability Zone.
-azState :: Lens' AvailabilityZone (Maybe Text)
-azState = lens _azState (\ s a -> s{_azState = a});
-
--- | The name of the Availability Zone.
-azZoneName :: Lens' AvailabilityZone (Maybe Text)
-azZoneName = lens _azZoneName (\ s a -> s{_azZoneName = a});
-
-instance FromJSON AvailabilityZone where
-        parseJSON
-          = withObject "AvailabilityZone"
-              (\ x ->
-                 AvailabilityZone' <$>
-                   (x .:? "state") <*> (x .:? "zoneName"))
-
-instance Hashable AvailabilityZone
-
-instance NFData AvailabilityZone
-
--- | Describes a blueprint (a virtual private server image).
---
---
---
--- /See:/ 'blueprint' smart constructor.
-data Blueprint = Blueprint'
-    { _bVersionCode :: !(Maybe Text)
-    , _bGroup       :: !(Maybe Text)
-    , _bMinPower    :: !(Maybe Int)
-    , _bProductURL  :: !(Maybe Text)
-    , _bLicenseURL  :: !(Maybe Text)
-    , _bName        :: !(Maybe Text)
-    , _bVersion     :: !(Maybe Text)
-    , _bBlueprintId :: !(Maybe Text)
-    , _bType        :: !(Maybe BlueprintType)
-    , _bIsActive    :: !(Maybe Bool)
-    , _bDescription :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Blueprint' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bVersionCode' - The version code.
---
--- * 'bGroup' - The group name of the blueprint (e.g., @amazon-linux@ ).
---
--- * 'bMinPower' - The minimum machine size required to run this blueprint. @0@ indicates that the blueprint runs on all instances.
---
--- * 'bProductURL' - The product URL to learn more about the image or blueprint.
---
--- * 'bLicenseURL' - The end-user license agreement URL for the image or blueprint.
---
--- * 'bName' - The friendly name of the blueprint (e.g., @Amazon Linux@ ).
---
--- * 'bVersion' - The version number of the operating system, application, or stack (e.g., @2016.03.0@ ).
---
--- * 'bBlueprintId' - The ID for the virtual private server image (e.g., @app_wordpress_4_4@ or @app_lamp_7_0@ ).
---
--- * 'bType' - The type of the blueprint (e.g., @os@ or @app@ ).
---
--- * 'bIsActive' - A Boolean value indicating whether the blueprint is active. When you update your blueprints, you will inactivate old blueprints and keep the most recent versions active.
---
--- * 'bDescription' - The description of the blueprint.
-blueprint
-    :: Blueprint
-blueprint =
-    Blueprint'
-    { _bVersionCode = Nothing
-    , _bGroup = Nothing
-    , _bMinPower = Nothing
-    , _bProductURL = Nothing
-    , _bLicenseURL = Nothing
-    , _bName = Nothing
-    , _bVersion = Nothing
-    , _bBlueprintId = Nothing
-    , _bType = Nothing
-    , _bIsActive = Nothing
-    , _bDescription = Nothing
-    }
-
--- | The version code.
-bVersionCode :: Lens' Blueprint (Maybe Text)
-bVersionCode = lens _bVersionCode (\ s a -> s{_bVersionCode = a});
-
--- | The group name of the blueprint (e.g., @amazon-linux@ ).
-bGroup :: Lens' Blueprint (Maybe Text)
-bGroup = lens _bGroup (\ s a -> s{_bGroup = a});
-
--- | The minimum machine size required to run this blueprint. @0@ indicates that the blueprint runs on all instances.
-bMinPower :: Lens' Blueprint (Maybe Int)
-bMinPower = lens _bMinPower (\ s a -> s{_bMinPower = a});
-
--- | The product URL to learn more about the image or blueprint.
-bProductURL :: Lens' Blueprint (Maybe Text)
-bProductURL = lens _bProductURL (\ s a -> s{_bProductURL = a});
-
--- | The end-user license agreement URL for the image or blueprint.
-bLicenseURL :: Lens' Blueprint (Maybe Text)
-bLicenseURL = lens _bLicenseURL (\ s a -> s{_bLicenseURL = a});
-
--- | The friendly name of the blueprint (e.g., @Amazon Linux@ ).
-bName :: Lens' Blueprint (Maybe Text)
-bName = lens _bName (\ s a -> s{_bName = a});
-
--- | The version number of the operating system, application, or stack (e.g., @2016.03.0@ ).
-bVersion :: Lens' Blueprint (Maybe Text)
-bVersion = lens _bVersion (\ s a -> s{_bVersion = a});
-
--- | The ID for the virtual private server image (e.g., @app_wordpress_4_4@ or @app_lamp_7_0@ ).
-bBlueprintId :: Lens' Blueprint (Maybe Text)
-bBlueprintId = lens _bBlueprintId (\ s a -> s{_bBlueprintId = a});
-
--- | The type of the blueprint (e.g., @os@ or @app@ ).
-bType :: Lens' Blueprint (Maybe BlueprintType)
-bType = lens _bType (\ s a -> s{_bType = a});
-
--- | A Boolean value indicating whether the blueprint is active. When you update your blueprints, you will inactivate old blueprints and keep the most recent versions active.
-bIsActive :: Lens' Blueprint (Maybe Bool)
-bIsActive = lens _bIsActive (\ s a -> s{_bIsActive = a});
-
--- | The description of the blueprint.
-bDescription :: Lens' Blueprint (Maybe Text)
-bDescription = lens _bDescription (\ s a -> s{_bDescription = a});
-
-instance FromJSON Blueprint where
-        parseJSON
-          = withObject "Blueprint"
-              (\ x ->
-                 Blueprint' <$>
-                   (x .:? "versionCode") <*> (x .:? "group") <*>
-                     (x .:? "minPower")
-                     <*> (x .:? "productUrl")
-                     <*> (x .:? "licenseUrl")
-                     <*> (x .:? "name")
-                     <*> (x .:? "version")
-                     <*> (x .:? "blueprintId")
-                     <*> (x .:? "type")
-                     <*> (x .:? "isActive")
-                     <*> (x .:? "description"))
-
-instance Hashable Blueprint
-
-instance NFData Blueprint
-
--- | Describes a bundle, which is a set of specs describing your virtual private server (or /instance/ ).
---
---
---
--- /See:/ 'bundle' smart constructor.
-data Bundle = Bundle'
-    { _bunCpuCount             :: !(Maybe Int)
-    , _bunTransferPerMonthInGb :: !(Maybe Int)
-    , _bunBundleId             :: !(Maybe Text)
-    , _bunInstanceType         :: !(Maybe Text)
-    , _bunName                 :: !(Maybe Text)
-    , _bunPower                :: !(Maybe Int)
-    , _bunDiskSizeInGb         :: !(Maybe Int)
-    , _bunPrice                :: !(Maybe Double)
-    , _bunIsActive             :: !(Maybe Bool)
-    , _bunRamSizeInGb          :: !(Maybe Double)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Bundle' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bunCpuCount' - The number of vCPUs included in the bundle (e.g., @2@ ).
---
--- * 'bunTransferPerMonthInGb' - The data transfer rate per month in GB (e.g., @2000@ ).
---
--- * 'bunBundleId' - The bundle ID (e.g., @micro_1_0@ ).
---
--- * 'bunInstanceType' - The Amazon EC2 instance type (e.g., @t2.micro@ ).
---
--- * 'bunName' - A friendly name for the bundle (e.g., @Micro@ ).
---
--- * 'bunPower' - The power of the bundle (e.g., @500@ ).
---
--- * 'bunDiskSizeInGb' - The size of the SSD (e.g., @30@ ).
---
--- * 'bunPrice' - The price in US dollars (e.g., @5.0@ ).
---
--- * 'bunIsActive' - A Boolean value indicating whether the bundle is active.
---
--- * 'bunRamSizeInGb' - The amount of RAM in GB (e.g., @2.0@ ).
-bundle
-    :: Bundle
-bundle =
-    Bundle'
-    { _bunCpuCount = Nothing
-    , _bunTransferPerMonthInGb = Nothing
-    , _bunBundleId = Nothing
-    , _bunInstanceType = Nothing
-    , _bunName = Nothing
-    , _bunPower = Nothing
-    , _bunDiskSizeInGb = Nothing
-    , _bunPrice = Nothing
-    , _bunIsActive = Nothing
-    , _bunRamSizeInGb = Nothing
-    }
-
--- | The number of vCPUs included in the bundle (e.g., @2@ ).
-bunCpuCount :: Lens' Bundle (Maybe Int)
-bunCpuCount = lens _bunCpuCount (\ s a -> s{_bunCpuCount = a});
-
--- | The data transfer rate per month in GB (e.g., @2000@ ).
-bunTransferPerMonthInGb :: Lens' Bundle (Maybe Int)
-bunTransferPerMonthInGb = lens _bunTransferPerMonthInGb (\ s a -> s{_bunTransferPerMonthInGb = a});
-
--- | The bundle ID (e.g., @micro_1_0@ ).
-bunBundleId :: Lens' Bundle (Maybe Text)
-bunBundleId = lens _bunBundleId (\ s a -> s{_bunBundleId = a});
-
--- | The Amazon EC2 instance type (e.g., @t2.micro@ ).
-bunInstanceType :: Lens' Bundle (Maybe Text)
-bunInstanceType = lens _bunInstanceType (\ s a -> s{_bunInstanceType = a});
-
--- | A friendly name for the bundle (e.g., @Micro@ ).
-bunName :: Lens' Bundle (Maybe Text)
-bunName = lens _bunName (\ s a -> s{_bunName = a});
-
--- | The power of the bundle (e.g., @500@ ).
-bunPower :: Lens' Bundle (Maybe Int)
-bunPower = lens _bunPower (\ s a -> s{_bunPower = a});
-
--- | The size of the SSD (e.g., @30@ ).
-bunDiskSizeInGb :: Lens' Bundle (Maybe Int)
-bunDiskSizeInGb = lens _bunDiskSizeInGb (\ s a -> s{_bunDiskSizeInGb = a});
-
--- | The price in US dollars (e.g., @5.0@ ).
-bunPrice :: Lens' Bundle (Maybe Double)
-bunPrice = lens _bunPrice (\ s a -> s{_bunPrice = a});
-
--- | A Boolean value indicating whether the bundle is active.
-bunIsActive :: Lens' Bundle (Maybe Bool)
-bunIsActive = lens _bunIsActive (\ s a -> s{_bunIsActive = a});
-
--- | The amount of RAM in GB (e.g., @2.0@ ).
-bunRamSizeInGb :: Lens' Bundle (Maybe Double)
-bunRamSizeInGb = lens _bunRamSizeInGb (\ s a -> s{_bunRamSizeInGb = a});
-
-instance FromJSON Bundle where
-        parseJSON
-          = withObject "Bundle"
-              (\ x ->
-                 Bundle' <$>
-                   (x .:? "cpuCount") <*> (x .:? "transferPerMonthInGb")
-                     <*> (x .:? "bundleId")
-                     <*> (x .:? "instanceType")
-                     <*> (x .:? "name")
-                     <*> (x .:? "power")
-                     <*> (x .:? "diskSizeInGb")
-                     <*> (x .:? "price")
-                     <*> (x .:? "isActive")
-                     <*> (x .:? "ramSizeInGb"))
-
-instance Hashable Bundle
-
-instance NFData Bundle
-
--- | Describes the hard disk (an SSD).
---
---
---
--- /See:/ 'disk' smart constructor.
-data Disk = Disk'
-    { _dResourceType    :: !(Maybe ResourceType)
-    , _dArn             :: !(Maybe Text)
-    , _dPath            :: !(Maybe Text)
-    , _dCreatedAt       :: !(Maybe POSIX)
-    , _dLocation        :: !(Maybe ResourceLocation)
-    , _dIops            :: !(Maybe Int)
-    , _dIsAttached      :: !(Maybe Bool)
-    , _dAttachmentState :: !(Maybe Text)
-    , _dName            :: !(Maybe Text)
-    , _dSizeInGb        :: !(Maybe Int)
-    , _dSupportCode     :: !(Maybe Text)
-    , _dIsSystemDisk    :: !(Maybe Bool)
-    , _dAttachedTo      :: !(Maybe Text)
-    , _dGbInUse         :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Disk' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dResourceType' - The resource type of the disk.
---
--- * 'dArn' - The Amazon Resource Name (ARN) of the disk.
---
--- * 'dPath' - The disk path.
---
--- * 'dCreatedAt' - The date when the disk was created.
---
--- * 'dLocation' - The region and Availability Zone where the disk is located.
---
--- * 'dIops' - The input/output operations per second (IOPS) of the disk.
---
--- * 'dIsAttached' - A Boolean value indicating whether the disk is attached.
---
--- * 'dAttachmentState' - The attachment state of the disk.
---
--- * 'dName' - The name of the disk.
---
--- * 'dSizeInGb' - The size of the disk in GB.
---
--- * 'dSupportCode' - The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
---
--- * 'dIsSystemDisk' - A Boolean value indicating whether this disk is a system disk (has an operating system loaded on it).
---
--- * 'dAttachedTo' - The resources to which the disk is attached.
---
--- * 'dGbInUse' - The number of GB in use by the disk.
-disk
-    :: Disk
-disk =
-    Disk'
-    { _dResourceType = Nothing
-    , _dArn = Nothing
-    , _dPath = Nothing
-    , _dCreatedAt = Nothing
-    , _dLocation = Nothing
-    , _dIops = Nothing
-    , _dIsAttached = Nothing
-    , _dAttachmentState = Nothing
-    , _dName = Nothing
-    , _dSizeInGb = Nothing
-    , _dSupportCode = Nothing
-    , _dIsSystemDisk = Nothing
-    , _dAttachedTo = Nothing
-    , _dGbInUse = Nothing
-    }
-
--- | The resource type of the disk.
-dResourceType :: Lens' Disk (Maybe ResourceType)
-dResourceType = lens _dResourceType (\ s a -> s{_dResourceType = a});
-
--- | The Amazon Resource Name (ARN) of the disk.
-dArn :: Lens' Disk (Maybe Text)
-dArn = lens _dArn (\ s a -> s{_dArn = a});
-
--- | The disk path.
-dPath :: Lens' Disk (Maybe Text)
-dPath = lens _dPath (\ s a -> s{_dPath = a});
-
--- | The date when the disk was created.
-dCreatedAt :: Lens' Disk (Maybe UTCTime)
-dCreatedAt = lens _dCreatedAt (\ s a -> s{_dCreatedAt = a}) . mapping _Time;
-
--- | The region and Availability Zone where the disk is located.
-dLocation :: Lens' Disk (Maybe ResourceLocation)
-dLocation = lens _dLocation (\ s a -> s{_dLocation = a});
-
--- | The input/output operations per second (IOPS) of the disk.
-dIops :: Lens' Disk (Maybe Int)
-dIops = lens _dIops (\ s a -> s{_dIops = a});
-
--- | A Boolean value indicating whether the disk is attached.
-dIsAttached :: Lens' Disk (Maybe Bool)
-dIsAttached = lens _dIsAttached (\ s a -> s{_dIsAttached = a});
-
--- | The attachment state of the disk.
-dAttachmentState :: Lens' Disk (Maybe Text)
-dAttachmentState = lens _dAttachmentState (\ s a -> s{_dAttachmentState = a});
-
--- | The name of the disk.
-dName :: Lens' Disk (Maybe Text)
-dName = lens _dName (\ s a -> s{_dName = a});
-
--- | The size of the disk in GB.
-dSizeInGb :: Lens' Disk (Maybe Int)
-dSizeInGb = lens _dSizeInGb (\ s a -> s{_dSizeInGb = a});
-
--- | The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
-dSupportCode :: Lens' Disk (Maybe Text)
-dSupportCode = lens _dSupportCode (\ s a -> s{_dSupportCode = a});
-
--- | A Boolean value indicating whether this disk is a system disk (has an operating system loaded on it).
-dIsSystemDisk :: Lens' Disk (Maybe Bool)
-dIsSystemDisk = lens _dIsSystemDisk (\ s a -> s{_dIsSystemDisk = a});
-
--- | The resources to which the disk is attached.
-dAttachedTo :: Lens' Disk (Maybe Text)
-dAttachedTo = lens _dAttachedTo (\ s a -> s{_dAttachedTo = a});
-
--- | The number of GB in use by the disk.
-dGbInUse :: Lens' Disk (Maybe Int)
-dGbInUse = lens _dGbInUse (\ s a -> s{_dGbInUse = a});
-
-instance FromJSON Disk where
-        parseJSON
-          = withObject "Disk"
-              (\ x ->
-                 Disk' <$>
-                   (x .:? "resourceType") <*> (x .:? "arn") <*>
-                     (x .:? "path")
-                     <*> (x .:? "createdAt")
-                     <*> (x .:? "location")
-                     <*> (x .:? "iops")
-                     <*> (x .:? "isAttached")
-                     <*> (x .:? "attachmentState")
-                     <*> (x .:? "name")
-                     <*> (x .:? "sizeInGb")
-                     <*> (x .:? "supportCode")
-                     <*> (x .:? "isSystemDisk")
-                     <*> (x .:? "attachedTo")
-                     <*> (x .:? "gbInUse"))
-
-instance Hashable Disk
-
-instance NFData Disk
-
--- | Describes a domain where you are storing recordsets in Lightsail.
---
---
---
--- /See:/ 'domain' smart constructor.
-data Domain = Domain'
-    { _domResourceType  :: !(Maybe ResourceType)
-    , _domDomainEntries :: !(Maybe [DomainEntry])
-    , _domArn           :: !(Maybe Text)
-    , _domCreatedAt     :: !(Maybe POSIX)
-    , _domLocation      :: !(Maybe ResourceLocation)
-    , _domName          :: !(Maybe Text)
-    , _domSupportCode   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Domain' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'domResourceType' - The resource type.
---
--- * 'domDomainEntries' - An array of key-value pairs containing information about the domain entries.
---
--- * 'domArn' - The Amazon Resource Name (ARN) of the domain recordset (e.g., @arn:aws:lightsail:global:123456789101:Domain/824cede0-abc7-4f84-8dbc-12345EXAMPLE@ ).
---
--- * 'domCreatedAt' - The date when the domain recordset was created.
---
--- * 'domLocation' - The AWS Region and Availability Zones where the domain recordset was created.
---
--- * 'domName' - The name of the domain.
---
--- * 'domSupportCode' - The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
-domain
-    :: Domain
-domain =
-    Domain'
-    { _domResourceType = Nothing
-    , _domDomainEntries = Nothing
-    , _domArn = Nothing
-    , _domCreatedAt = Nothing
-    , _domLocation = Nothing
-    , _domName = Nothing
-    , _domSupportCode = Nothing
-    }
-
--- | The resource type.
-domResourceType :: Lens' Domain (Maybe ResourceType)
-domResourceType = lens _domResourceType (\ s a -> s{_domResourceType = a});
-
--- | An array of key-value pairs containing information about the domain entries.
-domDomainEntries :: Lens' Domain [DomainEntry]
-domDomainEntries = lens _domDomainEntries (\ s a -> s{_domDomainEntries = a}) . _Default . _Coerce;
-
--- | The Amazon Resource Name (ARN) of the domain recordset (e.g., @arn:aws:lightsail:global:123456789101:Domain/824cede0-abc7-4f84-8dbc-12345EXAMPLE@ ).
-domArn :: Lens' Domain (Maybe Text)
-domArn = lens _domArn (\ s a -> s{_domArn = a});
-
--- | The date when the domain recordset was created.
-domCreatedAt :: Lens' Domain (Maybe UTCTime)
-domCreatedAt = lens _domCreatedAt (\ s a -> s{_domCreatedAt = a}) . mapping _Time;
-
--- | The AWS Region and Availability Zones where the domain recordset was created.
-domLocation :: Lens' Domain (Maybe ResourceLocation)
-domLocation = lens _domLocation (\ s a -> s{_domLocation = a});
-
--- | The name of the domain.
-domName :: Lens' Domain (Maybe Text)
-domName = lens _domName (\ s a -> s{_domName = a});
-
--- | The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
-domSupportCode :: Lens' Domain (Maybe Text)
-domSupportCode = lens _domSupportCode (\ s a -> s{_domSupportCode = a});
-
-instance FromJSON Domain where
-        parseJSON
-          = withObject "Domain"
-              (\ x ->
-                 Domain' <$>
-                   (x .:? "resourceType") <*>
-                     (x .:? "domainEntries" .!= mempty)
-                     <*> (x .:? "arn")
-                     <*> (x .:? "createdAt")
-                     <*> (x .:? "location")
-                     <*> (x .:? "name")
-                     <*> (x .:? "supportCode"))
-
-instance Hashable Domain
-
-instance NFData Domain
-
--- | Describes a domain recordset entry.
---
---
---
--- /See:/ 'domainEntry' smart constructor.
-data DomainEntry = DomainEntry'
-    { _deName    :: !(Maybe Text)
-    , _deId      :: !(Maybe Text)
-    , _deOptions :: !(Maybe (Map Text Text))
-    , _deType    :: !(Maybe Text)
-    , _deTarget  :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DomainEntry' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'deName' - The name of the domain.
---
--- * 'deId' - The ID of the domain recordset entry.
---
--- * 'deOptions' - The options for the domain entry.
---
--- * 'deType' - The type of domain entry (e.g., @SOA@ or @NS@ ).
---
--- * 'deTarget' - The target AWS name server (e.g., @ns-111.awsdns-22.com.@ ).
-domainEntry
-    :: DomainEntry
-domainEntry =
-    DomainEntry'
-    { _deName = Nothing
-    , _deId = Nothing
-    , _deOptions = Nothing
-    , _deType = Nothing
-    , _deTarget = Nothing
-    }
-
--- | The name of the domain.
-deName :: Lens' DomainEntry (Maybe Text)
-deName = lens _deName (\ s a -> s{_deName = a});
-
--- | The ID of the domain recordset entry.
-deId :: Lens' DomainEntry (Maybe Text)
-deId = lens _deId (\ s a -> s{_deId = a});
-
--- | The options for the domain entry.
-deOptions :: Lens' DomainEntry (HashMap Text Text)
-deOptions = lens _deOptions (\ s a -> s{_deOptions = a}) . _Default . _Map;
-
--- | The type of domain entry (e.g., @SOA@ or @NS@ ).
-deType :: Lens' DomainEntry (Maybe Text)
-deType = lens _deType (\ s a -> s{_deType = a});
-
--- | The target AWS name server (e.g., @ns-111.awsdns-22.com.@ ).
-deTarget :: Lens' DomainEntry (Maybe Text)
-deTarget = lens _deTarget (\ s a -> s{_deTarget = a});
-
-instance FromJSON DomainEntry where
-        parseJSON
-          = withObject "DomainEntry"
-              (\ x ->
-                 DomainEntry' <$>
-                   (x .:? "name") <*> (x .:? "id") <*>
-                     (x .:? "options" .!= mempty)
-                     <*> (x .:? "type")
-                     <*> (x .:? "target"))
-
-instance Hashable DomainEntry
-
-instance NFData DomainEntry
-
-instance ToJSON DomainEntry where
-        toJSON DomainEntry'{..}
-          = object
-              (catMaybes
-                 [("name" .=) <$> _deName, ("id" .=) <$> _deId,
-                  ("options" .=) <$> _deOptions,
-                  ("type" .=) <$> _deType,
-                  ("target" .=) <$> _deTarget])
-
--- | Describes an instance (a virtual private server).
---
---
---
--- /See:/ 'instance'' smart constructor.
-data Instance = Instance'
-    { _iState            :: !(Maybe InstanceState)
-    , _iIpv6Address      :: !(Maybe Text)
-    , _iResourceType     :: !(Maybe ResourceType)
-    , _iArn              :: !(Maybe Text)
-    , _iCreatedAt        :: !(Maybe POSIX)
-    , _iLocation         :: !(Maybe ResourceLocation)
-    , _iSshKeyName       :: !(Maybe Text)
-    , _iUsername         :: !(Maybe Text)
-    , _iNetworking       :: !(Maybe InstanceNetworking)
-    , _iBundleId         :: !(Maybe Text)
-    , _iName             :: !(Maybe Text)
-    , _iSupportCode      :: !(Maybe Text)
-    , _iBlueprintId      :: !(Maybe Text)
-    , _iPrivateIPAddress :: !(Maybe Text)
-    , _iBlueprintName    :: !(Maybe Text)
-    , _iIsStaticIP       :: !(Maybe Bool)
-    , _iPublicIPAddress  :: !(Maybe Text)
-    , _iHardware         :: !(Maybe InstanceHardware)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Instance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iState' - The status code and the state (e.g., @running@ ) for the instance.
---
--- * 'iIpv6Address' - The IPv6 address of the instance.
---
--- * 'iResourceType' - The type of resource (usually @Instance@ ).
---
--- * 'iArn' - The Amazon Resource Name (ARN) of the instance (e.g., @arn:aws:lightsail:us-east-1:123456789101:Instance/244ad76f-8aad-4741-809f-12345EXAMPLE@ ).
---
--- * 'iCreatedAt' - The timestamp when the instance was created (e.g., @1479734909.17@ ).
---
--- * 'iLocation' - The region name and availability zone where the instance is located.
---
--- * 'iSshKeyName' - The name of the SSH key being used to connect to the instance (e.g., @LightsailDefaultKeyPair@ ).
---
--- * 'iUsername' - The user name for connecting to the instance (e.g., @ec2-user@ ).
---
--- * 'iNetworking' - Information about the public ports and monthly data transfer rates for the instance.
---
--- * 'iBundleId' - The bundle for the instance (e.g., @micro_1_0@ ).
---
--- * 'iName' - The name the user gave the instance (e.g., @Amazon_Linux-1GB-Virginia-1@ ).
---
--- * 'iSupportCode' - The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
---
--- * 'iBlueprintId' - The blueprint ID (e.g., @os_amlinux_2016_03@ ).
---
--- * 'iPrivateIPAddress' - The private IP address of the instance.
---
--- * 'iBlueprintName' - The friendly name of the blueprint (e.g., @Amazon Linux@ ).
---
--- * 'iIsStaticIP' - A Boolean value indicating whether this instance has a static IP assigned to it.
---
--- * 'iPublicIPAddress' - The public IP address of the instance.
---
--- * 'iHardware' - The size of the vCPU and the amount of RAM for the instance.
-instance'
-    :: Instance
-instance' =
-    Instance'
-    { _iState = Nothing
-    , _iIpv6Address = Nothing
-    , _iResourceType = Nothing
-    , _iArn = Nothing
-    , _iCreatedAt = Nothing
-    , _iLocation = Nothing
-    , _iSshKeyName = Nothing
-    , _iUsername = Nothing
-    , _iNetworking = Nothing
-    , _iBundleId = Nothing
-    , _iName = Nothing
-    , _iSupportCode = Nothing
-    , _iBlueprintId = Nothing
-    , _iPrivateIPAddress = Nothing
-    , _iBlueprintName = Nothing
-    , _iIsStaticIP = Nothing
-    , _iPublicIPAddress = Nothing
-    , _iHardware = Nothing
-    }
-
--- | The status code and the state (e.g., @running@ ) for the instance.
-iState :: Lens' Instance (Maybe InstanceState)
-iState = lens _iState (\ s a -> s{_iState = a});
-
--- | The IPv6 address of the instance.
-iIpv6Address :: Lens' Instance (Maybe Text)
-iIpv6Address = lens _iIpv6Address (\ s a -> s{_iIpv6Address = a});
-
--- | The type of resource (usually @Instance@ ).
-iResourceType :: Lens' Instance (Maybe ResourceType)
-iResourceType = lens _iResourceType (\ s a -> s{_iResourceType = a});
-
--- | The Amazon Resource Name (ARN) of the instance (e.g., @arn:aws:lightsail:us-east-1:123456789101:Instance/244ad76f-8aad-4741-809f-12345EXAMPLE@ ).
-iArn :: Lens' Instance (Maybe Text)
-iArn = lens _iArn (\ s a -> s{_iArn = a});
-
--- | The timestamp when the instance was created (e.g., @1479734909.17@ ).
-iCreatedAt :: Lens' Instance (Maybe UTCTime)
-iCreatedAt = lens _iCreatedAt (\ s a -> s{_iCreatedAt = a}) . mapping _Time;
-
--- | The region name and availability zone where the instance is located.
-iLocation :: Lens' Instance (Maybe ResourceLocation)
-iLocation = lens _iLocation (\ s a -> s{_iLocation = a});
-
--- | The name of the SSH key being used to connect to the instance (e.g., @LightsailDefaultKeyPair@ ).
-iSshKeyName :: Lens' Instance (Maybe Text)
-iSshKeyName = lens _iSshKeyName (\ s a -> s{_iSshKeyName = a});
-
--- | The user name for connecting to the instance (e.g., @ec2-user@ ).
-iUsername :: Lens' Instance (Maybe Text)
-iUsername = lens _iUsername (\ s a -> s{_iUsername = a});
-
--- | Information about the public ports and monthly data transfer rates for the instance.
-iNetworking :: Lens' Instance (Maybe InstanceNetworking)
-iNetworking = lens _iNetworking (\ s a -> s{_iNetworking = a});
-
--- | The bundle for the instance (e.g., @micro_1_0@ ).
-iBundleId :: Lens' Instance (Maybe Text)
-iBundleId = lens _iBundleId (\ s a -> s{_iBundleId = a});
-
--- | The name the user gave the instance (e.g., @Amazon_Linux-1GB-Virginia-1@ ).
-iName :: Lens' Instance (Maybe Text)
-iName = lens _iName (\ s a -> s{_iName = a});
-
--- | The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
-iSupportCode :: Lens' Instance (Maybe Text)
-iSupportCode = lens _iSupportCode (\ s a -> s{_iSupportCode = a});
-
--- | The blueprint ID (e.g., @os_amlinux_2016_03@ ).
-iBlueprintId :: Lens' Instance (Maybe Text)
-iBlueprintId = lens _iBlueprintId (\ s a -> s{_iBlueprintId = a});
-
--- | The private IP address of the instance.
-iPrivateIPAddress :: Lens' Instance (Maybe Text)
-iPrivateIPAddress = lens _iPrivateIPAddress (\ s a -> s{_iPrivateIPAddress = a});
-
--- | The friendly name of the blueprint (e.g., @Amazon Linux@ ).
-iBlueprintName :: Lens' Instance (Maybe Text)
-iBlueprintName = lens _iBlueprintName (\ s a -> s{_iBlueprintName = a});
-
--- | A Boolean value indicating whether this instance has a static IP assigned to it.
-iIsStaticIP :: Lens' Instance (Maybe Bool)
-iIsStaticIP = lens _iIsStaticIP (\ s a -> s{_iIsStaticIP = a});
-
--- | The public IP address of the instance.
-iPublicIPAddress :: Lens' Instance (Maybe Text)
-iPublicIPAddress = lens _iPublicIPAddress (\ s a -> s{_iPublicIPAddress = a});
-
--- | The size of the vCPU and the amount of RAM for the instance.
-iHardware :: Lens' Instance (Maybe InstanceHardware)
-iHardware = lens _iHardware (\ s a -> s{_iHardware = a});
-
-instance FromJSON Instance where
-        parseJSON
-          = withObject "Instance"
-              (\ x ->
-                 Instance' <$>
-                   (x .:? "state") <*> (x .:? "ipv6Address") <*>
-                     (x .:? "resourceType")
-                     <*> (x .:? "arn")
-                     <*> (x .:? "createdAt")
-                     <*> (x .:? "location")
-                     <*> (x .:? "sshKeyName")
-                     <*> (x .:? "username")
-                     <*> (x .:? "networking")
-                     <*> (x .:? "bundleId")
-                     <*> (x .:? "name")
-                     <*> (x .:? "supportCode")
-                     <*> (x .:? "blueprintId")
-                     <*> (x .:? "privateIpAddress")
-                     <*> (x .:? "blueprintName")
-                     <*> (x .:? "isStaticIp")
-                     <*> (x .:? "publicIpAddress")
-                     <*> (x .:? "hardware"))
-
-instance Hashable Instance
-
-instance NFData Instance
-
--- | The parameters for gaining temporary access to one of your Amazon Lightsail instances.
---
---
---
--- /See:/ 'instanceAccessDetails' smart constructor.
-data InstanceAccessDetails = InstanceAccessDetails'
-    { _iadCertKey      :: !(Maybe Text)
-    , _iadIpAddress    :: !(Maybe Text)
-    , _iadPrivateKey   :: !(Maybe Text)
-    , _iadExpiresAt    :: !(Maybe POSIX)
-    , _iadUsername     :: !(Maybe Text)
-    , _iadProtocol     :: !(Maybe InstanceAccessProtocol)
-    , _iadPassword     :: !(Maybe Text)
-    , _iadInstanceName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceAccessDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iadCertKey' - For SSH access, the public key to use when accessing your instance For OpenSSH clients (e.g., command line SSH), you should save this value to @tempkey-cert.pub@ .
---
--- * 'iadIpAddress' - The public IP address of the Amazon Lightsail instance.
---
--- * 'iadPrivateKey' - For SSH access, the temporary private key. For OpenSSH clients (e.g., command line SSH), you should save this value to @tempkey@ ).
---
--- * 'iadExpiresAt' - For SSH access, the date on which the temporary keys expire.
---
--- * 'iadUsername' - The user name to use when logging in to the Amazon Lightsail instance.
---
--- * 'iadProtocol' - The protocol for these Amazon Lightsail instance access details.
---
--- * 'iadPassword' - For RDP access, the temporary password of the Amazon EC2 instance.
---
--- * 'iadInstanceName' - The name of this Amazon Lightsail instance.
-instanceAccessDetails
-    :: InstanceAccessDetails
-instanceAccessDetails =
-    InstanceAccessDetails'
-    { _iadCertKey = Nothing
-    , _iadIpAddress = Nothing
-    , _iadPrivateKey = Nothing
-    , _iadExpiresAt = Nothing
-    , _iadUsername = Nothing
-    , _iadProtocol = Nothing
-    , _iadPassword = Nothing
-    , _iadInstanceName = Nothing
-    }
-
--- | For SSH access, the public key to use when accessing your instance For OpenSSH clients (e.g., command line SSH), you should save this value to @tempkey-cert.pub@ .
-iadCertKey :: Lens' InstanceAccessDetails (Maybe Text)
-iadCertKey = lens _iadCertKey (\ s a -> s{_iadCertKey = a});
-
--- | The public IP address of the Amazon Lightsail instance.
-iadIpAddress :: Lens' InstanceAccessDetails (Maybe Text)
-iadIpAddress = lens _iadIpAddress (\ s a -> s{_iadIpAddress = a});
-
--- | For SSH access, the temporary private key. For OpenSSH clients (e.g., command line SSH), you should save this value to @tempkey@ ).
-iadPrivateKey :: Lens' InstanceAccessDetails (Maybe Text)
-iadPrivateKey = lens _iadPrivateKey (\ s a -> s{_iadPrivateKey = a});
-
--- | For SSH access, the date on which the temporary keys expire.
-iadExpiresAt :: Lens' InstanceAccessDetails (Maybe UTCTime)
-iadExpiresAt = lens _iadExpiresAt (\ s a -> s{_iadExpiresAt = a}) . mapping _Time;
-
--- | The user name to use when logging in to the Amazon Lightsail instance.
-iadUsername :: Lens' InstanceAccessDetails (Maybe Text)
-iadUsername = lens _iadUsername (\ s a -> s{_iadUsername = a});
-
--- | The protocol for these Amazon Lightsail instance access details.
-iadProtocol :: Lens' InstanceAccessDetails (Maybe InstanceAccessProtocol)
-iadProtocol = lens _iadProtocol (\ s a -> s{_iadProtocol = a});
-
--- | For RDP access, the temporary password of the Amazon EC2 instance.
-iadPassword :: Lens' InstanceAccessDetails (Maybe Text)
-iadPassword = lens _iadPassword (\ s a -> s{_iadPassword = a});
-
--- | The name of this Amazon Lightsail instance.
-iadInstanceName :: Lens' InstanceAccessDetails (Maybe Text)
-iadInstanceName = lens _iadInstanceName (\ s a -> s{_iadInstanceName = a});
-
-instance FromJSON InstanceAccessDetails where
-        parseJSON
-          = withObject "InstanceAccessDetails"
-              (\ x ->
-                 InstanceAccessDetails' <$>
-                   (x .:? "certKey") <*> (x .:? "ipAddress") <*>
-                     (x .:? "privateKey")
-                     <*> (x .:? "expiresAt")
-                     <*> (x .:? "username")
-                     <*> (x .:? "protocol")
-                     <*> (x .:? "password")
-                     <*> (x .:? "instanceName"))
-
-instance Hashable InstanceAccessDetails
-
-instance NFData InstanceAccessDetails
-
--- | Describes the hardware for the instance.
---
---
---
--- /See:/ 'instanceHardware' smart constructor.
-data InstanceHardware = InstanceHardware'
-    { _ihCpuCount    :: !(Maybe Int)
-    , _ihDisks       :: !(Maybe [Disk])
-    , _ihRamSizeInGb :: !(Maybe Double)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceHardware' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ihCpuCount' - The number of vCPUs the instance has.
---
--- * 'ihDisks' - The disks attached to the instance.
---
--- * 'ihRamSizeInGb' - The amount of RAM in GB on the instance (e.g., @1.0@ ).
-instanceHardware
-    :: InstanceHardware
-instanceHardware =
-    InstanceHardware'
-    { _ihCpuCount = Nothing
-    , _ihDisks = Nothing
-    , _ihRamSizeInGb = Nothing
-    }
-
--- | The number of vCPUs the instance has.
-ihCpuCount :: Lens' InstanceHardware (Maybe Int)
-ihCpuCount = lens _ihCpuCount (\ s a -> s{_ihCpuCount = a});
-
--- | The disks attached to the instance.
-ihDisks :: Lens' InstanceHardware [Disk]
-ihDisks = lens _ihDisks (\ s a -> s{_ihDisks = a}) . _Default . _Coerce;
-
--- | The amount of RAM in GB on the instance (e.g., @1.0@ ).
-ihRamSizeInGb :: Lens' InstanceHardware (Maybe Double)
-ihRamSizeInGb = lens _ihRamSizeInGb (\ s a -> s{_ihRamSizeInGb = a});
-
-instance FromJSON InstanceHardware where
-        parseJSON
-          = withObject "InstanceHardware"
-              (\ x ->
-                 InstanceHardware' <$>
-                   (x .:? "cpuCount") <*> (x .:? "disks" .!= mempty) <*>
-                     (x .:? "ramSizeInGb"))
-
-instance Hashable InstanceHardware
-
-instance NFData InstanceHardware
-
--- | Describes monthly data transfer rates and port information for an instance.
---
---
---
--- /See:/ 'instanceNetworking' smart constructor.
-data InstanceNetworking = InstanceNetworking'
-    { _inMonthlyTransfer :: !(Maybe MonthlyTransfer)
-    , _inPorts           :: !(Maybe [InstancePortInfo])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceNetworking' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'inMonthlyTransfer' - The amount of data in GB allocated for monthly data transfers.
---
--- * 'inPorts' - An array of key-value pairs containing information about the ports on the instance.
-instanceNetworking
-    :: InstanceNetworking
-instanceNetworking =
-    InstanceNetworking'
-    { _inMonthlyTransfer = Nothing
-    , _inPorts = Nothing
-    }
-
--- | The amount of data in GB allocated for monthly data transfers.
-inMonthlyTransfer :: Lens' InstanceNetworking (Maybe MonthlyTransfer)
-inMonthlyTransfer = lens _inMonthlyTransfer (\ s a -> s{_inMonthlyTransfer = a});
-
--- | An array of key-value pairs containing information about the ports on the instance.
-inPorts :: Lens' InstanceNetworking [InstancePortInfo]
-inPorts = lens _inPorts (\ s a -> s{_inPorts = a}) . _Default . _Coerce;
-
-instance FromJSON InstanceNetworking where
-        parseJSON
-          = withObject "InstanceNetworking"
-              (\ x ->
-                 InstanceNetworking' <$>
-                   (x .:? "monthlyTransfer") <*>
-                     (x .:? "ports" .!= mempty))
-
-instance Hashable InstanceNetworking
-
-instance NFData InstanceNetworking
-
--- | Describes information about the instance ports.
---
---
---
--- /See:/ 'instancePortInfo' smart constructor.
-data InstancePortInfo = InstancePortInfo'
-    { _ipiFromPort        :: !(Maybe Nat)
-    , _ipiCommonName      :: !(Maybe Text)
-    , _ipiProtocol        :: !(Maybe NetworkProtocol)
-    , _ipiAccessDirection :: !(Maybe AccessDirection)
-    , _ipiAccessType      :: !(Maybe PortAccessType)
-    , _ipiToPort          :: !(Maybe Nat)
-    , _ipiAccessFrom      :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstancePortInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ipiFromPort' - The first port in the range.
---
--- * 'ipiCommonName' - The common name.
---
--- * 'ipiProtocol' - The protocol.
---
--- * 'ipiAccessDirection' - The access direction (@inbound@ or @outbound@ ).
---
--- * 'ipiAccessType' - The type of access (@Public@ or @Private@ ).
---
--- * 'ipiToPort' - The last port in the range.
---
--- * 'ipiAccessFrom' - The location from which access is allowed (e.g., @Anywhere (0.0.0.0/0)@ ).
-instancePortInfo
-    :: InstancePortInfo
-instancePortInfo =
-    InstancePortInfo'
-    { _ipiFromPort = Nothing
-    , _ipiCommonName = Nothing
-    , _ipiProtocol = Nothing
-    , _ipiAccessDirection = Nothing
-    , _ipiAccessType = Nothing
-    , _ipiToPort = Nothing
-    , _ipiAccessFrom = Nothing
-    }
-
--- | The first port in the range.
-ipiFromPort :: Lens' InstancePortInfo (Maybe Natural)
-ipiFromPort = lens _ipiFromPort (\ s a -> s{_ipiFromPort = a}) . mapping _Nat;
-
--- | The common name.
-ipiCommonName :: Lens' InstancePortInfo (Maybe Text)
-ipiCommonName = lens _ipiCommonName (\ s a -> s{_ipiCommonName = a});
-
--- | The protocol.
-ipiProtocol :: Lens' InstancePortInfo (Maybe NetworkProtocol)
-ipiProtocol = lens _ipiProtocol (\ s a -> s{_ipiProtocol = a});
-
--- | The access direction (@inbound@ or @outbound@ ).
-ipiAccessDirection :: Lens' InstancePortInfo (Maybe AccessDirection)
-ipiAccessDirection = lens _ipiAccessDirection (\ s a -> s{_ipiAccessDirection = a});
-
--- | The type of access (@Public@ or @Private@ ).
-ipiAccessType :: Lens' InstancePortInfo (Maybe PortAccessType)
-ipiAccessType = lens _ipiAccessType (\ s a -> s{_ipiAccessType = a});
-
--- | The last port in the range.
-ipiToPort :: Lens' InstancePortInfo (Maybe Natural)
-ipiToPort = lens _ipiToPort (\ s a -> s{_ipiToPort = a}) . mapping _Nat;
-
--- | The location from which access is allowed (e.g., @Anywhere (0.0.0.0/0)@ ).
-ipiAccessFrom :: Lens' InstancePortInfo (Maybe Text)
-ipiAccessFrom = lens _ipiAccessFrom (\ s a -> s{_ipiAccessFrom = a});
-
-instance FromJSON InstancePortInfo where
-        parseJSON
-          = withObject "InstancePortInfo"
-              (\ x ->
-                 InstancePortInfo' <$>
-                   (x .:? "fromPort") <*> (x .:? "commonName") <*>
-                     (x .:? "protocol")
-                     <*> (x .:? "accessDirection")
-                     <*> (x .:? "accessType")
-                     <*> (x .:? "toPort")
-                     <*> (x .:? "accessFrom"))
-
-instance Hashable InstancePortInfo
-
-instance NFData InstancePortInfo
-
--- | Describes the snapshot of the virtual private server, or /instance/ .
---
---
---
--- /See:/ 'instanceSnapshot' smart constructor.
-data InstanceSnapshot = InstanceSnapshot'
-    { _insFromBlueprintId  :: !(Maybe Text)
-    , _insState            :: !(Maybe InstanceSnapshotState)
-    , _insResourceType     :: !(Maybe ResourceType)
-    , _insArn              :: !(Maybe Text)
-    , _insCreatedAt        :: !(Maybe POSIX)
-    , _insLocation         :: !(Maybe ResourceLocation)
-    , _insProgress         :: !(Maybe Text)
-    , _insName             :: !(Maybe Text)
-    , _insFromBundleId     :: !(Maybe Text)
-    , _insSizeInGb         :: !(Maybe Int)
-    , _insSupportCode      :: !(Maybe Text)
-    , _insFromInstanceARN  :: !(Maybe Text)
-    , _insFromInstanceName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceSnapshot' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'insFromBlueprintId' - The blueprint ID from which you created the snapshot (e.g., @os_debian_8_3@ ). A blueprint is a virtual private server (or /instance/ ) image used to create instances quickly.
---
--- * 'insState' - The state the snapshot is in.
---
--- * 'insResourceType' - The type of resource (usually @InstanceSnapshot@ ).
---
--- * 'insArn' - The Amazon Resource Name (ARN) of the snapshot (e.g., @arn:aws:lightsail:us-east-1:123456789101:InstanceSnapshot/d23b5706-3322-4d83-81e5-12345EXAMPLE@ ).
---
--- * 'insCreatedAt' - The timestamp when the snapshot was created (e.g., @1479907467.024@ ).
---
--- * 'insLocation' - The region name and availability zone where you created the snapshot.
---
--- * 'insProgress' - The progress of the snapshot.
---
--- * 'insName' - The name of the snapshot.
---
--- * 'insFromBundleId' - The bundle ID from which you created the snapshot (e.g., @micro_1_0@ ).
---
--- * 'insSizeInGb' - The size in GB of the SSD.
---
--- * 'insSupportCode' - The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
---
--- * 'insFromInstanceARN' - The Amazon Resource Name (ARN) of the instance from which the snapshot was created (e.g., @arn:aws:lightsail:us-east-1:123456789101:Instance/64b8404c-ccb1-430b-8daf-12345EXAMPLE@ ).
---
--- * 'insFromInstanceName' - The instance from which the snapshot was created.
-instanceSnapshot
-    :: InstanceSnapshot
-instanceSnapshot =
-    InstanceSnapshot'
-    { _insFromBlueprintId = Nothing
-    , _insState = Nothing
-    , _insResourceType = Nothing
-    , _insArn = Nothing
-    , _insCreatedAt = Nothing
-    , _insLocation = Nothing
-    , _insProgress = Nothing
-    , _insName = Nothing
-    , _insFromBundleId = Nothing
-    , _insSizeInGb = Nothing
-    , _insSupportCode = Nothing
-    , _insFromInstanceARN = Nothing
-    , _insFromInstanceName = Nothing
-    }
-
--- | The blueprint ID from which you created the snapshot (e.g., @os_debian_8_3@ ). A blueprint is a virtual private server (or /instance/ ) image used to create instances quickly.
-insFromBlueprintId :: Lens' InstanceSnapshot (Maybe Text)
-insFromBlueprintId = lens _insFromBlueprintId (\ s a -> s{_insFromBlueprintId = a});
-
--- | The state the snapshot is in.
-insState :: Lens' InstanceSnapshot (Maybe InstanceSnapshotState)
-insState = lens _insState (\ s a -> s{_insState = a});
-
--- | The type of resource (usually @InstanceSnapshot@ ).
-insResourceType :: Lens' InstanceSnapshot (Maybe ResourceType)
-insResourceType = lens _insResourceType (\ s a -> s{_insResourceType = a});
-
--- | The Amazon Resource Name (ARN) of the snapshot (e.g., @arn:aws:lightsail:us-east-1:123456789101:InstanceSnapshot/d23b5706-3322-4d83-81e5-12345EXAMPLE@ ).
-insArn :: Lens' InstanceSnapshot (Maybe Text)
-insArn = lens _insArn (\ s a -> s{_insArn = a});
-
--- | The timestamp when the snapshot was created (e.g., @1479907467.024@ ).
-insCreatedAt :: Lens' InstanceSnapshot (Maybe UTCTime)
-insCreatedAt = lens _insCreatedAt (\ s a -> s{_insCreatedAt = a}) . mapping _Time;
-
--- | The region name and availability zone where you created the snapshot.
-insLocation :: Lens' InstanceSnapshot (Maybe ResourceLocation)
-insLocation = lens _insLocation (\ s a -> s{_insLocation = a});
-
--- | The progress of the snapshot.
-insProgress :: Lens' InstanceSnapshot (Maybe Text)
-insProgress = lens _insProgress (\ s a -> s{_insProgress = a});
-
--- | The name of the snapshot.
-insName :: Lens' InstanceSnapshot (Maybe Text)
-insName = lens _insName (\ s a -> s{_insName = a});
-
--- | The bundle ID from which you created the snapshot (e.g., @micro_1_0@ ).
-insFromBundleId :: Lens' InstanceSnapshot (Maybe Text)
-insFromBundleId = lens _insFromBundleId (\ s a -> s{_insFromBundleId = a});
-
--- | The size in GB of the SSD.
-insSizeInGb :: Lens' InstanceSnapshot (Maybe Int)
-insSizeInGb = lens _insSizeInGb (\ s a -> s{_insSizeInGb = a});
-
--- | The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
-insSupportCode :: Lens' InstanceSnapshot (Maybe Text)
-insSupportCode = lens _insSupportCode (\ s a -> s{_insSupportCode = a});
-
--- | The Amazon Resource Name (ARN) of the instance from which the snapshot was created (e.g., @arn:aws:lightsail:us-east-1:123456789101:Instance/64b8404c-ccb1-430b-8daf-12345EXAMPLE@ ).
-insFromInstanceARN :: Lens' InstanceSnapshot (Maybe Text)
-insFromInstanceARN = lens _insFromInstanceARN (\ s a -> s{_insFromInstanceARN = a});
-
--- | The instance from which the snapshot was created.
-insFromInstanceName :: Lens' InstanceSnapshot (Maybe Text)
-insFromInstanceName = lens _insFromInstanceName (\ s a -> s{_insFromInstanceName = a});
-
-instance FromJSON InstanceSnapshot where
-        parseJSON
-          = withObject "InstanceSnapshot"
-              (\ x ->
-                 InstanceSnapshot' <$>
-                   (x .:? "fromBlueprintId") <*> (x .:? "state") <*>
-                     (x .:? "resourceType")
-                     <*> (x .:? "arn")
-                     <*> (x .:? "createdAt")
-                     <*> (x .:? "location")
-                     <*> (x .:? "progress")
-                     <*> (x .:? "name")
-                     <*> (x .:? "fromBundleId")
-                     <*> (x .:? "sizeInGb")
-                     <*> (x .:? "supportCode")
-                     <*> (x .:? "fromInstanceArn")
-                     <*> (x .:? "fromInstanceName"))
-
-instance Hashable InstanceSnapshot
-
-instance NFData InstanceSnapshot
-
--- | Describes the virtual private server (or /instance/ ) status.
---
---
---
--- /See:/ 'instanceState' smart constructor.
-data InstanceState = InstanceState'
-    { _isName :: !(Maybe Text)
-    , _isCode :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceState' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'isName' - The state of the instance (e.g., @running@ or @pending@ ).
---
--- * 'isCode' - The status code for the instance.
-instanceState
-    :: InstanceState
-instanceState =
-    InstanceState'
-    { _isName = Nothing
-    , _isCode = Nothing
-    }
-
--- | The state of the instance (e.g., @running@ or @pending@ ).
-isName :: Lens' InstanceState (Maybe Text)
-isName = lens _isName (\ s a -> s{_isName = a});
-
--- | The status code for the instance.
-isCode :: Lens' InstanceState (Maybe Int)
-isCode = lens _isCode (\ s a -> s{_isCode = a});
-
-instance FromJSON InstanceState where
-        parseJSON
-          = withObject "InstanceState"
-              (\ x ->
-                 InstanceState' <$> (x .:? "name") <*> (x .:? "code"))
-
-instance Hashable InstanceState
-
-instance NFData InstanceState
-
--- | Describes the SSH key pair.
---
---
---
--- /See:/ 'keyPair' smart constructor.
-data KeyPair = KeyPair'
-    { _kpResourceType :: !(Maybe ResourceType)
-    , _kpArn          :: !(Maybe Text)
-    , _kpCreatedAt    :: !(Maybe POSIX)
-    , _kpLocation     :: !(Maybe ResourceLocation)
-    , _kpFingerprint  :: !(Maybe Text)
-    , _kpName         :: !(Maybe Text)
-    , _kpSupportCode  :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'KeyPair' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'kpResourceType' - The resource type (usually @KeyPair@ ).
---
--- * 'kpArn' - The Amazon Resource Name (ARN) of the key pair (e.g., @arn:aws:lightsail:us-east-1:123456789101:KeyPair/05859e3d-331d-48ba-9034-12345EXAMPLE@ ).
---
--- * 'kpCreatedAt' - The timestamp when the key pair was created (e.g., @1479816991.349@ ).
---
--- * 'kpLocation' - The region name and Availability Zone where the key pair was created.
---
--- * 'kpFingerprint' - The RSA fingerprint of the key pair.
---
--- * 'kpName' - The friendly name of the SSH key pair.
---
--- * 'kpSupportCode' - The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
-keyPair
-    :: KeyPair
-keyPair =
-    KeyPair'
-    { _kpResourceType = Nothing
-    , _kpArn = Nothing
-    , _kpCreatedAt = Nothing
-    , _kpLocation = Nothing
-    , _kpFingerprint = Nothing
-    , _kpName = Nothing
-    , _kpSupportCode = Nothing
-    }
-
--- | The resource type (usually @KeyPair@ ).
-kpResourceType :: Lens' KeyPair (Maybe ResourceType)
-kpResourceType = lens _kpResourceType (\ s a -> s{_kpResourceType = a});
-
--- | The Amazon Resource Name (ARN) of the key pair (e.g., @arn:aws:lightsail:us-east-1:123456789101:KeyPair/05859e3d-331d-48ba-9034-12345EXAMPLE@ ).
-kpArn :: Lens' KeyPair (Maybe Text)
-kpArn = lens _kpArn (\ s a -> s{_kpArn = a});
-
--- | The timestamp when the key pair was created (e.g., @1479816991.349@ ).
-kpCreatedAt :: Lens' KeyPair (Maybe UTCTime)
-kpCreatedAt = lens _kpCreatedAt (\ s a -> s{_kpCreatedAt = a}) . mapping _Time;
-
--- | The region name and Availability Zone where the key pair was created.
-kpLocation :: Lens' KeyPair (Maybe ResourceLocation)
-kpLocation = lens _kpLocation (\ s a -> s{_kpLocation = a});
-
--- | The RSA fingerprint of the key pair.
-kpFingerprint :: Lens' KeyPair (Maybe Text)
-kpFingerprint = lens _kpFingerprint (\ s a -> s{_kpFingerprint = a});
-
--- | The friendly name of the SSH key pair.
-kpName :: Lens' KeyPair (Maybe Text)
-kpName = lens _kpName (\ s a -> s{_kpName = a});
-
--- | The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
-kpSupportCode :: Lens' KeyPair (Maybe Text)
-kpSupportCode = lens _kpSupportCode (\ s a -> s{_kpSupportCode = a});
-
-instance FromJSON KeyPair where
-        parseJSON
-          = withObject "KeyPair"
-              (\ x ->
-                 KeyPair' <$>
-                   (x .:? "resourceType") <*> (x .:? "arn") <*>
-                     (x .:? "createdAt")
-                     <*> (x .:? "location")
-                     <*> (x .:? "fingerprint")
-                     <*> (x .:? "name")
-                     <*> (x .:? "supportCode"))
-
-instance Hashable KeyPair
-
-instance NFData KeyPair
-
--- | Describes the metric data point.
---
---
---
--- /See:/ 'metricDatapoint' smart constructor.
-data MetricDatapoint = MetricDatapoint'
-    { _mdSampleCount :: !(Maybe Double)
-    , _mdMaximum     :: !(Maybe Double)
-    , _mdAverage     :: !(Maybe Double)
-    , _mdMinimum     :: !(Maybe Double)
-    , _mdSum         :: !(Maybe Double)
-    , _mdTimestamp   :: !(Maybe POSIX)
-    , _mdUnit        :: !(Maybe MetricUnit)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MetricDatapoint' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mdSampleCount' - The sample count.
---
--- * 'mdMaximum' - The maximum.
---
--- * 'mdAverage' - The average.
---
--- * 'mdMinimum' - The minimum.
---
--- * 'mdSum' - The sum.
---
--- * 'mdTimestamp' - The timestamp (e.g., @1479816991.349@ ).
---
--- * 'mdUnit' - The unit.
-metricDatapoint
-    :: MetricDatapoint
-metricDatapoint =
-    MetricDatapoint'
-    { _mdSampleCount = Nothing
-    , _mdMaximum = Nothing
-    , _mdAverage = Nothing
-    , _mdMinimum = Nothing
-    , _mdSum = Nothing
-    , _mdTimestamp = Nothing
-    , _mdUnit = Nothing
-    }
-
--- | The sample count.
-mdSampleCount :: Lens' MetricDatapoint (Maybe Double)
-mdSampleCount = lens _mdSampleCount (\ s a -> s{_mdSampleCount = a});
-
--- | The maximum.
-mdMaximum :: Lens' MetricDatapoint (Maybe Double)
-mdMaximum = lens _mdMaximum (\ s a -> s{_mdMaximum = a});
-
--- | The average.
-mdAverage :: Lens' MetricDatapoint (Maybe Double)
-mdAverage = lens _mdAverage (\ s a -> s{_mdAverage = a});
-
--- | The minimum.
-mdMinimum :: Lens' MetricDatapoint (Maybe Double)
-mdMinimum = lens _mdMinimum (\ s a -> s{_mdMinimum = a});
-
--- | The sum.
-mdSum :: Lens' MetricDatapoint (Maybe Double)
-mdSum = lens _mdSum (\ s a -> s{_mdSum = a});
-
--- | The timestamp (e.g., @1479816991.349@ ).
-mdTimestamp :: Lens' MetricDatapoint (Maybe UTCTime)
-mdTimestamp = lens _mdTimestamp (\ s a -> s{_mdTimestamp = a}) . mapping _Time;
-
--- | The unit.
-mdUnit :: Lens' MetricDatapoint (Maybe MetricUnit)
-mdUnit = lens _mdUnit (\ s a -> s{_mdUnit = a});
-
-instance FromJSON MetricDatapoint where
-        parseJSON
-          = withObject "MetricDatapoint"
-              (\ x ->
-                 MetricDatapoint' <$>
-                   (x .:? "sampleCount") <*> (x .:? "maximum") <*>
-                     (x .:? "average")
-                     <*> (x .:? "minimum")
-                     <*> (x .:? "sum")
-                     <*> (x .:? "timestamp")
-                     <*> (x .:? "unit"))
-
-instance Hashable MetricDatapoint
-
-instance NFData MetricDatapoint
-
--- | Describes the monthly data transfer in and out of your virtual private server (or /instance/ ).
---
---
---
--- /See:/ 'monthlyTransfer' smart constructor.
-newtype MonthlyTransfer = MonthlyTransfer'
-    { _mtGbPerMonthAllocated :: Maybe Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MonthlyTransfer' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mtGbPerMonthAllocated' - The amount allocated per month (in GB).
-monthlyTransfer
-    :: MonthlyTransfer
-monthlyTransfer =
-    MonthlyTransfer'
-    { _mtGbPerMonthAllocated = Nothing
-    }
-
--- | The amount allocated per month (in GB).
-mtGbPerMonthAllocated :: Lens' MonthlyTransfer (Maybe Int)
-mtGbPerMonthAllocated = lens _mtGbPerMonthAllocated (\ s a -> s{_mtGbPerMonthAllocated = a});
-
-instance FromJSON MonthlyTransfer where
-        parseJSON
-          = withObject "MonthlyTransfer"
-              (\ x ->
-                 MonthlyTransfer' <$> (x .:? "gbPerMonthAllocated"))
-
-instance Hashable MonthlyTransfer
-
-instance NFData MonthlyTransfer
-
--- | Describes the API operation.
---
---
---
--- /See:/ 'operation' smart constructor.
-data Operation = Operation'
-    { _oStatus           :: !(Maybe OperationStatus)
-    , _oOperationDetails :: !(Maybe Text)
-    , _oResourceType     :: !(Maybe ResourceType)
-    , _oCreatedAt        :: !(Maybe POSIX)
-    , _oResourceName     :: !(Maybe Text)
-    , _oLocation         :: !(Maybe ResourceLocation)
-    , _oStatusChangedAt  :: !(Maybe POSIX)
-    , _oErrorDetails     :: !(Maybe Text)
-    , _oErrorCode        :: !(Maybe Text)
-    , _oId               :: !(Maybe Text)
-    , _oOperationType    :: !(Maybe OperationType)
-    , _oIsTerminal       :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Operation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oStatus' - The status of the operation.
---
--- * 'oOperationDetails' - Details about the operation (e.g., @Debian-1GB-Virginia-1@ ).
---
--- * 'oResourceType' - The resource type.
---
--- * 'oCreatedAt' - The timestamp when the operation was initialized (e.g., @1479816991.349@ ).
---
--- * 'oResourceName' - The resource name.
---
--- * 'oLocation' - The region and Availability Zone.
---
--- * 'oStatusChangedAt' - The timestamp when the status was changed (e.g., @1479816991.349@ ).
---
--- * 'oErrorDetails' - The error details.
---
--- * 'oErrorCode' - The error code.
---
--- * 'oId' - The ID of the operation.
---
--- * 'oOperationType' - The type of operation.
---
--- * 'oIsTerminal' - A Boolean value indicating whether the operation is terminal.
-operation
-    :: Operation
-operation =
-    Operation'
-    { _oStatus = Nothing
-    , _oOperationDetails = Nothing
-    , _oResourceType = Nothing
-    , _oCreatedAt = Nothing
-    , _oResourceName = Nothing
-    , _oLocation = Nothing
-    , _oStatusChangedAt = Nothing
-    , _oErrorDetails = Nothing
-    , _oErrorCode = Nothing
-    , _oId = Nothing
-    , _oOperationType = Nothing
-    , _oIsTerminal = Nothing
-    }
-
--- | The status of the operation.
-oStatus :: Lens' Operation (Maybe OperationStatus)
-oStatus = lens _oStatus (\ s a -> s{_oStatus = a});
-
--- | Details about the operation (e.g., @Debian-1GB-Virginia-1@ ).
-oOperationDetails :: Lens' Operation (Maybe Text)
-oOperationDetails = lens _oOperationDetails (\ s a -> s{_oOperationDetails = a});
-
--- | The resource type.
-oResourceType :: Lens' Operation (Maybe ResourceType)
-oResourceType = lens _oResourceType (\ s a -> s{_oResourceType = a});
-
--- | The timestamp when the operation was initialized (e.g., @1479816991.349@ ).
-oCreatedAt :: Lens' Operation (Maybe UTCTime)
-oCreatedAt = lens _oCreatedAt (\ s a -> s{_oCreatedAt = a}) . mapping _Time;
-
--- | The resource name.
-oResourceName :: Lens' Operation (Maybe Text)
-oResourceName = lens _oResourceName (\ s a -> s{_oResourceName = a});
-
--- | The region and Availability Zone.
-oLocation :: Lens' Operation (Maybe ResourceLocation)
-oLocation = lens _oLocation (\ s a -> s{_oLocation = a});
-
--- | The timestamp when the status was changed (e.g., @1479816991.349@ ).
-oStatusChangedAt :: Lens' Operation (Maybe UTCTime)
-oStatusChangedAt = lens _oStatusChangedAt (\ s a -> s{_oStatusChangedAt = a}) . mapping _Time;
-
--- | The error details.
-oErrorDetails :: Lens' Operation (Maybe Text)
-oErrorDetails = lens _oErrorDetails (\ s a -> s{_oErrorDetails = a});
-
--- | The error code.
-oErrorCode :: Lens' Operation (Maybe Text)
-oErrorCode = lens _oErrorCode (\ s a -> s{_oErrorCode = a});
-
--- | The ID of the operation.
-oId :: Lens' Operation (Maybe Text)
-oId = lens _oId (\ s a -> s{_oId = a});
-
--- | The type of operation.
-oOperationType :: Lens' Operation (Maybe OperationType)
-oOperationType = lens _oOperationType (\ s a -> s{_oOperationType = a});
-
--- | A Boolean value indicating whether the operation is terminal.
-oIsTerminal :: Lens' Operation (Maybe Bool)
-oIsTerminal = lens _oIsTerminal (\ s a -> s{_oIsTerminal = a});
-
-instance FromJSON Operation where
-        parseJSON
-          = withObject "Operation"
-              (\ x ->
-                 Operation' <$>
-                   (x .:? "status") <*> (x .:? "operationDetails") <*>
-                     (x .:? "resourceType")
-                     <*> (x .:? "createdAt")
-                     <*> (x .:? "resourceName")
-                     <*> (x .:? "location")
-                     <*> (x .:? "statusChangedAt")
-                     <*> (x .:? "errorDetails")
-                     <*> (x .:? "errorCode")
-                     <*> (x .:? "id")
-                     <*> (x .:? "operationType")
-                     <*> (x .:? "isTerminal"))
-
-instance Hashable Operation
-
-instance NFData Operation
-
--- | Describes information about the ports on your virtual private server (or /instance/ ).
---
---
---
--- /See:/ 'portInfo' smart constructor.
-data PortInfo = PortInfo'
-    { _piFromPort :: !(Maybe Nat)
-    , _piProtocol :: !(Maybe NetworkProtocol)
-    , _piToPort   :: !(Maybe Nat)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PortInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'piFromPort' - The first port in the range.
---
--- * 'piProtocol' - The protocol.
---
--- * 'piToPort' - The last port in the range.
-portInfo
-    :: PortInfo
-portInfo =
-    PortInfo'
-    { _piFromPort = Nothing
-    , _piProtocol = Nothing
-    , _piToPort = Nothing
-    }
-
--- | The first port in the range.
-piFromPort :: Lens' PortInfo (Maybe Natural)
-piFromPort = lens _piFromPort (\ s a -> s{_piFromPort = a}) . mapping _Nat;
-
--- | The protocol.
-piProtocol :: Lens' PortInfo (Maybe NetworkProtocol)
-piProtocol = lens _piProtocol (\ s a -> s{_piProtocol = a});
-
--- | The last port in the range.
-piToPort :: Lens' PortInfo (Maybe Natural)
-piToPort = lens _piToPort (\ s a -> s{_piToPort = a}) . mapping _Nat;
-
-instance Hashable PortInfo
-
-instance NFData PortInfo
-
-instance ToJSON PortInfo where
-        toJSON PortInfo'{..}
-          = object
-              (catMaybes
-                 [("fromPort" .=) <$> _piFromPort,
-                  ("protocol" .=) <$> _piProtocol,
-                  ("toPort" .=) <$> _piToPort])
-
--- | Describes the AWS Region.
---
---
---
--- /See:/ 'regionInfo' smart constructor.
-data RegionInfo = RegionInfo'
-    { _riAvailabilityZones :: !(Maybe [AvailabilityZone])
-    , _riName              :: !(Maybe RegionName)
-    , _riDisplayName       :: !(Maybe Text)
-    , _riContinentCode     :: !(Maybe Text)
-    , _riDescription       :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RegionInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'riAvailabilityZones' - The Availability Zones.
---
--- * 'riName' - The region name (e.g., @us-east-1@ ).
---
--- * 'riDisplayName' - The display name (e.g., @Virginia@ ).
---
--- * 'riContinentCode' - The continent code (e.g., @NA@ , meaning North America).
---
--- * 'riDescription' - The description of the AWS Region (e.g., @This region is recommended to serve users in the eastern United States and eastern Canada@ ).
-regionInfo
-    :: RegionInfo
-regionInfo =
-    RegionInfo'
-    { _riAvailabilityZones = Nothing
-    , _riName = Nothing
-    , _riDisplayName = Nothing
-    , _riContinentCode = Nothing
-    , _riDescription = Nothing
-    }
-
--- | The Availability Zones.
-riAvailabilityZones :: Lens' RegionInfo [AvailabilityZone]
-riAvailabilityZones = lens _riAvailabilityZones (\ s a -> s{_riAvailabilityZones = a}) . _Default . _Coerce;
-
--- | The region name (e.g., @us-east-1@ ).
-riName :: Lens' RegionInfo (Maybe RegionName)
-riName = lens _riName (\ s a -> s{_riName = a});
-
--- | The display name (e.g., @Virginia@ ).
-riDisplayName :: Lens' RegionInfo (Maybe Text)
-riDisplayName = lens _riDisplayName (\ s a -> s{_riDisplayName = a});
-
--- | The continent code (e.g., @NA@ , meaning North America).
-riContinentCode :: Lens' RegionInfo (Maybe Text)
-riContinentCode = lens _riContinentCode (\ s a -> s{_riContinentCode = a});
-
--- | The description of the AWS Region (e.g., @This region is recommended to serve users in the eastern United States and eastern Canada@ ).
-riDescription :: Lens' RegionInfo (Maybe Text)
-riDescription = lens _riDescription (\ s a -> s{_riDescription = a});
-
-instance FromJSON RegionInfo where
-        parseJSON
-          = withObject "RegionInfo"
-              (\ x ->
-                 RegionInfo' <$>
-                   (x .:? "availabilityZones" .!= mempty) <*>
-                     (x .:? "name")
-                     <*> (x .:? "displayName")
-                     <*> (x .:? "continentCode")
-                     <*> (x .:? "description"))
-
-instance Hashable RegionInfo
-
-instance NFData RegionInfo
-
--- | Describes the resource location.
---
---
---
--- /See:/ 'resourceLocation' smart constructor.
-data ResourceLocation = ResourceLocation'
-    { _rlRegionName       :: !(Maybe RegionName)
-    , _rlAvailabilityZone :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ResourceLocation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rlRegionName' - The AWS Region name.
---
--- * 'rlAvailabilityZone' - The Availability Zone.
-resourceLocation
-    :: ResourceLocation
-resourceLocation =
-    ResourceLocation'
-    { _rlRegionName = Nothing
-    , _rlAvailabilityZone = Nothing
-    }
-
--- | The AWS Region name.
-rlRegionName :: Lens' ResourceLocation (Maybe RegionName)
-rlRegionName = lens _rlRegionName (\ s a -> s{_rlRegionName = a});
-
--- | The Availability Zone.
-rlAvailabilityZone :: Lens' ResourceLocation (Maybe Text)
-rlAvailabilityZone = lens _rlAvailabilityZone (\ s a -> s{_rlAvailabilityZone = a});
-
-instance FromJSON ResourceLocation where
-        parseJSON
-          = withObject "ResourceLocation"
-              (\ x ->
-                 ResourceLocation' <$>
-                   (x .:? "regionName") <*> (x .:? "availabilityZone"))
-
-instance Hashable ResourceLocation
-
-instance NFData ResourceLocation
-
--- | Describes the static IP.
---
---
---
--- /See:/ 'staticIP' smart constructor.
-data StaticIP = StaticIP'
-    { _siIpAddress    :: !(Maybe Text)
-    , _siResourceType :: !(Maybe ResourceType)
-    , _siArn          :: !(Maybe Text)
-    , _siCreatedAt    :: !(Maybe POSIX)
-    , _siLocation     :: !(Maybe ResourceLocation)
-    , _siIsAttached   :: !(Maybe Bool)
-    , _siName         :: !(Maybe Text)
-    , _siSupportCode  :: !(Maybe Text)
-    , _siAttachedTo   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StaticIP' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'siIpAddress' - The static IP address.
---
--- * 'siResourceType' - The resource type (usually @StaticIp@ ).
---
--- * 'siArn' - The Amazon Resource Name (ARN) of the static IP (e.g., @arn:aws:lightsail:us-east-1:123456789101:StaticIp/9cbb4a9e-f8e3-4dfe-b57e-12345EXAMPLE@ ).
---
--- * 'siCreatedAt' - The timestamp when the static IP was created (e.g., @1479735304.222@ ).
---
--- * 'siLocation' - The region and Availability Zone where the static IP was created.
---
--- * 'siIsAttached' - A Boolean value indicating whether the static IP is attached.
---
--- * 'siName' - The name of the static IP (e.g., @StaticIP-Virginia-EXAMPLE@ ).
---
--- * 'siSupportCode' - The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
---
--- * 'siAttachedTo' - The instance where the static IP is attached (e.g., @Amazon_Linux-1GB-Virginia-1@ ).
-staticIP
-    :: StaticIP
-staticIP =
-    StaticIP'
-    { _siIpAddress = Nothing
-    , _siResourceType = Nothing
-    , _siArn = Nothing
-    , _siCreatedAt = Nothing
-    , _siLocation = Nothing
-    , _siIsAttached = Nothing
-    , _siName = Nothing
-    , _siSupportCode = Nothing
-    , _siAttachedTo = Nothing
-    }
-
--- | The static IP address.
-siIpAddress :: Lens' StaticIP (Maybe Text)
-siIpAddress = lens _siIpAddress (\ s a -> s{_siIpAddress = a});
-
--- | The resource type (usually @StaticIp@ ).
-siResourceType :: Lens' StaticIP (Maybe ResourceType)
-siResourceType = lens _siResourceType (\ s a -> s{_siResourceType = a});
-
--- | The Amazon Resource Name (ARN) of the static IP (e.g., @arn:aws:lightsail:us-east-1:123456789101:StaticIp/9cbb4a9e-f8e3-4dfe-b57e-12345EXAMPLE@ ).
-siArn :: Lens' StaticIP (Maybe Text)
-siArn = lens _siArn (\ s a -> s{_siArn = a});
-
--- | The timestamp when the static IP was created (e.g., @1479735304.222@ ).
-siCreatedAt :: Lens' StaticIP (Maybe UTCTime)
-siCreatedAt = lens _siCreatedAt (\ s a -> s{_siCreatedAt = a}) . mapping _Time;
-
--- | The region and Availability Zone where the static IP was created.
-siLocation :: Lens' StaticIP (Maybe ResourceLocation)
-siLocation = lens _siLocation (\ s a -> s{_siLocation = a});
-
--- | A Boolean value indicating whether the static IP is attached.
-siIsAttached :: Lens' StaticIP (Maybe Bool)
-siIsAttached = lens _siIsAttached (\ s a -> s{_siIsAttached = a});
-
--- | The name of the static IP (e.g., @StaticIP-Virginia-EXAMPLE@ ).
-siName :: Lens' StaticIP (Maybe Text)
-siName = lens _siName (\ s a -> s{_siName = a});
-
--- | The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
-siSupportCode :: Lens' StaticIP (Maybe Text)
-siSupportCode = lens _siSupportCode (\ s a -> s{_siSupportCode = a});
-
--- | The instance where the static IP is attached (e.g., @Amazon_Linux-1GB-Virginia-1@ ).
-siAttachedTo :: Lens' StaticIP (Maybe Text)
-siAttachedTo = lens _siAttachedTo (\ s a -> s{_siAttachedTo = a});
-
-instance FromJSON StaticIP where
-        parseJSON
-          = withObject "StaticIP"
-              (\ x ->
-                 StaticIP' <$>
-                   (x .:? "ipAddress") <*> (x .:? "resourceType") <*>
-                     (x .:? "arn")
-                     <*> (x .:? "createdAt")
-                     <*> (x .:? "location")
-                     <*> (x .:? "isAttached")
-                     <*> (x .:? "name")
-                     <*> (x .:? "supportCode")
-                     <*> (x .:? "attachedTo"))
-
-instance Hashable StaticIP
-
-instance NFData StaticIP
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.Lightsail.Types.Product where
+
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types.Sum
+import Network.AWS.Prelude
+
+-- | Describes an Availability Zone.
+--
+--
+--
+-- /See:/ 'availabilityZone' smart constructor.
+data AvailabilityZone = AvailabilityZone'
+  { _azState    :: !(Maybe Text)
+  , _azZoneName :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AvailabilityZone' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'azState' - The state of the Availability Zone.
+--
+-- * 'azZoneName' - The name of the Availability Zone. The format is @us-east-1a@ (case-sensitive).
+availabilityZone
+    :: AvailabilityZone
+availabilityZone = AvailabilityZone' {_azState = Nothing, _azZoneName = Nothing}
+
+
+-- | The state of the Availability Zone.
+azState :: Lens' AvailabilityZone (Maybe Text)
+azState = lens _azState (\ s a -> s{_azState = a});
+
+-- | The name of the Availability Zone. The format is @us-east-1a@ (case-sensitive).
+azZoneName :: Lens' AvailabilityZone (Maybe Text)
+azZoneName = lens _azZoneName (\ s a -> s{_azZoneName = a});
+
+instance FromJSON AvailabilityZone where
+        parseJSON
+          = withObject "AvailabilityZone"
+              (\ x ->
+                 AvailabilityZone' <$>
+                   (x .:? "state") <*> (x .:? "zoneName"))
+
+instance Hashable AvailabilityZone where
+
+instance NFData AvailabilityZone where
+
+-- | Describes a blueprint (a virtual private server image).
+--
+--
+--
+-- /See:/ 'blueprint' smart constructor.
+data Blueprint = Blueprint'
+  { _bVersionCode :: !(Maybe Text)
+  , _bPlatform    :: !(Maybe InstancePlatform)
+  , _bGroup       :: !(Maybe Text)
+  , _bMinPower    :: !(Maybe Int)
+  , _bProductURL  :: !(Maybe Text)
+  , _bLicenseURL  :: !(Maybe Text)
+  , _bName        :: !(Maybe Text)
+  , _bVersion     :: !(Maybe Text)
+  , _bBlueprintId :: !(Maybe Text)
+  , _bType        :: !(Maybe BlueprintType)
+  , _bIsActive    :: !(Maybe Bool)
+  , _bDescription :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Blueprint' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bVersionCode' - The version code.
+--
+-- * 'bPlatform' - The operating system platform (either Linux/Unix-based or Windows Server-based) of the blueprint.
+--
+-- * 'bGroup' - The group name of the blueprint (e.g., @amazon-linux@ ).
+--
+-- * 'bMinPower' - The minimum bundle power required to run this blueprint. For example, you need a bundle with a power value of 500 or more to create an instance that uses a blueprint with a minimum power value of 500. @0@ indicates that the blueprint runs on all instance sizes.
+--
+-- * 'bProductURL' - The product URL to learn more about the image or blueprint.
+--
+-- * 'bLicenseURL' - The end-user license agreement URL for the image or blueprint.
+--
+-- * 'bName' - The friendly name of the blueprint (e.g., @Amazon Linux@ ).
+--
+-- * 'bVersion' - The version number of the operating system, application, or stack (e.g., @2016.03.0@ ).
+--
+-- * 'bBlueprintId' - The ID for the virtual private server image (e.g., @app_wordpress_4_4@ or @app_lamp_7_0@ ).
+--
+-- * 'bType' - The type of the blueprint (e.g., @os@ or @app@ ).
+--
+-- * 'bIsActive' - A Boolean value indicating whether the blueprint is active. When you update your blueprints, you will inactivate old blueprints and keep the most recent versions active.
+--
+-- * 'bDescription' - The description of the blueprint.
+blueprint
+    :: Blueprint
+blueprint =
+  Blueprint'
+  { _bVersionCode = Nothing
+  , _bPlatform = Nothing
+  , _bGroup = Nothing
+  , _bMinPower = Nothing
+  , _bProductURL = Nothing
+  , _bLicenseURL = Nothing
+  , _bName = Nothing
+  , _bVersion = Nothing
+  , _bBlueprintId = Nothing
+  , _bType = Nothing
+  , _bIsActive = Nothing
+  , _bDescription = Nothing
+  }
+
+
+-- | The version code.
+bVersionCode :: Lens' Blueprint (Maybe Text)
+bVersionCode = lens _bVersionCode (\ s a -> s{_bVersionCode = a});
+
+-- | The operating system platform (either Linux/Unix-based or Windows Server-based) of the blueprint.
+bPlatform :: Lens' Blueprint (Maybe InstancePlatform)
+bPlatform = lens _bPlatform (\ s a -> s{_bPlatform = a});
+
+-- | The group name of the blueprint (e.g., @amazon-linux@ ).
+bGroup :: Lens' Blueprint (Maybe Text)
+bGroup = lens _bGroup (\ s a -> s{_bGroup = a});
+
+-- | The minimum bundle power required to run this blueprint. For example, you need a bundle with a power value of 500 or more to create an instance that uses a blueprint with a minimum power value of 500. @0@ indicates that the blueprint runs on all instance sizes.
+bMinPower :: Lens' Blueprint (Maybe Int)
+bMinPower = lens _bMinPower (\ s a -> s{_bMinPower = a});
+
+-- | The product URL to learn more about the image or blueprint.
+bProductURL :: Lens' Blueprint (Maybe Text)
+bProductURL = lens _bProductURL (\ s a -> s{_bProductURL = a});
+
+-- | The end-user license agreement URL for the image or blueprint.
+bLicenseURL :: Lens' Blueprint (Maybe Text)
+bLicenseURL = lens _bLicenseURL (\ s a -> s{_bLicenseURL = a});
+
+-- | The friendly name of the blueprint (e.g., @Amazon Linux@ ).
+bName :: Lens' Blueprint (Maybe Text)
+bName = lens _bName (\ s a -> s{_bName = a});
+
+-- | The version number of the operating system, application, or stack (e.g., @2016.03.0@ ).
+bVersion :: Lens' Blueprint (Maybe Text)
+bVersion = lens _bVersion (\ s a -> s{_bVersion = a});
+
+-- | The ID for the virtual private server image (e.g., @app_wordpress_4_4@ or @app_lamp_7_0@ ).
+bBlueprintId :: Lens' Blueprint (Maybe Text)
+bBlueprintId = lens _bBlueprintId (\ s a -> s{_bBlueprintId = a});
+
+-- | The type of the blueprint (e.g., @os@ or @app@ ).
+bType :: Lens' Blueprint (Maybe BlueprintType)
+bType = lens _bType (\ s a -> s{_bType = a});
+
+-- | A Boolean value indicating whether the blueprint is active. When you update your blueprints, you will inactivate old blueprints and keep the most recent versions active.
+bIsActive :: Lens' Blueprint (Maybe Bool)
+bIsActive = lens _bIsActive (\ s a -> s{_bIsActive = a});
+
+-- | The description of the blueprint.
+bDescription :: Lens' Blueprint (Maybe Text)
+bDescription = lens _bDescription (\ s a -> s{_bDescription = a});
+
+instance FromJSON Blueprint where
+        parseJSON
+          = withObject "Blueprint"
+              (\ x ->
+                 Blueprint' <$>
+                   (x .:? "versionCode") <*> (x .:? "platform") <*>
+                     (x .:? "group")
+                     <*> (x .:? "minPower")
+                     <*> (x .:? "productUrl")
+                     <*> (x .:? "licenseUrl")
+                     <*> (x .:? "name")
+                     <*> (x .:? "version")
+                     <*> (x .:? "blueprintId")
+                     <*> (x .:? "type")
+                     <*> (x .:? "isActive")
+                     <*> (x .:? "description"))
+
+instance Hashable Blueprint where
+
+instance NFData Blueprint where
+
+-- | Describes a bundle, which is a set of specs describing your virtual private server (or /instance/ ).
+--
+--
+--
+-- /See:/ 'bundle' smart constructor.
+data Bundle = Bundle'
+  { _bunCpuCount             :: !(Maybe Int)
+  , _bunTransferPerMonthInGb :: !(Maybe Int)
+  , _bunBundleId             :: !(Maybe Text)
+  , _bunInstanceType         :: !(Maybe Text)
+  , _bunName                 :: !(Maybe Text)
+  , _bunPower                :: !(Maybe Int)
+  , _bunDiskSizeInGb         :: !(Maybe Int)
+  , _bunSupportedPlatforms   :: !(Maybe [InstancePlatform])
+  , _bunPrice                :: !(Maybe Double)
+  , _bunIsActive             :: !(Maybe Bool)
+  , _bunRamSizeInGb          :: !(Maybe Double)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Bundle' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bunCpuCount' - The number of vCPUs included in the bundle (e.g., @2@ ).
+--
+-- * 'bunTransferPerMonthInGb' - The data transfer rate per month in GB (e.g., @2000@ ).
+--
+-- * 'bunBundleId' - The bundle ID (e.g., @micro_1_0@ ).
+--
+-- * 'bunInstanceType' - The Amazon EC2 instance type (e.g., @t2.micro@ ).
+--
+-- * 'bunName' - A friendly name for the bundle (e.g., @Micro@ ).
+--
+-- * 'bunPower' - A numeric value that represents the power of the bundle (e.g., @500@ ). You can use the bundle's power value in conjunction with a blueprint's minimum power value to determine whether the blueprint will run on the bundle. For example, you need a bundle with a power value of 500 or more to create an instance that uses a blueprint with a minimum power value of 500.
+--
+-- * 'bunDiskSizeInGb' - The size of the SSD (e.g., @30@ ).
+--
+-- * 'bunSupportedPlatforms' - The operating system platform (Linux/Unix-based or Windows Server-based) that the bundle supports. You can only launch a @WINDOWS@ bundle on a blueprint that supports the @WINDOWS@ platform. @LINUX_UNIX@ blueprints require a @LINUX_UNIX@ bundle.
+--
+-- * 'bunPrice' - The price in US dollars (e.g., @5.0@ ).
+--
+-- * 'bunIsActive' - A Boolean value indicating whether the bundle is active.
+--
+-- * 'bunRamSizeInGb' - The amount of RAM in GB (e.g., @2.0@ ).
+bundle
+    :: Bundle
+bundle =
+  Bundle'
+  { _bunCpuCount = Nothing
+  , _bunTransferPerMonthInGb = Nothing
+  , _bunBundleId = Nothing
+  , _bunInstanceType = Nothing
+  , _bunName = Nothing
+  , _bunPower = Nothing
+  , _bunDiskSizeInGb = Nothing
+  , _bunSupportedPlatforms = Nothing
+  , _bunPrice = Nothing
+  , _bunIsActive = Nothing
+  , _bunRamSizeInGb = Nothing
+  }
+
+
+-- | The number of vCPUs included in the bundle (e.g., @2@ ).
+bunCpuCount :: Lens' Bundle (Maybe Int)
+bunCpuCount = lens _bunCpuCount (\ s a -> s{_bunCpuCount = a});
+
+-- | The data transfer rate per month in GB (e.g., @2000@ ).
+bunTransferPerMonthInGb :: Lens' Bundle (Maybe Int)
+bunTransferPerMonthInGb = lens _bunTransferPerMonthInGb (\ s a -> s{_bunTransferPerMonthInGb = a});
+
+-- | The bundle ID (e.g., @micro_1_0@ ).
+bunBundleId :: Lens' Bundle (Maybe Text)
+bunBundleId = lens _bunBundleId (\ s a -> s{_bunBundleId = a});
+
+-- | The Amazon EC2 instance type (e.g., @t2.micro@ ).
+bunInstanceType :: Lens' Bundle (Maybe Text)
+bunInstanceType = lens _bunInstanceType (\ s a -> s{_bunInstanceType = a});
+
+-- | A friendly name for the bundle (e.g., @Micro@ ).
+bunName :: Lens' Bundle (Maybe Text)
+bunName = lens _bunName (\ s a -> s{_bunName = a});
+
+-- | A numeric value that represents the power of the bundle (e.g., @500@ ). You can use the bundle's power value in conjunction with a blueprint's minimum power value to determine whether the blueprint will run on the bundle. For example, you need a bundle with a power value of 500 or more to create an instance that uses a blueprint with a minimum power value of 500.
+bunPower :: Lens' Bundle (Maybe Int)
+bunPower = lens _bunPower (\ s a -> s{_bunPower = a});
+
+-- | The size of the SSD (e.g., @30@ ).
+bunDiskSizeInGb :: Lens' Bundle (Maybe Int)
+bunDiskSizeInGb = lens _bunDiskSizeInGb (\ s a -> s{_bunDiskSizeInGb = a});
+
+-- | The operating system platform (Linux/Unix-based or Windows Server-based) that the bundle supports. You can only launch a @WINDOWS@ bundle on a blueprint that supports the @WINDOWS@ platform. @LINUX_UNIX@ blueprints require a @LINUX_UNIX@ bundle.
+bunSupportedPlatforms :: Lens' Bundle [InstancePlatform]
+bunSupportedPlatforms = lens _bunSupportedPlatforms (\ s a -> s{_bunSupportedPlatforms = a}) . _Default . _Coerce;
+
+-- | The price in US dollars (e.g., @5.0@ ).
+bunPrice :: Lens' Bundle (Maybe Double)
+bunPrice = lens _bunPrice (\ s a -> s{_bunPrice = a});
+
+-- | A Boolean value indicating whether the bundle is active.
+bunIsActive :: Lens' Bundle (Maybe Bool)
+bunIsActive = lens _bunIsActive (\ s a -> s{_bunIsActive = a});
+
+-- | The amount of RAM in GB (e.g., @2.0@ ).
+bunRamSizeInGb :: Lens' Bundle (Maybe Double)
+bunRamSizeInGb = lens _bunRamSizeInGb (\ s a -> s{_bunRamSizeInGb = a});
+
+instance FromJSON Bundle where
+        parseJSON
+          = withObject "Bundle"
+              (\ x ->
+                 Bundle' <$>
+                   (x .:? "cpuCount") <*> (x .:? "transferPerMonthInGb")
+                     <*> (x .:? "bundleId")
+                     <*> (x .:? "instanceType")
+                     <*> (x .:? "name")
+                     <*> (x .:? "power")
+                     <*> (x .:? "diskSizeInGb")
+                     <*> (x .:? "supportedPlatforms" .!= mempty)
+                     <*> (x .:? "price")
+                     <*> (x .:? "isActive")
+                     <*> (x .:? "ramSizeInGb"))
+
+instance Hashable Bundle where
+
+instance NFData Bundle where
+
+-- | Describes the hard disk (an SSD).
+--
+--
+--
+-- /See:/ 'disk' smart constructor.
+data Disk = Disk'
+  { _dResourceType    :: !(Maybe ResourceType)
+  , _dArn             :: !(Maybe Text)
+  , _dPath            :: !(Maybe Text)
+  , _dCreatedAt       :: !(Maybe POSIX)
+  , _dLocation        :: !(Maybe ResourceLocation)
+  , _dIops            :: !(Maybe Int)
+  , _dIsAttached      :: !(Maybe Bool)
+  , _dAttachmentState :: !(Maybe Text)
+  , _dName            :: !(Maybe Text)
+  , _dSizeInGb        :: !(Maybe Int)
+  , _dSupportCode     :: !(Maybe Text)
+  , _dIsSystemDisk    :: !(Maybe Bool)
+  , _dAttachedTo      :: !(Maybe Text)
+  , _dGbInUse         :: !(Maybe Int)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Disk' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dResourceType' - The resource type of the disk.
+--
+-- * 'dArn' - The Amazon Resource Name (ARN) of the disk.
+--
+-- * 'dPath' - The disk path.
+--
+-- * 'dCreatedAt' - The date when the disk was created.
+--
+-- * 'dLocation' - The region and Availability Zone where the disk is located.
+--
+-- * 'dIops' - The input/output operations per second (IOPS) of the disk.
+--
+-- * 'dIsAttached' - A Boolean value indicating whether the disk is attached.
+--
+-- * 'dAttachmentState' - The attachment state of the disk.
+--
+-- * 'dName' - The name of the disk.
+--
+-- * 'dSizeInGb' - The size of the disk in GB.
+--
+-- * 'dSupportCode' - The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
+--
+-- * 'dIsSystemDisk' - A Boolean value indicating whether this disk is a system disk (has an operating system loaded on it).
+--
+-- * 'dAttachedTo' - The resources to which the disk is attached.
+--
+-- * 'dGbInUse' - The number of GB in use by the disk.
+disk
+    :: Disk
+disk =
+  Disk'
+  { _dResourceType = Nothing
+  , _dArn = Nothing
+  , _dPath = Nothing
+  , _dCreatedAt = Nothing
+  , _dLocation = Nothing
+  , _dIops = Nothing
+  , _dIsAttached = Nothing
+  , _dAttachmentState = Nothing
+  , _dName = Nothing
+  , _dSizeInGb = Nothing
+  , _dSupportCode = Nothing
+  , _dIsSystemDisk = Nothing
+  , _dAttachedTo = Nothing
+  , _dGbInUse = Nothing
+  }
+
+
+-- | The resource type of the disk.
+dResourceType :: Lens' Disk (Maybe ResourceType)
+dResourceType = lens _dResourceType (\ s a -> s{_dResourceType = a});
+
+-- | The Amazon Resource Name (ARN) of the disk.
+dArn :: Lens' Disk (Maybe Text)
+dArn = lens _dArn (\ s a -> s{_dArn = a});
+
+-- | The disk path.
+dPath :: Lens' Disk (Maybe Text)
+dPath = lens _dPath (\ s a -> s{_dPath = a});
+
+-- | The date when the disk was created.
+dCreatedAt :: Lens' Disk (Maybe UTCTime)
+dCreatedAt = lens _dCreatedAt (\ s a -> s{_dCreatedAt = a}) . mapping _Time;
+
+-- | The region and Availability Zone where the disk is located.
+dLocation :: Lens' Disk (Maybe ResourceLocation)
+dLocation = lens _dLocation (\ s a -> s{_dLocation = a});
+
+-- | The input/output operations per second (IOPS) of the disk.
+dIops :: Lens' Disk (Maybe Int)
+dIops = lens _dIops (\ s a -> s{_dIops = a});
+
+-- | A Boolean value indicating whether the disk is attached.
+dIsAttached :: Lens' Disk (Maybe Bool)
+dIsAttached = lens _dIsAttached (\ s a -> s{_dIsAttached = a});
+
+-- | The attachment state of the disk.
+dAttachmentState :: Lens' Disk (Maybe Text)
+dAttachmentState = lens _dAttachmentState (\ s a -> s{_dAttachmentState = a});
+
+-- | The name of the disk.
+dName :: Lens' Disk (Maybe Text)
+dName = lens _dName (\ s a -> s{_dName = a});
+
+-- | The size of the disk in GB.
+dSizeInGb :: Lens' Disk (Maybe Int)
+dSizeInGb = lens _dSizeInGb (\ s a -> s{_dSizeInGb = a});
+
+-- | The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
+dSupportCode :: Lens' Disk (Maybe Text)
+dSupportCode = lens _dSupportCode (\ s a -> s{_dSupportCode = a});
+
+-- | A Boolean value indicating whether this disk is a system disk (has an operating system loaded on it).
+dIsSystemDisk :: Lens' Disk (Maybe Bool)
+dIsSystemDisk = lens _dIsSystemDisk (\ s a -> s{_dIsSystemDisk = a});
+
+-- | The resources to which the disk is attached.
+dAttachedTo :: Lens' Disk (Maybe Text)
+dAttachedTo = lens _dAttachedTo (\ s a -> s{_dAttachedTo = a});
+
+-- | The number of GB in use by the disk.
+dGbInUse :: Lens' Disk (Maybe Int)
+dGbInUse = lens _dGbInUse (\ s a -> s{_dGbInUse = a});
+
+instance FromJSON Disk where
+        parseJSON
+          = withObject "Disk"
+              (\ x ->
+                 Disk' <$>
+                   (x .:? "resourceType") <*> (x .:? "arn") <*>
+                     (x .:? "path")
+                     <*> (x .:? "createdAt")
+                     <*> (x .:? "location")
+                     <*> (x .:? "iops")
+                     <*> (x .:? "isAttached")
+                     <*> (x .:? "attachmentState")
+                     <*> (x .:? "name")
+                     <*> (x .:? "sizeInGb")
+                     <*> (x .:? "supportCode")
+                     <*> (x .:? "isSystemDisk")
+                     <*> (x .:? "attachedTo")
+                     <*> (x .:? "gbInUse"))
+
+instance Hashable Disk where
+
+instance NFData Disk where
+
+-- | Describes a domain where you are storing recordsets in Lightsail.
+--
+--
+--
+-- /See:/ 'domain' smart constructor.
+data Domain = Domain'
+  { _domResourceType  :: !(Maybe ResourceType)
+  , _domDomainEntries :: !(Maybe [DomainEntry])
+  , _domArn           :: !(Maybe Text)
+  , _domCreatedAt     :: !(Maybe POSIX)
+  , _domLocation      :: !(Maybe ResourceLocation)
+  , _domName          :: !(Maybe Text)
+  , _domSupportCode   :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Domain' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'domResourceType' - The resource type.
+--
+-- * 'domDomainEntries' - An array of key-value pairs containing information about the domain entries.
+--
+-- * 'domArn' - The Amazon Resource Name (ARN) of the domain recordset (e.g., @arn:aws:lightsail:global:123456789101:Domain/824cede0-abc7-4f84-8dbc-12345EXAMPLE@ ).
+--
+-- * 'domCreatedAt' - The date when the domain recordset was created.
+--
+-- * 'domLocation' - The AWS Region and Availability Zones where the domain recordset was created.
+--
+-- * 'domName' - The name of the domain.
+--
+-- * 'domSupportCode' - The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
+domain
+    :: Domain
+domain =
+  Domain'
+  { _domResourceType = Nothing
+  , _domDomainEntries = Nothing
+  , _domArn = Nothing
+  , _domCreatedAt = Nothing
+  , _domLocation = Nothing
+  , _domName = Nothing
+  , _domSupportCode = Nothing
+  }
+
+
+-- | The resource type.
+domResourceType :: Lens' Domain (Maybe ResourceType)
+domResourceType = lens _domResourceType (\ s a -> s{_domResourceType = a});
+
+-- | An array of key-value pairs containing information about the domain entries.
+domDomainEntries :: Lens' Domain [DomainEntry]
+domDomainEntries = lens _domDomainEntries (\ s a -> s{_domDomainEntries = a}) . _Default . _Coerce;
+
+-- | The Amazon Resource Name (ARN) of the domain recordset (e.g., @arn:aws:lightsail:global:123456789101:Domain/824cede0-abc7-4f84-8dbc-12345EXAMPLE@ ).
+domArn :: Lens' Domain (Maybe Text)
+domArn = lens _domArn (\ s a -> s{_domArn = a});
+
+-- | The date when the domain recordset was created.
+domCreatedAt :: Lens' Domain (Maybe UTCTime)
+domCreatedAt = lens _domCreatedAt (\ s a -> s{_domCreatedAt = a}) . mapping _Time;
+
+-- | The AWS Region and Availability Zones where the domain recordset was created.
+domLocation :: Lens' Domain (Maybe ResourceLocation)
+domLocation = lens _domLocation (\ s a -> s{_domLocation = a});
+
+-- | The name of the domain.
+domName :: Lens' Domain (Maybe Text)
+domName = lens _domName (\ s a -> s{_domName = a});
+
+-- | The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
+domSupportCode :: Lens' Domain (Maybe Text)
+domSupportCode = lens _domSupportCode (\ s a -> s{_domSupportCode = a});
+
+instance FromJSON Domain where
+        parseJSON
+          = withObject "Domain"
+              (\ x ->
+                 Domain' <$>
+                   (x .:? "resourceType") <*>
+                     (x .:? "domainEntries" .!= mempty)
+                     <*> (x .:? "arn")
+                     <*> (x .:? "createdAt")
+                     <*> (x .:? "location")
+                     <*> (x .:? "name")
+                     <*> (x .:? "supportCode"))
+
+instance Hashable Domain where
+
+instance NFData Domain where
+
+-- | Describes a domain recordset entry.
+--
+--
+--
+-- /See:/ 'domainEntry' smart constructor.
+data DomainEntry = DomainEntry'
+  { _deName    :: !(Maybe Text)
+  , _deId      :: !(Maybe Text)
+  , _deOptions :: !(Maybe (Map Text Text))
+  , _deType    :: !(Maybe Text)
+  , _deTarget  :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DomainEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'deName' - The name of the domain.
+--
+-- * 'deId' - The ID of the domain recordset entry.
+--
+-- * 'deOptions' - The options for the domain entry.
+--
+-- * 'deType' - The type of domain entry (e.g., @SOA@ or @NS@ ).
+--
+-- * 'deTarget' - The target AWS name server (e.g., @ns-111.awsdns-22.com.@ ).
+domainEntry
+    :: DomainEntry
+domainEntry =
+  DomainEntry'
+  { _deName = Nothing
+  , _deId = Nothing
+  , _deOptions = Nothing
+  , _deType = Nothing
+  , _deTarget = Nothing
+  }
+
+
+-- | The name of the domain.
+deName :: Lens' DomainEntry (Maybe Text)
+deName = lens _deName (\ s a -> s{_deName = a});
+
+-- | The ID of the domain recordset entry.
+deId :: Lens' DomainEntry (Maybe Text)
+deId = lens _deId (\ s a -> s{_deId = a});
+
+-- | The options for the domain entry.
+deOptions :: Lens' DomainEntry (HashMap Text Text)
+deOptions = lens _deOptions (\ s a -> s{_deOptions = a}) . _Default . _Map;
+
+-- | The type of domain entry (e.g., @SOA@ or @NS@ ).
+deType :: Lens' DomainEntry (Maybe Text)
+deType = lens _deType (\ s a -> s{_deType = a});
+
+-- | The target AWS name server (e.g., @ns-111.awsdns-22.com.@ ).
+deTarget :: Lens' DomainEntry (Maybe Text)
+deTarget = lens _deTarget (\ s a -> s{_deTarget = a});
+
+instance FromJSON DomainEntry where
+        parseJSON
+          = withObject "DomainEntry"
+              (\ x ->
+                 DomainEntry' <$>
+                   (x .:? "name") <*> (x .:? "id") <*>
+                     (x .:? "options" .!= mempty)
+                     <*> (x .:? "type")
+                     <*> (x .:? "target"))
+
+instance Hashable DomainEntry where
+
+instance NFData DomainEntry where
+
+instance ToJSON DomainEntry where
+        toJSON DomainEntry'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _deName, ("id" .=) <$> _deId,
+                  ("options" .=) <$> _deOptions,
+                  ("type" .=) <$> _deType,
+                  ("target" .=) <$> _deTarget])
+
+-- | Describes an instance (a virtual private server).
+--
+--
+--
+-- /See:/ 'instance'' smart constructor.
+data Instance = Instance'
+  { _iState            :: !(Maybe InstanceState)
+  , _iIpv6Address      :: !(Maybe Text)
+  , _iResourceType     :: !(Maybe ResourceType)
+  , _iArn              :: !(Maybe Text)
+  , _iCreatedAt        :: !(Maybe POSIX)
+  , _iLocation         :: !(Maybe ResourceLocation)
+  , _iSshKeyName       :: !(Maybe Text)
+  , _iUsername         :: !(Maybe Text)
+  , _iNetworking       :: !(Maybe InstanceNetworking)
+  , _iBundleId         :: !(Maybe Text)
+  , _iName             :: !(Maybe Text)
+  , _iSupportCode      :: !(Maybe Text)
+  , _iBlueprintId      :: !(Maybe Text)
+  , _iPrivateIPAddress :: !(Maybe Text)
+  , _iBlueprintName    :: !(Maybe Text)
+  , _iIsStaticIP       :: !(Maybe Bool)
+  , _iPublicIPAddress  :: !(Maybe Text)
+  , _iHardware         :: !(Maybe InstanceHardware)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Instance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iState' - The status code and the state (e.g., @running@ ) for the instance.
+--
+-- * 'iIpv6Address' - The IPv6 address of the instance.
+--
+-- * 'iResourceType' - The type of resource (usually @Instance@ ).
+--
+-- * 'iArn' - The Amazon Resource Name (ARN) of the instance (e.g., @arn:aws:lightsail:us-east-1:123456789101:Instance/244ad76f-8aad-4741-809f-12345EXAMPLE@ ).
+--
+-- * 'iCreatedAt' - The timestamp when the instance was created (e.g., @1479734909.17@ ).
+--
+-- * 'iLocation' - The region name and availability zone where the instance is located.
+--
+-- * 'iSshKeyName' - The name of the SSH key being used to connect to the instance (e.g., @LightsailDefaultKeyPair@ ).
+--
+-- * 'iUsername' - The user name for connecting to the instance (e.g., @ec2-user@ ).
+--
+-- * 'iNetworking' - Information about the public ports and monthly data transfer rates for the instance.
+--
+-- * 'iBundleId' - The bundle for the instance (e.g., @micro_1_0@ ).
+--
+-- * 'iName' - The name the user gave the instance (e.g., @Amazon_Linux-1GB-Virginia-1@ ).
+--
+-- * 'iSupportCode' - The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
+--
+-- * 'iBlueprintId' - The blueprint ID (e.g., @os_amlinux_2016_03@ ).
+--
+-- * 'iPrivateIPAddress' - The private IP address of the instance.
+--
+-- * 'iBlueprintName' - The friendly name of the blueprint (e.g., @Amazon Linux@ ).
+--
+-- * 'iIsStaticIP' - A Boolean value indicating whether this instance has a static IP assigned to it.
+--
+-- * 'iPublicIPAddress' - The public IP address of the instance.
+--
+-- * 'iHardware' - The size of the vCPU and the amount of RAM for the instance.
+instance'
+    :: Instance
+instance' =
+  Instance'
+  { _iState = Nothing
+  , _iIpv6Address = Nothing
+  , _iResourceType = Nothing
+  , _iArn = Nothing
+  , _iCreatedAt = Nothing
+  , _iLocation = Nothing
+  , _iSshKeyName = Nothing
+  , _iUsername = Nothing
+  , _iNetworking = Nothing
+  , _iBundleId = Nothing
+  , _iName = Nothing
+  , _iSupportCode = Nothing
+  , _iBlueprintId = Nothing
+  , _iPrivateIPAddress = Nothing
+  , _iBlueprintName = Nothing
+  , _iIsStaticIP = Nothing
+  , _iPublicIPAddress = Nothing
+  , _iHardware = Nothing
+  }
+
+
+-- | The status code and the state (e.g., @running@ ) for the instance.
+iState :: Lens' Instance (Maybe InstanceState)
+iState = lens _iState (\ s a -> s{_iState = a});
+
+-- | The IPv6 address of the instance.
+iIpv6Address :: Lens' Instance (Maybe Text)
+iIpv6Address = lens _iIpv6Address (\ s a -> s{_iIpv6Address = a});
+
+-- | The type of resource (usually @Instance@ ).
+iResourceType :: Lens' Instance (Maybe ResourceType)
+iResourceType = lens _iResourceType (\ s a -> s{_iResourceType = a});
+
+-- | The Amazon Resource Name (ARN) of the instance (e.g., @arn:aws:lightsail:us-east-1:123456789101:Instance/244ad76f-8aad-4741-809f-12345EXAMPLE@ ).
+iArn :: Lens' Instance (Maybe Text)
+iArn = lens _iArn (\ s a -> s{_iArn = a});
+
+-- | The timestamp when the instance was created (e.g., @1479734909.17@ ).
+iCreatedAt :: Lens' Instance (Maybe UTCTime)
+iCreatedAt = lens _iCreatedAt (\ s a -> s{_iCreatedAt = a}) . mapping _Time;
+
+-- | The region name and availability zone where the instance is located.
+iLocation :: Lens' Instance (Maybe ResourceLocation)
+iLocation = lens _iLocation (\ s a -> s{_iLocation = a});
+
+-- | The name of the SSH key being used to connect to the instance (e.g., @LightsailDefaultKeyPair@ ).
+iSshKeyName :: Lens' Instance (Maybe Text)
+iSshKeyName = lens _iSshKeyName (\ s a -> s{_iSshKeyName = a});
+
+-- | The user name for connecting to the instance (e.g., @ec2-user@ ).
+iUsername :: Lens' Instance (Maybe Text)
+iUsername = lens _iUsername (\ s a -> s{_iUsername = a});
+
+-- | Information about the public ports and monthly data transfer rates for the instance.
+iNetworking :: Lens' Instance (Maybe InstanceNetworking)
+iNetworking = lens _iNetworking (\ s a -> s{_iNetworking = a});
+
+-- | The bundle for the instance (e.g., @micro_1_0@ ).
+iBundleId :: Lens' Instance (Maybe Text)
+iBundleId = lens _iBundleId (\ s a -> s{_iBundleId = a});
+
+-- | The name the user gave the instance (e.g., @Amazon_Linux-1GB-Virginia-1@ ).
+iName :: Lens' Instance (Maybe Text)
+iName = lens _iName (\ s a -> s{_iName = a});
+
+-- | The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
+iSupportCode :: Lens' Instance (Maybe Text)
+iSupportCode = lens _iSupportCode (\ s a -> s{_iSupportCode = a});
+
+-- | The blueprint ID (e.g., @os_amlinux_2016_03@ ).
+iBlueprintId :: Lens' Instance (Maybe Text)
+iBlueprintId = lens _iBlueprintId (\ s a -> s{_iBlueprintId = a});
+
+-- | The private IP address of the instance.
+iPrivateIPAddress :: Lens' Instance (Maybe Text)
+iPrivateIPAddress = lens _iPrivateIPAddress (\ s a -> s{_iPrivateIPAddress = a});
+
+-- | The friendly name of the blueprint (e.g., @Amazon Linux@ ).
+iBlueprintName :: Lens' Instance (Maybe Text)
+iBlueprintName = lens _iBlueprintName (\ s a -> s{_iBlueprintName = a});
+
+-- | A Boolean value indicating whether this instance has a static IP assigned to it.
+iIsStaticIP :: Lens' Instance (Maybe Bool)
+iIsStaticIP = lens _iIsStaticIP (\ s a -> s{_iIsStaticIP = a});
+
+-- | The public IP address of the instance.
+iPublicIPAddress :: Lens' Instance (Maybe Text)
+iPublicIPAddress = lens _iPublicIPAddress (\ s a -> s{_iPublicIPAddress = a});
+
+-- | The size of the vCPU and the amount of RAM for the instance.
+iHardware :: Lens' Instance (Maybe InstanceHardware)
+iHardware = lens _iHardware (\ s a -> s{_iHardware = a});
+
+instance FromJSON Instance where
+        parseJSON
+          = withObject "Instance"
+              (\ x ->
+                 Instance' <$>
+                   (x .:? "state") <*> (x .:? "ipv6Address") <*>
+                     (x .:? "resourceType")
+                     <*> (x .:? "arn")
+                     <*> (x .:? "createdAt")
+                     <*> (x .:? "location")
+                     <*> (x .:? "sshKeyName")
+                     <*> (x .:? "username")
+                     <*> (x .:? "networking")
+                     <*> (x .:? "bundleId")
+                     <*> (x .:? "name")
+                     <*> (x .:? "supportCode")
+                     <*> (x .:? "blueprintId")
+                     <*> (x .:? "privateIpAddress")
+                     <*> (x .:? "blueprintName")
+                     <*> (x .:? "isStaticIp")
+                     <*> (x .:? "publicIpAddress")
+                     <*> (x .:? "hardware"))
+
+instance Hashable Instance where
+
+instance NFData Instance where
+
+-- | The parameters for gaining temporary access to one of your Amazon Lightsail instances.
+--
+--
+--
+-- /See:/ 'instanceAccessDetails' smart constructor.
+data InstanceAccessDetails = InstanceAccessDetails'
+  { _iadCertKey      :: !(Maybe Text)
+  , _iadIpAddress    :: !(Maybe Text)
+  , _iadPrivateKey   :: !(Maybe Text)
+  , _iadExpiresAt    :: !(Maybe POSIX)
+  , _iadUsername     :: !(Maybe Text)
+  , _iadProtocol     :: !(Maybe InstanceAccessProtocol)
+  , _iadPasswordData :: !(Maybe PasswordData)
+  , _iadPassword     :: !(Maybe Text)
+  , _iadInstanceName :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InstanceAccessDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iadCertKey' - For SSH access, the public key to use when accessing your instance For OpenSSH clients (e.g., command line SSH), you should save this value to @tempkey-cert.pub@ .
+--
+-- * 'iadIpAddress' - The public IP address of the Amazon Lightsail instance.
+--
+-- * 'iadPrivateKey' - For SSH access, the temporary private key. For OpenSSH clients (e.g., command line SSH), you should save this value to @tempkey@ ).
+--
+-- * 'iadExpiresAt' - For SSH access, the date on which the temporary keys expire.
+--
+-- * 'iadUsername' - The user name to use when logging in to the Amazon Lightsail instance.
+--
+-- * 'iadProtocol' - The protocol for these Amazon Lightsail instance access details.
+--
+-- * 'iadPasswordData' - For a Windows Server-based instance, an object with the data you can use to retrieve your password. This is only needed if @password@ is empty and the instance is not new (and therefore the password is not ready yet). When you create an instance, it can take up to 15 minutes for the instance to be ready.
+--
+-- * 'iadPassword' - For RDP access, the password for your Amazon Lightsail instance. Password will be an empty string if the password for your new instance is not ready yet. When you create an instance, it can take up to 15 minutes for the instance to be ready.
+--
+-- * 'iadInstanceName' - The name of this Amazon Lightsail instance.
+instanceAccessDetails
+    :: InstanceAccessDetails
+instanceAccessDetails =
+  InstanceAccessDetails'
+  { _iadCertKey = Nothing
+  , _iadIpAddress = Nothing
+  , _iadPrivateKey = Nothing
+  , _iadExpiresAt = Nothing
+  , _iadUsername = Nothing
+  , _iadProtocol = Nothing
+  , _iadPasswordData = Nothing
+  , _iadPassword = Nothing
+  , _iadInstanceName = Nothing
+  }
+
+
+-- | For SSH access, the public key to use when accessing your instance For OpenSSH clients (e.g., command line SSH), you should save this value to @tempkey-cert.pub@ .
+iadCertKey :: Lens' InstanceAccessDetails (Maybe Text)
+iadCertKey = lens _iadCertKey (\ s a -> s{_iadCertKey = a});
+
+-- | The public IP address of the Amazon Lightsail instance.
+iadIpAddress :: Lens' InstanceAccessDetails (Maybe Text)
+iadIpAddress = lens _iadIpAddress (\ s a -> s{_iadIpAddress = a});
+
+-- | For SSH access, the temporary private key. For OpenSSH clients (e.g., command line SSH), you should save this value to @tempkey@ ).
+iadPrivateKey :: Lens' InstanceAccessDetails (Maybe Text)
+iadPrivateKey = lens _iadPrivateKey (\ s a -> s{_iadPrivateKey = a});
+
+-- | For SSH access, the date on which the temporary keys expire.
+iadExpiresAt :: Lens' InstanceAccessDetails (Maybe UTCTime)
+iadExpiresAt = lens _iadExpiresAt (\ s a -> s{_iadExpiresAt = a}) . mapping _Time;
+
+-- | The user name to use when logging in to the Amazon Lightsail instance.
+iadUsername :: Lens' InstanceAccessDetails (Maybe Text)
+iadUsername = lens _iadUsername (\ s a -> s{_iadUsername = a});
+
+-- | The protocol for these Amazon Lightsail instance access details.
+iadProtocol :: Lens' InstanceAccessDetails (Maybe InstanceAccessProtocol)
+iadProtocol = lens _iadProtocol (\ s a -> s{_iadProtocol = a});
+
+-- | For a Windows Server-based instance, an object with the data you can use to retrieve your password. This is only needed if @password@ is empty and the instance is not new (and therefore the password is not ready yet). When you create an instance, it can take up to 15 minutes for the instance to be ready.
+iadPasswordData :: Lens' InstanceAccessDetails (Maybe PasswordData)
+iadPasswordData = lens _iadPasswordData (\ s a -> s{_iadPasswordData = a});
+
+-- | For RDP access, the password for your Amazon Lightsail instance. Password will be an empty string if the password for your new instance is not ready yet. When you create an instance, it can take up to 15 minutes for the instance to be ready.
+iadPassword :: Lens' InstanceAccessDetails (Maybe Text)
+iadPassword = lens _iadPassword (\ s a -> s{_iadPassword = a});
+
+-- | The name of this Amazon Lightsail instance.
+iadInstanceName :: Lens' InstanceAccessDetails (Maybe Text)
+iadInstanceName = lens _iadInstanceName (\ s a -> s{_iadInstanceName = a});
+
+instance FromJSON InstanceAccessDetails where
+        parseJSON
+          = withObject "InstanceAccessDetails"
+              (\ x ->
+                 InstanceAccessDetails' <$>
+                   (x .:? "certKey") <*> (x .:? "ipAddress") <*>
+                     (x .:? "privateKey")
+                     <*> (x .:? "expiresAt")
+                     <*> (x .:? "username")
+                     <*> (x .:? "protocol")
+                     <*> (x .:? "passwordData")
+                     <*> (x .:? "password")
+                     <*> (x .:? "instanceName"))
+
+instance Hashable InstanceAccessDetails where
+
+instance NFData InstanceAccessDetails where
+
+-- | Describes the hardware for the instance.
+--
+--
+--
+-- /See:/ 'instanceHardware' smart constructor.
+data InstanceHardware = InstanceHardware'
+  { _ihCpuCount    :: !(Maybe Int)
+  , _ihDisks       :: !(Maybe [Disk])
+  , _ihRamSizeInGb :: !(Maybe Double)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InstanceHardware' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ihCpuCount' - The number of vCPUs the instance has.
+--
+-- * 'ihDisks' - The disks attached to the instance.
+--
+-- * 'ihRamSizeInGb' - The amount of RAM in GB on the instance (e.g., @1.0@ ).
+instanceHardware
+    :: InstanceHardware
+instanceHardware =
+  InstanceHardware'
+  {_ihCpuCount = Nothing, _ihDisks = Nothing, _ihRamSizeInGb = Nothing}
+
+
+-- | The number of vCPUs the instance has.
+ihCpuCount :: Lens' InstanceHardware (Maybe Int)
+ihCpuCount = lens _ihCpuCount (\ s a -> s{_ihCpuCount = a});
+
+-- | The disks attached to the instance.
+ihDisks :: Lens' InstanceHardware [Disk]
+ihDisks = lens _ihDisks (\ s a -> s{_ihDisks = a}) . _Default . _Coerce;
+
+-- | The amount of RAM in GB on the instance (e.g., @1.0@ ).
+ihRamSizeInGb :: Lens' InstanceHardware (Maybe Double)
+ihRamSizeInGb = lens _ihRamSizeInGb (\ s a -> s{_ihRamSizeInGb = a});
+
+instance FromJSON InstanceHardware where
+        parseJSON
+          = withObject "InstanceHardware"
+              (\ x ->
+                 InstanceHardware' <$>
+                   (x .:? "cpuCount") <*> (x .:? "disks" .!= mempty) <*>
+                     (x .:? "ramSizeInGb"))
+
+instance Hashable InstanceHardware where
+
+instance NFData InstanceHardware where
+
+-- | Describes monthly data transfer rates and port information for an instance.
+--
+--
+--
+-- /See:/ 'instanceNetworking' smart constructor.
+data InstanceNetworking = InstanceNetworking'
+  { _inMonthlyTransfer :: !(Maybe MonthlyTransfer)
+  , _inPorts           :: !(Maybe [InstancePortInfo])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InstanceNetworking' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'inMonthlyTransfer' - The amount of data in GB allocated for monthly data transfers.
+--
+-- * 'inPorts' - An array of key-value pairs containing information about the ports on the instance.
+instanceNetworking
+    :: InstanceNetworking
+instanceNetworking =
+  InstanceNetworking' {_inMonthlyTransfer = Nothing, _inPorts = Nothing}
+
+
+-- | The amount of data in GB allocated for monthly data transfers.
+inMonthlyTransfer :: Lens' InstanceNetworking (Maybe MonthlyTransfer)
+inMonthlyTransfer = lens _inMonthlyTransfer (\ s a -> s{_inMonthlyTransfer = a});
+
+-- | An array of key-value pairs containing information about the ports on the instance.
+inPorts :: Lens' InstanceNetworking [InstancePortInfo]
+inPorts = lens _inPorts (\ s a -> s{_inPorts = a}) . _Default . _Coerce;
+
+instance FromJSON InstanceNetworking where
+        parseJSON
+          = withObject "InstanceNetworking"
+              (\ x ->
+                 InstanceNetworking' <$>
+                   (x .:? "monthlyTransfer") <*>
+                     (x .:? "ports" .!= mempty))
+
+instance Hashable InstanceNetworking where
+
+instance NFData InstanceNetworking where
+
+-- | Describes information about the instance ports.
+--
+--
+--
+-- /See:/ 'instancePortInfo' smart constructor.
+data InstancePortInfo = InstancePortInfo'
+  { _ipiFromPort        :: !(Maybe Nat)
+  , _ipiCommonName      :: !(Maybe Text)
+  , _ipiProtocol        :: !(Maybe NetworkProtocol)
+  , _ipiAccessDirection :: !(Maybe AccessDirection)
+  , _ipiAccessType      :: !(Maybe PortAccessType)
+  , _ipiToPort          :: !(Maybe Nat)
+  , _ipiAccessFrom      :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InstancePortInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ipiFromPort' - The first port in the range.
+--
+-- * 'ipiCommonName' - The common name.
+--
+-- * 'ipiProtocol' - The protocol being used. Can be one of the following.     * @tcp@ - Transmission Control Protocol (TCP) provides reliable, ordered, and error-checked delivery of streamed data between applications running on hosts communicating by an IP network. If you have an application that doesn't require reliable data stream service, use UDP instead.     * @all@ - All transport layer protocol types. For more general information, see <https://en.wikipedia.org/wiki/Transport_layer Transport layer> on Wikipedia.     * @udp@ - With User Datagram Protocol (UDP), computer applications can send messages (or datagrams) to other hosts on an Internet Protocol (IP) network. Prior communications are not required to set up transmission channels or data paths. Applications that don't require reliable data stream service can use UDP, which provides a connectionless datagram service that emphasizes reduced latency over reliability. If you do require reliable data stream service, use TCP instead.
+--
+-- * 'ipiAccessDirection' - The access direction (@inbound@ or @outbound@ ).
+--
+-- * 'ipiAccessType' - The type of access (@Public@ or @Private@ ).
+--
+-- * 'ipiToPort' - The last port in the range.
+--
+-- * 'ipiAccessFrom' - The location from which access is allowed (e.g., @Anywhere (0.0.0.0/0)@ ).
+instancePortInfo
+    :: InstancePortInfo
+instancePortInfo =
+  InstancePortInfo'
+  { _ipiFromPort = Nothing
+  , _ipiCommonName = Nothing
+  , _ipiProtocol = Nothing
+  , _ipiAccessDirection = Nothing
+  , _ipiAccessType = Nothing
+  , _ipiToPort = Nothing
+  , _ipiAccessFrom = Nothing
+  }
+
+
+-- | The first port in the range.
+ipiFromPort :: Lens' InstancePortInfo (Maybe Natural)
+ipiFromPort = lens _ipiFromPort (\ s a -> s{_ipiFromPort = a}) . mapping _Nat;
+
+-- | The common name.
+ipiCommonName :: Lens' InstancePortInfo (Maybe Text)
+ipiCommonName = lens _ipiCommonName (\ s a -> s{_ipiCommonName = a});
+
+-- | The protocol being used. Can be one of the following.     * @tcp@ - Transmission Control Protocol (TCP) provides reliable, ordered, and error-checked delivery of streamed data between applications running on hosts communicating by an IP network. If you have an application that doesn't require reliable data stream service, use UDP instead.     * @all@ - All transport layer protocol types. For more general information, see <https://en.wikipedia.org/wiki/Transport_layer Transport layer> on Wikipedia.     * @udp@ - With User Datagram Protocol (UDP), computer applications can send messages (or datagrams) to other hosts on an Internet Protocol (IP) network. Prior communications are not required to set up transmission channels or data paths. Applications that don't require reliable data stream service can use UDP, which provides a connectionless datagram service that emphasizes reduced latency over reliability. If you do require reliable data stream service, use TCP instead.
+ipiProtocol :: Lens' InstancePortInfo (Maybe NetworkProtocol)
+ipiProtocol = lens _ipiProtocol (\ s a -> s{_ipiProtocol = a});
+
+-- | The access direction (@inbound@ or @outbound@ ).
+ipiAccessDirection :: Lens' InstancePortInfo (Maybe AccessDirection)
+ipiAccessDirection = lens _ipiAccessDirection (\ s a -> s{_ipiAccessDirection = a});
+
+-- | The type of access (@Public@ or @Private@ ).
+ipiAccessType :: Lens' InstancePortInfo (Maybe PortAccessType)
+ipiAccessType = lens _ipiAccessType (\ s a -> s{_ipiAccessType = a});
+
+-- | The last port in the range.
+ipiToPort :: Lens' InstancePortInfo (Maybe Natural)
+ipiToPort = lens _ipiToPort (\ s a -> s{_ipiToPort = a}) . mapping _Nat;
+
+-- | The location from which access is allowed (e.g., @Anywhere (0.0.0.0/0)@ ).
+ipiAccessFrom :: Lens' InstancePortInfo (Maybe Text)
+ipiAccessFrom = lens _ipiAccessFrom (\ s a -> s{_ipiAccessFrom = a});
+
+instance FromJSON InstancePortInfo where
+        parseJSON
+          = withObject "InstancePortInfo"
+              (\ x ->
+                 InstancePortInfo' <$>
+                   (x .:? "fromPort") <*> (x .:? "commonName") <*>
+                     (x .:? "protocol")
+                     <*> (x .:? "accessDirection")
+                     <*> (x .:? "accessType")
+                     <*> (x .:? "toPort")
+                     <*> (x .:? "accessFrom"))
+
+instance Hashable InstancePortInfo where
+
+instance NFData InstancePortInfo where
+
+-- | Describes the port state.
+--
+--
+--
+-- /See:/ 'instancePortState' smart constructor.
+data InstancePortState = InstancePortState'
+  { _ipsFromPort :: !(Maybe Nat)
+  , _ipsState    :: !(Maybe PortState)
+  , _ipsProtocol :: !(Maybe NetworkProtocol)
+  , _ipsToPort   :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InstancePortState' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ipsFromPort' - The first port in the range.
+--
+-- * 'ipsState' - Specifies whether the instance port is @open@ or @closed@ .
+--
+-- * 'ipsProtocol' - The protocol being used. Can be one of the following.     * @tcp@ - Transmission Control Protocol (TCP) provides reliable, ordered, and error-checked delivery of streamed data between applications running on hosts communicating by an IP network. If you have an application that doesn't require reliable data stream service, use UDP instead.     * @all@ - All transport layer protocol types. For more general information, see <https://en.wikipedia.org/wiki/Transport_layer Transport layer> on Wikipedia.     * @udp@ - With User Datagram Protocol (UDP), computer applications can send messages (or datagrams) to other hosts on an Internet Protocol (IP) network. Prior communications are not required to set up transmission channels or data paths. Applications that don't require reliable data stream service can use UDP, which provides a connectionless datagram service that emphasizes reduced latency over reliability. If you do require reliable data stream service, use TCP instead.
+--
+-- * 'ipsToPort' - The last port in the range.
+instancePortState
+    :: InstancePortState
+instancePortState =
+  InstancePortState'
+  { _ipsFromPort = Nothing
+  , _ipsState = Nothing
+  , _ipsProtocol = Nothing
+  , _ipsToPort = Nothing
+  }
+
+
+-- | The first port in the range.
+ipsFromPort :: Lens' InstancePortState (Maybe Natural)
+ipsFromPort = lens _ipsFromPort (\ s a -> s{_ipsFromPort = a}) . mapping _Nat;
+
+-- | Specifies whether the instance port is @open@ or @closed@ .
+ipsState :: Lens' InstancePortState (Maybe PortState)
+ipsState = lens _ipsState (\ s a -> s{_ipsState = a});
+
+-- | The protocol being used. Can be one of the following.     * @tcp@ - Transmission Control Protocol (TCP) provides reliable, ordered, and error-checked delivery of streamed data between applications running on hosts communicating by an IP network. If you have an application that doesn't require reliable data stream service, use UDP instead.     * @all@ - All transport layer protocol types. For more general information, see <https://en.wikipedia.org/wiki/Transport_layer Transport layer> on Wikipedia.     * @udp@ - With User Datagram Protocol (UDP), computer applications can send messages (or datagrams) to other hosts on an Internet Protocol (IP) network. Prior communications are not required to set up transmission channels or data paths. Applications that don't require reliable data stream service can use UDP, which provides a connectionless datagram service that emphasizes reduced latency over reliability. If you do require reliable data stream service, use TCP instead.
+ipsProtocol :: Lens' InstancePortState (Maybe NetworkProtocol)
+ipsProtocol = lens _ipsProtocol (\ s a -> s{_ipsProtocol = a});
+
+-- | The last port in the range.
+ipsToPort :: Lens' InstancePortState (Maybe Natural)
+ipsToPort = lens _ipsToPort (\ s a -> s{_ipsToPort = a}) . mapping _Nat;
+
+instance FromJSON InstancePortState where
+        parseJSON
+          = withObject "InstancePortState"
+              (\ x ->
+                 InstancePortState' <$>
+                   (x .:? "fromPort") <*> (x .:? "state") <*>
+                     (x .:? "protocol")
+                     <*> (x .:? "toPort"))
+
+instance Hashable InstancePortState where
+
+instance NFData InstancePortState where
+
+-- | Describes the snapshot of the virtual private server, or /instance/ .
+--
+--
+--
+-- /See:/ 'instanceSnapshot' smart constructor.
+data InstanceSnapshot = InstanceSnapshot'
+  { _insFromBlueprintId  :: !(Maybe Text)
+  , _insState            :: !(Maybe InstanceSnapshotState)
+  , _insResourceType     :: !(Maybe ResourceType)
+  , _insArn              :: !(Maybe Text)
+  , _insCreatedAt        :: !(Maybe POSIX)
+  , _insLocation         :: !(Maybe ResourceLocation)
+  , _insProgress         :: !(Maybe Text)
+  , _insName             :: !(Maybe Text)
+  , _insFromBundleId     :: !(Maybe Text)
+  , _insSizeInGb         :: !(Maybe Int)
+  , _insSupportCode      :: !(Maybe Text)
+  , _insFromInstanceARN  :: !(Maybe Text)
+  , _insFromInstanceName :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InstanceSnapshot' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'insFromBlueprintId' - The blueprint ID from which you created the snapshot (e.g., @os_debian_8_3@ ). A blueprint is a virtual private server (or /instance/ ) image used to create instances quickly.
+--
+-- * 'insState' - The state the snapshot is in.
+--
+-- * 'insResourceType' - The type of resource (usually @InstanceSnapshot@ ).
+--
+-- * 'insArn' - The Amazon Resource Name (ARN) of the snapshot (e.g., @arn:aws:lightsail:us-east-1:123456789101:InstanceSnapshot/d23b5706-3322-4d83-81e5-12345EXAMPLE@ ).
+--
+-- * 'insCreatedAt' - The timestamp when the snapshot was created (e.g., @1479907467.024@ ).
+--
+-- * 'insLocation' - The region name and availability zone where you created the snapshot.
+--
+-- * 'insProgress' - The progress of the snapshot.
+--
+-- * 'insName' - The name of the snapshot.
+--
+-- * 'insFromBundleId' - The bundle ID from which you created the snapshot (e.g., @micro_1_0@ ).
+--
+-- * 'insSizeInGb' - The size in GB of the SSD.
+--
+-- * 'insSupportCode' - The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
+--
+-- * 'insFromInstanceARN' - The Amazon Resource Name (ARN) of the instance from which the snapshot was created (e.g., @arn:aws:lightsail:us-east-1:123456789101:Instance/64b8404c-ccb1-430b-8daf-12345EXAMPLE@ ).
+--
+-- * 'insFromInstanceName' - The instance from which the snapshot was created.
+instanceSnapshot
+    :: InstanceSnapshot
+instanceSnapshot =
+  InstanceSnapshot'
+  { _insFromBlueprintId = Nothing
+  , _insState = Nothing
+  , _insResourceType = Nothing
+  , _insArn = Nothing
+  , _insCreatedAt = Nothing
+  , _insLocation = Nothing
+  , _insProgress = Nothing
+  , _insName = Nothing
+  , _insFromBundleId = Nothing
+  , _insSizeInGb = Nothing
+  , _insSupportCode = Nothing
+  , _insFromInstanceARN = Nothing
+  , _insFromInstanceName = Nothing
+  }
+
+
+-- | The blueprint ID from which you created the snapshot (e.g., @os_debian_8_3@ ). A blueprint is a virtual private server (or /instance/ ) image used to create instances quickly.
+insFromBlueprintId :: Lens' InstanceSnapshot (Maybe Text)
+insFromBlueprintId = lens _insFromBlueprintId (\ s a -> s{_insFromBlueprintId = a});
+
+-- | The state the snapshot is in.
+insState :: Lens' InstanceSnapshot (Maybe InstanceSnapshotState)
+insState = lens _insState (\ s a -> s{_insState = a});
+
+-- | The type of resource (usually @InstanceSnapshot@ ).
+insResourceType :: Lens' InstanceSnapshot (Maybe ResourceType)
+insResourceType = lens _insResourceType (\ s a -> s{_insResourceType = a});
+
+-- | The Amazon Resource Name (ARN) of the snapshot (e.g., @arn:aws:lightsail:us-east-1:123456789101:InstanceSnapshot/d23b5706-3322-4d83-81e5-12345EXAMPLE@ ).
+insArn :: Lens' InstanceSnapshot (Maybe Text)
+insArn = lens _insArn (\ s a -> s{_insArn = a});
+
+-- | The timestamp when the snapshot was created (e.g., @1479907467.024@ ).
+insCreatedAt :: Lens' InstanceSnapshot (Maybe UTCTime)
+insCreatedAt = lens _insCreatedAt (\ s a -> s{_insCreatedAt = a}) . mapping _Time;
+
+-- | The region name and availability zone where you created the snapshot.
+insLocation :: Lens' InstanceSnapshot (Maybe ResourceLocation)
+insLocation = lens _insLocation (\ s a -> s{_insLocation = a});
+
+-- | The progress of the snapshot.
+insProgress :: Lens' InstanceSnapshot (Maybe Text)
+insProgress = lens _insProgress (\ s a -> s{_insProgress = a});
+
+-- | The name of the snapshot.
+insName :: Lens' InstanceSnapshot (Maybe Text)
+insName = lens _insName (\ s a -> s{_insName = a});
+
+-- | The bundle ID from which you created the snapshot (e.g., @micro_1_0@ ).
+insFromBundleId :: Lens' InstanceSnapshot (Maybe Text)
+insFromBundleId = lens _insFromBundleId (\ s a -> s{_insFromBundleId = a});
+
+-- | The size in GB of the SSD.
+insSizeInGb :: Lens' InstanceSnapshot (Maybe Int)
+insSizeInGb = lens _insSizeInGb (\ s a -> s{_insSizeInGb = a});
+
+-- | The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
+insSupportCode :: Lens' InstanceSnapshot (Maybe Text)
+insSupportCode = lens _insSupportCode (\ s a -> s{_insSupportCode = a});
+
+-- | The Amazon Resource Name (ARN) of the instance from which the snapshot was created (e.g., @arn:aws:lightsail:us-east-1:123456789101:Instance/64b8404c-ccb1-430b-8daf-12345EXAMPLE@ ).
+insFromInstanceARN :: Lens' InstanceSnapshot (Maybe Text)
+insFromInstanceARN = lens _insFromInstanceARN (\ s a -> s{_insFromInstanceARN = a});
+
+-- | The instance from which the snapshot was created.
+insFromInstanceName :: Lens' InstanceSnapshot (Maybe Text)
+insFromInstanceName = lens _insFromInstanceName (\ s a -> s{_insFromInstanceName = a});
+
+instance FromJSON InstanceSnapshot where
+        parseJSON
+          = withObject "InstanceSnapshot"
+              (\ x ->
+                 InstanceSnapshot' <$>
+                   (x .:? "fromBlueprintId") <*> (x .:? "state") <*>
+                     (x .:? "resourceType")
+                     <*> (x .:? "arn")
+                     <*> (x .:? "createdAt")
+                     <*> (x .:? "location")
+                     <*> (x .:? "progress")
+                     <*> (x .:? "name")
+                     <*> (x .:? "fromBundleId")
+                     <*> (x .:? "sizeInGb")
+                     <*> (x .:? "supportCode")
+                     <*> (x .:? "fromInstanceArn")
+                     <*> (x .:? "fromInstanceName"))
+
+instance Hashable InstanceSnapshot where
+
+instance NFData InstanceSnapshot where
+
+-- | Describes the virtual private server (or /instance/ ) status.
+--
+--
+--
+-- /See:/ 'instanceState' smart constructor.
+data InstanceState = InstanceState'
+  { _isName :: !(Maybe Text)
+  , _isCode :: !(Maybe Int)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InstanceState' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'isName' - The state of the instance (e.g., @running@ or @pending@ ).
+--
+-- * 'isCode' - The status code for the instance.
+instanceState
+    :: InstanceState
+instanceState = InstanceState' {_isName = Nothing, _isCode = Nothing}
+
+
+-- | The state of the instance (e.g., @running@ or @pending@ ).
+isName :: Lens' InstanceState (Maybe Text)
+isName = lens _isName (\ s a -> s{_isName = a});
+
+-- | The status code for the instance.
+isCode :: Lens' InstanceState (Maybe Int)
+isCode = lens _isCode (\ s a -> s{_isCode = a});
+
+instance FromJSON InstanceState where
+        parseJSON
+          = withObject "InstanceState"
+              (\ x ->
+                 InstanceState' <$> (x .:? "name") <*> (x .:? "code"))
+
+instance Hashable InstanceState where
+
+instance NFData InstanceState where
+
+-- | Describes the SSH key pair.
+--
+--
+--
+-- /See:/ 'keyPair' smart constructor.
+data KeyPair = KeyPair'
+  { _kpResourceType :: !(Maybe ResourceType)
+  , _kpArn          :: !(Maybe Text)
+  , _kpCreatedAt    :: !(Maybe POSIX)
+  , _kpLocation     :: !(Maybe ResourceLocation)
+  , _kpFingerprint  :: !(Maybe Text)
+  , _kpName         :: !(Maybe Text)
+  , _kpSupportCode  :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'KeyPair' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'kpResourceType' - The resource type (usually @KeyPair@ ).
+--
+-- * 'kpArn' - The Amazon Resource Name (ARN) of the key pair (e.g., @arn:aws:lightsail:us-east-1:123456789101:KeyPair/05859e3d-331d-48ba-9034-12345EXAMPLE@ ).
+--
+-- * 'kpCreatedAt' - The timestamp when the key pair was created (e.g., @1479816991.349@ ).
+--
+-- * 'kpLocation' - The region name and Availability Zone where the key pair was created.
+--
+-- * 'kpFingerprint' - The RSA fingerprint of the key pair.
+--
+-- * 'kpName' - The friendly name of the SSH key pair.
+--
+-- * 'kpSupportCode' - The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
+keyPair
+    :: KeyPair
+keyPair =
+  KeyPair'
+  { _kpResourceType = Nothing
+  , _kpArn = Nothing
+  , _kpCreatedAt = Nothing
+  , _kpLocation = Nothing
+  , _kpFingerprint = Nothing
+  , _kpName = Nothing
+  , _kpSupportCode = Nothing
+  }
+
+
+-- | The resource type (usually @KeyPair@ ).
+kpResourceType :: Lens' KeyPair (Maybe ResourceType)
+kpResourceType = lens _kpResourceType (\ s a -> s{_kpResourceType = a});
+
+-- | The Amazon Resource Name (ARN) of the key pair (e.g., @arn:aws:lightsail:us-east-1:123456789101:KeyPair/05859e3d-331d-48ba-9034-12345EXAMPLE@ ).
+kpArn :: Lens' KeyPair (Maybe Text)
+kpArn = lens _kpArn (\ s a -> s{_kpArn = a});
+
+-- | The timestamp when the key pair was created (e.g., @1479816991.349@ ).
+kpCreatedAt :: Lens' KeyPair (Maybe UTCTime)
+kpCreatedAt = lens _kpCreatedAt (\ s a -> s{_kpCreatedAt = a}) . mapping _Time;
+
+-- | The region name and Availability Zone where the key pair was created.
+kpLocation :: Lens' KeyPair (Maybe ResourceLocation)
+kpLocation = lens _kpLocation (\ s a -> s{_kpLocation = a});
+
+-- | The RSA fingerprint of the key pair.
+kpFingerprint :: Lens' KeyPair (Maybe Text)
+kpFingerprint = lens _kpFingerprint (\ s a -> s{_kpFingerprint = a});
+
+-- | The friendly name of the SSH key pair.
+kpName :: Lens' KeyPair (Maybe Text)
+kpName = lens _kpName (\ s a -> s{_kpName = a});
+
+-- | The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
+kpSupportCode :: Lens' KeyPair (Maybe Text)
+kpSupportCode = lens _kpSupportCode (\ s a -> s{_kpSupportCode = a});
+
+instance FromJSON KeyPair where
+        parseJSON
+          = withObject "KeyPair"
+              (\ x ->
+                 KeyPair' <$>
+                   (x .:? "resourceType") <*> (x .:? "arn") <*>
+                     (x .:? "createdAt")
+                     <*> (x .:? "location")
+                     <*> (x .:? "fingerprint")
+                     <*> (x .:? "name")
+                     <*> (x .:? "supportCode"))
+
+instance Hashable KeyPair where
+
+instance NFData KeyPair where
+
+-- | Describes the metric data point.
+--
+--
+--
+-- /See:/ 'metricDatapoint' smart constructor.
+data MetricDatapoint = MetricDatapoint'
+  { _mdSampleCount :: !(Maybe Double)
+  , _mdMaximum     :: !(Maybe Double)
+  , _mdAverage     :: !(Maybe Double)
+  , _mdMinimum     :: !(Maybe Double)
+  , _mdSum         :: !(Maybe Double)
+  , _mdTimestamp   :: !(Maybe POSIX)
+  , _mdUnit        :: !(Maybe MetricUnit)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'MetricDatapoint' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdSampleCount' - The sample count.
+--
+-- * 'mdMaximum' - The maximum.
+--
+-- * 'mdAverage' - The average.
+--
+-- * 'mdMinimum' - The minimum.
+--
+-- * 'mdSum' - The sum.
+--
+-- * 'mdTimestamp' - The timestamp (e.g., @1479816991.349@ ).
+--
+-- * 'mdUnit' - The unit.
+metricDatapoint
+    :: MetricDatapoint
+metricDatapoint =
+  MetricDatapoint'
+  { _mdSampleCount = Nothing
+  , _mdMaximum = Nothing
+  , _mdAverage = Nothing
+  , _mdMinimum = Nothing
+  , _mdSum = Nothing
+  , _mdTimestamp = Nothing
+  , _mdUnit = Nothing
+  }
+
+
+-- | The sample count.
+mdSampleCount :: Lens' MetricDatapoint (Maybe Double)
+mdSampleCount = lens _mdSampleCount (\ s a -> s{_mdSampleCount = a});
+
+-- | The maximum.
+mdMaximum :: Lens' MetricDatapoint (Maybe Double)
+mdMaximum = lens _mdMaximum (\ s a -> s{_mdMaximum = a});
+
+-- | The average.
+mdAverage :: Lens' MetricDatapoint (Maybe Double)
+mdAverage = lens _mdAverage (\ s a -> s{_mdAverage = a});
+
+-- | The minimum.
+mdMinimum :: Lens' MetricDatapoint (Maybe Double)
+mdMinimum = lens _mdMinimum (\ s a -> s{_mdMinimum = a});
+
+-- | The sum.
+mdSum :: Lens' MetricDatapoint (Maybe Double)
+mdSum = lens _mdSum (\ s a -> s{_mdSum = a});
+
+-- | The timestamp (e.g., @1479816991.349@ ).
+mdTimestamp :: Lens' MetricDatapoint (Maybe UTCTime)
+mdTimestamp = lens _mdTimestamp (\ s a -> s{_mdTimestamp = a}) . mapping _Time;
+
+-- | The unit.
+mdUnit :: Lens' MetricDatapoint (Maybe MetricUnit)
+mdUnit = lens _mdUnit (\ s a -> s{_mdUnit = a});
+
+instance FromJSON MetricDatapoint where
+        parseJSON
+          = withObject "MetricDatapoint"
+              (\ x ->
+                 MetricDatapoint' <$>
+                   (x .:? "sampleCount") <*> (x .:? "maximum") <*>
+                     (x .:? "average")
+                     <*> (x .:? "minimum")
+                     <*> (x .:? "sum")
+                     <*> (x .:? "timestamp")
+                     <*> (x .:? "unit"))
+
+instance Hashable MetricDatapoint where
+
+instance NFData MetricDatapoint where
+
+-- | Describes the monthly data transfer in and out of your virtual private server (or /instance/ ).
+--
+--
+--
+-- /See:/ 'monthlyTransfer' smart constructor.
+newtype MonthlyTransfer = MonthlyTransfer'
+  { _mtGbPerMonthAllocated :: Maybe Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'MonthlyTransfer' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mtGbPerMonthAllocated' - The amount allocated per month (in GB).
+monthlyTransfer
+    :: MonthlyTransfer
+monthlyTransfer = MonthlyTransfer' {_mtGbPerMonthAllocated = Nothing}
+
+
+-- | The amount allocated per month (in GB).
+mtGbPerMonthAllocated :: Lens' MonthlyTransfer (Maybe Int)
+mtGbPerMonthAllocated = lens _mtGbPerMonthAllocated (\ s a -> s{_mtGbPerMonthAllocated = a});
+
+instance FromJSON MonthlyTransfer where
+        parseJSON
+          = withObject "MonthlyTransfer"
+              (\ x ->
+                 MonthlyTransfer' <$> (x .:? "gbPerMonthAllocated"))
+
+instance Hashable MonthlyTransfer where
+
+instance NFData MonthlyTransfer where
+
+-- | Describes the API operation.
+--
+--
+--
+-- /See:/ 'operation' smart constructor.
+data Operation = Operation'
+  { _oStatus           :: !(Maybe OperationStatus)
+  , _oOperationDetails :: !(Maybe Text)
+  , _oResourceType     :: !(Maybe ResourceType)
+  , _oCreatedAt        :: !(Maybe POSIX)
+  , _oResourceName     :: !(Maybe Text)
+  , _oLocation         :: !(Maybe ResourceLocation)
+  , _oStatusChangedAt  :: !(Maybe POSIX)
+  , _oErrorDetails     :: !(Maybe Text)
+  , _oErrorCode        :: !(Maybe Text)
+  , _oId               :: !(Maybe Text)
+  , _oOperationType    :: !(Maybe OperationType)
+  , _oIsTerminal       :: !(Maybe Bool)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Operation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oStatus' - The status of the operation.
+--
+-- * 'oOperationDetails' - Details about the operation (e.g., @Debian-1GB-Virginia-1@ ).
+--
+-- * 'oResourceType' - The resource type.
+--
+-- * 'oCreatedAt' - The timestamp when the operation was initialized (e.g., @1479816991.349@ ).
+--
+-- * 'oResourceName' - The resource name.
+--
+-- * 'oLocation' - The region and Availability Zone.
+--
+-- * 'oStatusChangedAt' - The timestamp when the status was changed (e.g., @1479816991.349@ ).
+--
+-- * 'oErrorDetails' - The error details.
+--
+-- * 'oErrorCode' - The error code.
+--
+-- * 'oId' - The ID of the operation.
+--
+-- * 'oOperationType' - The type of operation.
+--
+-- * 'oIsTerminal' - A Boolean value indicating whether the operation is terminal.
+operation
+    :: Operation
+operation =
+  Operation'
+  { _oStatus = Nothing
+  , _oOperationDetails = Nothing
+  , _oResourceType = Nothing
+  , _oCreatedAt = Nothing
+  , _oResourceName = Nothing
+  , _oLocation = Nothing
+  , _oStatusChangedAt = Nothing
+  , _oErrorDetails = Nothing
+  , _oErrorCode = Nothing
+  , _oId = Nothing
+  , _oOperationType = Nothing
+  , _oIsTerminal = Nothing
+  }
+
+
+-- | The status of the operation.
+oStatus :: Lens' Operation (Maybe OperationStatus)
+oStatus = lens _oStatus (\ s a -> s{_oStatus = a});
+
+-- | Details about the operation (e.g., @Debian-1GB-Virginia-1@ ).
+oOperationDetails :: Lens' Operation (Maybe Text)
+oOperationDetails = lens _oOperationDetails (\ s a -> s{_oOperationDetails = a});
+
+-- | The resource type.
+oResourceType :: Lens' Operation (Maybe ResourceType)
+oResourceType = lens _oResourceType (\ s a -> s{_oResourceType = a});
+
+-- | The timestamp when the operation was initialized (e.g., @1479816991.349@ ).
+oCreatedAt :: Lens' Operation (Maybe UTCTime)
+oCreatedAt = lens _oCreatedAt (\ s a -> s{_oCreatedAt = a}) . mapping _Time;
+
+-- | The resource name.
+oResourceName :: Lens' Operation (Maybe Text)
+oResourceName = lens _oResourceName (\ s a -> s{_oResourceName = a});
+
+-- | The region and Availability Zone.
+oLocation :: Lens' Operation (Maybe ResourceLocation)
+oLocation = lens _oLocation (\ s a -> s{_oLocation = a});
+
+-- | The timestamp when the status was changed (e.g., @1479816991.349@ ).
+oStatusChangedAt :: Lens' Operation (Maybe UTCTime)
+oStatusChangedAt = lens _oStatusChangedAt (\ s a -> s{_oStatusChangedAt = a}) . mapping _Time;
+
+-- | The error details.
+oErrorDetails :: Lens' Operation (Maybe Text)
+oErrorDetails = lens _oErrorDetails (\ s a -> s{_oErrorDetails = a});
+
+-- | The error code.
+oErrorCode :: Lens' Operation (Maybe Text)
+oErrorCode = lens _oErrorCode (\ s a -> s{_oErrorCode = a});
+
+-- | The ID of the operation.
+oId :: Lens' Operation (Maybe Text)
+oId = lens _oId (\ s a -> s{_oId = a});
+
+-- | The type of operation.
+oOperationType :: Lens' Operation (Maybe OperationType)
+oOperationType = lens _oOperationType (\ s a -> s{_oOperationType = a});
+
+-- | A Boolean value indicating whether the operation is terminal.
+oIsTerminal :: Lens' Operation (Maybe Bool)
+oIsTerminal = lens _oIsTerminal (\ s a -> s{_oIsTerminal = a});
+
+instance FromJSON Operation where
+        parseJSON
+          = withObject "Operation"
+              (\ x ->
+                 Operation' <$>
+                   (x .:? "status") <*> (x .:? "operationDetails") <*>
+                     (x .:? "resourceType")
+                     <*> (x .:? "createdAt")
+                     <*> (x .:? "resourceName")
+                     <*> (x .:? "location")
+                     <*> (x .:? "statusChangedAt")
+                     <*> (x .:? "errorDetails")
+                     <*> (x .:? "errorCode")
+                     <*> (x .:? "id")
+                     <*> (x .:? "operationType")
+                     <*> (x .:? "isTerminal"))
+
+instance Hashable Operation where
+
+instance NFData Operation where
+
+-- | The password data for the Windows Server-based instance, including the ciphertext and the key pair name.
+--
+--
+--
+-- /See:/ 'passwordData' smart constructor.
+data PasswordData = PasswordData'
+  { _pdKeyPairName :: !(Maybe Text)
+  , _pdCiphertext  :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PasswordData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdKeyPairName' - The name of the key pair that you used when creating your instance. If no key pair name was specified when creating the instance, Lightsail uses the default key pair (@LightsailDefaultKeyPair@ ). If you are using a custom key pair, you need to use your own means of decrypting your password using the @ciphertext@ . Lightsail creates the ciphertext by encrypting your password with the public key part of this key pair.
+--
+-- * 'pdCiphertext' - The encrypted password. Ciphertext will be an empty string if access to your new instance is not ready yet. When you create an instance, it can take up to 15 minutes for the instance to be ready.
+passwordData
+    :: PasswordData
+passwordData = PasswordData' {_pdKeyPairName = Nothing, _pdCiphertext = Nothing}
+
+
+-- | The name of the key pair that you used when creating your instance. If no key pair name was specified when creating the instance, Lightsail uses the default key pair (@LightsailDefaultKeyPair@ ). If you are using a custom key pair, you need to use your own means of decrypting your password using the @ciphertext@ . Lightsail creates the ciphertext by encrypting your password with the public key part of this key pair.
+pdKeyPairName :: Lens' PasswordData (Maybe Text)
+pdKeyPairName = lens _pdKeyPairName (\ s a -> s{_pdKeyPairName = a});
+
+-- | The encrypted password. Ciphertext will be an empty string if access to your new instance is not ready yet. When you create an instance, it can take up to 15 minutes for the instance to be ready.
+pdCiphertext :: Lens' PasswordData (Maybe Text)
+pdCiphertext = lens _pdCiphertext (\ s a -> s{_pdCiphertext = a});
+
+instance FromJSON PasswordData where
+        parseJSON
+          = withObject "PasswordData"
+              (\ x ->
+                 PasswordData' <$>
+                   (x .:? "keyPairName") <*> (x .:? "ciphertext"))
+
+instance Hashable PasswordData where
+
+instance NFData PasswordData where
+
+-- | Describes information about the ports on your virtual private server (or /instance/ ).
+--
+--
+--
+-- /See:/ 'portInfo' smart constructor.
+data PortInfo = PortInfo'
+  { _piFromPort :: !(Maybe Nat)
+  , _piProtocol :: !(Maybe NetworkProtocol)
+  , _piToPort   :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PortInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piFromPort' - The first port in the range.
+--
+-- * 'piProtocol' - The protocol.
+--
+-- * 'piToPort' - The last port in the range.
+portInfo
+    :: PortInfo
+portInfo =
+  PortInfo' {_piFromPort = Nothing, _piProtocol = Nothing, _piToPort = Nothing}
+
+
+-- | The first port in the range.
+piFromPort :: Lens' PortInfo (Maybe Natural)
+piFromPort = lens _piFromPort (\ s a -> s{_piFromPort = a}) . mapping _Nat;
+
+-- | The protocol.
+piProtocol :: Lens' PortInfo (Maybe NetworkProtocol)
+piProtocol = lens _piProtocol (\ s a -> s{_piProtocol = a});
+
+-- | The last port in the range.
+piToPort :: Lens' PortInfo (Maybe Natural)
+piToPort = lens _piToPort (\ s a -> s{_piToPort = a}) . mapping _Nat;
+
+instance Hashable PortInfo where
+
+instance NFData PortInfo where
+
+instance ToJSON PortInfo where
+        toJSON PortInfo'{..}
+          = object
+              (catMaybes
+                 [("fromPort" .=) <$> _piFromPort,
+                  ("protocol" .=) <$> _piProtocol,
+                  ("toPort" .=) <$> _piToPort])
+
+-- | Describes the AWS Region.
+--
+--
+--
+-- /See:/ 'regionInfo' smart constructor.
+data RegionInfo = RegionInfo'
+  { _riAvailabilityZones :: !(Maybe [AvailabilityZone])
+  , _riName              :: !(Maybe RegionName)
+  , _riDisplayName       :: !(Maybe Text)
+  , _riContinentCode     :: !(Maybe Text)
+  , _riDescription       :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RegionInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'riAvailabilityZones' - The Availability Zones. Follows the format @us-east-1a@ (case-sensitive).
+--
+-- * 'riName' - The region name (e.g., @us-east-1@ ).
+--
+-- * 'riDisplayName' - The display name (e.g., @Virginia@ ).
+--
+-- * 'riContinentCode' - The continent code (e.g., @NA@ , meaning North America).
+--
+-- * 'riDescription' - The description of the AWS Region (e.g., @This region is recommended to serve users in the eastern United States and eastern Canada@ ).
+regionInfo
+    :: RegionInfo
+regionInfo =
+  RegionInfo'
+  { _riAvailabilityZones = Nothing
+  , _riName = Nothing
+  , _riDisplayName = Nothing
+  , _riContinentCode = Nothing
+  , _riDescription = Nothing
+  }
+
+
+-- | The Availability Zones. Follows the format @us-east-1a@ (case-sensitive).
+riAvailabilityZones :: Lens' RegionInfo [AvailabilityZone]
+riAvailabilityZones = lens _riAvailabilityZones (\ s a -> s{_riAvailabilityZones = a}) . _Default . _Coerce;
+
+-- | The region name (e.g., @us-east-1@ ).
+riName :: Lens' RegionInfo (Maybe RegionName)
+riName = lens _riName (\ s a -> s{_riName = a});
+
+-- | The display name (e.g., @Virginia@ ).
+riDisplayName :: Lens' RegionInfo (Maybe Text)
+riDisplayName = lens _riDisplayName (\ s a -> s{_riDisplayName = a});
+
+-- | The continent code (e.g., @NA@ , meaning North America).
+riContinentCode :: Lens' RegionInfo (Maybe Text)
+riContinentCode = lens _riContinentCode (\ s a -> s{_riContinentCode = a});
+
+-- | The description of the AWS Region (e.g., @This region is recommended to serve users in the eastern United States and eastern Canada@ ).
+riDescription :: Lens' RegionInfo (Maybe Text)
+riDescription = lens _riDescription (\ s a -> s{_riDescription = a});
+
+instance FromJSON RegionInfo where
+        parseJSON
+          = withObject "RegionInfo"
+              (\ x ->
+                 RegionInfo' <$>
+                   (x .:? "availabilityZones" .!= mempty) <*>
+                     (x .:? "name")
+                     <*> (x .:? "displayName")
+                     <*> (x .:? "continentCode")
+                     <*> (x .:? "description"))
+
+instance Hashable RegionInfo where
+
+instance NFData RegionInfo where
+
+-- | Describes the resource location.
+--
+--
+--
+-- /See:/ 'resourceLocation' smart constructor.
+data ResourceLocation = ResourceLocation'
+  { _rlRegionName       :: !(Maybe RegionName)
+  , _rlAvailabilityZone :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ResourceLocation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rlRegionName' - The AWS Region name.
+--
+-- * 'rlAvailabilityZone' - The Availability Zone. Follows the format @us-east-1a@ (case-sensitive).
+resourceLocation
+    :: ResourceLocation
+resourceLocation =
+  ResourceLocation' {_rlRegionName = Nothing, _rlAvailabilityZone = Nothing}
+
+
+-- | The AWS Region name.
+rlRegionName :: Lens' ResourceLocation (Maybe RegionName)
+rlRegionName = lens _rlRegionName (\ s a -> s{_rlRegionName = a});
+
+-- | The Availability Zone. Follows the format @us-east-1a@ (case-sensitive).
+rlAvailabilityZone :: Lens' ResourceLocation (Maybe Text)
+rlAvailabilityZone = lens _rlAvailabilityZone (\ s a -> s{_rlAvailabilityZone = a});
+
+instance FromJSON ResourceLocation where
+        parseJSON
+          = withObject "ResourceLocation"
+              (\ x ->
+                 ResourceLocation' <$>
+                   (x .:? "regionName") <*> (x .:? "availabilityZone"))
+
+instance Hashable ResourceLocation where
+
+instance NFData ResourceLocation where
+
+-- | Describes the static IP.
+--
+--
+--
+-- /See:/ 'staticIP' smart constructor.
+data StaticIP = StaticIP'
+  { _siIpAddress    :: !(Maybe Text)
+  , _siResourceType :: !(Maybe ResourceType)
+  , _siArn          :: !(Maybe Text)
+  , _siCreatedAt    :: !(Maybe POSIX)
+  , _siLocation     :: !(Maybe ResourceLocation)
+  , _siIsAttached   :: !(Maybe Bool)
+  , _siName         :: !(Maybe Text)
+  , _siSupportCode  :: !(Maybe Text)
+  , _siAttachedTo   :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StaticIP' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'siIpAddress' - The static IP address.
+--
+-- * 'siResourceType' - The resource type (usually @StaticIp@ ).
+--
+-- * 'siArn' - The Amazon Resource Name (ARN) of the static IP (e.g., @arn:aws:lightsail:us-east-1:123456789101:StaticIp/9cbb4a9e-f8e3-4dfe-b57e-12345EXAMPLE@ ).
+--
+-- * 'siCreatedAt' - The timestamp when the static IP was created (e.g., @1479735304.222@ ).
+--
+-- * 'siLocation' - The region and Availability Zone where the static IP was created.
+--
+-- * 'siIsAttached' - A Boolean value indicating whether the static IP is attached.
+--
+-- * 'siName' - The name of the static IP (e.g., @StaticIP-Virginia-EXAMPLE@ ).
+--
+-- * 'siSupportCode' - The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
+--
+-- * 'siAttachedTo' - The instance where the static IP is attached (e.g., @Amazon_Linux-1GB-Virginia-1@ ).
+staticIP
+    :: StaticIP
+staticIP =
+  StaticIP'
+  { _siIpAddress = Nothing
+  , _siResourceType = Nothing
+  , _siArn = Nothing
+  , _siCreatedAt = Nothing
+  , _siLocation = Nothing
+  , _siIsAttached = Nothing
+  , _siName = Nothing
+  , _siSupportCode = Nothing
+  , _siAttachedTo = Nothing
+  }
+
+
+-- | The static IP address.
+siIpAddress :: Lens' StaticIP (Maybe Text)
+siIpAddress = lens _siIpAddress (\ s a -> s{_siIpAddress = a});
+
+-- | The resource type (usually @StaticIp@ ).
+siResourceType :: Lens' StaticIP (Maybe ResourceType)
+siResourceType = lens _siResourceType (\ s a -> s{_siResourceType = a});
+
+-- | The Amazon Resource Name (ARN) of the static IP (e.g., @arn:aws:lightsail:us-east-1:123456789101:StaticIp/9cbb4a9e-f8e3-4dfe-b57e-12345EXAMPLE@ ).
+siArn :: Lens' StaticIP (Maybe Text)
+siArn = lens _siArn (\ s a -> s{_siArn = a});
+
+-- | The timestamp when the static IP was created (e.g., @1479735304.222@ ).
+siCreatedAt :: Lens' StaticIP (Maybe UTCTime)
+siCreatedAt = lens _siCreatedAt (\ s a -> s{_siCreatedAt = a}) . mapping _Time;
+
+-- | The region and Availability Zone where the static IP was created.
+siLocation :: Lens' StaticIP (Maybe ResourceLocation)
+siLocation = lens _siLocation (\ s a -> s{_siLocation = a});
+
+-- | A Boolean value indicating whether the static IP is attached.
+siIsAttached :: Lens' StaticIP (Maybe Bool)
+siIsAttached = lens _siIsAttached (\ s a -> s{_siIsAttached = a});
+
+-- | The name of the static IP (e.g., @StaticIP-Virginia-EXAMPLE@ ).
+siName :: Lens' StaticIP (Maybe Text)
+siName = lens _siName (\ s a -> s{_siName = a});
+
+-- | The support code. Include this code in your email to support when you have questions about an instance or another resource in Lightsail. This code enables our support team to look up your Lightsail information more easily.
+siSupportCode :: Lens' StaticIP (Maybe Text)
+siSupportCode = lens _siSupportCode (\ s a -> s{_siSupportCode = a});
+
+-- | The instance where the static IP is attached (e.g., @Amazon_Linux-1GB-Virginia-1@ ).
+siAttachedTo :: Lens' StaticIP (Maybe Text)
+siAttachedTo = lens _siAttachedTo (\ s a -> s{_siAttachedTo = a});
+
+instance FromJSON StaticIP where
+        parseJSON
+          = withObject "StaticIP"
+              (\ x ->
+                 StaticIP' <$>
+                   (x .:? "ipAddress") <*> (x .:? "resourceType") <*>
+                     (x .:? "arn")
+                     <*> (x .:? "createdAt")
+                     <*> (x .:? "location")
+                     <*> (x .:? "isAttached")
+                     <*> (x .:? "name")
+                     <*> (x .:? "supportCode")
+                     <*> (x .:? "attachedTo"))
+
+instance Hashable StaticIP where
+
+instance NFData StaticIP where
diff --git a/gen/Network/AWS/Lightsail/Types/Sum.hs b/gen/Network/AWS/Lightsail/Types/Sum.hs
--- a/gen/Network/AWS/Lightsail/Types/Sum.hs
+++ b/gen/Network/AWS/Lightsail/Types/Sum.hs
@@ -9,21 +9,22 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.Types.Sum
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.Lightsail.Types.Sum where
 
-import           Network.AWS.Prelude
+import Network.AWS.Prelude
 
 data AccessDirection
-    = Inbound
-    | Outbound
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Inbound
+  | Outbound
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText AccessDirection where
     parser = takeLowerText >>= \case
         "inbound" -> pure Inbound
@@ -46,10 +47,11 @@
     parseJSON = parseJSONText "AccessDirection"
 
 data BlueprintType
-    = App
-    | OS
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = App
+  | OS
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText BlueprintType where
     parser = takeLowerText >>= \case
         "app" -> pure App
@@ -72,10 +74,11 @@
     parseJSON = parseJSONText "BlueprintType"
 
 data InstanceAccessProtocol
-    = Rdp
-    | SSH
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Rdp
+  | SSH
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText InstanceAccessProtocol where
     parser = takeLowerText >>= \case
         "rdp" -> pure Rdp
@@ -101,14 +104,15 @@
     parseJSON = parseJSONText "InstanceAccessProtocol"
 
 data InstanceMetricName
-    = CPUUtilization
-    | NetworkIn
-    | NetworkOut
-    | StatusCheckFailed
-    | StatusCheckFailedInstance
-    | StatusCheckFailedSystem
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = CPUUtilization
+  | NetworkIn
+  | NetworkOut
+  | StatusCheckFailed
+  | StatusCheckFailedInstance
+  | StatusCheckFailedSystem
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText InstanceMetricName where
     parser = takeLowerText >>= \case
         "cpuutilization" -> pure CPUUtilization
@@ -141,12 +145,40 @@
 instance FromJSON InstanceMetricName where
     parseJSON = parseJSONText "InstanceMetricName"
 
+data InstancePlatform
+  = LinuxUnix
+  | Windows
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText InstancePlatform where
+    parser = takeLowerText >>= \case
+        "linux_unix" -> pure LinuxUnix
+        "windows" -> pure Windows
+        e -> fromTextError $ "Failure parsing InstancePlatform from value: '" <> e
+           <> "'. Accepted values: linux_unix, windows"
+
+instance ToText InstancePlatform where
+    toText = \case
+        LinuxUnix -> "LINUX_UNIX"
+        Windows -> "WINDOWS"
+
+instance Hashable     InstancePlatform
+instance NFData       InstancePlatform
+instance ToByteString InstancePlatform
+instance ToQuery      InstancePlatform
+instance ToHeader     InstancePlatform
+
+instance FromJSON InstancePlatform where
+    parseJSON = parseJSONText "InstancePlatform"
+
 data InstanceSnapshotState
-    = Available
-    | Error'
-    | Pending
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Available
+  | Error'
+  | Pending
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText InstanceSnapshotState where
     parser = takeLowerText >>= \case
         "available" -> pure Available
@@ -171,13 +203,14 @@
     parseJSON = parseJSONText "InstanceSnapshotState"
 
 data MetricStatistic
-    = Average
-    | Maximum
-    | Minimum
-    | SampleCount
-    | Sum
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Average
+  | Maximum
+  | Minimum
+  | SampleCount
+  | Sum
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText MetricStatistic where
     parser = takeLowerText >>= \case
         "average" -> pure Average
@@ -206,35 +239,36 @@
     toJSON = toJSONText
 
 data MetricUnit
-    = Bits
-    | BitsSecond
-    | Bytes
-    | BytesSecond
-    | Count
-    | CountSecond
-    | Gigabits
-    | GigabitsSecond
-    | Gigabytes
-    | GigabytesSecond
-    | Kilobits
-    | KilobitsSecond
-    | Kilobytes
-    | KilobytesSecond
-    | Megabits
-    | MegabitsSecond
-    | Megabytes
-    | MegabytesSecond
-    | Microseconds
-    | Milliseconds
-    | None
-    | Percent
-    | Seconds
-    | Terabits
-    | TerabitsSecond
-    | Terabytes
-    | TerabytesSecond
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Bits
+  | BitsSecond
+  | Bytes
+  | BytesSecond
+  | Count
+  | CountSecond
+  | Gigabits
+  | GigabitsSecond
+  | Gigabytes
+  | GigabytesSecond
+  | Kilobits
+  | KilobitsSecond
+  | Kilobytes
+  | KilobytesSecond
+  | Megabits
+  | MegabitsSecond
+  | Megabytes
+  | MegabytesSecond
+  | Microseconds
+  | Milliseconds
+  | None
+  | Percent
+  | Seconds
+  | Terabits
+  | TerabitsSecond
+  | Terabytes
+  | TerabytesSecond
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText MetricUnit where
     parser = takeLowerText >>= \case
         "bits" -> pure Bits
@@ -310,11 +344,12 @@
     parseJSON = parseJSONText "MetricUnit"
 
 data NetworkProtocol
-    = All
-    | TCP
-    | Udp
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = All
+  | TCP
+  | Udp
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText NetworkProtocol where
     parser = takeLowerText >>= \case
         "all" -> pure All
@@ -342,12 +377,13 @@
     parseJSON = parseJSONText "NetworkProtocol"
 
 data OperationStatus
-    = Completed
-    | Failed
-    | NotStarted
-    | Started
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Completed
+  | Failed
+  | NotStarted
+  | Started
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText OperationStatus where
     parser = takeLowerText >>= \case
         "completed" -> pure Completed
@@ -374,26 +410,28 @@
     parseJSON = parseJSONText "OperationStatus"
 
 data OperationType
-    = AllocateStaticIP
-    | AttachStaticIP
-    | CloseInstancePublicPorts
-    | CreateDomain
-    | CreateInstance
-    | CreateInstanceSnapshot
-    | CreateInstancesFromSnapshot
-    | DeleteDomain
-    | DeleteDomainEntry
-    | DeleteInstance
-    | DeleteInstanceSnapshot
-    | DetachStaticIP
-    | OpenInstancePublicPorts
-    | RebootInstance
-    | ReleaseStaticIP
-    | StartInstance
-    | StopInstance
-    | UpdateDomainEntry
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = AllocateStaticIP
+  | AttachStaticIP
+  | CloseInstancePublicPorts
+  | CreateDomain
+  | CreateInstance
+  | CreateInstanceSnapshot
+  | CreateInstancesFromSnapshot
+  | DeleteDomain
+  | DeleteDomainEntry
+  | DeleteInstance
+  | DeleteInstanceSnapshot
+  | DetachStaticIP
+  | OpenInstancePublicPorts
+  | PutInstancePublicPorts
+  | RebootInstance
+  | ReleaseStaticIP
+  | StartInstance
+  | StopInstance
+  | UpdateDomainEntry
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText OperationType where
     parser = takeLowerText >>= \case
         "allocatestaticip" -> pure AllocateStaticIP
@@ -409,13 +447,14 @@
         "deleteinstancesnapshot" -> pure DeleteInstanceSnapshot
         "detachstaticip" -> pure DetachStaticIP
         "openinstancepublicports" -> pure OpenInstancePublicPorts
+        "putinstancepublicports" -> pure PutInstancePublicPorts
         "rebootinstance" -> pure RebootInstance
         "releasestaticip" -> pure ReleaseStaticIP
         "startinstance" -> pure StartInstance
         "stopinstance" -> pure StopInstance
         "updatedomainentry" -> pure UpdateDomainEntry
         e -> fromTextError $ "Failure parsing OperationType from value: '" <> e
-           <> "'. Accepted values: allocatestaticip, attachstaticip, closeinstancepublicports, createdomain, createinstance, createinstancesnapshot, createinstancesfromsnapshot, deletedomain, deletedomainentry, deleteinstance, deleteinstancesnapshot, detachstaticip, openinstancepublicports, rebootinstance, releasestaticip, startinstance, stopinstance, updatedomainentry"
+           <> "'. Accepted values: allocatestaticip, attachstaticip, closeinstancepublicports, createdomain, createinstance, createinstancesnapshot, createinstancesfromsnapshot, deletedomain, deletedomainentry, deleteinstance, deleteinstancesnapshot, detachstaticip, openinstancepublicports, putinstancepublicports, rebootinstance, releasestaticip, startinstance, stopinstance, updatedomainentry"
 
 instance ToText OperationType where
     toText = \case
@@ -432,6 +471,7 @@
         DeleteInstanceSnapshot -> "DeleteInstanceSnapshot"
         DetachStaticIP -> "DetachStaticIp"
         OpenInstancePublicPorts -> "OpenInstancePublicPorts"
+        PutInstancePublicPorts -> "PutInstancePublicPorts"
         RebootInstance -> "RebootInstance"
         ReleaseStaticIP -> "ReleaseStaticIp"
         StartInstance -> "StartInstance"
@@ -448,10 +488,11 @@
     parseJSON = parseJSONText "OperationType"
 
 data PortAccessType
-    = Private
-    | Public
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Private
+  | Public
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText PortAccessType where
     parser = takeLowerText >>= \case
         "private" -> pure Private
@@ -474,10 +515,11 @@
     parseJSON = parseJSONText "PortAccessType"
 
 data PortState
-    = Closed
-    | Open
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Closed
+  | Open
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText PortState where
     parser = takeLowerText >>= \case
         "closed" -> pure Closed
@@ -500,18 +542,20 @@
     parseJSON = parseJSONText "PortState"
 
 data RegionName
-    = ApNortheast1
-    | ApNortheast2
-    | ApSouth1
-    | ApSoutheast1
-    | ApSoutheast2
-    | EuCentral1
-    | EuWest1
-    | UsEast1
-    | UsWest1
-    | UsWest2
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = ApNortheast1
+  | ApNortheast2
+  | ApSouth1
+  | ApSoutheast1
+  | ApSoutheast2
+  | EuCentral1
+  | EuWest1
+  | UsEast1
+  | UsEast2
+  | UsWest1
+  | UsWest2
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText RegionName where
     parser = takeLowerText >>= \case
         "ap-northeast-1" -> pure ApNortheast1
@@ -522,10 +566,11 @@
         "eu-central-1" -> pure EuCentral1
         "eu-west-1" -> pure EuWest1
         "us-east-1" -> pure UsEast1
+        "us-east-2" -> pure UsEast2
         "us-west-1" -> pure UsWest1
         "us-west-2" -> pure UsWest2
         e -> fromTextError $ "Failure parsing RegionName from value: '" <> e
-           <> "'. Accepted values: ap-northeast-1, ap-northeast-2, ap-south-1, ap-southeast-1, ap-southeast-2, eu-central-1, eu-west-1, us-east-1, us-west-1, us-west-2"
+           <> "'. Accepted values: ap-northeast-1, ap-northeast-2, ap-south-1, ap-southeast-1, ap-southeast-2, eu-central-1, eu-west-1, us-east-1, us-east-2, us-west-1, us-west-2"
 
 instance ToText RegionName where
     toText = \case
@@ -537,6 +582,7 @@
         EuCentral1 -> "eu-central-1"
         EuWest1 -> "eu-west-1"
         UsEast1 -> "us-east-1"
+        UsEast2 -> "us-east-2"
         UsWest1 -> "us-west-1"
         UsWest2 -> "us-west-2"
 
@@ -550,13 +596,14 @@
     parseJSON = parseJSONText "RegionName"
 
 data ResourceType
-    = Domain
-    | Instance
-    | InstanceSnapshot
-    | KeyPair
-    | PeeredVPC
-    | StaticIP
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Domain
+  | Instance
+  | InstanceSnapshot
+  | KeyPair
+  | PeeredVPC
+  | StaticIP
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
 
 instance FromText ResourceType where
     parser = takeLowerText >>= \case
diff --git a/gen/Network/AWS/Lightsail/UnpeerVPC.hs b/gen/Network/AWS/Lightsail/UnpeerVPC.hs
--- a/gen/Network/AWS/Lightsail/UnpeerVPC.hs
+++ b/gen/Network/AWS/Lightsail/UnpeerVPC.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.UnpeerVPC
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -35,24 +35,26 @@
     , uvrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'unpeerVPC' smart constructor.
 data UnpeerVPC =
-    UnpeerVPC'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  UnpeerVPC'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'UnpeerVPC' with the minimum fields required to make a request.
 --
 unpeerVPC
     :: UnpeerVPC
 unpeerVPC = UnpeerVPC'
 
+
 instance AWSRequest UnpeerVPC where
         type Rs UnpeerVPC = UnpeerVPCResponse
         request = postJSON lightsail
@@ -62,9 +64,9 @@
                  UnpeerVPCResponse' <$>
                    (x .?> "operation") <*> (pure (fromEnum s)))
 
-instance Hashable UnpeerVPC
+instance Hashable UnpeerVPC where
 
-instance NFData UnpeerVPC
+instance NFData UnpeerVPC where
 
 instance ToHeaders UnpeerVPC where
         toHeaders
@@ -86,10 +88,11 @@
 
 -- | /See:/ 'unpeerVPCResponse' smart constructor.
 data UnpeerVPCResponse = UnpeerVPCResponse'
-    { _uvrsOperation      :: !(Maybe Operation)
-    , _uvrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _uvrsOperation      :: !(Maybe Operation)
+  , _uvrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'UnpeerVPCResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -101,11 +104,10 @@
     :: Int -- ^ 'uvrsResponseStatus'
     -> UnpeerVPCResponse
 unpeerVPCResponse pResponseStatus_ =
-    UnpeerVPCResponse'
-    { _uvrsOperation = Nothing
-    , _uvrsResponseStatus = pResponseStatus_
-    }
+  UnpeerVPCResponse'
+  {_uvrsOperation = Nothing, _uvrsResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the request operation.
 uvrsOperation :: Lens' UnpeerVPCResponse (Maybe Operation)
 uvrsOperation = lens _uvrsOperation (\ s a -> s{_uvrsOperation = a});
@@ -114,4 +116,4 @@
 uvrsResponseStatus :: Lens' UnpeerVPCResponse Int
 uvrsResponseStatus = lens _uvrsResponseStatus (\ s a -> s{_uvrsResponseStatus = a});
 
-instance NFData UnpeerVPCResponse
+instance NFData UnpeerVPCResponse where
diff --git a/gen/Network/AWS/Lightsail/UpdateDomainEntry.hs b/gen/Network/AWS/Lightsail/UpdateDomainEntry.hs
--- a/gen/Network/AWS/Lightsail/UpdateDomainEntry.hs
+++ b/gen/Network/AWS/Lightsail/UpdateDomainEntry.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.UpdateDomainEntry
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,19 +38,20 @@
     , udersResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Lightsail.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Lightsail.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'updateDomainEntry' smart constructor.
 data UpdateDomainEntry = UpdateDomainEntry'
-    { _udeDomainName  :: !Text
-    , _udeDomainEntry :: !DomainEntry
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _udeDomainName  :: !Text
+  , _udeDomainEntry :: !DomainEntry
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'UpdateDomainEntry' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,11 +64,10 @@
     -> DomainEntry -- ^ 'udeDomainEntry'
     -> UpdateDomainEntry
 updateDomainEntry pDomainName_ pDomainEntry_ =
-    UpdateDomainEntry'
-    { _udeDomainName = pDomainName_
-    , _udeDomainEntry = pDomainEntry_
-    }
+  UpdateDomainEntry'
+  {_udeDomainName = pDomainName_, _udeDomainEntry = pDomainEntry_}
 
+
 -- | The name of the domain recordset to update.
 udeDomainName :: Lens' UpdateDomainEntry Text
 udeDomainName = lens _udeDomainName (\ s a -> s{_udeDomainName = a});
@@ -86,9 +86,9 @@
                    (x .?> "operations" .!@ mempty) <*>
                      (pure (fromEnum s)))
 
-instance Hashable UpdateDomainEntry
+instance Hashable UpdateDomainEntry where
 
-instance NFData UpdateDomainEntry
+instance NFData UpdateDomainEntry where
 
 instance ToHeaders UpdateDomainEntry where
         toHeaders
@@ -115,10 +115,11 @@
 
 -- | /See:/ 'updateDomainEntryResponse' smart constructor.
 data UpdateDomainEntryResponse = UpdateDomainEntryResponse'
-    { _udersOperations     :: !(Maybe [Operation])
-    , _udersResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _udersOperations     :: !(Maybe [Operation])
+  , _udersResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'UpdateDomainEntryResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -130,11 +131,10 @@
     :: Int -- ^ 'udersResponseStatus'
     -> UpdateDomainEntryResponse
 updateDomainEntryResponse pResponseStatus_ =
-    UpdateDomainEntryResponse'
-    { _udersOperations = Nothing
-    , _udersResponseStatus = pResponseStatus_
-    }
+  UpdateDomainEntryResponse'
+  {_udersOperations = Nothing, _udersResponseStatus = pResponseStatus_}
 
+
 -- | An array of key-value pairs containing information about the request operation.
 udersOperations :: Lens' UpdateDomainEntryResponse [Operation]
 udersOperations = lens _udersOperations (\ s a -> s{_udersOperations = a}) . _Default . _Coerce;
@@ -143,4 +143,4 @@
 udersResponseStatus :: Lens' UpdateDomainEntryResponse Int
 udersResponseStatus = lens _udersResponseStatus (\ s a -> s{_udersResponseStatus = a});
 
-instance NFData UpdateDomainEntryResponse
+instance NFData UpdateDomainEntryResponse where
diff --git a/gen/Network/AWS/Lightsail/Waiters.hs b/gen/Network/AWS/Lightsail/Waiters.hs
--- a/gen/Network/AWS/Lightsail/Waiters.hs
+++ b/gen/Network/AWS/Lightsail/Waiters.hs
@@ -7,15 +7,15 @@
 
 -- |
 -- Module      : Network.AWS.Lightsail.Waiters
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.Lightsail.Waiters where
 
-import           Network.AWS.Lens
-import           Network.AWS.Lightsail.Types
-import           Network.AWS.Prelude
-import           Network.AWS.Waiter
+import Network.AWS.Lens
+import Network.AWS.Lightsail.Types
+import Network.AWS.Prelude
+import Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,9 +2,9 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
diff --git a/test/Test/AWS/Gen/Lightsail.hs b/test/Test/AWS/Gen/Lightsail.hs
--- a/test/Test/AWS/Gen/Lightsail.hs
+++ b/test/Test/AWS/Gen/Lightsail.hs
@@ -5,20 +5,20 @@
 
 -- |
 -- Module      : Test.AWS.Gen.Lightsail
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Test.AWS.Gen.Lightsail where
 
 import Data.Proxy
+import Network.AWS.Lightsail
 import Test.AWS.Fixture
+import Test.AWS.Lightsail.Internal
 import Test.AWS.Prelude
 import Test.Tasty
-import Network.AWS.Lightsail
-import Test.AWS.Lightsail.Internal
 
 -- Auto-generated: the actual test selection needs to be manually placed into
 -- the top-level so that real test data can be incrementally added.
@@ -145,6 +145,9 @@
 --         , requestGetKeyPair $
 --             getKeyPair
 --
+--         , requestPutInstancePublicPorts $
+--             putInstancePublicPorts
+--
 --         , requestDetachStaticIP $
 --             detachStaticIP
 --
@@ -289,6 +292,9 @@
 --         , responseGetKeyPair $
 --             getKeyPairResponse
 --
+--         , responsePutInstancePublicPorts $
+--             putInstancePublicPortsResponse
+--
 --         , responseDetachStaticIP $
 --             detachStaticIPResponse
 --
@@ -513,6 +519,11 @@
     "GetKeyPair"
     "fixture/GetKeyPair.yaml"
 
+requestPutInstancePublicPorts :: PutInstancePublicPorts -> TestTree
+requestPutInstancePublicPorts = req
+    "PutInstancePublicPorts"
+    "fixture/PutInstancePublicPorts.yaml"
+
 requestDetachStaticIP :: DetachStaticIP -> TestTree
 requestDetachStaticIP = req
     "DetachStaticIP"
@@ -827,6 +838,13 @@
     "fixture/GetKeyPairResponse.proto"
     lightsail
     (Proxy :: Proxy GetKeyPair)
+
+responsePutInstancePublicPorts :: PutInstancePublicPortsResponse -> TestTree
+responsePutInstancePublicPorts = res
+    "PutInstancePublicPortsResponse"
+    "fixture/PutInstancePublicPortsResponse.proto"
+    lightsail
+    (Proxy :: Proxy PutInstancePublicPorts)
 
 responseDetachStaticIP :: DetachStaticIPResponse -> TestTree
 responseDetachStaticIP = res
