{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.DocumentDB.CreateDBInstance
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a new instance.
module Amazonka.DocumentDB.CreateDBInstance
  ( -- * Creating a Request
    CreateDBInstance (..),
    newCreateDBInstance,

    -- * Request Lenses
    createDBInstance_autoMinorVersionUpgrade,
    createDBInstance_availabilityZone,
    createDBInstance_copyTagsToSnapshot,
    createDBInstance_enablePerformanceInsights,
    createDBInstance_performanceInsightsKMSKeyId,
    createDBInstance_preferredMaintenanceWindow,
    createDBInstance_promotionTier,
    createDBInstance_tags,
    createDBInstance_dbInstanceIdentifier,
    createDBInstance_dbInstanceClass,
    createDBInstance_engine,
    createDBInstance_dbClusterIdentifier,

    -- * Destructuring the Response
    CreateDBInstanceResponse (..),
    newCreateDBInstanceResponse,

    -- * Response Lenses
    createDBInstanceResponse_dbInstance,
    createDBInstanceResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.DocumentDB.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | Represents the input to CreateDBInstance.
--
-- /See:/ 'newCreateDBInstance' smart constructor.
data CreateDBInstance = CreateDBInstance'
  { -- | This parameter does not apply to Amazon DocumentDB. Amazon DocumentDB
    -- does not perform minor version upgrades regardless of the value set.
    --
    -- Default: @false@
    CreateDBInstance -> Maybe Bool
autoMinorVersionUpgrade :: Prelude.Maybe Prelude.Bool,
    -- | The Amazon EC2 Availability Zone that the instance is created in.
    --
    -- Default: A random, system-chosen Availability Zone in the endpoint\'s
    -- Amazon Web Services Region.
    --
    -- Example: @us-east-1d@
    CreateDBInstance -> Maybe Text
availabilityZone :: Prelude.Maybe Prelude.Text,
    -- | A value that indicates whether to copy tags from the DB instance to
    -- snapshots of the DB instance. By default, tags are not copied.
    CreateDBInstance -> Maybe Bool
copyTagsToSnapshot :: Prelude.Maybe Prelude.Bool,
    -- | A value that indicates whether to enable Performance Insights for the DB
    -- Instance. For more information, see
    -- <https://docs.aws.amazon.com/documentdb/latest/developerguide/performance-insights.html Using Amazon Performance Insights>.
    CreateDBInstance -> Maybe Bool
enablePerformanceInsights :: Prelude.Maybe Prelude.Bool,
    -- | The KMS key identifier for encryption of Performance Insights data.
    --
    -- The KMS key identifier is the key ARN, key ID, alias ARN, or alias name
    -- for the KMS key.
    --
    -- If you do not specify a value for PerformanceInsightsKMSKeyId, then
    -- Amazon DocumentDB uses your default KMS key. There is a default KMS key
    -- for your Amazon Web Services account. Your Amazon Web Services account
    -- has a different default KMS key for each Amazon Web Services region.
    CreateDBInstance -> Maybe Text
performanceInsightsKMSKeyId :: Prelude.Maybe Prelude.Text,
    -- | The time range each week during which system maintenance can occur, in
    -- Universal Coordinated Time (UTC).
    --
    -- Format: @ddd:hh24:mi-ddd:hh24:mi@
    --
    -- The default is a 30-minute window selected at random from an 8-hour
    -- block of time for each Amazon Web Services Region, occurring on a random
    -- day of the week.
    --
    -- Valid days: Mon, Tue, Wed, Thu, Fri, Sat, Sun
    --
    -- Constraints: Minimum 30-minute window.
    CreateDBInstance -> Maybe Text
preferredMaintenanceWindow :: Prelude.Maybe Prelude.Text,
    -- | A value that specifies the order in which an Amazon DocumentDB replica
    -- is promoted to the primary instance after a failure of the existing
    -- primary instance.
    --
    -- Default: 1
    --
    -- Valid values: 0-15
    CreateDBInstance -> Maybe Int
promotionTier :: Prelude.Maybe Prelude.Int,
    -- | The tags to be assigned to the instance. You can assign up to 10 tags to
    -- an instance.
    CreateDBInstance -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The instance identifier. This parameter is stored as a lowercase string.
    --
    -- Constraints:
    --
    -- -   Must contain from 1 to 63 letters, numbers, or hyphens.
    --
    -- -   The first character must be a letter.
    --
    -- -   Cannot end with a hyphen or contain two consecutive hyphens.
    --
    -- Example: @mydbinstance@
    CreateDBInstance -> Text
dbInstanceIdentifier :: Prelude.Text,
    -- | The compute and memory capacity of the instance; for example,
    -- @db.r5.large@.
    CreateDBInstance -> Text
dbInstanceClass :: Prelude.Text,
    -- | The name of the database engine to be used for this instance.
    --
    -- Valid value: @docdb@
    CreateDBInstance -> Text
engine :: Prelude.Text,
    -- | The identifier of the cluster that the instance will belong to.
    CreateDBInstance -> Text
dbClusterIdentifier :: Prelude.Text
  }
  deriving (CreateDBInstance -> CreateDBInstance -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateDBInstance -> CreateDBInstance -> Bool
$c/= :: CreateDBInstance -> CreateDBInstance -> Bool
== :: CreateDBInstance -> CreateDBInstance -> Bool
$c== :: CreateDBInstance -> CreateDBInstance -> Bool
Prelude.Eq, ReadPrec [CreateDBInstance]
ReadPrec CreateDBInstance
Int -> ReadS CreateDBInstance
ReadS [CreateDBInstance]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateDBInstance]
$creadListPrec :: ReadPrec [CreateDBInstance]
readPrec :: ReadPrec CreateDBInstance
$creadPrec :: ReadPrec CreateDBInstance
readList :: ReadS [CreateDBInstance]
$creadList :: ReadS [CreateDBInstance]
readsPrec :: Int -> ReadS CreateDBInstance
$creadsPrec :: Int -> ReadS CreateDBInstance
Prelude.Read, Int -> CreateDBInstance -> ShowS
[CreateDBInstance] -> ShowS
CreateDBInstance -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateDBInstance] -> ShowS
$cshowList :: [CreateDBInstance] -> ShowS
show :: CreateDBInstance -> String
$cshow :: CreateDBInstance -> String
showsPrec :: Int -> CreateDBInstance -> ShowS
$cshowsPrec :: Int -> CreateDBInstance -> ShowS
Prelude.Show, forall x. Rep CreateDBInstance x -> CreateDBInstance
forall x. CreateDBInstance -> Rep CreateDBInstance x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateDBInstance x -> CreateDBInstance
$cfrom :: forall x. CreateDBInstance -> Rep CreateDBInstance x
Prelude.Generic)

