stratosphere-0.1.0: examples/rds-master-replica.hs
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE OverloadedStrings #-}
-- | This example creates a Postgres RDS master and slave with a parameter
-- group. Also note the DeletionPolicy of Retain, which will keep the resource
-- alive if you delete the stack.
module Main where
import Control.Lens
import Data.Aeson (object)
import qualified Data.ByteString.Lazy.Char8 as B
import Stratosphere
main :: IO ()
main = B.putStrLn $ encodeTemplate dbTemplate
dbTemplate :: Template
dbTemplate =
template
[ rdsParamGroup & deletionPolicy ?~ Retain
, rdsMaster & deletionPolicy ?~ Retain
, rdsReplica & deletionPolicy ?~ Retain
]
& description ?~ "Stack for and RDS master and replica"
& parameters ?~
[ parameter "RdsMasterPassword" "String"
, parameter "RdsSubnetGroup" "String"
, parameter "VpcId" "String"
]
rdsMaster :: Resource
rdsMaster =
resource "RDSMaster" $
DBInstanceProperties $
dbInstance
"db.t2.micro"
& dbiDBInstanceIdentifier ?~ Literal "db-master"
& dbiStorageType ?~ "gp2"
& dbiAllocatedStorage ?~ "20"
& dbiDBParameterGroupName ?~ toRef rdsParamGroup
& dbiEngine ?~ "postgres"
& dbiEngineVersion ?~ "9.3.10"
& dbiMasterUsername ?~ "postgres"
& dbiMasterUserPassword ?~ Ref "RdsMasterPassword"
& dbiDBName ?~ "the_database"
& dbiPreferredMaintenanceWindow ?~ "Sun:01:00-Sun:02:00"
& dbiBackupRetentionPeriod ?~ "30"
& dbiPreferredBackupWindow ?~ "08:00-09:00"
& dbiPort ?~ "5432"
& dbiBackupRetentionPeriod ?~ "2"
& dbiTags ?~
[ resourceTag "Role" "rds-master"
]
rdsReplica :: Resource
rdsReplica =
resource "RDSReplica" $
DBInstanceProperties $
dbInstance
"db.t2.micro"
& dbiDBInstanceIdentifier ?~ Literal "db-standby"
& dbiSourceDBInstanceIdentifier ?~ toRef rdsMaster
& dbiStorageType ?~ "gp2"
& dbiTags ?~
[ resourceTag "Role" "rds-standby"
]
rdsParamGroup :: Resource
rdsParamGroup =
resource "RDSParamGroup" $
DBParameterGroupProperties $
dbParameterGroup
"Parameter group for RDS instances"
"postgres9.3"
& dbpgParameters ?~
object
[ ("checkpoint_segments", "32")
, ("effective_cache_size", "5584716")
, ("hot_standby_feedback", "1")
, ("log_connections", "1")
, ("log_disconnections", "1")
, ("log_min_duration_statement", "0")
, ("maintenance_work_mem", "2000000")
, ("max_connections", "100")
, ("max_standby_archive_delay", "3600000")
, ("max_standby_streaming_delay", "3600000")
, ("wal_buffers", "2000")
, ("work_mem", "400000")
]