diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Change Log
 
+## 0.24.0
+
+* Update resource specification document to version 2.4.0
+
 ## 0.23.0
 
 * Update resource specification document to version 2.3.0
diff --git a/library-gen/Stratosphere/Resources.hs b/library-gen/Stratosphere/Resources.hs
--- a/library-gen/Stratosphere/Resources.hs
+++ b/library-gen/Stratosphere/Resources.hs
@@ -247,6 +247,11 @@
 import Stratosphere.Resources.LogsLogStream as X
 import Stratosphere.Resources.LogsMetricFilter as X
 import Stratosphere.Resources.LogsSubscriptionFilter as X
+import Stratosphere.Resources.NeptuneDBCluster as X
+import Stratosphere.Resources.NeptuneDBClusterParameterGroup as X
+import Stratosphere.Resources.NeptuneDBInstance as X
+import Stratosphere.Resources.NeptuneDBParameterGroup as X
+import Stratosphere.Resources.NeptuneDBSubnetGroup as X
 import Stratosphere.Resources.OpsWorksApp as X
 import Stratosphere.Resources.OpsWorksElasticLoadBalancerAttachment as X
 import Stratosphere.Resources.OpsWorksInstance as X
@@ -1096,6 +1101,11 @@
   | LogsLogStreamProperties LogsLogStream
   | LogsMetricFilterProperties LogsMetricFilter
   | LogsSubscriptionFilterProperties LogsSubscriptionFilter
+  | NeptuneDBClusterProperties NeptuneDBCluster
+  | NeptuneDBClusterParameterGroupProperties NeptuneDBClusterParameterGroup
+  | NeptuneDBInstanceProperties NeptuneDBInstance
+  | NeptuneDBParameterGroupProperties NeptuneDBParameterGroup
+  | NeptuneDBSubnetGroupProperties NeptuneDBSubnetGroup
   | OpsWorksAppProperties OpsWorksApp
   | OpsWorksElasticLoadBalancerAttachmentProperties OpsWorksElasticLoadBalancerAttachment
   | OpsWorksInstanceProperties OpsWorksInstance