-- |
-- Create a value of 'CreateDBInstance' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'autoMinorVersionUpgrade', 'createDBInstance_autoMinorVersionUpgrade' - This parameter does not apply to Amazon DocumentDB. Amazon DocumentDB
-- does not perform minor version upgrades regardless of the value set.
--
-- Default: @false@
--
-- 'availabilityZone', 'createDBInstance_availabilityZone' - The Amazon EC2 Availability Zone that the instance is created in.
--
-- Default: A random, system-chosen Availability Zone in the endpoint\'s
-- Amazon Web Services Region.
--
-- Example: @us-east-1d@
--
-- 'copyTagsToSnapshot', 'createDBInstance_copyTagsToSnapshot' - A value that indicates whether to copy tags from the DB instance to
-- snapshots of the DB instance. By default, tags are not copied.
--
-- 'enablePerformanceInsights', 'createDBInstance_enablePerformanceInsights' - A value that indicates whether to enable Performance Insights for the DB
-- Instance. For more information, see
-- <https://docs.aws.amazon.com/documentdb/latest/developerguide/performance-insights.html Using Amazon Performance Insights>.
--
-- 'performanceInsightsKMSKeyId', 'createDBInstance_performanceInsightsKMSKeyId' - The KMS key identifier for encryption of Performance Insights data.
--
-- The KMS key identifier is the key ARN, key ID, alias ARN, or alias name
-- for the KMS key.
--
-- If you do not specify a value for PerformanceInsightsKMSKeyId, then
-- Amazon DocumentDB uses your default KMS key. There is a default KMS key
-- for your Amazon Web Services account. Your Amazon Web Services account
-- has a different default KMS key for each Amazon Web Services region.
--
-- 'preferredMaintenanceWindow', 'createDBInstance_preferredMaintenanceWindow' - The time range each week during which system maintenance can occur, in
-- Universal Coordinated Time (UTC).
--
-- Format: @ddd:hh24:mi-ddd:hh24:mi@
--
-- The default is a 30-minute window selected at random from an 8-hour
-- block of time for each Amazon Web Services Region, occurring on a random
-- day of the week.
--
-- Valid days: Mon, Tue, Wed, Thu, Fri, Sat, Sun
--
-- Constraints: Minimum 30-minute window.
--
-- 'promotionTier', 'createDBInstance_promotionTier' - A value that specifies the order in which an Amazon DocumentDB replica
-- is promoted to the primary instance after a failure of the existing
-- primary instance.
--
-- Default: 1
--
-- Valid values: 0-15
--
-- 'tags', 'createDBInstance_tags' - The tags to be assigned to the instance. You can assign up to 10 tags to
-- an instance.
--
-- 'dbInstanceIdentifier', 'createDBInstance_dbInstanceIdentifier' - The instance identifier. This parameter is stored as a lowercase string.
--
-- Constraints:
--
-- -   Must contain from 1 to 63 letters, numbers, or hyphens.
--
-- -   The first character must be a letter.
--
-- -   Cannot end with a hyphen or contain two consecutive hyphens.
--
-- Example: @mydbinstance@
--
-- 'dbInstanceClass', 'createDBInstance_dbInstanceClass' - The compute and memory capacity of the instance; for example,
-- @db.r5.large@.
--
-- 'engine', 'createDBInstance_engine' - The name of the database engine to be used for this instance.
--
-- Valid value: @docdb@
--
-- 'dbClusterIdentifier', 'createDBInstance_dbClusterIdentifier' - The identifier of the cluster that the instance will belong to.
newCreateDBInstance ::
  -- | 'dbInstanceIdentifier'
  Prelude.Text ->
  -- | 'dbInstanceClass'
  Prelude.Text ->
  -- | 'engine'
  Prelude.Text ->
  -- | 'dbClusterIdentifier'
  Prelude.Text ->
  CreateDBInstance