@@ -1629,6 +1639,16 @@
   [ "Type" .= ("AWS::Logs::MetricFilter" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (LogsSubscriptionFilterProperties x) =
   [ "Type" .= ("AWS::Logs::SubscriptionFilter" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (NeptuneDBClusterProperties x) =
+  [ "Type" .= ("AWS::Neptune::DBCluster" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (NeptuneDBClusterParameterGroupProperties x) =
+  [ "Type" .= ("AWS::Neptune::DBClusterParameterGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (NeptuneDBInstanceProperties x) =
+  [ "Type" .= ("AWS::Neptune::DBInstance" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (NeptuneDBParameterGroupProperties x) =
+  [ "Type" .= ("AWS::Neptune::DBParameterGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (NeptuneDBSubnetGroupProperties x) =
+  [ "Type" .= ("AWS::Neptune::DBSubnetGroup" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (OpsWorksAppProperties x) =
   [ "Type" .= ("AWS::OpsWorks::App" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (OpsWorksElasticLoadBalancerAttachmentProperties x) =
@@ -1991,6 +2011,11 @@
          "AWS::Logs::LogStream" -> LogsLogStreamProperties <$> (o .: "Properties")
          "AWS::Logs::MetricFilter" -> LogsMetricFilterProperties <$> (o .: "Properties")
          "AWS::Logs::SubscriptionFilter" -> LogsSubscriptionFilterProperties <$> (o .: "Properties")
+         "AWS::Neptune::DBCluster" -> NeptuneDBClusterProperties <$> (o .: "Properties")
+         "AWS::Neptune::DBClusterParameterGroup" -> NeptuneDBClusterParameterGroupProperties <$> (o .: "Properties")
+         "AWS::Neptune::DBInstance" -> NeptuneDBInstanceProperties <$> (o .: "Properties")
+         "AWS::Neptune::DBParameterGroup" -> NeptuneDBParameterGroupProperties <$> (o .: "Properties")
+         "AWS::Neptune::DBSubnetGroup" -> NeptuneDBSubnetGroupProperties <$> (o .: "Properties")
          "AWS::OpsWorks::App" -> OpsWorksAppProperties <$> (o .: "Properties")
          "AWS::OpsWorks::ElasticLoadBalancerAttachment" -> OpsWorksElasticLoadBalancerAttachmentProperties <$> (o .: "Properties")
          "AWS::OpsWorks::Instance" -> OpsWorksInstanceProperties <$> (o .: "Properties")
diff --git a/library-gen/Stratosphere/Resources/GuardDutyMaster.hs b/library-gen/Stratosphere/Resources/GuardDutyMaster.hs
--- a/library-gen/Stratosphere/Resources/GuardDutyMaster.hs
+++ b/library-gen/Stratosphere/Resources/GuardDutyMaster.hs
@@ -14,7 +14,7 @@
 data GuardDutyMaster =
   GuardDutyMaster
   { _guardDutyMasterDetectorId :: Val Text
-  , _guardDutyMasterInvitationId :: Val Text
+  , _guardDutyMasterInvitationId :: Maybe (Val Text)
   , _guardDutyMasterMasterId :: Val Text
   } deriving (Show, Eq)
 
@@ -23,7 +23,7 @@
     object $
     catMaybes
     [ (Just . ("DetectorId",) . toJSON) _guardDutyMasterDetectorId
-    , (Just . ("InvitationId",) . toJSON) _guardDutyMasterInvitationId
+    , fmap (("InvitationId",) . toJSON) _guardDutyMasterInvitationId
     , (Just . ("MasterId",) . toJSON) _guardDutyMasterMasterId
     ]
 
@@ -31,7 +31,7 @@
   parseJSON (Object obj) =
     GuardDutyMaster <$>
       (obj .: "DetectorId") <*>
-      (obj .: "InvitationId") <*>
+      (obj .:? "InvitationId") <*>
       (obj .: "MasterId")
   parseJSON _ = mempty
 
@@ -39,13 +39,12 @@
 -- arguments.
 guardDutyMaster
   :: Val Text -- ^ 'gdmaDetectorId'
-  -> Val Text -- ^ 'gdmaInvitationId'
   -> Val Text -- ^ 'gdmaMasterId'
   -> GuardDutyMaster
-guardDutyMaster detectorIdarg invitationIdarg masterIdarg =
+guardDutyMaster detectorIdarg masterIdarg =
   GuardDutyMaster
   { _guardDutyMasterDetectorId = detectorIdarg
-  , _guardDutyMasterInvitationId = invitationIdarg
+  , _guardDutyMasterInvitationId = Nothing
   , _guardDutyMasterMasterId = masterIdarg
   }
 
@@ -54,7 +53,7 @@
 gdmaDetectorId = lens _guardDutyMasterDetectorId (\s a -> s { _guardDutyMasterDetectorId = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-guardduty-master.html#cfn-guardduty-master-invitationid
-gdmaInvitationId :: Lens' GuardDutyMaster (Val Text)
+gdmaInvitationId :: Lens' GuardDutyMaster (Maybe (Val Text))
 gdmaInvitationId = lens _guardDutyMasterInvitationId (\s a -> s { _guardDutyMasterInvitationId = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-guardduty-master.html#cfn-guardduty-master-masterid
diff --git a/library-gen/Stratosphere/Resources/NeptuneDBCluster.hs b/library-gen/Stratosphere/Resources/NeptuneDBCluster.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/NeptuneDBCluster.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html
+
+module Stratosphere.Resources.NeptuneDBCluster where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for NeptuneDBCluster. See 'neptuneDBCluster'
+-- for a more convenient constructor.
+data NeptuneDBCluster =
+  NeptuneDBCluster
+  { _neptuneDBClusterAvailabilityZones :: Maybe (ValList Text)
+  , _neptuneDBClusterBackupRetentionPeriod :: Maybe (Val Integer)
+  , _neptuneDBClusterDBClusterIdentifier :: Maybe (Val Text)
+  , _neptuneDBClusterDBClusterParameterGroupName :: Maybe (Val Text)
+  , _neptuneDBClusterDBSubnetGroupName :: Maybe (Val Text)
+  , _neptuneDBClusterIamAuthEnabled :: Maybe (Val Bool)
+  , _neptuneDBClusterKmsKeyId :: Maybe (Val Text)
+  , _neptuneDBClusterPort :: Maybe (Val Integer)
+  , _neptuneDBClusterPreferredBackupWindow :: Maybe (Val Text)
+  , _neptuneDBClusterPreferredMaintenanceWindow :: Maybe (Val Text)
+  , _neptuneDBClusterSnapshotIdentifier :: Maybe (Val Text)
+  , _neptuneDBClusterStorageEncrypted :: Maybe (Val Bool)
+  , _neptuneDBClusterTags :: Maybe [Tag]
+  , _neptuneDBClusterVpcSecurityGroupIds :: Maybe (ValList Text)
+  } deriving (Show, Eq)
+
+instance ToJSON NeptuneDBCluster where
+  toJSON NeptuneDBCluster{..} =
+    object $
+    catMaybes
+    [ fmap (("AvailabilityZones",) . toJSON) _neptuneDBClusterAvailabilityZones
+    , fmap (("BackupRetentionPeriod",) . toJSON . fmap Integer') _neptuneDBClusterBackupRetentionPeriod
+    , fmap (("DBClusterIdentifier",) . toJSON) _neptuneDBClusterDBClusterIdentifier
+    , fmap (("DBClusterParameterGroupName",) . toJSON) _neptuneDBClusterDBClusterParameterGroupName
+    , fmap (("DBSubnetGroupName",) . toJSON) _neptuneDBClusterDBSubnetGroupName
+    , fmap (("IamAuthEnabled",) . toJSON . fmap Bool') _neptuneDBClusterIamAuthEnabled
+    , fmap (("KmsKeyId",) . toJSON) _neptuneDBClusterKmsKeyId
+    , fmap (("Port",) . toJSON . fmap Integer') _neptuneDBClusterPort
+    , fmap (("PreferredBackupWindow",) . toJSON) _neptuneDBClusterPreferredBackupWindow
+    , fmap (("PreferredMaintenanceWindow",) . toJSON) _neptuneDBClusterPreferredMaintenanceWindow
+    , fmap (("SnapshotIdentifier",) . toJSON) _neptuneDBClusterSnapshotIdentifier
+    , fmap (("StorageEncrypted",) . toJSON . fmap Bool') _neptuneDBClusterStorageEncrypted
+    , fmap (("Tags",) . toJSON) _neptuneDBClusterTags
+    , fmap (("VpcSecurityGroupIds",) . toJSON) _neptuneDBClusterVpcSecurityGroupIds
+    ]
+
+instance FromJSON NeptuneDBCluster where
+  parseJSON (Object obj) =
+    NeptuneDBCluster <$>
+      (obj .:? "AvailabilityZones") <*>
+      fmap (fmap (fmap unInteger')) (obj .:? "BackupRetentionPeriod") <*>
+      (obj .:? "DBClusterIdentifier") <*>
+      (obj .:? "DBClusterParameterGroupName") <*>
+      (obj .:? "DBSubnetGroupName") <*>
+      fmap (fmap (fmap unBool')) (obj .:? "IamAuthEnabled") <*>
+      (obj .:? "KmsKeyId") <*>
+      fmap (fmap (fmap unInteger')) (obj .:? "Port") <*>
+      (obj .:? "PreferredBackupWindow") <*>
+      (obj .:? "PreferredMaintenanceWindow") <*>
+      (obj .:? "SnapshotIdentifier") <*>
+      fmap (fmap (fmap unBool')) (obj .:? "StorageEncrypted") <*>
+      (obj .:? "Tags") <*>
+      (obj .:? "VpcSecurityGroupIds")
+  parseJSON _ = mempty
+
+-- | Constructor for 'NeptuneDBCluster' containing required fields as
+-- arguments.
+neptuneDBCluster
+  :: NeptuneDBCluster
+neptuneDBCluster  =
+  NeptuneDBCluster
+  { _neptuneDBClusterAvailabilityZones = Nothing
+  , _neptuneDBClusterBackupRetentionPeriod = Nothing
+  , _neptuneDBClusterDBClusterIdentifier = Nothing
+  , _neptuneDBClusterDBClusterParameterGroupName = Nothing
+  , _neptuneDBClusterDBSubnetGroupName = Nothing
+  , _neptuneDBClusterIamAuthEnabled = Nothing
+  , _neptuneDBClusterKmsKeyId = Nothing
+  , _neptuneDBClusterPort = Nothing
+  , _neptuneDBClusterPreferredBackupWindow = Nothing
+  , _neptuneDBClusterPreferredMaintenanceWindow = Nothing
+  , _neptuneDBClusterSnapshotIdentifier = Nothing
+  , _neptuneDBClusterStorageEncrypted = Nothing
+  , _neptuneDBClusterTags = Nothing
+  , _neptuneDBClusterVpcSecurityGroupIds = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html#cfn-neptune-dbcluster-availabilityzones
+ndbcAvailabilityZones :: Lens' NeptuneDBCluster (Maybe (ValList Text))
+ndbcAvailabilityZones = lens _neptuneDBClusterAvailabilityZones (\s a -> s { _neptuneDBClusterAvailabilityZones = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html#cfn-neptune-dbcluster-backupretentionperiod
+ndbcBackupRetentionPeriod :: Lens' NeptuneDBCluster (Maybe (Val Integer))
+ndbcBackupRetentionPeriod = lens _neptuneDBClusterBackupRetentionPeriod (\s a -> s { _neptuneDBClusterBackupRetentionPeriod = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html#cfn-neptune-dbcluster-dbclusteridentifier
+ndbcDBClusterIdentifier :: Lens' NeptuneDBCluster (Maybe (Val Text))
+ndbcDBClusterIdentifier = lens _neptuneDBClusterDBClusterIdentifier (\s a -> s { _neptuneDBClusterDBClusterIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html#cfn-neptune-dbcluster-dbclusterparametergroupname
+ndbcDBClusterParameterGroupName :: Lens' NeptuneDBCluster (Maybe (Val Text))
+ndbcDBClusterParameterGroupName = lens _neptuneDBClusterDBClusterParameterGroupName (\s a -> s { _neptuneDBClusterDBClusterParameterGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html#cfn-neptune-dbcluster-dbsubnetgroupname
+ndbcDBSubnetGroupName :: Lens' NeptuneDBCluster (Maybe (Val Text))
+ndbcDBSubnetGroupName = lens _neptuneDBClusterDBSubnetGroupName (\s a -> s { _neptuneDBClusterDBSubnetGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html#cfn-neptune-dbcluster-iamauthenabled
+ndbcIamAuthEnabled :: Lens' NeptuneDBCluster (Maybe (Val Bool))
+ndbcIamAuthEnabled = lens _neptuneDBClusterIamAuthEnabled (\s a -> s { _neptuneDBClusterIamAuthEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html#cfn-neptune-dbcluster-kmskeyid
+ndbcKmsKeyId :: Lens' NeptuneDBCluster (Maybe (Val Text))
+ndbcKmsKeyId = lens _neptuneDBClusterKmsKeyId (\s a -> s { _neptuneDBClusterKmsKeyId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html#cfn-neptune-dbcluster-port
+ndbcPort :: Lens' NeptuneDBCluster (Maybe (Val Integer))
+ndbcPort = lens _neptuneDBClusterPort (\s a -> s { _neptuneDBClusterPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html#cfn-neptune-dbcluster-preferredbackupwindow
+ndbcPreferredBackupWindow :: Lens' NeptuneDBCluster (Maybe (Val Text))
+ndbcPreferredBackupWindow = lens _neptuneDBClusterPreferredBackupWindow (\s a -> s { _neptuneDBClusterPreferredBackupWindow = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html#cfn-neptune-dbcluster-preferredmaintenancewindow
+ndbcPreferredMaintenanceWindow :: Lens' NeptuneDBCluster (Maybe (Val Text))
+ndbcPreferredMaintenanceWindow = lens _neptuneDBClusterPreferredMaintenanceWindow (\s a -> s { _neptuneDBClusterPreferredMaintenanceWindow = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html#cfn-neptune-dbcluster-snapshotidentifier
+ndbcSnapshotIdentifier :: Lens' NeptuneDBCluster (Maybe (Val Text))
+ndbcSnapshotIdentifier = lens _neptuneDBClusterSnapshotIdentifier (\s a -> s { _neptuneDBClusterSnapshotIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html#cfn-neptune-dbcluster-storageencrypted
+ndbcStorageEncrypted :: Lens' NeptuneDBCluster (Maybe (Val Bool))
+ndbcStorageEncrypted = lens _neptuneDBClusterStorageEncrypted (\s a -> s { _neptuneDBClusterStorageEncrypted = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html#cfn-neptune-dbcluster-tags
+ndbcTags :: Lens' NeptuneDBCluster (Maybe [Tag])
+ndbcTags = lens _neptuneDBClusterTags (\s a -> s { _neptuneDBClusterTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html#cfn-neptune-dbcluster-vpcsecuritygroupids
+ndbcVpcSecurityGroupIds :: Lens' NeptuneDBCluster (Maybe (ValList Text))
+ndbcVpcSecurityGroupIds = lens _neptuneDBClusterVpcSecurityGroupIds (\s a -> s { _neptuneDBClusterVpcSecurityGroupIds = a })
diff --git a/library-gen/Stratosphere/Resources/NeptuneDBClusterParameterGroup.hs b/library-gen/Stratosphere/Resources/NeptuneDBClusterParameterGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/NeptuneDBClusterParameterGroup.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbclusterparametergroup.html
+
+module Stratosphere.Resources.NeptuneDBClusterParameterGroup where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for NeptuneDBClusterParameterGroup. See
+-- 'neptuneDBClusterParameterGroup' for a more convenient constructor.
+data NeptuneDBClusterParameterGroup =
+  NeptuneDBClusterParameterGroup
+  { _neptuneDBClusterParameterGroupDescription :: Val Text
+  , _neptuneDBClusterParameterGroupFamily :: Val Text
+  , _neptuneDBClusterParameterGroupName :: Maybe (Val Text)
+  , _neptuneDBClusterParameterGroupParameters :: Object
+  , _neptuneDBClusterParameterGroupTags :: Maybe [Tag]
+  } deriving (Show, Eq)
+
+instance ToJSON NeptuneDBClusterParameterGroup where
+  toJSON NeptuneDBClusterParameterGroup{..} =
+    object $
+    catMaybes
+    [ (Just . ("Description",) . toJSON) _neptuneDBClusterParameterGroupDescription
+    , (Just . ("Family",) . toJSON) _neptuneDBClusterParameterGroupFamily
+    , fmap (("Name",) . toJSON) _neptuneDBClusterParameterGroupName
+    , (Just . ("Parameters",) . toJSON) _neptuneDBClusterParameterGroupParameters
+    , fmap (("Tags",) . toJSON) _neptuneDBClusterParameterGroupTags
+    ]
+
+instance FromJSON NeptuneDBClusterParameterGroup where
+  parseJSON (Object obj) =
+    NeptuneDBClusterParameterGroup <$>
+      (obj .: "Description") <*>
+      (obj .: "Family") <*>
+      (obj .:? "Name") <*>
+      (obj .: "Parameters") <*>
+      (obj .:? "Tags")
+  parseJSON _ = mempty
+
+-- | Constructor for 'NeptuneDBClusterParameterGroup' containing required
+-- fields as arguments.
+neptuneDBClusterParameterGroup
+  :: Val Text -- ^ 'ndbcpgDescription'
+  -> Val Text -- ^ 'ndbcpgFamily'
+  -> Object -- ^ 'ndbcpgParameters'
+  -> NeptuneDBClusterParameterGroup
+neptuneDBClusterParameterGroup descriptionarg familyarg parametersarg =
+  NeptuneDBClusterParameterGroup
+  { _neptuneDBClusterParameterGroupDescription = descriptionarg
+  , _neptuneDBClusterParameterGroupFamily = familyarg
+  , _neptuneDBClusterParameterGroupName = Nothing
+  , _neptuneDBClusterParameterGroupParameters = parametersarg
+  , _neptuneDBClusterParameterGroupTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbclusterparametergroup.html#cfn-neptune-dbclusterparametergroup-description
+ndbcpgDescription :: Lens' NeptuneDBClusterParameterGroup (Val Text)
+ndbcpgDescription = lens _neptuneDBClusterParameterGroupDescription (\s a -> s { _neptuneDBClusterParameterGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbclusterparametergroup.html#cfn-neptune-dbclusterparametergroup-family
+ndbcpgFamily :: Lens' NeptuneDBClusterParameterGroup (Val Text)
+ndbcpgFamily = lens _neptuneDBClusterParameterGroupFamily (\s a -> s { _neptuneDBClusterParameterGroupFamily = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbclusterparametergroup.html#cfn-neptune-dbclusterparametergroup-name
+ndbcpgName :: Lens' NeptuneDBClusterParameterGroup (Maybe (Val Text))
+ndbcpgName = lens _neptuneDBClusterParameterGroupName (\s a -> s { _neptuneDBClusterParameterGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbclusterparametergroup.html#cfn-neptune-dbclusterparametergroup-parameters
+ndbcpgParameters :: Lens' NeptuneDBClusterParameterGroup Object
+ndbcpgParameters = lens _neptuneDBClusterParameterGroupParameters (\s a -> s { _neptuneDBClusterParameterGroupParameters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbclusterparametergroup.html#cfn-neptune-dbclusterparametergroup-tags
+ndbcpgTags :: Lens' NeptuneDBClusterParameterGroup (Maybe [Tag])
+ndbcpgTags = lens _neptuneDBClusterParameterGroupTags (\s a -> s { _neptuneDBClusterParameterGroupTags = a })
diff --git a/library-gen/Stratosphere/Resources/NeptuneDBInstance.hs b/library-gen/Stratosphere/Resources/NeptuneDBInstance.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/NeptuneDBInstance.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbinstance.html
+
+module Stratosphere.Resources.NeptuneDBInstance where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for NeptuneDBInstance. See 'neptuneDBInstance'
+-- for a more convenient constructor.
+data NeptuneDBInstance =
+  NeptuneDBInstance
+  { _neptuneDBInstanceAllowMajorVersionUpgrade :: Maybe (Val Bool)
+  , _neptuneDBInstanceAutoMinorVersionUpgrade :: Maybe (Val Bool)
+  , _neptuneDBInstanceAvailabilityZone :: Maybe (Val Text)
+  , _neptuneDBInstanceDBClusterIdentifier :: Maybe (Val Text)
+  , _neptuneDBInstanceDBInstanceClass :: Val Text
+  , _neptuneDBInstanceDBInstanceIdentifier :: Maybe (Val Text)
+  , _neptuneDBInstanceDBParameterGroupName :: Maybe (Val Text)
+  , _neptuneDBInstanceDBSnapshotIdentifier :: Maybe (Val Text)
+  , _neptuneDBInstanceDBSubnetGroupName :: Maybe (Val Text)
+  , _neptuneDBInstancePreferredMaintenanceWindow :: Maybe (Val Text)
+  , _neptuneDBInstanceTags :: Maybe [Tag]
+  } deriving (Show, Eq)
+
+instance ToJSON NeptuneDBInstance where
+  toJSON NeptuneDBInstance{..} =
+    object $
+    catMaybes
+    [ fmap (("AllowMajorVersionUpgrade",) . toJSON . fmap Bool') _neptuneDBInstanceAllowMajorVersionUpgrade
+    , fmap (("AutoMinorVersionUpgrade",) . toJSON . fmap Bool') _neptuneDBInstanceAutoMinorVersionUpgrade
+    , fmap (("AvailabilityZone",) . toJSON) _neptuneDBInstanceAvailabilityZone
+    , fmap (("DBClusterIdentifier",) . toJSON) _neptuneDBInstanceDBClusterIdentifier
+    , (Just . ("DBInstanceClass",) . toJSON) _neptuneDBInstanceDBInstanceClass
+    , fmap (("DBInstanceIdentifier",) . toJSON) _neptuneDBInstanceDBInstanceIdentifier
+    , fmap (("DBParameterGroupName",) . toJSON) _neptuneDBInstanceDBParameterGroupName
+    , fmap (("DBSnapshotIdentifier",) . toJSON) _neptuneDBInstanceDBSnapshotIdentifier
+    , fmap (("DBSubnetGroupName",) . toJSON) _neptuneDBInstanceDBSubnetGroupName
+    , fmap (("PreferredMaintenanceWindow",) . toJSON) _neptuneDBInstancePreferredMaintenanceWindow
+    , fmap (("Tags",) . toJSON) _neptuneDBInstanceTags
+    ]
+
+instance FromJSON NeptuneDBInstance where
+  parseJSON (Object obj) =
+    NeptuneDBInstance <$>
+      fmap (fmap (fmap unBool')) (obj .:? "AllowMajorVersionUpgrade") <*>
+      fmap (fmap (fmap unBool')) (obj .:? "AutoMinorVersionUpgrade") <*>
+      (obj .:? "AvailabilityZone") <*>
+      (obj .:? "DBClusterIdentifier") <*>
+      (obj .: "DBInstanceClass") <*>
+      (obj .:? "DBInstanceIdentifier") <*>
+      (obj .:? "DBParameterGroupName") <*>
+      (obj .:? "DBSnapshotIdentifier") <*>
+      (obj .:? "DBSubnetGroupName") <*>
+      (obj .:? "PreferredMaintenanceWindow") <*>
+      (obj .:? "Tags")
+  parseJSON _ = mempty
+
+-- | Constructor for 'NeptuneDBInstance' containing required fields as
+-- arguments.
+neptuneDBInstance
+  :: Val Text -- ^ 'ndbiDBInstanceClass'
+  -> NeptuneDBInstance
+neptuneDBInstance dBInstanceClassarg =
+  NeptuneDBInstance
+  { _neptuneDBInstanceAllowMajorVersionUpgrade = Nothing
+  , _neptuneDBInstanceAutoMinorVersionUpgrade = Nothing
+  , _neptuneDBInstanceAvailabilityZone = Nothing
+  , _neptuneDBInstanceDBClusterIdentifier = Nothing
+  , _neptuneDBInstanceDBInstanceClass = dBInstanceClassarg
+  , _neptuneDBInstanceDBInstanceIdentifier = Nothing
+  , _neptuneDBInstanceDBParameterGroupName = Nothing
+  , _neptuneDBInstanceDBSnapshotIdentifier = Nothing
+  , _neptuneDBInstanceDBSubnetGroupName = Nothing
+  , _neptuneDBInstancePreferredMaintenanceWindow = Nothing
+  , _neptuneDBInstanceTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbinstance.html#cfn-neptune-dbinstance-allowmajorversionupgrade
+ndbiAllowMajorVersionUpgrade :: Lens' NeptuneDBInstance (Maybe (Val Bool))
+ndbiAllowMajorVersionUpgrade = lens _neptuneDBInstanceAllowMajorVersionUpgrade (\s a -> s { _neptuneDBInstanceAllowMajorVersionUpgrade = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbinstance.html#cfn-neptune-dbinstance-autominorversionupgrade
+ndbiAutoMinorVersionUpgrade :: Lens' NeptuneDBInstance (Maybe (Val Bool))
+ndbiAutoMinorVersionUpgrade = lens _neptuneDBInstanceAutoMinorVersionUpgrade (\s a -> s { _neptuneDBInstanceAutoMinorVersionUpgrade = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbinstance.html#cfn-neptune-dbinstance-availabilityzone
+ndbiAvailabilityZone :: Lens' NeptuneDBInstance (Maybe (Val Text))
+ndbiAvailabilityZone = lens _neptuneDBInstanceAvailabilityZone (\s a -> s { _neptuneDBInstanceAvailabilityZone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbinstance.html#cfn-neptune-dbinstance-dbclusteridentifier
+ndbiDBClusterIdentifier :: Lens' NeptuneDBInstance (Maybe (Val Text))
+ndbiDBClusterIdentifier = lens _neptuneDBInstanceDBClusterIdentifier (\s a -> s { _neptuneDBInstanceDBClusterIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbinstance.html#cfn-neptune-dbinstance-dbinstanceclass
+ndbiDBInstanceClass :: Lens' NeptuneDBInstance (Val Text)
+ndbiDBInstanceClass = lens _neptuneDBInstanceDBInstanceClass (\s a -> s { _neptuneDBInstanceDBInstanceClass = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbinstance.html#cfn-neptune-dbinstance-dbinstanceidentifier
+ndbiDBInstanceIdentifier :: Lens' NeptuneDBInstance (Maybe (Val Text))
+ndbiDBInstanceIdentifier = lens _neptuneDBInstanceDBInstanceIdentifier (\s a -> s { _neptuneDBInstanceDBInstanceIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbinstance.html#cfn-neptune-dbinstance-dbparametergroupname
+ndbiDBParameterGroupName :: Lens' NeptuneDBInstance (Maybe (Val Text))
+ndbiDBParameterGroupName = lens _neptuneDBInstanceDBParameterGroupName (\s a -> s { _neptuneDBInstanceDBParameterGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbinstance.html#cfn-neptune-dbinstance-dbsnapshotidentifier
+ndbiDBSnapshotIdentifier :: Lens' NeptuneDBInstance (Maybe (Val Text))
+ndbiDBSnapshotIdentifier = lens _neptuneDBInstanceDBSnapshotIdentifier (\s a -> s { _neptuneDBInstanceDBSnapshotIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbinstance.html#cfn-neptune-dbinstance-dbsubnetgroupname
+ndbiDBSubnetGroupName :: Lens' NeptuneDBInstance (Maybe (Val Text))
+ndbiDBSubnetGroupName = lens _neptuneDBInstanceDBSubnetGroupName (\s a -> s { _neptuneDBInstanceDBSubnetGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbinstance.html#cfn-neptune-dbinstance-preferredmaintenancewindow
+ndbiPreferredMaintenanceWindow :: Lens' NeptuneDBInstance (Maybe (Val Text))
+ndbiPreferredMaintenanceWindow = lens _neptuneDBInstancePreferredMaintenanceWindow (\s a -> s { _neptuneDBInstancePreferredMaintenanceWindow = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbinstance.html#cfn-neptune-dbinstance-tags
+ndbiTags :: Lens' NeptuneDBInstance (Maybe [Tag])
+ndbiTags = lens _neptuneDBInstanceTags (\s a -> s { _neptuneDBInstanceTags = a })
diff --git a/library-gen/Stratosphere/Resources/NeptuneDBParameterGroup.hs b/library-gen/Stratosphere/Resources/NeptuneDBParameterGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/NeptuneDBParameterGroup.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbparametergroup.html
+
+module Stratosphere.Resources.NeptuneDBParameterGroup where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for NeptuneDBParameterGroup. See
+-- 'neptuneDBParameterGroup' for a more convenient constructor.
+data NeptuneDBParameterGroup =
+  NeptuneDBParameterGroup
+  { _neptuneDBParameterGroupDescription :: Val Text
+  , _neptuneDBParameterGroupFamily :: Val Text
+  , _neptuneDBParameterGroupName :: Maybe (Val Text)
+  , _neptuneDBParameterGroupParameters :: Object
+  , _neptuneDBParameterGroupTags :: Maybe [Tag]
+  } deriving (Show, Eq)
+
+instance ToJSON NeptuneDBParameterGroup where
+  toJSON NeptuneDBParameterGroup{..} =
+    object $
+    catMaybes
+    [ (Just . ("Description",) . toJSON) _neptuneDBParameterGroupDescription
+    , (Just . ("Family",) . toJSON) _neptuneDBParameterGroupFamily
+    , fmap (("Name",) . toJSON) _neptuneDBParameterGroupName
+    , (Just . ("Parameters",) . toJSON) _neptuneDBParameterGroupParameters
+    , fmap (("Tags",) . toJSON) _neptuneDBParameterGroupTags
+    ]
+
+instance FromJSON NeptuneDBParameterGroup where
+  parseJSON (Object obj) =
+    NeptuneDBParameterGroup <$>
+      (obj .: "Description") <*>
+      (obj .: "Family") <*>
+      (obj .:? "Name") <*>
+      (obj .: "Parameters") <*>
+      (obj .:? "Tags")
+  parseJSON _ = mempty
+
+-- | Constructor for 'NeptuneDBParameterGroup' containing required fields as
+-- arguments.
+neptuneDBParameterGroup
+  :: Val Text -- ^ 'ndbpgDescription'
+  -> Val Text -- ^ 'ndbpgFamily'
+  -> Object -- ^ 'ndbpgParameters'
+  -> NeptuneDBParameterGroup
+neptuneDBParameterGroup descriptionarg familyarg parametersarg =
+  NeptuneDBParameterGroup
+  { _neptuneDBParameterGroupDescription = descriptionarg
+  , _neptuneDBParameterGroupFamily = familyarg
+  , _neptuneDBParameterGroupName = Nothing
+  , _neptuneDBParameterGroupParameters = parametersarg
+  , _neptuneDBParameterGroupTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbparametergroup.html#cfn-neptune-dbparametergroup-description
+ndbpgDescription :: Lens' NeptuneDBParameterGroup (Val Text)
+ndbpgDescription = lens _neptuneDBParameterGroupDescription (\s a -> s { _neptuneDBParameterGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbparametergroup.html#cfn-neptune-dbparametergroup-family
+ndbpgFamily :: Lens' NeptuneDBParameterGroup (Val Text)
+ndbpgFamily = lens _neptuneDBParameterGroupFamily (\s a -> s { _neptuneDBParameterGroupFamily = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbparametergroup.html#cfn-neptune-dbparametergroup-name
+ndbpgName :: Lens' NeptuneDBParameterGroup (Maybe (Val Text))
+ndbpgName = lens _neptuneDBParameterGroupName (\s a -> s { _neptuneDBParameterGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbparametergroup.html#cfn-neptune-dbparametergroup-parameters
+ndbpgParameters :: Lens' NeptuneDBParameterGroup Object
+ndbpgParameters = lens _neptuneDBParameterGroupParameters (\s a -> s { _neptuneDBParameterGroupParameters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbparametergroup.html#cfn-neptune-dbparametergroup-tags
+ndbpgTags :: Lens' NeptuneDBParameterGroup (Maybe [Tag])
+ndbpgTags = lens _neptuneDBParameterGroupTags (\s a -> s { _neptuneDBParameterGroupTags = a })
diff --git a/library-gen/Stratosphere/Resources/NeptuneDBSubnetGroup.hs b/library-gen/Stratosphere/Resources/NeptuneDBSubnetGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/NeptuneDBSubnetGroup.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbsubnetgroup.html
+
+module Stratosphere.Resources.NeptuneDBSubnetGroup where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for NeptuneDBSubnetGroup. See
+-- 'neptuneDBSubnetGroup' for a more convenient constructor.
+data NeptuneDBSubnetGroup =
+  NeptuneDBSubnetGroup
+  { _neptuneDBSubnetGroupDBSubnetGroupDescription :: Val Text
+  , _neptuneDBSubnetGroupDBSubnetGroupName :: Maybe (Val Text)
+  , _neptuneDBSubnetGroupSubnetIds :: ValList Text
+  , _neptuneDBSubnetGroupTags :: Maybe [Tag]
+  } deriving (Show, Eq)
+
+instance ToJSON NeptuneDBSubnetGroup where
+  toJSON NeptuneDBSubnetGroup{..} =
+    object $
+    catMaybes
+    [ (Just . ("DBSubnetGroupDescription",) . toJSON) _neptuneDBSubnetGroupDBSubnetGroupDescription
+    , fmap (("DBSubnetGroupName",) . toJSON) _neptuneDBSubnetGroupDBSubnetGroupName
+    , (Just . ("SubnetIds",) . toJSON) _neptuneDBSubnetGroupSubnetIds
+    , fmap (("Tags",) . toJSON) _neptuneDBSubnetGroupTags
+    ]
+
+instance FromJSON NeptuneDBSubnetGroup where
+  parseJSON (Object obj) =
+    NeptuneDBSubnetGroup <$>
+      (obj .: "DBSubnetGroupDescription") <*>
+      (obj .:? "DBSubnetGroupName") <*>
+      (obj .: "SubnetIds") <*>
+      (obj .:? "Tags")
+  parseJSON _ = mempty
+
+-- | Constructor for 'NeptuneDBSubnetGroup' containing required fields as
+-- arguments.
+neptuneDBSubnetGroup
+  :: Val Text -- ^ 'ndbsgDBSubnetGroupDescription'
+  -> ValList Text -- ^ 'ndbsgSubnetIds'
+  -> NeptuneDBSubnetGroup
+neptuneDBSubnetGroup dBSubnetGroupDescriptionarg subnetIdsarg =
+  NeptuneDBSubnetGroup
+  { _neptuneDBSubnetGroupDBSubnetGroupDescription = dBSubnetGroupDescriptionarg
+  , _neptuneDBSubnetGroupDBSubnetGroupName = Nothing
+  , _neptuneDBSubnetGroupSubnetIds = subnetIdsarg
+  , _neptuneDBSubnetGroupTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbsubnetgroup.html#cfn-neptune-dbsubnetgroup-dbsubnetgroupdescription
+ndbsgDBSubnetGroupDescription :: Lens' NeptuneDBSubnetGroup (Val Text)
+ndbsgDBSubnetGroupDescription = lens _neptuneDBSubnetGroupDBSubnetGroupDescription (\s a -> s { _neptuneDBSubnetGroupDBSubnetGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbsubnetgroup.html#cfn-neptune-dbsubnetgroup-dbsubnetgroupname
+ndbsgDBSubnetGroupName :: Lens' NeptuneDBSubnetGroup (Maybe (Val Text))
+ndbsgDBSubnetGroupName = lens _neptuneDBSubnetGroupDBSubnetGroupName (\s a -> s { _neptuneDBSubnetGroupDBSubnetGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbsubnetgroup.html#cfn-neptune-dbsubnetgroup-subnetids
+ndbsgSubnetIds :: Lens' NeptuneDBSubnetGroup (ValList Text)
+ndbsgSubnetIds = lens _neptuneDBSubnetGroupSubnetIds (\s a -> s { _neptuneDBSubnetGroupSubnetIds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbsubnetgroup.html#cfn-neptune-dbsubnetgroup-tags
+ndbsgTags :: Lens' NeptuneDBSubnetGroup (Maybe [Tag])
+ndbsgTags = lens _neptuneDBSubnetGroupTags (\s a -> s { _neptuneDBSubnetGroupTags = a })
diff --git a/stratosphere.cabal b/stratosphere.cabal
--- a/stratosphere.cabal
+++ b/stratosphere.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 25ad1cd2934b657afc03d91e33e6feb4e362e74d07e17020816c620ebe939fab
+-- hash: 022f0189a0f205833c775f6ab3297da52a97aa3de6c111dfbd7bbbb2406ead91
 
 name:           stratosphere
-version:        0.23.0
+version:        0.24.0
 synopsis:       EDSL for AWS CloudFormation
 description:    EDSL for AWS CloudFormation
 category:       AWS, Cloud
@@ -823,6 +823,11 @@
       Stratosphere.Resources.LogsLogStream
       Stratosphere.Resources.LogsMetricFilter
       Stratosphere.Resources.LogsSubscriptionFilter
+      Stratosphere.Resources.NeptuneDBCluster
+      Stratosphere.Resources.NeptuneDBClusterParameterGroup
+      Stratosphere.Resources.NeptuneDBInstance
+      Stratosphere.Resources.NeptuneDBParameterGroup
+      Stratosphere.Resources.NeptuneDBSubnetGroup
       Stratosphere.Resources.OpsWorksApp
       Stratosphere.Resources.OpsWorksElasticLoadBalancerAttachment
       Stratosphere.Resources.OpsWorksInstance