newCreateDBInstance :: Text -> Text -> Text -> Text -> CreateDBInstance
newCreateDBInstance
  Text
pDBInstanceIdentifier_
  Text
pDBInstanceClass_
  Text
pEngine_
  Text
pDBClusterIdentifier_ =
    CreateDBInstance'
      { $sel:autoMinorVersionUpgrade:CreateDBInstance' :: Maybe Bool
autoMinorVersionUpgrade =
          forall a. Maybe a
Prelude.Nothing,
        $sel:availabilityZone:CreateDBInstance' :: Maybe Text
availabilityZone = forall a. Maybe a
Prelude.Nothing,
        $sel:copyTagsToSnapshot:CreateDBInstance' :: Maybe Bool
copyTagsToSnapshot = forall a. Maybe a
Prelude.Nothing,
        $sel:enablePerformanceInsights:CreateDBInstance' :: Maybe Bool
enablePerformanceInsights = forall a. Maybe a
Prelude.Nothing,
        $sel:performanceInsightsKMSKeyId:CreateDBInstance' :: Maybe Text
performanceInsightsKMSKeyId = forall a. Maybe a
Prelude.Nothing,
        $sel:preferredMaintenanceWindow:CreateDBInstance' :: Maybe Text
preferredMaintenanceWindow = forall a. Maybe a
Prelude.Nothing,
        $sel:promotionTier:CreateDBInstance' :: Maybe Int
promotionTier = forall a. Maybe a
Prelude.Nothing,
        $sel:tags:CreateDBInstance' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
        $sel:dbInstanceIdentifier:CreateDBInstance' :: Text
dbInstanceIdentifier = Text
pDBInstanceIdentifier_,
        $sel:dbInstanceClass:CreateDBInstance' :: Text
dbInstanceClass = Text
pDBInstanceClass_,
        $sel:engine:CreateDBInstance' :: Text
engine = Text
pEngine_,
        $sel:dbClusterIdentifier:CreateDBInstance' :: Text
dbClusterIdentifier = Text
pDBClusterIdentifier_
      }

-- | This parameter does not apply to Amazon DocumentDB. Amazon DocumentDB
-- does not perform minor version upgrades regardless of the value set.
--
-- Default: @false@
createDBInstance_autoMinorVersionUpgrade :: Lens.Lens' CreateDBInstance (Prelude.Maybe Prelude.Bool)
createDBInstance_autoMinorVersionUpgrade :: Lens' CreateDBInstance (Maybe Bool)
createDBInstance_autoMinorVersionUpgrade = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBInstance' {Maybe Bool
autoMinorVersionUpgrade :: Maybe Bool
$sel:autoMinorVersionUpgrade:CreateDBInstance' :: CreateDBInstance -> Maybe Bool
autoMinorVersionUpgrade} -> Maybe Bool
autoMinorVersionUpgrade) (\s :: CreateDBInstance
s@CreateDBInstance' {} Maybe Bool
a -> CreateDBInstance
s {$sel:autoMinorVersionUpgrade:CreateDBInstance' :: Maybe Bool
autoMinorVersionUpgrade = Maybe Bool
a} :: CreateDBInstance)

-- | The Amazon EC2 Availability Zone that the instance is created in.
--
-- Default: A random, system-chosen Availability Zone in the endpoint\'s
-- Amazon Web Services Region.
--
-- Example: @us-east-1d@
createDBInstance_availabilityZone :: Lens.Lens' CreateDBInstance (Prelude.Maybe Prelude.Text)
createDBInstance_availabilityZone :: Lens' CreateDBInstance (Maybe Text)
createDBInstance_availabilityZone = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBInstance' {Maybe Text
availabilityZone :: Maybe Text
$sel:availabilityZone:CreateDBInstance' :: CreateDBInstance -> Maybe Text
availabilityZone} -> Maybe Text
availabilityZone) (\s :: CreateDBInstance
s@CreateDBInstance' {} Maybe Text
a -> CreateDBInstance
s {$sel:availabilityZone:CreateDBInstance' :: Maybe Text
availabilityZone = Maybe Text
a} :: CreateDBInstance)

-- | A value that indicates whether to copy tags from the DB instance to
-- snapshots of the DB instance. By default, tags are not copied.
createDBInstance_copyTagsToSnapshot :: Lens.Lens' CreateDBInstance (Prelude.Maybe Prelude.Bool)
createDBInstance_copyTagsToSnapshot :: Lens' CreateDBInstance (Maybe Bool)
createDBInstance_copyTagsToSnapshot = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBInstance' {Maybe Bool
copyTagsToSnapshot :: Maybe Bool
$sel:copyTagsToSnapshot:CreateDBInstance' :: CreateDBInstance -> Maybe Bool
copyTagsToSnapshot} -> Maybe Bool
copyTagsToSnapshot) (\s :: CreateDBInstance
s@CreateDBInstance' {} Maybe Bool
a -> CreateDBInstance
s {$sel:copyTagsToSnapshot:CreateDBInstance' :: Maybe Bool
copyTagsToSnapshot = Maybe Bool
a} :: CreateDBInstance)

-- | A value that indicates whether to enable Performance Insights for the DB
-- Instance. For more information, see
-- <https://docs.aws.amazon.com/documentdb/latest/developerguide/performance-insights.html Using Amazon Performance Insights>.
createDBInstance_enablePerformanceInsights :: Lens.Lens' CreateDBInstance (Prelude.Maybe Prelude.Bool)
createDBInstance_enablePerformanceInsights :: Lens' CreateDBInstance (Maybe Bool)
createDBInstance_enablePerformanceInsights = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBInstance' {Maybe Bool
enablePerformanceInsights :: Maybe Bool
$sel:enablePerformanceInsights:CreateDBInstance' :: CreateDBInstance -> Maybe Bool
enablePerformanceInsights} -> Maybe Bool
enablePerformanceInsights) (\s :: CreateDBInstance
s@CreateDBInstance' {} Maybe Bool
a -> CreateDBInstance
s {$sel:enablePerformanceInsights:CreateDBInstance' :: Maybe Bool
enablePerformanceInsights = Maybe Bool
a} :: CreateDBInstance)

-- | The KMS key identifier for encryption of Performance Insights data.
--
-- The KMS key identifier is the key ARN, key ID, alias ARN, or alias name
-- for the KMS key.
--
-- If you do not specify a value for PerformanceInsightsKMSKeyId, then
-- Amazon DocumentDB uses your default KMS key. There is a default KMS key
-- for your Amazon Web Services account. Your Amazon Web Services account
-- has a different default KMS key for each Amazon Web Services region.
createDBInstance_performanceInsightsKMSKeyId :: Lens.Lens' CreateDBInstance (Prelude.Maybe Prelude.Text)
createDBInstance_performanceInsightsKMSKeyId :: Lens' CreateDBInstance (Maybe Text)
createDBInstance_performanceInsightsKMSKeyId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBInstance' {Maybe Text
performanceInsightsKMSKeyId :: Maybe Text
$sel:performanceInsightsKMSKeyId:CreateDBInstance' :: CreateDBInstance -> Maybe Text
performanceInsightsKMSKeyId} -> Maybe Text
performanceInsightsKMSKeyId) (\s :: CreateDBInstance
s@CreateDBInstance' {} Maybe Text
a -> CreateDBInstance
s {$sel:performanceInsightsKMSKeyId:CreateDBInstance' :: Maybe Text
performanceInsightsKMSKeyId = Maybe Text
a} :: CreateDBInstance)

-- | The time range each week during which system maintenance can occur, in
-- Universal Coordinated Time (UTC).
--
-- Format: @ddd:hh24:mi-ddd:hh24:mi@
--
-- The default is a 30-minute window selected at random from an 8-hour
-- block of time for each Amazon Web Services Region, occurring on a random
-- day of the week.
--
-- Valid days: Mon, Tue, Wed, Thu, Fri, Sat, Sun
--
-- Constraints: Minimum 30-minute window.
createDBInstance_preferredMaintenanceWindow :: Lens.Lens' CreateDBInstance (Prelude.Maybe Prelude.Text)
createDBInstance_preferredMaintenanceWindow :: Lens' CreateDBInstance (Maybe Text)
createDBInstance_preferredMaintenanceWindow = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBInstance' {Maybe Text
preferredMaintenanceWindow :: Maybe Text
$sel:preferredMaintenanceWindow:CreateDBInstance' :: CreateDBInstance -> Maybe Text
preferredMaintenanceWindow} -> Maybe Text
preferredMaintenanceWindow) (\s :: CreateDBInstance
s@CreateDBInstance' {} Maybe Text
a -> CreateDBInstance
s {$sel:preferredMaintenanceWindow:CreateDBInstance' :: Maybe Text
preferredMaintenanceWindow = Maybe Text
a} :: CreateDBInstance)

-- | A value that specifies the order in which an Amazon DocumentDB replica
-- is promoted to the primary instance after a failure of the existing
-- primary instance.
--
-- Default: 1
--
-- Valid values: 0-15
createDBInstance_promotionTier :: Lens.Lens' CreateDBInstance (Prelude.Maybe Prelude.Int)
createDBInstance_promotionTier :: Lens' CreateDBInstance (Maybe Int)
createDBInstance_promotionTier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBInstance' {Maybe Int
promotionTier :: Maybe Int
$sel:promotionTier:CreateDBInstance' :: CreateDBInstance -> Maybe Int
promotionTier} -> Maybe Int
promotionTier) (\s :: CreateDBInstance
s@CreateDBInstance' {} Maybe Int
a -> CreateDBInstance
s {$sel:promotionTier:CreateDBInstance' :: Maybe Int
promotionTier = Maybe Int
a} :: CreateDBInstance)

-- | The tags to be assigned to the instance. You can assign up to 10 tags to
-- an instance.
createDBInstance_tags :: Lens.Lens' CreateDBInstance (Prelude.Maybe [Tag])
createDBInstance_tags :: Lens' CreateDBInstance (Maybe [Tag])
createDBInstance_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBInstance' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:CreateDBInstance' :: CreateDBInstance -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: CreateDBInstance
s@CreateDBInstance' {} Maybe [Tag]
a -> CreateDBInstance
s {$sel:tags:CreateDBInstance' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: CreateDBInstance) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The instance identifier. This parameter is stored as a lowercase string.
--
-- Constraints:
--
-- -   Must contain from 1 to 63 letters, numbers, or hyphens.
--
-- -   The first character must be a letter.
--
-- -   Cannot end with a hyphen or contain two consecutive hyphens.
--
-- Example: @mydbinstance@
createDBInstance_dbInstanceIdentifier :: Lens.Lens' CreateDBInstance Prelude.Text
createDBInstance_dbInstanceIdentifier :: Lens' CreateDBInstance Text
createDBInstance_dbInstanceIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBInstance' {Text
dbInstanceIdentifier :: Text
$sel:dbInstanceIdentifier:CreateDBInstance' :: CreateDBInstance -> Text
dbInstanceIdentifier} -> Text
dbInstanceIdentifier) (\s :: CreateDBInstance
s@CreateDBInstance' {} Text
a -> CreateDBInstance
s {$sel:dbInstanceIdentifier:CreateDBInstance' :: Text
dbInstanceIdentifier = Text
a} :: CreateDBInstance)

-- | The compute and memory capacity of the instance; for example,
-- @db.r5.large@.
createDBInstance_dbInstanceClass :: Lens.Lens' CreateDBInstance Prelude.Text
createDBInstance_dbInstanceClass :: Lens' CreateDBInstance Text
createDBInstance_dbInstanceClass = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBInstance' {Text
dbInstanceClass :: Text
$sel:dbInstanceClass:CreateDBInstance' :: CreateDBInstance -> Text
dbInstanceClass} -> Text
dbInstanceClass) (\s :: CreateDBInstance
s@CreateDBInstance' {} Text
a -> CreateDBInstance
s {$sel:dbInstanceClass:CreateDBInstance' :: Text
dbInstanceClass = Text
a} :: CreateDBInstance)

-- | The name of the database engine to be used for this instance.
--
-- Valid value: @docdb@
createDBInstance_engine :: Lens.Lens' CreateDBInstance Prelude.Text
createDBInstance_engine :: Lens' CreateDBInstance Text
createDBInstance_engine = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBInstance' {Text
engine :: Text
$sel:engine:CreateDBInstance' :: CreateDBInstance -> Text
engine} -> Text
engine) (\s :: CreateDBInstance
s@CreateDBInstance' {} Text
a -> CreateDBInstance
s {$sel:engine:CreateDBInstance' :: Text
engine = Text
a} :: CreateDBInstance)

-- | The identifier of the cluster that the instance will belong to.
createDBInstance_dbClusterIdentifier :: Lens.Lens' CreateDBInstance Prelude.Text
createDBInstance_dbClusterIdentifier :: Lens' CreateDBInstance Text
createDBInstance_dbClusterIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBInstance' {Text
dbClusterIdentifier :: Text
$sel:dbClusterIdentifier:CreateDBInstance' :: CreateDBInstance -> Text
dbClusterIdentifier} -> Text
dbClusterIdentifier) (\s :: CreateDBInstance
s@CreateDBInstance' {} Text
a -> CreateDBInstance
s {$sel:dbClusterIdentifier:CreateDBInstance' :: Text
dbClusterIdentifier = Text
a} :: CreateDBInstance)

instance Core.AWSRequest CreateDBInstance where
  type
    AWSResponse CreateDBInstance =
      CreateDBInstanceResponse
  request :: (Service -> Service)
-> CreateDBInstance -> Request CreateDBInstance
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy CreateDBInstance
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateDBInstance)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
Text
-> (Int
    -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXMLWrapper
      Text
"CreateDBInstanceResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe DBInstance -> Int -> CreateDBInstanceResponse
CreateDBInstanceResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"DBInstance")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable CreateDBInstance where
  hashWithSalt :: Int -> CreateDBInstance -> Int
hashWithSalt Int
_salt CreateDBInstance' {Maybe Bool
Maybe Int
Maybe [Tag]
Maybe Text
Text
dbClusterIdentifier :: Text
engine :: Text
dbInstanceClass :: Text
dbInstanceIdentifier :: Text
tags :: Maybe [Tag]
promotionTier :: Maybe Int
preferredMaintenanceWindow :: Maybe Text
performanceInsightsKMSKeyId :: Maybe Text
enablePerformanceInsights :: Maybe Bool
copyTagsToSnapshot :: Maybe Bool
availabilityZone :: Maybe Text
autoMinorVersionUpgrade :: Maybe Bool
$sel:dbClusterIdentifier:CreateDBInstance' :: CreateDBInstance -> Text
$sel:engine:CreateDBInstance' :: CreateDBInstance -> Text
$sel:dbInstanceClass:CreateDBInstance' :: CreateDBInstance -> Text
$sel:dbInstanceIdentifier:CreateDBInstance' :: CreateDBInstance -> Text
$sel:tags:CreateDBInstance' :: CreateDBInstance -> Maybe [Tag]
$sel:promotionTier:CreateDBInstance' :: CreateDBInstance -> Maybe Int
$sel:preferredMaintenanceWindow:CreateDBInstance' :: CreateDBInstance -> Maybe Text
$sel:performanceInsightsKMSKeyId:CreateDBInstance' :: CreateDBInstance -> Maybe Text
$sel:enablePerformanceInsights:CreateDBInstance' :: CreateDBInstance -> Maybe Bool
$sel:copyTagsToSnapshot:CreateDBInstance' :: CreateDBInstance -> Maybe Bool
$sel:availabilityZone:CreateDBInstance' :: CreateDBInstance -> Maybe Text
$sel:autoMinorVersionUpgrade:CreateDBInstance' :: CreateDBInstance -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
autoMinorVersionUpgrade
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
availabilityZone
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
copyTagsToSnapshot
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
enablePerformanceInsights
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
performanceInsightsKMSKeyId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
preferredMaintenanceWindow
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
promotionTier
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
dbInstanceIdentifier
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
dbInstanceClass
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
engine
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
dbClusterIdentifier

instance Prelude.NFData CreateDBInstance where
  rnf :: CreateDBInstance -> ()
rnf CreateDBInstance' {Maybe Bool
Maybe Int
Maybe [Tag]
Maybe Text
Text
dbClusterIdentifier :: Text
engine :: Text
dbInstanceClass :: Text
dbInstanceIdentifier :: Text
tags :: Maybe [Tag]
promotionTier :: Maybe Int
preferredMaintenanceWindow :: Maybe Text
performanceInsightsKMSKeyId :: Maybe Text
enablePerformanceInsights :: Maybe Bool
copyTagsToSnapshot :: Maybe Bool
availabilityZone :: Maybe Text
autoMinorVersionUpgrade :: Maybe Bool
$sel:dbClusterIdentifier:CreateDBInstance' :: CreateDBInstance -> Text
$sel:engine:CreateDBInstance' :: CreateDBInstance -> Text
$sel:dbInstanceClass:CreateDBInstance' :: CreateDBInstance -> Text
$sel:dbInstanceIdentifier:CreateDBInstance' :: CreateDBInstance -> Text
$sel:tags:CreateDBInstance' :: CreateDBInstance -> Maybe [Tag]
$sel:promotionTier:CreateDBInstance' :: CreateDBInstance -> Maybe Int
$sel:preferredMaintenanceWindow:CreateDBInstance' :: CreateDBInstance -> Maybe Text
$sel:performanceInsightsKMSKeyId:CreateDBInstance' :: CreateDBInstance -> Maybe Text
$sel:enablePerformanceInsights:CreateDBInstance' :: CreateDBInstance -> Maybe Bool
$sel:copyTagsToSnapshot:CreateDBInstance' :: CreateDBInstance -> Maybe Bool
$sel:availabilityZone:CreateDBInstance' :: CreateDBInstance -> Maybe Text
$sel:autoMinorVersionUpgrade:CreateDBInstance' :: CreateDBInstance -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
autoMinorVersionUpgrade
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
availabilityZone
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
copyTagsToSnapshot
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
enablePerformanceInsights
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
performanceInsightsKMSKeyId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
preferredMaintenanceWindow
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
promotionTier
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
dbInstanceIdentifier
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
dbInstanceClass
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
engine
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
dbClusterIdentifier

instance Data.ToHeaders CreateDBInstance where
  toHeaders :: CreateDBInstance -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToPath CreateDBInstance where
  toPath :: CreateDBInstance -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance Data.ToQuery CreateDBInstance where
  toQuery :: CreateDBInstance -> QueryString
toQuery CreateDBInstance' {Maybe Bool
Maybe Int
Maybe [Tag]
Maybe Text
Text
dbClusterIdentifier :: Text
engine :: Text
dbInstanceClass :: Text
dbInstanceIdentifier :: Text
tags :: Maybe [Tag]
promotionTier :: Maybe Int
preferredMaintenanceWindow :: Maybe Text
performanceInsightsKMSKeyId :: Maybe Text
enablePerformanceInsights :: Maybe Bool
copyTagsToSnapshot :: Maybe Bool
availabilityZone :: Maybe Text
autoMinorVersionUpgrade :: Maybe Bool
$sel:dbClusterIdentifier:CreateDBInstance' :: CreateDBInstance -> Text
$sel:engine:CreateDBInstance' :: CreateDBInstance -> Text
$sel:dbInstanceClass:CreateDBInstance' :: CreateDBInstance -> Text
$sel:dbInstanceIdentifier:CreateDBInstance' :: CreateDBInstance -> Text
$sel:tags:CreateDBInstance' :: CreateDBInstance -> Maybe [Tag]
$sel:promotionTier:CreateDBInstance' :: CreateDBInstance -> Maybe Int
$sel:preferredMaintenanceWindow:CreateDBInstance' :: CreateDBInstance -> Maybe Text
$sel:performanceInsightsKMSKeyId:CreateDBInstance' :: CreateDBInstance -> Maybe Text
$sel:enablePerformanceInsights:CreateDBInstance' :: CreateDBInstance -> Maybe Bool
$sel:copyTagsToSnapshot:CreateDBInstance' :: CreateDBInstance -> Maybe Bool
$sel:availabilityZone:CreateDBInstance' :: CreateDBInstance -> Maybe Text
$sel:autoMinorVersionUpgrade:CreateDBInstance' :: CreateDBInstance -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"CreateDBInstance" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2014-10-31" :: Prelude.ByteString),
        ByteString
"AutoMinorVersionUpgrade"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
autoMinorVersionUpgrade,
        ByteString
"AvailabilityZone" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
availabilityZone,
        ByteString
"CopyTagsToSnapshot" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
copyTagsToSnapshot,
        ByteString
"EnablePerformanceInsights"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
enablePerformanceInsights,
        ByteString
"PerformanceInsightsKMSKeyId"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
performanceInsightsKMSKeyId,
        ByteString
"PreferredMaintenanceWindow"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
preferredMaintenanceWindow,
        ByteString
"PromotionTier" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Int
promotionTier,
        ByteString
"Tags"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: forall a. ToQuery a => a -> QueryString
Data.toQuery
            (forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"Tag" forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Tag]
tags),
        ByteString
"DBInstanceIdentifier" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
dbInstanceIdentifier,
        ByteString
"DBInstanceClass" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
dbInstanceClass,
        ByteString
"Engine" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
engine,
        ByteString
"DBClusterIdentifier" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
dbClusterIdentifier
      ]

-- | /See:/ 'newCreateDBInstanceResponse' smart constructor.
data CreateDBInstanceResponse = CreateDBInstanceResponse'
  { CreateDBInstanceResponse -> Maybe DBInstance
dbInstance :: Prelude.Maybe DBInstance,
    -- | The response's http status code.
    CreateDBInstanceResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateDBInstanceResponse -> CreateDBInstanceResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateDBInstanceResponse -> CreateDBInstanceResponse -> Bool
$c/= :: CreateDBInstanceResponse -> CreateDBInstanceResponse -> Bool
== :: CreateDBInstanceResponse -> CreateDBInstanceResponse -> Bool
$c== :: CreateDBInstanceResponse -> CreateDBInstanceResponse -> Bool
Prelude.Eq, ReadPrec [CreateDBInstanceResponse]
ReadPrec CreateDBInstanceResponse
Int -> ReadS CreateDBInstanceResponse
ReadS [CreateDBInstanceResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateDBInstanceResponse]
$creadListPrec :: ReadPrec [CreateDBInstanceResponse]
readPrec :: ReadPrec CreateDBInstanceResponse
$creadPrec :: ReadPrec CreateDBInstanceResponse
readList :: ReadS [CreateDBInstanceResponse]
$creadList :: ReadS [CreateDBInstanceResponse]
readsPrec :: Int -> ReadS CreateDBInstanceResponse
$creadsPrec :: Int -> ReadS CreateDBInstanceResponse
Prelude.Read, Int -> CreateDBInstanceResponse -> ShowS
[CreateDBInstanceResponse] -> ShowS
CreateDBInstanceResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateDBInstanceResponse] -> ShowS
$cshowList :: [CreateDBInstanceResponse] -> ShowS
show :: CreateDBInstanceResponse -> String
$cshow :: CreateDBInstanceResponse -> String
showsPrec :: Int -> CreateDBInstanceResponse -> ShowS
$cshowsPrec :: Int -> CreateDBInstanceResponse -> ShowS
Prelude.Show, forall x.
Rep CreateDBInstanceResponse x -> CreateDBInstanceResponse
forall x.
CreateDBInstanceResponse -> Rep CreateDBInstanceResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateDBInstanceResponse x -> CreateDBInstanceResponse
$cfrom :: forall x.
CreateDBInstanceResponse -> Rep CreateDBInstanceResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateDBInstanceResponse' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'dbInstance', 'createDBInstanceResponse_dbInstance' - Undocumented member.
--
-- 'httpStatus', 'createDBInstanceResponse_httpStatus' - The response's http status code.
newCreateDBInstanceResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateDBInstanceResponse
newCreateDBInstanceResponse :: Int -> CreateDBInstanceResponse
newCreateDBInstanceResponse Int
pHttpStatus_ =
  CreateDBInstanceResponse'
    { $sel:dbInstance:CreateDBInstanceResponse' :: Maybe DBInstance
dbInstance =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateDBInstanceResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Undocumented member.
createDBInstanceResponse_dbInstance :: Lens.Lens' CreateDBInstanceResponse (Prelude.Maybe DBInstance)
createDBInstanceResponse_dbInstance :: Lens' CreateDBInstanceResponse (Maybe DBInstance)
createDBInstanceResponse_dbInstance = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBInstanceResponse' {Maybe DBInstance
dbInstance :: Maybe DBInstance
$sel:dbInstance:CreateDBInstanceResponse' :: CreateDBInstanceResponse -> Maybe DBInstance
dbInstance} -> Maybe DBInstance
dbInstance) (\s :: CreateDBInstanceResponse
s@CreateDBInstanceResponse' {} Maybe DBInstance
a -> CreateDBInstanceResponse
s {$sel:dbInstance:CreateDBInstanceResponse' :: Maybe DBInstance
dbInstance = Maybe DBInstance
a} :: CreateDBInstanceResponse)

-- | The response's http status code.
createDBInstanceResponse_httpStatus :: Lens.Lens' CreateDBInstanceResponse Prelude.Int
createDBInstanceResponse_httpStatus :: Lens' CreateDBInstanceResponse Int
createDBInstanceResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDBInstanceResponse' {Int
httpStatus :: Int
$sel:httpStatus:CreateDBInstanceResponse' :: CreateDBInstanceResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: CreateDBInstanceResponse
s@CreateDBInstanceResponse' {} Int
a -> CreateDBInstanceResponse
s {$sel:httpStatus:CreateDBInstanceResponse' :: Int
httpStatus = Int
a} :: CreateDBInstanceResponse)

instance Prelude.NFData CreateDBInstanceResponse where
  rnf :: CreateDBInstanceResponse -> ()
rnf CreateDBInstanceResponse' {Int
Maybe DBInstance
httpStatus :: Int
dbInstance :: Maybe DBInstance
$sel:httpStatus:CreateDBInstanceResponse' :: CreateDBInstanceResponse -> Int
$sel:dbInstance:CreateDBInstanceResponse' :: CreateDBInstanceResponse -> Maybe DBInstance
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe DBInstance
dbInstance
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus