diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Change Log
 
+## 0.4.3
+
+* Update the resource specification document to version `1.4.1`
+
 ## 0.4.2
 
 * Update the resource specification document to version `1.2.1`
diff --git a/examples/ec2-with-eip.hs b/examples/ec2-with-eip.hs
--- a/examples/ec2-with-eip.hs
+++ b/examples/ec2-with-eip.hs
@@ -45,7 +45,7 @@
     EC2EIPAssociationProperties $
     ec2EIPAssociation
     & eceipaInstanceId ?~ Ref "EC2Instance"
-    & eceipaEip ?~ Ref "IPAddress"
+    & eceipaEIP ?~ Ref "IPAddress"
   ]
   & description ?~ "See https://s3.amazonaws.com/cloudformation-templates-us-east-1/EIP_With_Association.template"
   & formatVersion ?~ "2010-09-09"
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupAlarm.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupAlarm.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupAlarm.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-alarm.html
+
+module Stratosphere.ResourceProperties.CodeDeployDeploymentGroupAlarm where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodeDeployDeploymentGroupAlarm. See
+-- 'codeDeployDeploymentGroupAlarm' for a more convenient constructor.
+data CodeDeployDeploymentGroupAlarm =
+  CodeDeployDeploymentGroupAlarm
+  { _codeDeployDeploymentGroupAlarmName :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON CodeDeployDeploymentGroupAlarm where
+  toJSON CodeDeployDeploymentGroupAlarm{..} =
+    object $
+    catMaybes
+    [ ("Name" .=) <$> _codeDeployDeploymentGroupAlarmName
+    ]
+
+instance FromJSON CodeDeployDeploymentGroupAlarm where
+  parseJSON (Object obj) =
+    CodeDeployDeploymentGroupAlarm <$>
+      obj .:? "Name"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CodeDeployDeploymentGroupAlarm' containing required
+-- fields as arguments.
+codeDeployDeploymentGroupAlarm
+  :: CodeDeployDeploymentGroupAlarm
+codeDeployDeploymentGroupAlarm  =
+  CodeDeployDeploymentGroupAlarm
+  { _codeDeployDeploymentGroupAlarmName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-alarm.html#cfn-codedeploy-deploymentgroup-alarm-name
+cddgaName :: Lens' CodeDeployDeploymentGroupAlarm (Maybe (Val Text))
+cddgaName = lens _codeDeployDeploymentGroupAlarmName (\s a -> s { _codeDeployDeploymentGroupAlarmName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupAlarmConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupAlarmConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupAlarmConfiguration.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-alarmconfiguration.html
+
+module Stratosphere.ResourceProperties.CodeDeployDeploymentGroupAlarmConfiguration where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupAlarm
+
+-- | Full data type definition for
+-- CodeDeployDeploymentGroupAlarmConfiguration. See
+-- 'codeDeployDeploymentGroupAlarmConfiguration' for a more convenient
+-- constructor.
+data CodeDeployDeploymentGroupAlarmConfiguration =
+  CodeDeployDeploymentGroupAlarmConfiguration
+  { _codeDeployDeploymentGroupAlarmConfigurationAlarms :: Maybe [CodeDeployDeploymentGroupAlarm]
+  , _codeDeployDeploymentGroupAlarmConfigurationEnabled :: Maybe (Val Bool')
+  , _codeDeployDeploymentGroupAlarmConfigurationIgnorePollAlarmFailure :: Maybe (Val Bool')
+  } deriving (Show, Eq)
+
+instance ToJSON CodeDeployDeploymentGroupAlarmConfiguration where
+  toJSON CodeDeployDeploymentGroupAlarmConfiguration{..} =
+    object $
+    catMaybes
+    [ ("Alarms" .=) <$> _codeDeployDeploymentGroupAlarmConfigurationAlarms
+    , ("Enabled" .=) <$> _codeDeployDeploymentGroupAlarmConfigurationEnabled
+    , ("IgnorePollAlarmFailure" .=) <$> _codeDeployDeploymentGroupAlarmConfigurationIgnorePollAlarmFailure
+    ]
+
+instance FromJSON CodeDeployDeploymentGroupAlarmConfiguration where
+  parseJSON (Object obj) =
+    CodeDeployDeploymentGroupAlarmConfiguration <$>
+      obj .:? "Alarms" <*>
+      obj .:? "Enabled" <*>
+      obj .:? "IgnorePollAlarmFailure"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CodeDeployDeploymentGroupAlarmConfiguration' containing
+-- required fields as arguments.
+codeDeployDeploymentGroupAlarmConfiguration
+  :: CodeDeployDeploymentGroupAlarmConfiguration
+codeDeployDeploymentGroupAlarmConfiguration  =
+  CodeDeployDeploymentGroupAlarmConfiguration
+  { _codeDeployDeploymentGroupAlarmConfigurationAlarms = Nothing
+  , _codeDeployDeploymentGroupAlarmConfigurationEnabled = Nothing
+  , _codeDeployDeploymentGroupAlarmConfigurationIgnorePollAlarmFailure = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-alarmconfiguration.html#cfn-codedeploy-deploymentgroup-alarmconfiguration-alarms
+cddgacAlarms :: Lens' CodeDeployDeploymentGroupAlarmConfiguration (Maybe [CodeDeployDeploymentGroupAlarm])
+cddgacAlarms = lens _codeDeployDeploymentGroupAlarmConfigurationAlarms (\s a -> s { _codeDeployDeploymentGroupAlarmConfigurationAlarms = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-alarmconfiguration.html#cfn-codedeploy-deploymentgroup-alarmconfiguration-enabled
+cddgacEnabled :: Lens' CodeDeployDeploymentGroupAlarmConfiguration (Maybe (Val Bool'))
+cddgacEnabled = lens _codeDeployDeploymentGroupAlarmConfigurationEnabled (\s a -> s { _codeDeployDeploymentGroupAlarmConfigurationEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-alarmconfiguration.html#cfn-codedeploy-deploymentgroup-alarmconfiguration-ignorepollalarmfailure
+cddgacIgnorePollAlarmFailure :: Lens' CodeDeployDeploymentGroupAlarmConfiguration (Maybe (Val Bool'))
+cddgacIgnorePollAlarmFailure = lens _codeDeployDeploymentGroupAlarmConfigurationIgnorePollAlarmFailure (\s a -> s { _codeDeployDeploymentGroupAlarmConfigurationIgnorePollAlarmFailure = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupTriggerConfig.hs b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupTriggerConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CodeDeployDeploymentGroupTriggerConfig.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-triggerconfig.html
+
+module Stratosphere.ResourceProperties.CodeDeployDeploymentGroupTriggerConfig where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CodeDeployDeploymentGroupTriggerConfig. See
+-- 'codeDeployDeploymentGroupTriggerConfig' for a more convenient
+-- constructor.
+data CodeDeployDeploymentGroupTriggerConfig =
+  CodeDeployDeploymentGroupTriggerConfig
+  { _codeDeployDeploymentGroupTriggerConfigTriggerEvents :: Maybe [Val Text]
+  , _codeDeployDeploymentGroupTriggerConfigTriggerName :: Maybe (Val Text)
+  , _codeDeployDeploymentGroupTriggerConfigTriggerTargetArn :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON CodeDeployDeploymentGroupTriggerConfig where
+  toJSON CodeDeployDeploymentGroupTriggerConfig{..} =
+    object $
+    catMaybes
+    [ ("TriggerEvents" .=) <$> _codeDeployDeploymentGroupTriggerConfigTriggerEvents
+    , ("TriggerName" .=) <$> _codeDeployDeploymentGroupTriggerConfigTriggerName
+    , ("TriggerTargetArn" .=) <$> _codeDeployDeploymentGroupTriggerConfigTriggerTargetArn
+    ]
+
+instance FromJSON CodeDeployDeploymentGroupTriggerConfig where
+  parseJSON (Object obj) =
+    CodeDeployDeploymentGroupTriggerConfig <$>
+      obj .:? "TriggerEvents" <*>
+      obj .:? "TriggerName" <*>
+      obj .:? "TriggerTargetArn"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CodeDeployDeploymentGroupTriggerConfig' containing
+-- required fields as arguments.
+codeDeployDeploymentGroupTriggerConfig
+  :: CodeDeployDeploymentGroupTriggerConfig
+codeDeployDeploymentGroupTriggerConfig  =
+  CodeDeployDeploymentGroupTriggerConfig
+  { _codeDeployDeploymentGroupTriggerConfigTriggerEvents = Nothing
+  , _codeDeployDeploymentGroupTriggerConfigTriggerName = Nothing
+  , _codeDeployDeploymentGroupTriggerConfigTriggerTargetArn = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-triggerconfig.html#cfn-codedeploy-deploymentgroup-triggerconfig-triggerevents
+cddgtcTriggerEvents :: Lens' CodeDeployDeploymentGroupTriggerConfig (Maybe [Val Text])
+cddgtcTriggerEvents = lens _codeDeployDeploymentGroupTriggerConfigTriggerEvents (\s a -> s { _codeDeployDeploymentGroupTriggerConfigTriggerEvents = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-triggerconfig.html#cfn-codedeploy-deploymentgroup-triggerconfig-triggername
+cddgtcTriggerName :: Lens' CodeDeployDeploymentGroupTriggerConfig (Maybe (Val Text))
+cddgtcTriggerName = lens _codeDeployDeploymentGroupTriggerConfigTriggerName (\s a -> s { _codeDeployDeploymentGroupTriggerConfigTriggerName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentgroup-triggerconfig.html#cfn-codedeploy-deploymentgroup-triggerconfig-triggertargetarn
+cddgtcTriggerTargetArn :: Lens' CodeDeployDeploymentGroupTriggerConfig (Maybe (Val Text))
+cddgtcTriggerTargetArn = lens _codeDeployDeploymentGroupTriggerConfigTriggerTargetArn (\s a -> s { _codeDeployDeploymentGroupTriggerConfigTriggerTargetArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolCognitoIdentityProvider.hs b/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolCognitoIdentityProvider.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolCognitoIdentityProvider.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitoidentityprovider.html
+
+module Stratosphere.ResourceProperties.CognitoIdentityPoolCognitoIdentityProvider where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoIdentityPoolCognitoIdentityProvider.
+-- See 'cognitoIdentityPoolCognitoIdentityProvider' for a more convenient
+-- constructor.
+data CognitoIdentityPoolCognitoIdentityProvider =
+  CognitoIdentityPoolCognitoIdentityProvider
+  { _cognitoIdentityPoolCognitoIdentityProviderClientId :: Maybe (Val Text)
+  , _cognitoIdentityPoolCognitoIdentityProviderProviderName :: Maybe (Val Text)
+  , _cognitoIdentityPoolCognitoIdentityProviderServerSideTokenCheck :: Maybe (Val Bool')
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoIdentityPoolCognitoIdentityProvider where
+  toJSON CognitoIdentityPoolCognitoIdentityProvider{..} =
+    object $
+    catMaybes
+    [ ("ClientId" .=) <$> _cognitoIdentityPoolCognitoIdentityProviderClientId
+    , ("ProviderName" .=) <$> _cognitoIdentityPoolCognitoIdentityProviderProviderName
+    , ("ServerSideTokenCheck" .=) <$> _cognitoIdentityPoolCognitoIdentityProviderServerSideTokenCheck
+    ]
+
+instance FromJSON CognitoIdentityPoolCognitoIdentityProvider where
+  parseJSON (Object obj) =
+    CognitoIdentityPoolCognitoIdentityProvider <$>
+      obj .:? "ClientId" <*>
+      obj .:? "ProviderName" <*>
+      obj .:? "ServerSideTokenCheck"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoIdentityPoolCognitoIdentityProvider' containing
+-- required fields as arguments.
+cognitoIdentityPoolCognitoIdentityProvider
+  :: CognitoIdentityPoolCognitoIdentityProvider
+cognitoIdentityPoolCognitoIdentityProvider  =
+  CognitoIdentityPoolCognitoIdentityProvider
+  { _cognitoIdentityPoolCognitoIdentityProviderClientId = Nothing
+  , _cognitoIdentityPoolCognitoIdentityProviderProviderName = Nothing
+  , _cognitoIdentityPoolCognitoIdentityProviderServerSideTokenCheck = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitoidentityprovider.html#cfn-cognito-identitypool-cognitoidentityprovider-clientid
+cipcipClientId :: Lens' CognitoIdentityPoolCognitoIdentityProvider (Maybe (Val Text))
+cipcipClientId = lens _cognitoIdentityPoolCognitoIdentityProviderClientId (\s a -> s { _cognitoIdentityPoolCognitoIdentityProviderClientId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitoidentityprovider.html#cfn-cognito-identitypool-cognitoidentityprovider-providername
+cipcipProviderName :: Lens' CognitoIdentityPoolCognitoIdentityProvider (Maybe (Val Text))
+cipcipProviderName = lens _cognitoIdentityPoolCognitoIdentityProviderProviderName (\s a -> s { _cognitoIdentityPoolCognitoIdentityProviderProviderName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitoidentityprovider.html#cfn-cognito-identitypool-cognitoidentityprovider-serversidetokencheck
+cipcipServerSideTokenCheck :: Lens' CognitoIdentityPoolCognitoIdentityProvider (Maybe (Val Bool'))
+cipcipServerSideTokenCheck = lens _cognitoIdentityPoolCognitoIdentityProviderServerSideTokenCheck (\s a -> s { _cognitoIdentityPoolCognitoIdentityProviderServerSideTokenCheck = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolCognitoStreams.hs b/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolCognitoStreams.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolCognitoStreams.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitostreams.html
+
+module Stratosphere.ResourceProperties.CognitoIdentityPoolCognitoStreams where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoIdentityPoolCognitoStreams. See
+-- 'cognitoIdentityPoolCognitoStreams' for a more convenient constructor.
+data CognitoIdentityPoolCognitoStreams =
+  CognitoIdentityPoolCognitoStreams
+  { _cognitoIdentityPoolCognitoStreamsRoleArn :: Maybe (Val Text)
+  , _cognitoIdentityPoolCognitoStreamsStreamName :: Maybe (Val Text)
+  , _cognitoIdentityPoolCognitoStreamsStreamingStatus :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoIdentityPoolCognitoStreams where
+  toJSON CognitoIdentityPoolCognitoStreams{..} =
+    object $
+    catMaybes
+    [ ("RoleArn" .=) <$> _cognitoIdentityPoolCognitoStreamsRoleArn
+    , ("StreamName" .=) <$> _cognitoIdentityPoolCognitoStreamsStreamName
+    , ("StreamingStatus" .=) <$> _cognitoIdentityPoolCognitoStreamsStreamingStatus
+    ]
+
+instance FromJSON CognitoIdentityPoolCognitoStreams where
+  parseJSON (Object obj) =
+    CognitoIdentityPoolCognitoStreams <$>
+      obj .:? "RoleArn" <*>
+      obj .:? "StreamName" <*>
+      obj .:? "StreamingStatus"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoIdentityPoolCognitoStreams' containing required
+-- fields as arguments.
+cognitoIdentityPoolCognitoStreams
+  :: CognitoIdentityPoolCognitoStreams
+cognitoIdentityPoolCognitoStreams  =
+  CognitoIdentityPoolCognitoStreams
+  { _cognitoIdentityPoolCognitoStreamsRoleArn = Nothing
+  , _cognitoIdentityPoolCognitoStreamsStreamName = Nothing
+  , _cognitoIdentityPoolCognitoStreamsStreamingStatus = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitostreams.html#cfn-cognito-identitypool-cognitostreams-rolearn
+cipcsRoleArn :: Lens' CognitoIdentityPoolCognitoStreams (Maybe (Val Text))
+cipcsRoleArn = lens _cognitoIdentityPoolCognitoStreamsRoleArn (\s a -> s { _cognitoIdentityPoolCognitoStreamsRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitostreams.html#cfn-cognito-identitypool-cognitostreams-streamname
+cipcsStreamName :: Lens' CognitoIdentityPoolCognitoStreams (Maybe (Val Text))
+cipcsStreamName = lens _cognitoIdentityPoolCognitoStreamsStreamName (\s a -> s { _cognitoIdentityPoolCognitoStreamsStreamName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitostreams.html#cfn-cognito-identitypool-cognitostreams-streamingstatus
+cipcsStreamingStatus :: Lens' CognitoIdentityPoolCognitoStreams (Maybe (Val Text))
+cipcsStreamingStatus = lens _cognitoIdentityPoolCognitoStreamsStreamingStatus (\s a -> s { _cognitoIdentityPoolCognitoStreamsStreamingStatus = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolPushSync.hs b/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolPushSync.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolPushSync.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-pushsync.html
+
+module Stratosphere.ResourceProperties.CognitoIdentityPoolPushSync where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoIdentityPoolPushSync. See
+-- 'cognitoIdentityPoolPushSync' for a more convenient constructor.
+data CognitoIdentityPoolPushSync =
+  CognitoIdentityPoolPushSync
+  { _cognitoIdentityPoolPushSyncApplicationArns :: Maybe [Val Text]
+  , _cognitoIdentityPoolPushSyncRoleArn :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoIdentityPoolPushSync where
+  toJSON CognitoIdentityPoolPushSync{..} =
+    object $
+    catMaybes
+    [ ("ApplicationArns" .=) <$> _cognitoIdentityPoolPushSyncApplicationArns
+    , ("RoleArn" .=) <$> _cognitoIdentityPoolPushSyncRoleArn
+    ]
+
+instance FromJSON CognitoIdentityPoolPushSync where
+  parseJSON (Object obj) =
+    CognitoIdentityPoolPushSync <$>
+      obj .:? "ApplicationArns" <*>
+      obj .:? "RoleArn"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoIdentityPoolPushSync' containing required fields
+-- as arguments.
+cognitoIdentityPoolPushSync
+  :: CognitoIdentityPoolPushSync
+cognitoIdentityPoolPushSync  =
+  CognitoIdentityPoolPushSync
+  { _cognitoIdentityPoolPushSyncApplicationArns = Nothing
+  , _cognitoIdentityPoolPushSyncRoleArn = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-pushsync.html#cfn-cognito-identitypool-pushsync-applicationarns
+cippsApplicationArns :: Lens' CognitoIdentityPoolPushSync (Maybe [Val Text])
+cippsApplicationArns = lens _cognitoIdentityPoolPushSyncApplicationArns (\s a -> s { _cognitoIdentityPoolPushSyncApplicationArns = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-pushsync.html#cfn-cognito-identitypool-pushsync-rolearn
+cippsRoleArn :: Lens' CognitoIdentityPoolPushSync (Maybe (Val Text))
+cippsRoleArn = lens _cognitoIdentityPoolPushSyncRoleArn (\s a -> s { _cognitoIdentityPoolPushSyncRoleArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolRoleAttachmentMappingRule.hs b/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolRoleAttachmentMappingRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolRoleAttachmentMappingRule.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-mappingrule.html
+
+module Stratosphere.ResourceProperties.CognitoIdentityPoolRoleAttachmentMappingRule where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- CognitoIdentityPoolRoleAttachmentMappingRule. See
+-- 'cognitoIdentityPoolRoleAttachmentMappingRule' for a more convenient
+-- constructor.
+data CognitoIdentityPoolRoleAttachmentMappingRule =
+  CognitoIdentityPoolRoleAttachmentMappingRule
+  { _cognitoIdentityPoolRoleAttachmentMappingRuleClaim :: Val Text
+  , _cognitoIdentityPoolRoleAttachmentMappingRuleMatchType :: Val Text
+  , _cognitoIdentityPoolRoleAttachmentMappingRuleRoleARN :: Val Text
+  , _cognitoIdentityPoolRoleAttachmentMappingRuleValue :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoIdentityPoolRoleAttachmentMappingRule where
+  toJSON CognitoIdentityPoolRoleAttachmentMappingRule{..} =
+    object $
+    catMaybes
+    [ Just ("Claim" .= _cognitoIdentityPoolRoleAttachmentMappingRuleClaim)
+    , Just ("MatchType" .= _cognitoIdentityPoolRoleAttachmentMappingRuleMatchType)
+    , Just ("RoleARN" .= _cognitoIdentityPoolRoleAttachmentMappingRuleRoleARN)
+    , Just ("Value" .= _cognitoIdentityPoolRoleAttachmentMappingRuleValue)
+    ]
+
+instance FromJSON CognitoIdentityPoolRoleAttachmentMappingRule where
+  parseJSON (Object obj) =
+    CognitoIdentityPoolRoleAttachmentMappingRule <$>
+      obj .: "Claim" <*>
+      obj .: "MatchType" <*>
+      obj .: "RoleARN" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoIdentityPoolRoleAttachmentMappingRule' containing
+-- required fields as arguments.
+cognitoIdentityPoolRoleAttachmentMappingRule
+  :: Val Text -- ^ 'cipramrClaim'
+  -> Val Text -- ^ 'cipramrMatchType'
+  -> Val Text -- ^ 'cipramrRoleARN'
+  -> Val Text -- ^ 'cipramrValue'
+  -> CognitoIdentityPoolRoleAttachmentMappingRule
+cognitoIdentityPoolRoleAttachmentMappingRule claimarg matchTypearg roleARNarg valuearg =
+  CognitoIdentityPoolRoleAttachmentMappingRule
+  { _cognitoIdentityPoolRoleAttachmentMappingRuleClaim = claimarg
+  , _cognitoIdentityPoolRoleAttachmentMappingRuleMatchType = matchTypearg
+  , _cognitoIdentityPoolRoleAttachmentMappingRuleRoleARN = roleARNarg
+  , _cognitoIdentityPoolRoleAttachmentMappingRuleValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-mappingrule.html#cfn-cognito-identitypoolroleattachment-mappingrule-claim
+cipramrClaim :: Lens' CognitoIdentityPoolRoleAttachmentMappingRule (Val Text)
+cipramrClaim = lens _cognitoIdentityPoolRoleAttachmentMappingRuleClaim (\s a -> s { _cognitoIdentityPoolRoleAttachmentMappingRuleClaim = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-mappingrule.html#cfn-cognito-identitypoolroleattachment-mappingrule-matchtype
+cipramrMatchType :: Lens' CognitoIdentityPoolRoleAttachmentMappingRule (Val Text)
+cipramrMatchType = lens _cognitoIdentityPoolRoleAttachmentMappingRuleMatchType (\s a -> s { _cognitoIdentityPoolRoleAttachmentMappingRuleMatchType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-mappingrule.html#cfn-cognito-identitypoolroleattachment-mappingrule-rolearn
+cipramrRoleARN :: Lens' CognitoIdentityPoolRoleAttachmentMappingRule (Val Text)
+cipramrRoleARN = lens _cognitoIdentityPoolRoleAttachmentMappingRuleRoleARN (\s a -> s { _cognitoIdentityPoolRoleAttachmentMappingRuleRoleARN = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-mappingrule.html#cfn-cognito-identitypoolroleattachment-mappingrule-value
+cipramrValue :: Lens' CognitoIdentityPoolRoleAttachmentMappingRule (Val Text)
+cipramrValue = lens _cognitoIdentityPoolRoleAttachmentMappingRuleValue (\s a -> s { _cognitoIdentityPoolRoleAttachmentMappingRuleValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolRoleAttachmentRoleMapping.hs b/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolRoleAttachmentRoleMapping.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolRoleAttachmentRoleMapping.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-rolemapping.html
+
+module Stratosphere.ResourceProperties.CognitoIdentityPoolRoleAttachmentRoleMapping where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CognitoIdentityPoolRoleAttachmentRulesConfigurationType
+
+-- | Full data type definition for
+-- CognitoIdentityPoolRoleAttachmentRoleMapping. See
+-- 'cognitoIdentityPoolRoleAttachmentRoleMapping' for a more convenient
+-- constructor.
+data CognitoIdentityPoolRoleAttachmentRoleMapping =
+  CognitoIdentityPoolRoleAttachmentRoleMapping
+  { _cognitoIdentityPoolRoleAttachmentRoleMappingAmbiguousRoleResolution :: Maybe (Val Text)
+  , _cognitoIdentityPoolRoleAttachmentRoleMappingRulesConfiguration :: Maybe CognitoIdentityPoolRoleAttachmentRulesConfigurationType
+  , _cognitoIdentityPoolRoleAttachmentRoleMappingType :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoIdentityPoolRoleAttachmentRoleMapping where
+  toJSON CognitoIdentityPoolRoleAttachmentRoleMapping{..} =
+    object $
+    catMaybes
+    [ ("AmbiguousRoleResolution" .=) <$> _cognitoIdentityPoolRoleAttachmentRoleMappingAmbiguousRoleResolution
+    , ("RulesConfiguration" .=) <$> _cognitoIdentityPoolRoleAttachmentRoleMappingRulesConfiguration
+    , Just ("Type" .= _cognitoIdentityPoolRoleAttachmentRoleMappingType)
+    ]
+
+instance FromJSON CognitoIdentityPoolRoleAttachmentRoleMapping where
+  parseJSON (Object obj) =
+    CognitoIdentityPoolRoleAttachmentRoleMapping <$>
+      obj .:? "AmbiguousRoleResolution" <*>
+      obj .:? "RulesConfiguration" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoIdentityPoolRoleAttachmentRoleMapping' containing
+-- required fields as arguments.
+cognitoIdentityPoolRoleAttachmentRoleMapping
+  :: Val Text -- ^ 'ciprarmType'
+  -> CognitoIdentityPoolRoleAttachmentRoleMapping
+cognitoIdentityPoolRoleAttachmentRoleMapping typearg =
+  CognitoIdentityPoolRoleAttachmentRoleMapping
+  { _cognitoIdentityPoolRoleAttachmentRoleMappingAmbiguousRoleResolution = Nothing
+  , _cognitoIdentityPoolRoleAttachmentRoleMappingRulesConfiguration = Nothing
+  , _cognitoIdentityPoolRoleAttachmentRoleMappingType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-rolemapping.html#cfn-cognito-identitypoolroleattachment-rolemapping-ambiguousroleresolution
+ciprarmAmbiguousRoleResolution :: Lens' CognitoIdentityPoolRoleAttachmentRoleMapping (Maybe (Val Text))
+ciprarmAmbiguousRoleResolution = lens _cognitoIdentityPoolRoleAttachmentRoleMappingAmbiguousRoleResolution (\s a -> s { _cognitoIdentityPoolRoleAttachmentRoleMappingAmbiguousRoleResolution = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-rolemapping.html#cfn-cognito-identitypoolroleattachment-rolemapping-rulesconfiguration
+ciprarmRulesConfiguration :: Lens' CognitoIdentityPoolRoleAttachmentRoleMapping (Maybe CognitoIdentityPoolRoleAttachmentRulesConfigurationType)
+ciprarmRulesConfiguration = lens _cognitoIdentityPoolRoleAttachmentRoleMappingRulesConfiguration (\s a -> s { _cognitoIdentityPoolRoleAttachmentRoleMappingRulesConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-rolemapping.html#cfn-cognito-identitypoolroleattachment-rolemapping-type
+ciprarmType :: Lens' CognitoIdentityPoolRoleAttachmentRoleMapping (Val Text)
+ciprarmType = lens _cognitoIdentityPoolRoleAttachmentRoleMappingType (\s a -> s { _cognitoIdentityPoolRoleAttachmentRoleMappingType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolRoleAttachmentRulesConfigurationType.hs b/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolRoleAttachmentRulesConfigurationType.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoIdentityPoolRoleAttachmentRulesConfigurationType.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-rolemapping-rulesconfiguration.html
+
+module Stratosphere.ResourceProperties.CognitoIdentityPoolRoleAttachmentRulesConfigurationType where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CognitoIdentityPoolRoleAttachmentMappingRule
+
+-- | Full data type definition for
+-- CognitoIdentityPoolRoleAttachmentRulesConfigurationType. See
+-- 'cognitoIdentityPoolRoleAttachmentRulesConfigurationType' for a more
+-- convenient constructor.
+data CognitoIdentityPoolRoleAttachmentRulesConfigurationType =
+  CognitoIdentityPoolRoleAttachmentRulesConfigurationType
+  { _cognitoIdentityPoolRoleAttachmentRulesConfigurationTypeRules :: [CognitoIdentityPoolRoleAttachmentMappingRule]
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoIdentityPoolRoleAttachmentRulesConfigurationType where
+  toJSON CognitoIdentityPoolRoleAttachmentRulesConfigurationType{..} =
+    object $
+    catMaybes
+    [ Just ("Rules" .= _cognitoIdentityPoolRoleAttachmentRulesConfigurationTypeRules)
+    ]
+
+instance FromJSON CognitoIdentityPoolRoleAttachmentRulesConfigurationType where
+  parseJSON (Object obj) =
+    CognitoIdentityPoolRoleAttachmentRulesConfigurationType <$>
+      obj .: "Rules"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoIdentityPoolRoleAttachmentRulesConfigurationType'
+-- containing required fields as arguments.
+cognitoIdentityPoolRoleAttachmentRulesConfigurationType
+  :: [CognitoIdentityPoolRoleAttachmentMappingRule] -- ^ 'ciprarctRules'
+  -> CognitoIdentityPoolRoleAttachmentRulesConfigurationType
+cognitoIdentityPoolRoleAttachmentRulesConfigurationType rulesarg =
+  CognitoIdentityPoolRoleAttachmentRulesConfigurationType
+  { _cognitoIdentityPoolRoleAttachmentRulesConfigurationTypeRules = rulesarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypoolroleattachment-rolemapping-rulesconfiguration.html#cfn-cognito-identitypoolroleattachment-rolemapping-rulesconfiguration-rules
+ciprarctRules :: Lens' CognitoIdentityPoolRoleAttachmentRulesConfigurationType [CognitoIdentityPoolRoleAttachmentMappingRule]
+ciprarctRules = lens _cognitoIdentityPoolRoleAttachmentRulesConfigurationTypeRules (\s a -> s { _cognitoIdentityPoolRoleAttachmentRulesConfigurationTypeRules = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolAdminCreateUserConfig.hs b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolAdminCreateUserConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolAdminCreateUserConfig.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-admincreateuserconfig.html
+
+module Stratosphere.ResourceProperties.CognitoUserPoolAdminCreateUserConfig where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CognitoUserPoolInviteMessageTemplate
+
+-- | Full data type definition for CognitoUserPoolAdminCreateUserConfig. See
+-- 'cognitoUserPoolAdminCreateUserConfig' for a more convenient constructor.
+data CognitoUserPoolAdminCreateUserConfig =
+  CognitoUserPoolAdminCreateUserConfig
+  { _cognitoUserPoolAdminCreateUserConfigAllowAdminCreateUserOnly :: Maybe (Val Bool')
+  , _cognitoUserPoolAdminCreateUserConfigInviteMessageTemplate :: Maybe CognitoUserPoolInviteMessageTemplate
+  , _cognitoUserPoolAdminCreateUserConfigUnusedAccountValidityDays :: Maybe (Val Double')
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolAdminCreateUserConfig where
+  toJSON CognitoUserPoolAdminCreateUserConfig{..} =
+    object $
+    catMaybes
+    [ ("AllowAdminCreateUserOnly" .=) <$> _cognitoUserPoolAdminCreateUserConfigAllowAdminCreateUserOnly
+    , ("InviteMessageTemplate" .=) <$> _cognitoUserPoolAdminCreateUserConfigInviteMessageTemplate
+    , ("UnusedAccountValidityDays" .=) <$> _cognitoUserPoolAdminCreateUserConfigUnusedAccountValidityDays
+    ]
+
+instance FromJSON CognitoUserPoolAdminCreateUserConfig where
+  parseJSON (Object obj) =
+    CognitoUserPoolAdminCreateUserConfig <$>
+      obj .:? "AllowAdminCreateUserOnly" <*>
+      obj .:? "InviteMessageTemplate" <*>
+      obj .:? "UnusedAccountValidityDays"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolAdminCreateUserConfig' containing
+-- required fields as arguments.
+cognitoUserPoolAdminCreateUserConfig
+  :: CognitoUserPoolAdminCreateUserConfig
+cognitoUserPoolAdminCreateUserConfig  =
+  CognitoUserPoolAdminCreateUserConfig
+  { _cognitoUserPoolAdminCreateUserConfigAllowAdminCreateUserOnly = Nothing
+  , _cognitoUserPoolAdminCreateUserConfigInviteMessageTemplate = Nothing
+  , _cognitoUserPoolAdminCreateUserConfigUnusedAccountValidityDays = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-admincreateuserconfig.html#cfn-cognito-userpool-admincreateuserconfig-allowadmincreateuseronly
+cupacucAllowAdminCreateUserOnly :: Lens' CognitoUserPoolAdminCreateUserConfig (Maybe (Val Bool'))
+cupacucAllowAdminCreateUserOnly = lens _cognitoUserPoolAdminCreateUserConfigAllowAdminCreateUserOnly (\s a -> s { _cognitoUserPoolAdminCreateUserConfigAllowAdminCreateUserOnly = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-admincreateuserconfig.html#cfn-cognito-userpool-admincreateuserconfig-invitemessagetemplate
+cupacucInviteMessageTemplate :: Lens' CognitoUserPoolAdminCreateUserConfig (Maybe CognitoUserPoolInviteMessageTemplate)
+cupacucInviteMessageTemplate = lens _cognitoUserPoolAdminCreateUserConfigInviteMessageTemplate (\s a -> s { _cognitoUserPoolAdminCreateUserConfigInviteMessageTemplate = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-admincreateuserconfig.html#cfn-cognito-userpool-admincreateuserconfig-unusedaccountvaliditydays
+cupacucUnusedAccountValidityDays :: Lens' CognitoUserPoolAdminCreateUserConfig (Maybe (Val Double'))
+cupacucUnusedAccountValidityDays = lens _cognitoUserPoolAdminCreateUserConfigUnusedAccountValidityDays (\s a -> s { _cognitoUserPoolAdminCreateUserConfigUnusedAccountValidityDays = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolDeviceConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolDeviceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolDeviceConfiguration.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-deviceconfiguration.html
+
+module Stratosphere.ResourceProperties.CognitoUserPoolDeviceConfiguration where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoUserPoolDeviceConfiguration. See
+-- 'cognitoUserPoolDeviceConfiguration' for a more convenient constructor.
+data CognitoUserPoolDeviceConfiguration =
+  CognitoUserPoolDeviceConfiguration
+  { _cognitoUserPoolDeviceConfigurationChallengeRequiredOnNewDevice :: Maybe (Val Bool')
+  , _cognitoUserPoolDeviceConfigurationDeviceOnlyRememberedOnUserPrompt :: Maybe (Val Bool')
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolDeviceConfiguration where
+  toJSON CognitoUserPoolDeviceConfiguration{..} =
+    object $
+    catMaybes
+    [ ("ChallengeRequiredOnNewDevice" .=) <$> _cognitoUserPoolDeviceConfigurationChallengeRequiredOnNewDevice
+    , ("DeviceOnlyRememberedOnUserPrompt" .=) <$> _cognitoUserPoolDeviceConfigurationDeviceOnlyRememberedOnUserPrompt
+    ]
+
+instance FromJSON CognitoUserPoolDeviceConfiguration where
+  parseJSON (Object obj) =
+    CognitoUserPoolDeviceConfiguration <$>
+      obj .:? "ChallengeRequiredOnNewDevice" <*>
+      obj .:? "DeviceOnlyRememberedOnUserPrompt"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolDeviceConfiguration' containing required
+-- fields as arguments.
+cognitoUserPoolDeviceConfiguration
+  :: CognitoUserPoolDeviceConfiguration
+cognitoUserPoolDeviceConfiguration  =
+  CognitoUserPoolDeviceConfiguration
+  { _cognitoUserPoolDeviceConfigurationChallengeRequiredOnNewDevice = Nothing
+  , _cognitoUserPoolDeviceConfigurationDeviceOnlyRememberedOnUserPrompt = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-deviceconfiguration.html#cfn-cognito-userpool-deviceconfiguration-challengerequiredonnewdevice
+cupdcChallengeRequiredOnNewDevice :: Lens' CognitoUserPoolDeviceConfiguration (Maybe (Val Bool'))
+cupdcChallengeRequiredOnNewDevice = lens _cognitoUserPoolDeviceConfigurationChallengeRequiredOnNewDevice (\s a -> s { _cognitoUserPoolDeviceConfigurationChallengeRequiredOnNewDevice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-deviceconfiguration.html#cfn-cognito-userpool-deviceconfiguration-deviceonlyrememberedonuserprompt
+cupdcDeviceOnlyRememberedOnUserPrompt :: Lens' CognitoUserPoolDeviceConfiguration (Maybe (Val Bool'))
+cupdcDeviceOnlyRememberedOnUserPrompt = lens _cognitoUserPoolDeviceConfigurationDeviceOnlyRememberedOnUserPrompt (\s a -> s { _cognitoUserPoolDeviceConfigurationDeviceOnlyRememberedOnUserPrompt = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolEmailConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolEmailConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolEmailConfiguration.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-emailconfiguration.html
+
+module Stratosphere.ResourceProperties.CognitoUserPoolEmailConfiguration where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoUserPoolEmailConfiguration. See
+-- 'cognitoUserPoolEmailConfiguration' for a more convenient constructor.
+data CognitoUserPoolEmailConfiguration =
+  CognitoUserPoolEmailConfiguration
+  { _cognitoUserPoolEmailConfigurationReplyToEmailAddress :: Maybe (Val Text)
+  , _cognitoUserPoolEmailConfigurationSourceArn :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolEmailConfiguration where
+  toJSON CognitoUserPoolEmailConfiguration{..} =
+    object $
+    catMaybes
+    [ ("ReplyToEmailAddress" .=) <$> _cognitoUserPoolEmailConfigurationReplyToEmailAddress
+    , ("SourceArn" .=) <$> _cognitoUserPoolEmailConfigurationSourceArn
+    ]
+
+instance FromJSON CognitoUserPoolEmailConfiguration where
+  parseJSON (Object obj) =
+    CognitoUserPoolEmailConfiguration <$>
+      obj .:? "ReplyToEmailAddress" <*>
+      obj .:? "SourceArn"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolEmailConfiguration' containing required
+-- fields as arguments.
+cognitoUserPoolEmailConfiguration
+  :: CognitoUserPoolEmailConfiguration
+cognitoUserPoolEmailConfiguration  =
+  CognitoUserPoolEmailConfiguration
+  { _cognitoUserPoolEmailConfigurationReplyToEmailAddress = Nothing
+  , _cognitoUserPoolEmailConfigurationSourceArn = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-emailconfiguration.html#cfn-cognito-userpool-emailconfiguration-replytoemailaddress
+cupecReplyToEmailAddress :: Lens' CognitoUserPoolEmailConfiguration (Maybe (Val Text))
+cupecReplyToEmailAddress = lens _cognitoUserPoolEmailConfigurationReplyToEmailAddress (\s a -> s { _cognitoUserPoolEmailConfigurationReplyToEmailAddress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-emailconfiguration.html#cfn-cognito-userpool-emailconfiguration-sourcearn
+cupecSourceArn :: Lens' CognitoUserPoolEmailConfiguration (Maybe (Val Text))
+cupecSourceArn = lens _cognitoUserPoolEmailConfigurationSourceArn (\s a -> s { _cognitoUserPoolEmailConfigurationSourceArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolInviteMessageTemplate.hs b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolInviteMessageTemplate.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolInviteMessageTemplate.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-invitemessagetemplate.html
+
+module Stratosphere.ResourceProperties.CognitoUserPoolInviteMessageTemplate where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoUserPoolInviteMessageTemplate. See
+-- 'cognitoUserPoolInviteMessageTemplate' for a more convenient constructor.
+data CognitoUserPoolInviteMessageTemplate =
+  CognitoUserPoolInviteMessageTemplate
+  { _cognitoUserPoolInviteMessageTemplateEmailMessage :: Maybe (Val Text)
+  , _cognitoUserPoolInviteMessageTemplateEmailSubject :: Maybe (Val Text)
+  , _cognitoUserPoolInviteMessageTemplateSMSMessage :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolInviteMessageTemplate where
+  toJSON CognitoUserPoolInviteMessageTemplate{..} =
+    object $
+    catMaybes
+    [ ("EmailMessage" .=) <$> _cognitoUserPoolInviteMessageTemplateEmailMessage
+    , ("EmailSubject" .=) <$> _cognitoUserPoolInviteMessageTemplateEmailSubject
+    , ("SMSMessage" .=) <$> _cognitoUserPoolInviteMessageTemplateSMSMessage
+    ]
+
+instance FromJSON CognitoUserPoolInviteMessageTemplate where
+  parseJSON (Object obj) =
+    CognitoUserPoolInviteMessageTemplate <$>
+      obj .:? "EmailMessage" <*>
+      obj .:? "EmailSubject" <*>
+      obj .:? "SMSMessage"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolInviteMessageTemplate' containing
+-- required fields as arguments.
+cognitoUserPoolInviteMessageTemplate
+  :: CognitoUserPoolInviteMessageTemplate
+cognitoUserPoolInviteMessageTemplate  =
+  CognitoUserPoolInviteMessageTemplate
+  { _cognitoUserPoolInviteMessageTemplateEmailMessage = Nothing
+  , _cognitoUserPoolInviteMessageTemplateEmailSubject = Nothing
+  , _cognitoUserPoolInviteMessageTemplateSMSMessage = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-invitemessagetemplate.html#cfn-cognito-userpool-invitemessagetemplate-emailmessage
+cupimtEmailMessage :: Lens' CognitoUserPoolInviteMessageTemplate (Maybe (Val Text))
+cupimtEmailMessage = lens _cognitoUserPoolInviteMessageTemplateEmailMessage (\s a -> s { _cognitoUserPoolInviteMessageTemplateEmailMessage = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-invitemessagetemplate.html#cfn-cognito-userpool-invitemessagetemplate-emailsubject
+cupimtEmailSubject :: Lens' CognitoUserPoolInviteMessageTemplate (Maybe (Val Text))
+cupimtEmailSubject = lens _cognitoUserPoolInviteMessageTemplateEmailSubject (\s a -> s { _cognitoUserPoolInviteMessageTemplateEmailSubject = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-invitemessagetemplate.html#cfn-cognito-userpool-invitemessagetemplate-smsmessage
+cupimtSMSMessage :: Lens' CognitoUserPoolInviteMessageTemplate (Maybe (Val Text))
+cupimtSMSMessage = lens _cognitoUserPoolInviteMessageTemplateSMSMessage (\s a -> s { _cognitoUserPoolInviteMessageTemplateSMSMessage = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolLambdaConfig.hs b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolLambdaConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolLambdaConfig.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html
+
+module Stratosphere.ResourceProperties.CognitoUserPoolLambdaConfig where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoUserPoolLambdaConfig. See
+-- 'cognitoUserPoolLambdaConfig' for a more convenient constructor.
+data CognitoUserPoolLambdaConfig =
+  CognitoUserPoolLambdaConfig
+  { _cognitoUserPoolLambdaConfigCreateAuthChallenge :: Maybe (Val Text)
+  , _cognitoUserPoolLambdaConfigCustomMessage :: Maybe (Val Text)
+  , _cognitoUserPoolLambdaConfigDefineAuthChallenge :: Maybe (Val Text)
+  , _cognitoUserPoolLambdaConfigPostAuthentication :: Maybe (Val Text)
+  , _cognitoUserPoolLambdaConfigPostConfirmation :: Maybe (Val Text)
+  , _cognitoUserPoolLambdaConfigPreAuthentication :: Maybe (Val Text)
+  , _cognitoUserPoolLambdaConfigPreSignUp :: Maybe (Val Text)
+  , _cognitoUserPoolLambdaConfigVerifyAuthChallengeResponse :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolLambdaConfig where
+  toJSON CognitoUserPoolLambdaConfig{..} =
+    object $
+    catMaybes
+    [ ("CreateAuthChallenge" .=) <$> _cognitoUserPoolLambdaConfigCreateAuthChallenge
+    , ("CustomMessage" .=) <$> _cognitoUserPoolLambdaConfigCustomMessage
+    , ("DefineAuthChallenge" .=) <$> _cognitoUserPoolLambdaConfigDefineAuthChallenge
+    , ("PostAuthentication" .=) <$> _cognitoUserPoolLambdaConfigPostAuthentication
+    , ("PostConfirmation" .=) <$> _cognitoUserPoolLambdaConfigPostConfirmation
+    , ("PreAuthentication" .=) <$> _cognitoUserPoolLambdaConfigPreAuthentication
+    , ("PreSignUp" .=) <$> _cognitoUserPoolLambdaConfigPreSignUp
+    , ("VerifyAuthChallengeResponse" .=) <$> _cognitoUserPoolLambdaConfigVerifyAuthChallengeResponse
+    ]
+
+instance FromJSON CognitoUserPoolLambdaConfig where
+  parseJSON (Object obj) =
+    CognitoUserPoolLambdaConfig <$>
+      obj .:? "CreateAuthChallenge" <*>
+      obj .:? "CustomMessage" <*>
+      obj .:? "DefineAuthChallenge" <*>
+      obj .:? "PostAuthentication" <*>
+      obj .:? "PostConfirmation" <*>
+      obj .:? "PreAuthentication" <*>
+      obj .:? "PreSignUp" <*>
+      obj .:? "VerifyAuthChallengeResponse"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolLambdaConfig' containing required fields
+-- as arguments.
+cognitoUserPoolLambdaConfig
+  :: CognitoUserPoolLambdaConfig
+cognitoUserPoolLambdaConfig  =
+  CognitoUserPoolLambdaConfig
+  { _cognitoUserPoolLambdaConfigCreateAuthChallenge = Nothing
+  , _cognitoUserPoolLambdaConfigCustomMessage = Nothing
+  , _cognitoUserPoolLambdaConfigDefineAuthChallenge = Nothing
+  , _cognitoUserPoolLambdaConfigPostAuthentication = Nothing
+  , _cognitoUserPoolLambdaConfigPostConfirmation = Nothing
+  , _cognitoUserPoolLambdaConfigPreAuthentication = Nothing
+  , _cognitoUserPoolLambdaConfigPreSignUp = Nothing
+  , _cognitoUserPoolLambdaConfigVerifyAuthChallengeResponse = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-createauthchallenge
+cuplcCreateAuthChallenge :: Lens' CognitoUserPoolLambdaConfig (Maybe (Val Text))
+cuplcCreateAuthChallenge = lens _cognitoUserPoolLambdaConfigCreateAuthChallenge (\s a -> s { _cognitoUserPoolLambdaConfigCreateAuthChallenge = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-custommessage
+cuplcCustomMessage :: Lens' CognitoUserPoolLambdaConfig (Maybe (Val Text))
+cuplcCustomMessage = lens _cognitoUserPoolLambdaConfigCustomMessage (\s a -> s { _cognitoUserPoolLambdaConfigCustomMessage = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-defineauthchallenge
+cuplcDefineAuthChallenge :: Lens' CognitoUserPoolLambdaConfig (Maybe (Val Text))
+cuplcDefineAuthChallenge = lens _cognitoUserPoolLambdaConfigDefineAuthChallenge (\s a -> s { _cognitoUserPoolLambdaConfigDefineAuthChallenge = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-postauthentication
+cuplcPostAuthentication :: Lens' CognitoUserPoolLambdaConfig (Maybe (Val Text))
+cuplcPostAuthentication = lens _cognitoUserPoolLambdaConfigPostAuthentication (\s a -> s { _cognitoUserPoolLambdaConfigPostAuthentication = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-postconfirmation
+cuplcPostConfirmation :: Lens' CognitoUserPoolLambdaConfig (Maybe (Val Text))
+cuplcPostConfirmation = lens _cognitoUserPoolLambdaConfigPostConfirmation (\s a -> s { _cognitoUserPoolLambdaConfigPostConfirmation = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-preauthentication
+cuplcPreAuthentication :: Lens' CognitoUserPoolLambdaConfig (Maybe (Val Text))
+cuplcPreAuthentication = lens _cognitoUserPoolLambdaConfigPreAuthentication (\s a -> s { _cognitoUserPoolLambdaConfigPreAuthentication = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-presignup
+cuplcPreSignUp :: Lens' CognitoUserPoolLambdaConfig (Maybe (Val Text))
+cuplcPreSignUp = lens _cognitoUserPoolLambdaConfigPreSignUp (\s a -> s { _cognitoUserPoolLambdaConfigPreSignUp = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-lambdaconfig.html#cfn-cognito-userpool-lambdaconfig-verifyauthchallengeresponse
+cuplcVerifyAuthChallengeResponse :: Lens' CognitoUserPoolLambdaConfig (Maybe (Val Text))
+cuplcVerifyAuthChallengeResponse = lens _cognitoUserPoolLambdaConfigVerifyAuthChallengeResponse (\s a -> s { _cognitoUserPoolLambdaConfigVerifyAuthChallengeResponse = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolNumberAttributeConstraints.hs b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolNumberAttributeConstraints.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolNumberAttributeConstraints.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-numberattributeconstraints.html
+
+module Stratosphere.ResourceProperties.CognitoUserPoolNumberAttributeConstraints where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoUserPoolNumberAttributeConstraints.
+-- See 'cognitoUserPoolNumberAttributeConstraints' for a more convenient
+-- constructor.
+data CognitoUserPoolNumberAttributeConstraints =
+  CognitoUserPoolNumberAttributeConstraints
+  { _cognitoUserPoolNumberAttributeConstraintsMaxValue :: Maybe (Val Text)
+  , _cognitoUserPoolNumberAttributeConstraintsMinValue :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolNumberAttributeConstraints where
+  toJSON CognitoUserPoolNumberAttributeConstraints{..} =
+    object $
+    catMaybes
+    [ ("MaxValue" .=) <$> _cognitoUserPoolNumberAttributeConstraintsMaxValue
+    , ("MinValue" .=) <$> _cognitoUserPoolNumberAttributeConstraintsMinValue
+    ]
+
+instance FromJSON CognitoUserPoolNumberAttributeConstraints where
+  parseJSON (Object obj) =
+    CognitoUserPoolNumberAttributeConstraints <$>
+      obj .:? "MaxValue" <*>
+      obj .:? "MinValue"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolNumberAttributeConstraints' containing
+-- required fields as arguments.
+cognitoUserPoolNumberAttributeConstraints
+  :: CognitoUserPoolNumberAttributeConstraints
+cognitoUserPoolNumberAttributeConstraints  =
+  CognitoUserPoolNumberAttributeConstraints
+  { _cognitoUserPoolNumberAttributeConstraintsMaxValue = Nothing
+  , _cognitoUserPoolNumberAttributeConstraintsMinValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-numberattributeconstraints.html#cfn-cognito-userpool-numberattributeconstraints-maxvalue
+cupnacMaxValue :: Lens' CognitoUserPoolNumberAttributeConstraints (Maybe (Val Text))
+cupnacMaxValue = lens _cognitoUserPoolNumberAttributeConstraintsMaxValue (\s a -> s { _cognitoUserPoolNumberAttributeConstraintsMaxValue = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-numberattributeconstraints.html#cfn-cognito-userpool-numberattributeconstraints-minvalue
+cupnacMinValue :: Lens' CognitoUserPoolNumberAttributeConstraints (Maybe (Val Text))
+cupnacMinValue = lens _cognitoUserPoolNumberAttributeConstraintsMinValue (\s a -> s { _cognitoUserPoolNumberAttributeConstraintsMinValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolPasswordPolicy.hs b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolPasswordPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolPasswordPolicy.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-passwordpolicy.html
+
+module Stratosphere.ResourceProperties.CognitoUserPoolPasswordPolicy where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoUserPoolPasswordPolicy. See
+-- 'cognitoUserPoolPasswordPolicy' for a more convenient constructor.
+data CognitoUserPoolPasswordPolicy =
+  CognitoUserPoolPasswordPolicy
+  { _cognitoUserPoolPasswordPolicyMinimumLength :: Maybe (Val Integer')
+  , _cognitoUserPoolPasswordPolicyRequireLowercase :: Maybe (Val Bool')
+  , _cognitoUserPoolPasswordPolicyRequireNumbers :: Maybe (Val Bool')
+  , _cognitoUserPoolPasswordPolicyRequireSymbols :: Maybe (Val Bool')
+  , _cognitoUserPoolPasswordPolicyRequireUppercase :: Maybe (Val Bool')
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolPasswordPolicy where
+  toJSON CognitoUserPoolPasswordPolicy{..} =
+    object $
+    catMaybes
+    [ ("MinimumLength" .=) <$> _cognitoUserPoolPasswordPolicyMinimumLength
+    , ("RequireLowercase" .=) <$> _cognitoUserPoolPasswordPolicyRequireLowercase
+    , ("RequireNumbers" .=) <$> _cognitoUserPoolPasswordPolicyRequireNumbers
+    , ("RequireSymbols" .=) <$> _cognitoUserPoolPasswordPolicyRequireSymbols
+    , ("RequireUppercase" .=) <$> _cognitoUserPoolPasswordPolicyRequireUppercase
+    ]
+
+instance FromJSON CognitoUserPoolPasswordPolicy where
+  parseJSON (Object obj) =
+    CognitoUserPoolPasswordPolicy <$>
+      obj .:? "MinimumLength" <*>
+      obj .:? "RequireLowercase" <*>
+      obj .:? "RequireNumbers" <*>
+      obj .:? "RequireSymbols" <*>
+      obj .:? "RequireUppercase"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolPasswordPolicy' containing required
+-- fields as arguments.
+cognitoUserPoolPasswordPolicy
+  :: CognitoUserPoolPasswordPolicy
+cognitoUserPoolPasswordPolicy  =
+  CognitoUserPoolPasswordPolicy
+  { _cognitoUserPoolPasswordPolicyMinimumLength = Nothing
+  , _cognitoUserPoolPasswordPolicyRequireLowercase = Nothing
+  , _cognitoUserPoolPasswordPolicyRequireNumbers = Nothing
+  , _cognitoUserPoolPasswordPolicyRequireSymbols = Nothing
+  , _cognitoUserPoolPasswordPolicyRequireUppercase = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-passwordpolicy.html#cfn-cognito-userpool-passwordpolicy-minimumlength
+cupppMinimumLength :: Lens' CognitoUserPoolPasswordPolicy (Maybe (Val Integer'))
+cupppMinimumLength = lens _cognitoUserPoolPasswordPolicyMinimumLength (\s a -> s { _cognitoUserPoolPasswordPolicyMinimumLength = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-passwordpolicy.html#cfn-cognito-userpool-passwordpolicy-requirelowercase
+cupppRequireLowercase :: Lens' CognitoUserPoolPasswordPolicy (Maybe (Val Bool'))
+cupppRequireLowercase = lens _cognitoUserPoolPasswordPolicyRequireLowercase (\s a -> s { _cognitoUserPoolPasswordPolicyRequireLowercase = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-passwordpolicy.html#cfn-cognito-userpool-passwordpolicy-requirenumbers
+cupppRequireNumbers :: Lens' CognitoUserPoolPasswordPolicy (Maybe (Val Bool'))
+cupppRequireNumbers = lens _cognitoUserPoolPasswordPolicyRequireNumbers (\s a -> s { _cognitoUserPoolPasswordPolicyRequireNumbers = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-passwordpolicy.html#cfn-cognito-userpool-passwordpolicy-requiresymbols
+cupppRequireSymbols :: Lens' CognitoUserPoolPasswordPolicy (Maybe (Val Bool'))
+cupppRequireSymbols = lens _cognitoUserPoolPasswordPolicyRequireSymbols (\s a -> s { _cognitoUserPoolPasswordPolicyRequireSymbols = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-passwordpolicy.html#cfn-cognito-userpool-passwordpolicy-requireuppercase
+cupppRequireUppercase :: Lens' CognitoUserPoolPasswordPolicy (Maybe (Val Bool'))
+cupppRequireUppercase = lens _cognitoUserPoolPasswordPolicyRequireUppercase (\s a -> s { _cognitoUserPoolPasswordPolicyRequireUppercase = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolPolicies.hs b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolPolicies.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolPolicies.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-policies.html
+
+module Stratosphere.ResourceProperties.CognitoUserPoolPolicies where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CognitoUserPoolPasswordPolicy
+
+-- | Full data type definition for CognitoUserPoolPolicies. See
+-- 'cognitoUserPoolPolicies' for a more convenient constructor.
+data CognitoUserPoolPolicies =
+  CognitoUserPoolPolicies
+  { _cognitoUserPoolPoliciesPasswordPolicy :: Maybe CognitoUserPoolPasswordPolicy
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolPolicies where
+  toJSON CognitoUserPoolPolicies{..} =
+    object $
+    catMaybes
+    [ ("PasswordPolicy" .=) <$> _cognitoUserPoolPoliciesPasswordPolicy
+    ]
+
+instance FromJSON CognitoUserPoolPolicies where
+  parseJSON (Object obj) =
+    CognitoUserPoolPolicies <$>
+      obj .:? "PasswordPolicy"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolPolicies' containing required fields as
+-- arguments.
+cognitoUserPoolPolicies
+  :: CognitoUserPoolPolicies
+cognitoUserPoolPolicies  =
+  CognitoUserPoolPolicies
+  { _cognitoUserPoolPoliciesPasswordPolicy = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-policies.html#cfn-cognito-userpool-policies-passwordpolicy
+cuppPasswordPolicy :: Lens' CognitoUserPoolPolicies (Maybe CognitoUserPoolPasswordPolicy)
+cuppPasswordPolicy = lens _cognitoUserPoolPoliciesPasswordPolicy (\s a -> s { _cognitoUserPoolPoliciesPasswordPolicy = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolSchemaAttribute.hs b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolSchemaAttribute.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolSchemaAttribute.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html
+
+module Stratosphere.ResourceProperties.CognitoUserPoolSchemaAttribute where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CognitoUserPoolNumberAttributeConstraints
+import Stratosphere.ResourceProperties.CognitoUserPoolStringAttributeConstraints
+
+-- | Full data type definition for CognitoUserPoolSchemaAttribute. See
+-- 'cognitoUserPoolSchemaAttribute' for a more convenient constructor.
+data CognitoUserPoolSchemaAttribute =
+  CognitoUserPoolSchemaAttribute
+  { _cognitoUserPoolSchemaAttributeAttributeDataType :: Maybe (Val Text)
+  , _cognitoUserPoolSchemaAttributeDeveloperOnlyAttribute :: Maybe (Val Bool')
+  , _cognitoUserPoolSchemaAttributeMutable :: Maybe (Val Bool')
+  , _cognitoUserPoolSchemaAttributeName :: Maybe (Val Text)
+  , _cognitoUserPoolSchemaAttributeNumberAttributeConstraints :: Maybe CognitoUserPoolNumberAttributeConstraints
+  , _cognitoUserPoolSchemaAttributeRequired :: Maybe (Val Bool')
+  , _cognitoUserPoolSchemaAttributeStringAttributeConstraints :: Maybe CognitoUserPoolStringAttributeConstraints
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolSchemaAttribute where
+  toJSON CognitoUserPoolSchemaAttribute{..} =
+    object $
+    catMaybes
+    [ ("AttributeDataType" .=) <$> _cognitoUserPoolSchemaAttributeAttributeDataType
+    , ("DeveloperOnlyAttribute" .=) <$> _cognitoUserPoolSchemaAttributeDeveloperOnlyAttribute
+    , ("Mutable" .=) <$> _cognitoUserPoolSchemaAttributeMutable
+    , ("Name" .=) <$> _cognitoUserPoolSchemaAttributeName
+    , ("NumberAttributeConstraints" .=) <$> _cognitoUserPoolSchemaAttributeNumberAttributeConstraints
+    , ("Required" .=) <$> _cognitoUserPoolSchemaAttributeRequired
+    , ("StringAttributeConstraints" .=) <$> _cognitoUserPoolSchemaAttributeStringAttributeConstraints
+    ]
+
+instance FromJSON CognitoUserPoolSchemaAttribute where
+  parseJSON (Object obj) =
+    CognitoUserPoolSchemaAttribute <$>
+      obj .:? "AttributeDataType" <*>
+      obj .:? "DeveloperOnlyAttribute" <*>
+      obj .:? "Mutable" <*>
+      obj .:? "Name" <*>
+      obj .:? "NumberAttributeConstraints" <*>
+      obj .:? "Required" <*>
+      obj .:? "StringAttributeConstraints"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolSchemaAttribute' containing required
+-- fields as arguments.
+cognitoUserPoolSchemaAttribute
+  :: CognitoUserPoolSchemaAttribute
+cognitoUserPoolSchemaAttribute  =
+  CognitoUserPoolSchemaAttribute
+  { _cognitoUserPoolSchemaAttributeAttributeDataType = Nothing
+  , _cognitoUserPoolSchemaAttributeDeveloperOnlyAttribute = Nothing
+  , _cognitoUserPoolSchemaAttributeMutable = Nothing
+  , _cognitoUserPoolSchemaAttributeName = Nothing
+  , _cognitoUserPoolSchemaAttributeNumberAttributeConstraints = Nothing
+  , _cognitoUserPoolSchemaAttributeRequired = Nothing
+  , _cognitoUserPoolSchemaAttributeStringAttributeConstraints = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html#cfn-cognito-userpool-schemaattribute-attributedatatype
+cupsaAttributeDataType :: Lens' CognitoUserPoolSchemaAttribute (Maybe (Val Text))
+cupsaAttributeDataType = lens _cognitoUserPoolSchemaAttributeAttributeDataType (\s a -> s { _cognitoUserPoolSchemaAttributeAttributeDataType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html#cfn-cognito-userpool-schemaattribute-developeronlyattribute
+cupsaDeveloperOnlyAttribute :: Lens' CognitoUserPoolSchemaAttribute (Maybe (Val Bool'))
+cupsaDeveloperOnlyAttribute = lens _cognitoUserPoolSchemaAttributeDeveloperOnlyAttribute (\s a -> s { _cognitoUserPoolSchemaAttributeDeveloperOnlyAttribute = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html#cfn-cognito-userpool-schemaattribute-mutable
+cupsaMutable :: Lens' CognitoUserPoolSchemaAttribute (Maybe (Val Bool'))
+cupsaMutable = lens _cognitoUserPoolSchemaAttributeMutable (\s a -> s { _cognitoUserPoolSchemaAttributeMutable = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html#cfn-cognito-userpool-schemaattribute-name
+cupsaName :: Lens' CognitoUserPoolSchemaAttribute (Maybe (Val Text))
+cupsaName = lens _cognitoUserPoolSchemaAttributeName (\s a -> s { _cognitoUserPoolSchemaAttributeName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html#cfn-cognito-userpool-schemaattribute-numberattributeconstraints
+cupsaNumberAttributeConstraints :: Lens' CognitoUserPoolSchemaAttribute (Maybe CognitoUserPoolNumberAttributeConstraints)
+cupsaNumberAttributeConstraints = lens _cognitoUserPoolSchemaAttributeNumberAttributeConstraints (\s a -> s { _cognitoUserPoolSchemaAttributeNumberAttributeConstraints = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html#cfn-cognito-userpool-schemaattribute-required
+cupsaRequired :: Lens' CognitoUserPoolSchemaAttribute (Maybe (Val Bool'))
+cupsaRequired = lens _cognitoUserPoolSchemaAttributeRequired (\s a -> s { _cognitoUserPoolSchemaAttributeRequired = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-schemaattribute.html#cfn-cognito-userpool-schemaattribute-stringattributeconstraints
+cupsaStringAttributeConstraints :: Lens' CognitoUserPoolSchemaAttribute (Maybe CognitoUserPoolStringAttributeConstraints)
+cupsaStringAttributeConstraints = lens _cognitoUserPoolSchemaAttributeStringAttributeConstraints (\s a -> s { _cognitoUserPoolSchemaAttributeStringAttributeConstraints = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolSmsConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolSmsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolSmsConfiguration.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-smsconfiguration.html
+
+module Stratosphere.ResourceProperties.CognitoUserPoolSmsConfiguration where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoUserPoolSmsConfiguration. See
+-- 'cognitoUserPoolSmsConfiguration' for a more convenient constructor.
+data CognitoUserPoolSmsConfiguration =
+  CognitoUserPoolSmsConfiguration
+  { _cognitoUserPoolSmsConfigurationExternalId :: Maybe (Val Text)
+  , _cognitoUserPoolSmsConfigurationSnsCallerArn :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolSmsConfiguration where
+  toJSON CognitoUserPoolSmsConfiguration{..} =
+    object $
+    catMaybes
+    [ ("ExternalId" .=) <$> _cognitoUserPoolSmsConfigurationExternalId
+    , ("SnsCallerArn" .=) <$> _cognitoUserPoolSmsConfigurationSnsCallerArn
+    ]
+
+instance FromJSON CognitoUserPoolSmsConfiguration where
+  parseJSON (Object obj) =
+    CognitoUserPoolSmsConfiguration <$>
+      obj .:? "ExternalId" <*>
+      obj .:? "SnsCallerArn"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolSmsConfiguration' containing required
+-- fields as arguments.
+cognitoUserPoolSmsConfiguration
+  :: CognitoUserPoolSmsConfiguration
+cognitoUserPoolSmsConfiguration  =
+  CognitoUserPoolSmsConfiguration
+  { _cognitoUserPoolSmsConfigurationExternalId = Nothing
+  , _cognitoUserPoolSmsConfigurationSnsCallerArn = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-smsconfiguration.html#cfn-cognito-userpool-smsconfiguration-externalid
+cupscExternalId :: Lens' CognitoUserPoolSmsConfiguration (Maybe (Val Text))
+cupscExternalId = lens _cognitoUserPoolSmsConfigurationExternalId (\s a -> s { _cognitoUserPoolSmsConfigurationExternalId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-smsconfiguration.html#cfn-cognito-userpool-smsconfiguration-snscallerarn
+cupscSnsCallerArn :: Lens' CognitoUserPoolSmsConfiguration (Maybe (Val Text))
+cupscSnsCallerArn = lens _cognitoUserPoolSmsConfigurationSnsCallerArn (\s a -> s { _cognitoUserPoolSmsConfigurationSnsCallerArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolStringAttributeConstraints.hs b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolStringAttributeConstraints.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolStringAttributeConstraints.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-stringattributeconstraints.html
+
+module Stratosphere.ResourceProperties.CognitoUserPoolStringAttributeConstraints where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoUserPoolStringAttributeConstraints.
+-- See 'cognitoUserPoolStringAttributeConstraints' for a more convenient
+-- constructor.
+data CognitoUserPoolStringAttributeConstraints =
+  CognitoUserPoolStringAttributeConstraints
+  { _cognitoUserPoolStringAttributeConstraintsMaxLength :: Maybe (Val Text)
+  , _cognitoUserPoolStringAttributeConstraintsMinLength :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolStringAttributeConstraints where
+  toJSON CognitoUserPoolStringAttributeConstraints{..} =
+    object $
+    catMaybes
+    [ ("MaxLength" .=) <$> _cognitoUserPoolStringAttributeConstraintsMaxLength
+    , ("MinLength" .=) <$> _cognitoUserPoolStringAttributeConstraintsMinLength
+    ]
+
+instance FromJSON CognitoUserPoolStringAttributeConstraints where
+  parseJSON (Object obj) =
+    CognitoUserPoolStringAttributeConstraints <$>
+      obj .:? "MaxLength" <*>
+      obj .:? "MinLength"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolStringAttributeConstraints' containing
+-- required fields as arguments.
+cognitoUserPoolStringAttributeConstraints
+  :: CognitoUserPoolStringAttributeConstraints
+cognitoUserPoolStringAttributeConstraints  =
+  CognitoUserPoolStringAttributeConstraints
+  { _cognitoUserPoolStringAttributeConstraintsMaxLength = Nothing
+  , _cognitoUserPoolStringAttributeConstraintsMinLength = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-stringattributeconstraints.html#cfn-cognito-userpool-stringattributeconstraints-maxlength
+cupsacMaxLength :: Lens' CognitoUserPoolStringAttributeConstraints (Maybe (Val Text))
+cupsacMaxLength = lens _cognitoUserPoolStringAttributeConstraintsMaxLength (\s a -> s { _cognitoUserPoolStringAttributeConstraintsMaxLength = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-stringattributeconstraints.html#cfn-cognito-userpool-stringattributeconstraints-minlength
+cupsacMinLength :: Lens' CognitoUserPoolStringAttributeConstraints (Maybe (Val Text))
+cupsacMinLength = lens _cognitoUserPoolStringAttributeConstraintsMinLength (\s a -> s { _cognitoUserPoolStringAttributeConstraintsMinLength = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolUserAttributeType.hs b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolUserAttributeType.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/CognitoUserPoolUserAttributeType.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpooluser-attributetype.html
+
+module Stratosphere.ResourceProperties.CognitoUserPoolUserAttributeType where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoUserPoolUserAttributeType. See
+-- 'cognitoUserPoolUserAttributeType' for a more convenient constructor.
+data CognitoUserPoolUserAttributeType =
+  CognitoUserPoolUserAttributeType
+  { _cognitoUserPoolUserAttributeTypeName :: Maybe (Val Text)
+  , _cognitoUserPoolUserAttributeTypeValue :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolUserAttributeType where
+  toJSON CognitoUserPoolUserAttributeType{..} =
+    object $
+    catMaybes
+    [ ("Name" .=) <$> _cognitoUserPoolUserAttributeTypeName
+    , ("Value" .=) <$> _cognitoUserPoolUserAttributeTypeValue
+    ]
+
+instance FromJSON CognitoUserPoolUserAttributeType where
+  parseJSON (Object obj) =
+    CognitoUserPoolUserAttributeType <$>
+      obj .:? "Name" <*>
+      obj .:? "Value"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolUserAttributeType' containing required
+-- fields as arguments.
+cognitoUserPoolUserAttributeType
+  :: CognitoUserPoolUserAttributeType
+cognitoUserPoolUserAttributeType  =
+  CognitoUserPoolUserAttributeType
+  { _cognitoUserPoolUserAttributeTypeName = Nothing
+  , _cognitoUserPoolUserAttributeTypeValue = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpooluser-attributetype.html#cfn-cognito-userpooluser-attributetype-name
+cupuatName :: Lens' CognitoUserPoolUserAttributeType (Maybe (Val Text))
+cupuatName = lens _cognitoUserPoolUserAttributeTypeName (\s a -> s { _cognitoUserPoolUserAttributeTypeName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpooluser-attributetype.html#cfn-cognito-userpooluser-attributetype-value
+cupuatValue :: Lens' CognitoUserPoolUserAttributeType (Maybe (Val Text))
+cupuatValue = lens _cognitoUserPoolUserAttributeTypeValue (\s a -> s { _cognitoUserPoolUserAttributeTypeValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSourceDetail.hs b/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSourceDetail.hs
--- a/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSourceDetail.hs
+++ b/library-gen/Stratosphere/ResourceProperties/ConfigConfigRuleSourceDetail.hs
@@ -19,6 +19,7 @@
 data ConfigConfigRuleSourceDetail =
   ConfigConfigRuleSourceDetail
   { _configConfigRuleSourceDetailEventSource :: Val Text
+  , _configConfigRuleSourceDetailMaximumExecutionFrequency :: Maybe (Val Text)
   , _configConfigRuleSourceDetailMessageType :: Val Text
   } deriving (Show, Eq)
 
@@ -27,6 +28,7 @@
     object $
     catMaybes
     [ Just ("EventSource" .= _configConfigRuleSourceDetailEventSource)
+    , ("MaximumExecutionFrequency" .=) <$> _configConfigRuleSourceDetailMaximumExecutionFrequency
     , Just ("MessageType" .= _configConfigRuleSourceDetailMessageType)
     ]
 
@@ -34,6 +36,7 @@
   parseJSON (Object obj) =
     ConfigConfigRuleSourceDetail <$>
       obj .: "EventSource" <*>
+      obj .:? "MaximumExecutionFrequency" <*>
       obj .: "MessageType"
   parseJSON _ = mempty
 
@@ -46,12 +49,17 @@
 configConfigRuleSourceDetail eventSourcearg messageTypearg =
   ConfigConfigRuleSourceDetail
   { _configConfigRuleSourceDetailEventSource = eventSourcearg
+  , _configConfigRuleSourceDetailMaximumExecutionFrequency = Nothing
   , _configConfigRuleSourceDetailMessageType = messageTypearg
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-source-sourcedetails.html#cfn-config-configrule-source-sourcedetail-eventsource
 ccrsdEventSource :: Lens' ConfigConfigRuleSourceDetail (Val Text)
 ccrsdEventSource = lens _configConfigRuleSourceDetailEventSource (\s a -> s { _configConfigRuleSourceDetailEventSource = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-source-sourcedetails.html#cfn-config-configrule-sourcedetail-maximumexecutionfrequency
+ccrsdMaximumExecutionFrequency :: Lens' ConfigConfigRuleSourceDetail (Maybe (Val Text))
+ccrsdMaximumExecutionFrequency = lens _configConfigRuleSourceDetailMaximumExecutionFrequency (\s a -> s { _configConfigRuleSourceDetailMaximumExecutionFrequency = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-source-sourcedetails.html#cfn-config-configrule-source-sourcedetail-messagetype
 ccrsdMessageType :: Lens' ConfigConfigRuleSourceDetail (Val Text)
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetBlockDeviceMapping.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetBlockDeviceMapping.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetBlockDeviceMapping.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMapping where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EC2SpotFleetEbsBlockDevice
+
+-- | Full data type definition for EC2SpotFleetBlockDeviceMapping. See
+-- 'ec2SpotFleetBlockDeviceMapping' for a more convenient constructor.
+data EC2SpotFleetBlockDeviceMapping =
+  EC2SpotFleetBlockDeviceMapping
+  { _eC2SpotFleetBlockDeviceMappingDeviceName :: Val Text
+  , _eC2SpotFleetBlockDeviceMappingEbs :: Maybe EC2SpotFleetEbsBlockDevice
+  , _eC2SpotFleetBlockDeviceMappingNoDevice :: Maybe (Val Text)
+  , _eC2SpotFleetBlockDeviceMappingVirtualName :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2SpotFleetBlockDeviceMapping where
+  toJSON EC2SpotFleetBlockDeviceMapping{..} =
+    object $
+    catMaybes
+    [ Just ("DeviceName" .= _eC2SpotFleetBlockDeviceMappingDeviceName)
+    , ("Ebs" .=) <$> _eC2SpotFleetBlockDeviceMappingEbs
+    , ("NoDevice" .=) <$> _eC2SpotFleetBlockDeviceMappingNoDevice
+    , ("VirtualName" .=) <$> _eC2SpotFleetBlockDeviceMappingVirtualName
+    ]
+
+instance FromJSON EC2SpotFleetBlockDeviceMapping where
+  parseJSON (Object obj) =
+    EC2SpotFleetBlockDeviceMapping <$>
+      obj .: "DeviceName" <*>
+      obj .:? "Ebs" <*>
+      obj .:? "NoDevice" <*>
+      obj .:? "VirtualName"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2SpotFleetBlockDeviceMapping' containing required
+-- fields as arguments.
+ec2SpotFleetBlockDeviceMapping
+  :: Val Text -- ^ 'ecsfbdmDeviceName'
+  -> EC2SpotFleetBlockDeviceMapping
+ec2SpotFleetBlockDeviceMapping deviceNamearg =
+  EC2SpotFleetBlockDeviceMapping
+  { _eC2SpotFleetBlockDeviceMappingDeviceName = deviceNamearg
+  , _eC2SpotFleetBlockDeviceMappingEbs = Nothing
+  , _eC2SpotFleetBlockDeviceMappingNoDevice = Nothing
+  , _eC2SpotFleetBlockDeviceMappingVirtualName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html#cfn-ec2-spotfleet-blockdevicemapping-devicename
+ecsfbdmDeviceName :: Lens' EC2SpotFleetBlockDeviceMapping (Val Text)
+ecsfbdmDeviceName = lens _eC2SpotFleetBlockDeviceMappingDeviceName (\s a -> s { _eC2SpotFleetBlockDeviceMappingDeviceName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html#cfn-ec2-spotfleet-blockdevicemapping-ebs
+ecsfbdmEbs :: Lens' EC2SpotFleetBlockDeviceMapping (Maybe EC2SpotFleetEbsBlockDevice)
+ecsfbdmEbs = lens _eC2SpotFleetBlockDeviceMappingEbs (\s a -> s { _eC2SpotFleetBlockDeviceMappingEbs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html#cfn-ec2-spotfleet-blockdevicemapping-nodevice
+ecsfbdmNoDevice :: Lens' EC2SpotFleetBlockDeviceMapping (Maybe (Val Text))
+ecsfbdmNoDevice = lens _eC2SpotFleetBlockDeviceMappingNoDevice (\s a -> s { _eC2SpotFleetBlockDeviceMappingNoDevice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html#cfn-ec2-spotfleet-blockdevicemapping-virtualname
+ecsfbdmVirtualName :: Lens' EC2SpotFleetBlockDeviceMapping (Maybe (Val Text))
+ecsfbdmVirtualName = lens _eC2SpotFleetBlockDeviceMappingVirtualName (\s a -> s { _eC2SpotFleetBlockDeviceMappingVirtualName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetBlockDeviceMappings.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetBlockDeviceMappings.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetBlockDeviceMappings.hs
+++ /dev/null
@@ -1,73 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html
-
-module Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMappings where
-
-import Control.Lens hiding ((.=))
-import Data.Aeson
-import Data.Maybe (catMaybes)
-import Data.Monoid (mempty)
-import Data.Text
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.EC2SpotFleetEbs
-
--- | Full data type definition for EC2SpotFleetBlockDeviceMappings. See
--- 'ec2SpotFleetBlockDeviceMappings' for a more convenient constructor.
-data EC2SpotFleetBlockDeviceMappings =
-  EC2SpotFleetBlockDeviceMappings
-  { _eC2SpotFleetBlockDeviceMappingsDeviceName :: Val Text
-  , _eC2SpotFleetBlockDeviceMappingsEbs :: Maybe EC2SpotFleetEbs
-  , _eC2SpotFleetBlockDeviceMappingsNoDevice :: Maybe (Val Bool')
-  , _eC2SpotFleetBlockDeviceMappingsVirtualName :: Maybe (Val Text)
-  } deriving (Show, Eq)
-
-instance ToJSON EC2SpotFleetBlockDeviceMappings where
-  toJSON EC2SpotFleetBlockDeviceMappings{..} =
-    object $
-    catMaybes
-    [ Just ("DeviceName" .= _eC2SpotFleetBlockDeviceMappingsDeviceName)
-    , ("Ebs" .=) <$> _eC2SpotFleetBlockDeviceMappingsEbs
-    , ("NoDevice" .=) <$> _eC2SpotFleetBlockDeviceMappingsNoDevice
-    , ("VirtualName" .=) <$> _eC2SpotFleetBlockDeviceMappingsVirtualName
-    ]
-
-instance FromJSON EC2SpotFleetBlockDeviceMappings where
-  parseJSON (Object obj) =
-    EC2SpotFleetBlockDeviceMappings <$>
-      obj .: "DeviceName" <*>
-      obj .:? "Ebs" <*>
-      obj .:? "NoDevice" <*>
-      obj .:? "VirtualName"
-  parseJSON _ = mempty
-
--- | Constructor for 'EC2SpotFleetBlockDeviceMappings' containing required
--- fields as arguments.
-ec2SpotFleetBlockDeviceMappings
-  :: Val Text -- ^ 'ecsfbdmDeviceName'
-  -> EC2SpotFleetBlockDeviceMappings
-ec2SpotFleetBlockDeviceMappings deviceNamearg =
-  EC2SpotFleetBlockDeviceMappings
-  { _eC2SpotFleetBlockDeviceMappingsDeviceName = deviceNamearg
-  , _eC2SpotFleetBlockDeviceMappingsEbs = Nothing
-  , _eC2SpotFleetBlockDeviceMappingsNoDevice = Nothing
-  , _eC2SpotFleetBlockDeviceMappingsVirtualName = Nothing
-  }
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html#cfn-ec2-spotfleet-blockdevicemappings-devicename
-ecsfbdmDeviceName :: Lens' EC2SpotFleetBlockDeviceMappings (Val Text)
-ecsfbdmDeviceName = lens _eC2SpotFleetBlockDeviceMappingsDeviceName (\s a -> s { _eC2SpotFleetBlockDeviceMappingsDeviceName = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html#cfn-ec2-spotfleet-blockdevicemappings-ebs
-ecsfbdmEbs :: Lens' EC2SpotFleetBlockDeviceMappings (Maybe EC2SpotFleetEbs)
-ecsfbdmEbs = lens _eC2SpotFleetBlockDeviceMappingsEbs (\s a -> s { _eC2SpotFleetBlockDeviceMappingsEbs = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html#cfn-ec2-spotfleet-blockdevicemappings-nodevice
-ecsfbdmNoDevice :: Lens' EC2SpotFleetBlockDeviceMappings (Maybe (Val Bool'))
-ecsfbdmNoDevice = lens _eC2SpotFleetBlockDeviceMappingsNoDevice (\s a -> s { _eC2SpotFleetBlockDeviceMappingsNoDevice = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html#cfn-ec2-spotfleet-blockdevicemappings-virtualname
-ecsfbdmVirtualName :: Lens' EC2SpotFleetBlockDeviceMappings (Maybe (Val Text))
-ecsfbdmVirtualName = lens _eC2SpotFleetBlockDeviceMappingsVirtualName (\s a -> s { _eC2SpotFleetBlockDeviceMappingsVirtualName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetEbs.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetEbs.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetEbs.hs
+++ /dev/null
@@ -1,88 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html
-
-module Stratosphere.ResourceProperties.EC2SpotFleetEbs where
-
-import Control.Lens hiding ((.=))
-import Data.Aeson
-import Data.Maybe (catMaybes)
-import Data.Monoid (mempty)
-import Data.Text
-
-import Stratosphere.Values
-
-
--- | Full data type definition for EC2SpotFleetEbs. See 'ec2SpotFleetEbs' for
--- a more convenient constructor.
-data EC2SpotFleetEbs =
-  EC2SpotFleetEbs
-  { _eC2SpotFleetEbsDeleteOnTermination :: Maybe (Val Bool')
-  , _eC2SpotFleetEbsEncrypted :: Maybe (Val Bool')
-  , _eC2SpotFleetEbsIops :: Maybe (Val Integer')
-  , _eC2SpotFleetEbsSnapshotId :: Maybe (Val Text)
-  , _eC2SpotFleetEbsVolumeSize :: Maybe (Val Integer')
-  , _eC2SpotFleetEbsVolumeType :: Maybe (Val Text)
-  } deriving (Show, Eq)
-
-instance ToJSON EC2SpotFleetEbs where
-  toJSON EC2SpotFleetEbs{..} =
-    object $
-    catMaybes
-    [ ("DeleteOnTermination" .=) <$> _eC2SpotFleetEbsDeleteOnTermination
-    , ("Encrypted" .=) <$> _eC2SpotFleetEbsEncrypted
-    , ("Iops" .=) <$> _eC2SpotFleetEbsIops
-    , ("SnapshotId" .=) <$> _eC2SpotFleetEbsSnapshotId
-    , ("VolumeSize" .=) <$> _eC2SpotFleetEbsVolumeSize
-    , ("VolumeType" .=) <$> _eC2SpotFleetEbsVolumeType
-    ]
-
-instance FromJSON EC2SpotFleetEbs where
-  parseJSON (Object obj) =
-    EC2SpotFleetEbs <$>
-      obj .:? "DeleteOnTermination" <*>
-      obj .:? "Encrypted" <*>
-      obj .:? "Iops" <*>
-      obj .:? "SnapshotId" <*>
-      obj .:? "VolumeSize" <*>
-      obj .:? "VolumeType"
-  parseJSON _ = mempty
-
--- | Constructor for 'EC2SpotFleetEbs' containing required fields as
--- arguments.
-ec2SpotFleetEbs
-  :: EC2SpotFleetEbs
-ec2SpotFleetEbs  =
-  EC2SpotFleetEbs
-  { _eC2SpotFleetEbsDeleteOnTermination = Nothing
-  , _eC2SpotFleetEbsEncrypted = Nothing
-  , _eC2SpotFleetEbsIops = Nothing
-  , _eC2SpotFleetEbsSnapshotId = Nothing
-  , _eC2SpotFleetEbsVolumeSize = Nothing
-  , _eC2SpotFleetEbsVolumeType = Nothing
-  }
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebs-deleteontermination
-ecsfeDeleteOnTermination :: Lens' EC2SpotFleetEbs (Maybe (Val Bool'))
-ecsfeDeleteOnTermination = lens _eC2SpotFleetEbsDeleteOnTermination (\s a -> s { _eC2SpotFleetEbsDeleteOnTermination = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebs-encrypted
-ecsfeEncrypted :: Lens' EC2SpotFleetEbs (Maybe (Val Bool'))
-ecsfeEncrypted = lens _eC2SpotFleetEbsEncrypted (\s a -> s { _eC2SpotFleetEbsEncrypted = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebs-iops
-ecsfeIops :: Lens' EC2SpotFleetEbs (Maybe (Val Integer'))
-ecsfeIops = lens _eC2SpotFleetEbsIops (\s a -> s { _eC2SpotFleetEbsIops = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebs-snapshotid
-ecsfeSnapshotId :: Lens' EC2SpotFleetEbs (Maybe (Val Text))
-ecsfeSnapshotId = lens _eC2SpotFleetEbsSnapshotId (\s a -> s { _eC2SpotFleetEbsSnapshotId = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebs-volumesize
-ecsfeVolumeSize :: Lens' EC2SpotFleetEbs (Maybe (Val Integer'))
-ecsfeVolumeSize = lens _eC2SpotFleetEbsVolumeSize (\s a -> s { _eC2SpotFleetEbsVolumeSize = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebs-volumetype
-ecsfeVolumeType :: Lens' EC2SpotFleetEbs (Maybe (Val Text))
-ecsfeVolumeType = lens _eC2SpotFleetEbsVolumeType (\s a -> s { _eC2SpotFleetEbsVolumeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetEbsBlockDevice.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetEbsBlockDevice.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetEbsBlockDevice.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetEbsBlockDevice where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SpotFleetEbsBlockDevice. See
+-- 'ec2SpotFleetEbsBlockDevice' for a more convenient constructor.
+data EC2SpotFleetEbsBlockDevice =
+  EC2SpotFleetEbsBlockDevice
+  { _eC2SpotFleetEbsBlockDeviceDeleteOnTermination :: Maybe (Val Bool')
+  , _eC2SpotFleetEbsBlockDeviceEncrypted :: Maybe (Val Bool')
+  , _eC2SpotFleetEbsBlockDeviceIops :: Maybe (Val Integer')
+  , _eC2SpotFleetEbsBlockDeviceSnapshotId :: Maybe (Val Text)
+  , _eC2SpotFleetEbsBlockDeviceVolumeSize :: Maybe (Val Integer')
+  , _eC2SpotFleetEbsBlockDeviceVolumeType :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2SpotFleetEbsBlockDevice where
+  toJSON EC2SpotFleetEbsBlockDevice{..} =
+    object $
+    catMaybes
+    [ ("DeleteOnTermination" .=) <$> _eC2SpotFleetEbsBlockDeviceDeleteOnTermination
+    , ("Encrypted" .=) <$> _eC2SpotFleetEbsBlockDeviceEncrypted
+    , ("Iops" .=) <$> _eC2SpotFleetEbsBlockDeviceIops
+    , ("SnapshotId" .=) <$> _eC2SpotFleetEbsBlockDeviceSnapshotId
+    , ("VolumeSize" .=) <$> _eC2SpotFleetEbsBlockDeviceVolumeSize
+    , ("VolumeType" .=) <$> _eC2SpotFleetEbsBlockDeviceVolumeType
+    ]
+
+instance FromJSON EC2SpotFleetEbsBlockDevice where
+  parseJSON (Object obj) =
+    EC2SpotFleetEbsBlockDevice <$>
+      obj .:? "DeleteOnTermination" <*>
+      obj .:? "Encrypted" <*>
+      obj .:? "Iops" <*>
+      obj .:? "SnapshotId" <*>
+      obj .:? "VolumeSize" <*>
+      obj .:? "VolumeType"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2SpotFleetEbsBlockDevice' containing required fields
+-- as arguments.
+ec2SpotFleetEbsBlockDevice
+  :: EC2SpotFleetEbsBlockDevice
+ec2SpotFleetEbsBlockDevice  =
+  EC2SpotFleetEbsBlockDevice
+  { _eC2SpotFleetEbsBlockDeviceDeleteOnTermination = Nothing
+  , _eC2SpotFleetEbsBlockDeviceEncrypted = Nothing
+  , _eC2SpotFleetEbsBlockDeviceIops = Nothing
+  , _eC2SpotFleetEbsBlockDeviceSnapshotId = Nothing
+  , _eC2SpotFleetEbsBlockDeviceVolumeSize = Nothing
+  , _eC2SpotFleetEbsBlockDeviceVolumeType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebsblockdevice-deleteontermination
+ecsfebdDeleteOnTermination :: Lens' EC2SpotFleetEbsBlockDevice (Maybe (Val Bool'))
+ecsfebdDeleteOnTermination = lens _eC2SpotFleetEbsBlockDeviceDeleteOnTermination (\s a -> s { _eC2SpotFleetEbsBlockDeviceDeleteOnTermination = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebsblockdevice-encrypted
+ecsfebdEncrypted :: Lens' EC2SpotFleetEbsBlockDevice (Maybe (Val Bool'))
+ecsfebdEncrypted = lens _eC2SpotFleetEbsBlockDeviceEncrypted (\s a -> s { _eC2SpotFleetEbsBlockDeviceEncrypted = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebsblockdevice-iops
+ecsfebdIops :: Lens' EC2SpotFleetEbsBlockDevice (Maybe (Val Integer'))
+ecsfebdIops = lens _eC2SpotFleetEbsBlockDeviceIops (\s a -> s { _eC2SpotFleetEbsBlockDeviceIops = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebsblockdevice-snapshotid
+ecsfebdSnapshotId :: Lens' EC2SpotFleetEbsBlockDevice (Maybe (Val Text))
+ecsfebdSnapshotId = lens _eC2SpotFleetEbsBlockDeviceSnapshotId (\s a -> s { _eC2SpotFleetEbsBlockDeviceSnapshotId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebsblockdevice-volumesize
+ecsfebdVolumeSize :: Lens' EC2SpotFleetEbsBlockDevice (Maybe (Val Integer'))
+ecsfebdVolumeSize = lens _eC2SpotFleetEbsBlockDeviceVolumeSize (\s a -> s { _eC2SpotFleetEbsBlockDeviceVolumeSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings-ebs.html#cfn-ec2-spotfleet-ebsblockdevice-volumetype
+ecsfebdVolumeType :: Lens' EC2SpotFleetEbsBlockDevice (Maybe (Val Text))
+ecsfebdVolumeType = lens _eC2SpotFleetEbsBlockDeviceVolumeType (\s a -> s { _eC2SpotFleetEbsBlockDeviceVolumeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetGroupIdentifier.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetGroupIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetGroupIdentifier.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-securitygroups.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetGroupIdentifier where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SpotFleetGroupIdentifier. See
+-- 'ec2SpotFleetGroupIdentifier' for a more convenient constructor.
+data EC2SpotFleetGroupIdentifier =
+  EC2SpotFleetGroupIdentifier
+  { _eC2SpotFleetGroupIdentifierGroupId :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON EC2SpotFleetGroupIdentifier where
+  toJSON EC2SpotFleetGroupIdentifier{..} =
+    object $
+    catMaybes
+    [ Just ("GroupId" .= _eC2SpotFleetGroupIdentifierGroupId)
+    ]
+
+instance FromJSON EC2SpotFleetGroupIdentifier where
+  parseJSON (Object obj) =
+    EC2SpotFleetGroupIdentifier <$>
+      obj .: "GroupId"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2SpotFleetGroupIdentifier' containing required fields
+-- as arguments.
+ec2SpotFleetGroupIdentifier
+  :: Val Text -- ^ 'ecsfgiGroupId'
+  -> EC2SpotFleetGroupIdentifier
+ec2SpotFleetGroupIdentifier groupIdarg =
+  EC2SpotFleetGroupIdentifier
+  { _eC2SpotFleetGroupIdentifierGroupId = groupIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-securitygroups.html#cfn-ec2-spotfleet-groupidentifier-groupid
+ecsfgiGroupId :: Lens' EC2SpotFleetGroupIdentifier (Val Text)
+ecsfgiGroupId = lens _eC2SpotFleetGroupIdentifierGroupId (\s a -> s { _eC2SpotFleetGroupIdentifierGroupId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetIamInstanceProfile.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetIamInstanceProfile.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetIamInstanceProfile.hs
+++ /dev/null
@@ -1,48 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-iaminstanceprofile.html
-
-module Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfile where
-
-import Control.Lens hiding ((.=))
-import Data.Aeson
-import Data.Maybe (catMaybes)
-import Data.Monoid (mempty)
-import Data.Text
-
-import Stratosphere.Values
-
-
--- | Full data type definition for EC2SpotFleetIamInstanceProfile. See
--- 'ec2SpotFleetIamInstanceProfile' for a more convenient constructor.
-data EC2SpotFleetIamInstanceProfile =
-  EC2SpotFleetIamInstanceProfile
-  { _eC2SpotFleetIamInstanceProfileArn :: Maybe (Val Text)
-  } deriving (Show, Eq)
-
-instance ToJSON EC2SpotFleetIamInstanceProfile where
-  toJSON EC2SpotFleetIamInstanceProfile{..} =
-    object $
-    catMaybes
-    [ ("Arn" .=) <$> _eC2SpotFleetIamInstanceProfileArn
-    ]
-
-instance FromJSON EC2SpotFleetIamInstanceProfile where
-  parseJSON (Object obj) =
-    EC2SpotFleetIamInstanceProfile <$>
-      obj .:? "Arn"
-  parseJSON _ = mempty
-
--- | Constructor for 'EC2SpotFleetIamInstanceProfile' containing required
--- fields as arguments.
-ec2SpotFleetIamInstanceProfile
-  :: EC2SpotFleetIamInstanceProfile
-ec2SpotFleetIamInstanceProfile  =
-  EC2SpotFleetIamInstanceProfile
-  { _eC2SpotFleetIamInstanceProfileArn = Nothing
-  }
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-iaminstanceprofile.html#cfn-ec2-spotfleet-iaminstanceprofile-arn
-ecsfiipArn :: Lens' EC2SpotFleetIamInstanceProfile (Maybe (Val Text))
-ecsfiipArn = lens _eC2SpotFleetIamInstanceProfileArn (\s a -> s { _eC2SpotFleetIamInstanceProfileArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetIamInstanceProfileSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetIamInstanceProfileSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetIamInstanceProfileSpecification.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-iaminstanceprofile.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfileSpecification where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- EC2SpotFleetIamInstanceProfileSpecification. See
+-- 'ec2SpotFleetIamInstanceProfileSpecification' for a more convenient
+-- constructor.
+data EC2SpotFleetIamInstanceProfileSpecification =
+  EC2SpotFleetIamInstanceProfileSpecification
+  { _eC2SpotFleetIamInstanceProfileSpecificationArn :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2SpotFleetIamInstanceProfileSpecification where
+  toJSON EC2SpotFleetIamInstanceProfileSpecification{..} =
+    object $
+    catMaybes
+    [ ("Arn" .=) <$> _eC2SpotFleetIamInstanceProfileSpecificationArn
+    ]
+
+instance FromJSON EC2SpotFleetIamInstanceProfileSpecification where
+  parseJSON (Object obj) =
+    EC2SpotFleetIamInstanceProfileSpecification <$>
+      obj .:? "Arn"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2SpotFleetIamInstanceProfileSpecification' containing
+-- required fields as arguments.
+ec2SpotFleetIamInstanceProfileSpecification
+  :: EC2SpotFleetIamInstanceProfileSpecification
+ec2SpotFleetIamInstanceProfileSpecification  =
+  EC2SpotFleetIamInstanceProfileSpecification
+  { _eC2SpotFleetIamInstanceProfileSpecificationArn = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-iaminstanceprofile.html#cfn-ec2-spotfleet-iaminstanceprofilespecification-arn
+ecsfiipsArn :: Lens' EC2SpotFleetIamInstanceProfileSpecification (Maybe (Val Text))
+ecsfiipsArn = lens _eC2SpotFleetIamInstanceProfileSpecificationArn (\s a -> s { _eC2SpotFleetIamInstanceProfileSpecificationArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetInstanceNetworkInterfaceSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetInstanceNetworkInterfaceSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetInstanceNetworkInterfaceSpecification.hs
@@ -0,0 +1,131 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetInstanceNetworkInterfaceSpecification where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EC2SpotFleetInstanceIpv6Address
+import Stratosphere.ResourceProperties.EC2SpotFleetPrivateIpAddressSpecification
+
+-- | Full data type definition for
+-- EC2SpotFleetInstanceNetworkInterfaceSpecification. See
+-- 'ec2SpotFleetInstanceNetworkInterfaceSpecification' for a more convenient
+-- constructor.
+data EC2SpotFleetInstanceNetworkInterfaceSpecification =
+  EC2SpotFleetInstanceNetworkInterfaceSpecification
+  { _eC2SpotFleetInstanceNetworkInterfaceSpecificationAssociatePublicIpAddress :: Maybe (Val Bool')
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationDeleteOnTermination :: Maybe (Val Bool')
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationDescription :: Maybe (Val Text)
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationDeviceIndex :: Maybe (Val Integer')
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationGroups :: Maybe [Val Text]
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationIpv6AddressCount :: Maybe (Val Integer')
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationIpv6Addresses :: Maybe [EC2SpotFleetInstanceIpv6Address]
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationNetworkInterfaceId :: Maybe (Val Text)
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationPrivateIpAddresses :: Maybe [EC2SpotFleetPrivateIpAddressSpecification]
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationSecondaryPrivateIpAddressCount :: Maybe (Val Integer')
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationSubnetId :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2SpotFleetInstanceNetworkInterfaceSpecification where
+  toJSON EC2SpotFleetInstanceNetworkInterfaceSpecification{..} =
+    object $
+    catMaybes
+    [ ("AssociatePublicIpAddress" .=) <$> _eC2SpotFleetInstanceNetworkInterfaceSpecificationAssociatePublicIpAddress
+    , ("DeleteOnTermination" .=) <$> _eC2SpotFleetInstanceNetworkInterfaceSpecificationDeleteOnTermination
+    , ("Description" .=) <$> _eC2SpotFleetInstanceNetworkInterfaceSpecificationDescription
+    , ("DeviceIndex" .=) <$> _eC2SpotFleetInstanceNetworkInterfaceSpecificationDeviceIndex
+    , ("Groups" .=) <$> _eC2SpotFleetInstanceNetworkInterfaceSpecificationGroups
+    , ("Ipv6AddressCount" .=) <$> _eC2SpotFleetInstanceNetworkInterfaceSpecificationIpv6AddressCount
+    , ("Ipv6Addresses" .=) <$> _eC2SpotFleetInstanceNetworkInterfaceSpecificationIpv6Addresses
+    , ("NetworkInterfaceId" .=) <$> _eC2SpotFleetInstanceNetworkInterfaceSpecificationNetworkInterfaceId
+    , ("PrivateIpAddresses" .=) <$> _eC2SpotFleetInstanceNetworkInterfaceSpecificationPrivateIpAddresses
+    , ("SecondaryPrivateIpAddressCount" .=) <$> _eC2SpotFleetInstanceNetworkInterfaceSpecificationSecondaryPrivateIpAddressCount
+    , ("SubnetId" .=) <$> _eC2SpotFleetInstanceNetworkInterfaceSpecificationSubnetId
+    ]
+
+instance FromJSON EC2SpotFleetInstanceNetworkInterfaceSpecification where
+  parseJSON (Object obj) =
+    EC2SpotFleetInstanceNetworkInterfaceSpecification <$>
+      obj .:? "AssociatePublicIpAddress" <*>
+      obj .:? "DeleteOnTermination" <*>
+      obj .:? "Description" <*>
+      obj .:? "DeviceIndex" <*>
+      obj .:? "Groups" <*>
+      obj .:? "Ipv6AddressCount" <*>
+      obj .:? "Ipv6Addresses" <*>
+      obj .:? "NetworkInterfaceId" <*>
+      obj .:? "PrivateIpAddresses" <*>
+      obj .:? "SecondaryPrivateIpAddressCount" <*>
+      obj .:? "SubnetId"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2SpotFleetInstanceNetworkInterfaceSpecification'
+-- containing required fields as arguments.
+ec2SpotFleetInstanceNetworkInterfaceSpecification
+  :: EC2SpotFleetInstanceNetworkInterfaceSpecification
+ec2SpotFleetInstanceNetworkInterfaceSpecification  =
+  EC2SpotFleetInstanceNetworkInterfaceSpecification
+  { _eC2SpotFleetInstanceNetworkInterfaceSpecificationAssociatePublicIpAddress = Nothing
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationDeleteOnTermination = Nothing
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationDescription = Nothing
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationDeviceIndex = Nothing
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationGroups = Nothing
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationIpv6AddressCount = Nothing
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationIpv6Addresses = Nothing
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationNetworkInterfaceId = Nothing
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationPrivateIpAddresses = Nothing
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationSecondaryPrivateIpAddressCount = Nothing
+  , _eC2SpotFleetInstanceNetworkInterfaceSpecificationSubnetId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-associatepublicipaddress
+ecsfinisAssociatePublicIpAddress :: Lens' EC2SpotFleetInstanceNetworkInterfaceSpecification (Maybe (Val Bool'))
+ecsfinisAssociatePublicIpAddress = lens _eC2SpotFleetInstanceNetworkInterfaceSpecificationAssociatePublicIpAddress (\s a -> s { _eC2SpotFleetInstanceNetworkInterfaceSpecificationAssociatePublicIpAddress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-deleteontermination
+ecsfinisDeleteOnTermination :: Lens' EC2SpotFleetInstanceNetworkInterfaceSpecification (Maybe (Val Bool'))
+ecsfinisDeleteOnTermination = lens _eC2SpotFleetInstanceNetworkInterfaceSpecificationDeleteOnTermination (\s a -> s { _eC2SpotFleetInstanceNetworkInterfaceSpecificationDeleteOnTermination = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-description
+ecsfinisDescription :: Lens' EC2SpotFleetInstanceNetworkInterfaceSpecification (Maybe (Val Text))
+ecsfinisDescription = lens _eC2SpotFleetInstanceNetworkInterfaceSpecificationDescription (\s a -> s { _eC2SpotFleetInstanceNetworkInterfaceSpecificationDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-deviceindex
+ecsfinisDeviceIndex :: Lens' EC2SpotFleetInstanceNetworkInterfaceSpecification (Maybe (Val Integer'))
+ecsfinisDeviceIndex = lens _eC2SpotFleetInstanceNetworkInterfaceSpecificationDeviceIndex (\s a -> s { _eC2SpotFleetInstanceNetworkInterfaceSpecificationDeviceIndex = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-groups
+ecsfinisGroups :: Lens' EC2SpotFleetInstanceNetworkInterfaceSpecification (Maybe [Val Text])
+ecsfinisGroups = lens _eC2SpotFleetInstanceNetworkInterfaceSpecificationGroups (\s a -> s { _eC2SpotFleetInstanceNetworkInterfaceSpecificationGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-ipv6addresscount
+ecsfinisIpv6AddressCount :: Lens' EC2SpotFleetInstanceNetworkInterfaceSpecification (Maybe (Val Integer'))
+ecsfinisIpv6AddressCount = lens _eC2SpotFleetInstanceNetworkInterfaceSpecificationIpv6AddressCount (\s a -> s { _eC2SpotFleetInstanceNetworkInterfaceSpecificationIpv6AddressCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-ipv6addresses
+ecsfinisIpv6Addresses :: Lens' EC2SpotFleetInstanceNetworkInterfaceSpecification (Maybe [EC2SpotFleetInstanceIpv6Address])
+ecsfinisIpv6Addresses = lens _eC2SpotFleetInstanceNetworkInterfaceSpecificationIpv6Addresses (\s a -> s { _eC2SpotFleetInstanceNetworkInterfaceSpecificationIpv6Addresses = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-networkinterfaceid
+ecsfinisNetworkInterfaceId :: Lens' EC2SpotFleetInstanceNetworkInterfaceSpecification (Maybe (Val Text))
+ecsfinisNetworkInterfaceId = lens _eC2SpotFleetInstanceNetworkInterfaceSpecificationNetworkInterfaceId (\s a -> s { _eC2SpotFleetInstanceNetworkInterfaceSpecificationNetworkInterfaceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-privateipaddresses
+ecsfinisPrivateIpAddresses :: Lens' EC2SpotFleetInstanceNetworkInterfaceSpecification (Maybe [EC2SpotFleetPrivateIpAddressSpecification])
+ecsfinisPrivateIpAddresses = lens _eC2SpotFleetInstanceNetworkInterfaceSpecificationPrivateIpAddresses (\s a -> s { _eC2SpotFleetInstanceNetworkInterfaceSpecificationPrivateIpAddresses = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-secondaryprivateipaddresscount
+ecsfinisSecondaryPrivateIpAddressCount :: Lens' EC2SpotFleetInstanceNetworkInterfaceSpecification (Maybe (Val Integer'))
+ecsfinisSecondaryPrivateIpAddressCount = lens _eC2SpotFleetInstanceNetworkInterfaceSpecificationSecondaryPrivateIpAddressCount (\s a -> s { _eC2SpotFleetInstanceNetworkInterfaceSpecificationSecondaryPrivateIpAddressCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-subnetid
+ecsfinisSubnetId :: Lens' EC2SpotFleetInstanceNetworkInterfaceSpecification (Maybe (Val Text))
+ecsfinisSubnetId = lens _eC2SpotFleetInstanceNetworkInterfaceSpecificationSubnetId (\s a -> s { _eC2SpotFleetInstanceNetworkInterfaceSpecificationSubnetId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchSpecifications.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchSpecifications.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchSpecifications.hs
+++ /dev/null
@@ -1,175 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html
-
-module Stratosphere.ResourceProperties.EC2SpotFleetLaunchSpecifications where
-
-import Control.Lens hiding ((.=))
-import Data.Aeson
-import Data.Maybe (catMaybes)
-import Data.Monoid (mempty)
-import Data.Text
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMappings
-import Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfile
-import Stratosphere.ResourceProperties.EC2SpotFleetMonitoring
-import Stratosphere.ResourceProperties.EC2SpotFleetNetworkInterfaces
-import Stratosphere.ResourceProperties.EC2SpotFleetPlacement
-import Stratosphere.ResourceProperties.EC2SpotFleetSecurityGroups
-
--- | Full data type definition for EC2SpotFleetLaunchSpecifications. See
--- 'ec2SpotFleetLaunchSpecifications' for a more convenient constructor.
-data EC2SpotFleetLaunchSpecifications =
-  EC2SpotFleetLaunchSpecifications
-  { _eC2SpotFleetLaunchSpecificationsBlockDeviceMappings :: Maybe [EC2SpotFleetBlockDeviceMappings]
-  , _eC2SpotFleetLaunchSpecificationsEbsOptimized :: Maybe (Val Bool')
-  , _eC2SpotFleetLaunchSpecificationsIamInstanceProfile :: Maybe EC2SpotFleetIamInstanceProfile
-  , _eC2SpotFleetLaunchSpecificationsImageId :: Val Text
-  , _eC2SpotFleetLaunchSpecificationsInstanceType :: Val Text
-  , _eC2SpotFleetLaunchSpecificationsKernelId :: Maybe (Val Text)
-  , _eC2SpotFleetLaunchSpecificationsKeyName :: Maybe (Val Text)
-  , _eC2SpotFleetLaunchSpecificationsMonitoring :: Maybe EC2SpotFleetMonitoring
-  , _eC2SpotFleetLaunchSpecificationsNetworkInterfaces :: Maybe [EC2SpotFleetNetworkInterfaces]
-  , _eC2SpotFleetLaunchSpecificationsPlacement :: Maybe EC2SpotFleetPlacement
-  , _eC2SpotFleetLaunchSpecificationsRamdiskId :: Maybe (Val Text)
-  , _eC2SpotFleetLaunchSpecificationsSecurityGroups :: Maybe [EC2SpotFleetSecurityGroups]
-  , _eC2SpotFleetLaunchSpecificationsSpotPrice :: Maybe (Val Text)
-  , _eC2SpotFleetLaunchSpecificationsSubnetId :: Maybe (Val Text)
-  , _eC2SpotFleetLaunchSpecificationsUserData :: Maybe (Val Text)
-  , _eC2SpotFleetLaunchSpecificationsWeightedCapacity :: Maybe (Val Double')
-  } deriving (Show, Eq)
-
-instance ToJSON EC2SpotFleetLaunchSpecifications where
-  toJSON EC2SpotFleetLaunchSpecifications{..} =
-    object $
-    catMaybes
-    [ ("BlockDeviceMappings" .=) <$> _eC2SpotFleetLaunchSpecificationsBlockDeviceMappings
-    , ("EbsOptimized" .=) <$> _eC2SpotFleetLaunchSpecificationsEbsOptimized
-    , ("IamInstanceProfile" .=) <$> _eC2SpotFleetLaunchSpecificationsIamInstanceProfile
-    , Just ("ImageId" .= _eC2SpotFleetLaunchSpecificationsImageId)
-    , Just ("InstanceType" .= _eC2SpotFleetLaunchSpecificationsInstanceType)
-    , ("KernelId" .=) <$> _eC2SpotFleetLaunchSpecificationsKernelId
-    , ("KeyName" .=) <$> _eC2SpotFleetLaunchSpecificationsKeyName
-    , ("Monitoring" .=) <$> _eC2SpotFleetLaunchSpecificationsMonitoring
-    , ("NetworkInterfaces" .=) <$> _eC2SpotFleetLaunchSpecificationsNetworkInterfaces
-    , ("Placement" .=) <$> _eC2SpotFleetLaunchSpecificationsPlacement
-    , ("RamdiskId" .=) <$> _eC2SpotFleetLaunchSpecificationsRamdiskId
-    , ("SecurityGroups" .=) <$> _eC2SpotFleetLaunchSpecificationsSecurityGroups
-    , ("SpotPrice" .=) <$> _eC2SpotFleetLaunchSpecificationsSpotPrice
-    , ("SubnetId" .=) <$> _eC2SpotFleetLaunchSpecificationsSubnetId
-    , ("UserData" .=) <$> _eC2SpotFleetLaunchSpecificationsUserData
-    , ("WeightedCapacity" .=) <$> _eC2SpotFleetLaunchSpecificationsWeightedCapacity
-    ]
-
-instance FromJSON EC2SpotFleetLaunchSpecifications where
-  parseJSON (Object obj) =
-    EC2SpotFleetLaunchSpecifications <$>
-      obj .:? "BlockDeviceMappings" <*>
-      obj .:? "EbsOptimized" <*>
-      obj .:? "IamInstanceProfile" <*>
-      obj .: "ImageId" <*>
-      obj .: "InstanceType" <*>
-      obj .:? "KernelId" <*>
-      obj .:? "KeyName" <*>
-      obj .:? "Monitoring" <*>
-      obj .:? "NetworkInterfaces" <*>
-      obj .:? "Placement" <*>
-      obj .:? "RamdiskId" <*>
-      obj .:? "SecurityGroups" <*>
-      obj .:? "SpotPrice" <*>
-      obj .:? "SubnetId" <*>
-      obj .:? "UserData" <*>
-      obj .:? "WeightedCapacity"
-  parseJSON _ = mempty
-
--- | Constructor for 'EC2SpotFleetLaunchSpecifications' containing required
--- fields as arguments.
-ec2SpotFleetLaunchSpecifications
-  :: Val Text -- ^ 'ecsflsImageId'
-  -> Val Text -- ^ 'ecsflsInstanceType'
-  -> EC2SpotFleetLaunchSpecifications
-ec2SpotFleetLaunchSpecifications imageIdarg instanceTypearg =
-  EC2SpotFleetLaunchSpecifications
-  { _eC2SpotFleetLaunchSpecificationsBlockDeviceMappings = Nothing
-  , _eC2SpotFleetLaunchSpecificationsEbsOptimized = Nothing
-  , _eC2SpotFleetLaunchSpecificationsIamInstanceProfile = Nothing
-  , _eC2SpotFleetLaunchSpecificationsImageId = imageIdarg
-  , _eC2SpotFleetLaunchSpecificationsInstanceType = instanceTypearg
-  , _eC2SpotFleetLaunchSpecificationsKernelId = Nothing
-  , _eC2SpotFleetLaunchSpecificationsKeyName = Nothing
-  , _eC2SpotFleetLaunchSpecificationsMonitoring = Nothing
-  , _eC2SpotFleetLaunchSpecificationsNetworkInterfaces = Nothing
-  , _eC2SpotFleetLaunchSpecificationsPlacement = Nothing
-  , _eC2SpotFleetLaunchSpecificationsRamdiskId = Nothing
-  , _eC2SpotFleetLaunchSpecificationsSecurityGroups = Nothing
-  , _eC2SpotFleetLaunchSpecificationsSpotPrice = Nothing
-  , _eC2SpotFleetLaunchSpecificationsSubnetId = Nothing
-  , _eC2SpotFleetLaunchSpecificationsUserData = Nothing
-  , _eC2SpotFleetLaunchSpecificationsWeightedCapacity = Nothing
-  }
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-blockdevicemappings
-ecsflsBlockDeviceMappings :: Lens' EC2SpotFleetLaunchSpecifications (Maybe [EC2SpotFleetBlockDeviceMappings])
-ecsflsBlockDeviceMappings = lens _eC2SpotFleetLaunchSpecificationsBlockDeviceMappings (\s a -> s { _eC2SpotFleetLaunchSpecificationsBlockDeviceMappings = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-ebsoptimized
-ecsflsEbsOptimized :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Bool'))
-ecsflsEbsOptimized = lens _eC2SpotFleetLaunchSpecificationsEbsOptimized (\s a -> s { _eC2SpotFleetLaunchSpecificationsEbsOptimized = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-iaminstanceprofile
-ecsflsIamInstanceProfile :: Lens' EC2SpotFleetLaunchSpecifications (Maybe EC2SpotFleetIamInstanceProfile)
-ecsflsIamInstanceProfile = lens _eC2SpotFleetLaunchSpecificationsIamInstanceProfile (\s a -> s { _eC2SpotFleetLaunchSpecificationsIamInstanceProfile = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-imageid
-ecsflsImageId :: Lens' EC2SpotFleetLaunchSpecifications (Val Text)
-ecsflsImageId = lens _eC2SpotFleetLaunchSpecificationsImageId (\s a -> s { _eC2SpotFleetLaunchSpecificationsImageId = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-instancetype
-ecsflsInstanceType :: Lens' EC2SpotFleetLaunchSpecifications (Val Text)
-ecsflsInstanceType = lens _eC2SpotFleetLaunchSpecificationsInstanceType (\s a -> s { _eC2SpotFleetLaunchSpecificationsInstanceType = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-kernelid
-ecsflsKernelId :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
-ecsflsKernelId = lens _eC2SpotFleetLaunchSpecificationsKernelId (\s a -> s { _eC2SpotFleetLaunchSpecificationsKernelId = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-keyname
-ecsflsKeyName :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
-ecsflsKeyName = lens _eC2SpotFleetLaunchSpecificationsKeyName (\s a -> s { _eC2SpotFleetLaunchSpecificationsKeyName = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-monitoring
-ecsflsMonitoring :: Lens' EC2SpotFleetLaunchSpecifications (Maybe EC2SpotFleetMonitoring)
-ecsflsMonitoring = lens _eC2SpotFleetLaunchSpecificationsMonitoring (\s a -> s { _eC2SpotFleetLaunchSpecificationsMonitoring = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-networkinterfaces
-ecsflsNetworkInterfaces :: Lens' EC2SpotFleetLaunchSpecifications (Maybe [EC2SpotFleetNetworkInterfaces])
-ecsflsNetworkInterfaces = lens _eC2SpotFleetLaunchSpecificationsNetworkInterfaces (\s a -> s { _eC2SpotFleetLaunchSpecificationsNetworkInterfaces = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-placement
-ecsflsPlacement :: Lens' EC2SpotFleetLaunchSpecifications (Maybe EC2SpotFleetPlacement)
-ecsflsPlacement = lens _eC2SpotFleetLaunchSpecificationsPlacement (\s a -> s { _eC2SpotFleetLaunchSpecificationsPlacement = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-ramdiskid
-ecsflsRamdiskId :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
-ecsflsRamdiskId = lens _eC2SpotFleetLaunchSpecificationsRamdiskId (\s a -> s { _eC2SpotFleetLaunchSpecificationsRamdiskId = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-securitygroups
-ecsflsSecurityGroups :: Lens' EC2SpotFleetLaunchSpecifications (Maybe [EC2SpotFleetSecurityGroups])
-ecsflsSecurityGroups = lens _eC2SpotFleetLaunchSpecificationsSecurityGroups (\s a -> s { _eC2SpotFleetLaunchSpecificationsSecurityGroups = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-spotprice
-ecsflsSpotPrice :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
-ecsflsSpotPrice = lens _eC2SpotFleetLaunchSpecificationsSpotPrice (\s a -> s { _eC2SpotFleetLaunchSpecificationsSpotPrice = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-subnetid
-ecsflsSubnetId :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
-ecsflsSubnetId = lens _eC2SpotFleetLaunchSpecificationsSubnetId (\s a -> s { _eC2SpotFleetLaunchSpecificationsSubnetId = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-userdata
-ecsflsUserData :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Text))
-ecsflsUserData = lens _eC2SpotFleetLaunchSpecificationsUserData (\s a -> s { _eC2SpotFleetLaunchSpecificationsUserData = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-launchspecifications-weightedcapacity
-ecsflsWeightedCapacity :: Lens' EC2SpotFleetLaunchSpecifications (Maybe (Val Double'))
-ecsflsWeightedCapacity = lens _eC2SpotFleetLaunchSpecificationsWeightedCapacity (\s a -> s { _eC2SpotFleetLaunchSpecificationsWeightedCapacity = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetMonitoring.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetMonitoring.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetMonitoring.hs
+++ /dev/null
@@ -1,48 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-monitoring.html
-
-module Stratosphere.ResourceProperties.EC2SpotFleetMonitoring where
-
-import Control.Lens hiding ((.=))
-import Data.Aeson
-import Data.Maybe (catMaybes)
-import Data.Monoid (mempty)
-import Data.Text
-
-import Stratosphere.Values
-
-
--- | Full data type definition for EC2SpotFleetMonitoring. See
--- 'ec2SpotFleetMonitoring' for a more convenient constructor.
-data EC2SpotFleetMonitoring =
-  EC2SpotFleetMonitoring
-  { _eC2SpotFleetMonitoringEnabled :: Maybe (Val Bool')
-  } deriving (Show, Eq)
-
-instance ToJSON EC2SpotFleetMonitoring where
-  toJSON EC2SpotFleetMonitoring{..} =
-    object $
-    catMaybes
-    [ ("Enabled" .=) <$> _eC2SpotFleetMonitoringEnabled
-    ]
-
-instance FromJSON EC2SpotFleetMonitoring where
-  parseJSON (Object obj) =
-    EC2SpotFleetMonitoring <$>
-      obj .:? "Enabled"
-  parseJSON _ = mempty
-
--- | Constructor for 'EC2SpotFleetMonitoring' containing required fields as
--- arguments.
-ec2SpotFleetMonitoring
-  :: EC2SpotFleetMonitoring
-ec2SpotFleetMonitoring  =
-  EC2SpotFleetMonitoring
-  { _eC2SpotFleetMonitoringEnabled = Nothing
-  }
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-monitoring.html#cfn-ec2-spotfleet-monitoring-enabled
-ecsfmEnabled :: Lens' EC2SpotFleetMonitoring (Maybe (Val Bool'))
-ecsfmEnabled = lens _eC2SpotFleetMonitoringEnabled (\s a -> s { _eC2SpotFleetMonitoringEnabled = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetNetworkInterfaces.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetNetworkInterfaces.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetNetworkInterfaces.hs
+++ /dev/null
@@ -1,130 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html
-
-module Stratosphere.ResourceProperties.EC2SpotFleetNetworkInterfaces where
-
-import Control.Lens hiding ((.=))
-import Data.Aeson
-import Data.Maybe (catMaybes)
-import Data.Monoid (mempty)
-import Data.Text
-
-import Stratosphere.Values
-import Stratosphere.ResourceProperties.EC2SpotFleetInstanceIpv6Address
-import Stratosphere.ResourceProperties.EC2SpotFleetPrivateIpAddresses
-
--- | Full data type definition for EC2SpotFleetNetworkInterfaces. See
--- 'ec2SpotFleetNetworkInterfaces' for a more convenient constructor.
-data EC2SpotFleetNetworkInterfaces =
-  EC2SpotFleetNetworkInterfaces
-  { _eC2SpotFleetNetworkInterfacesAssociatePublicIpAddress :: Maybe (Val Bool')
-  , _eC2SpotFleetNetworkInterfacesDeleteOnTermination :: Maybe (Val Bool')
-  , _eC2SpotFleetNetworkInterfacesDescription :: Maybe (Val Text)
-  , _eC2SpotFleetNetworkInterfacesDeviceIndex :: Val Integer'
-  , _eC2SpotFleetNetworkInterfacesGroups :: Maybe [Val Text]
-  , _eC2SpotFleetNetworkInterfacesIpv6AddressCount :: Maybe (Val Integer')
-  , _eC2SpotFleetNetworkInterfacesIpv6Addresses :: Maybe EC2SpotFleetInstanceIpv6Address
-  , _eC2SpotFleetNetworkInterfacesNetworkInterfaceId :: Maybe (Val Text)
-  , _eC2SpotFleetNetworkInterfacesPrivateIpAddresses :: Maybe [EC2SpotFleetPrivateIpAddresses]
-  , _eC2SpotFleetNetworkInterfacesSecondaryPrivateIpAddressCount :: Maybe (Val Integer')
-  , _eC2SpotFleetNetworkInterfacesSubnetId :: Maybe (Val Text)
-  } deriving (Show, Eq)
-
-instance ToJSON EC2SpotFleetNetworkInterfaces where
-  toJSON EC2SpotFleetNetworkInterfaces{..} =
-    object $
-    catMaybes
-    [ ("AssociatePublicIpAddress" .=) <$> _eC2SpotFleetNetworkInterfacesAssociatePublicIpAddress
-    , ("DeleteOnTermination" .=) <$> _eC2SpotFleetNetworkInterfacesDeleteOnTermination
-    , ("Description" .=) <$> _eC2SpotFleetNetworkInterfacesDescription
-    , Just ("DeviceIndex" .= _eC2SpotFleetNetworkInterfacesDeviceIndex)
-    , ("Groups" .=) <$> _eC2SpotFleetNetworkInterfacesGroups
-    , ("Ipv6AddressCount" .=) <$> _eC2SpotFleetNetworkInterfacesIpv6AddressCount
-    , ("Ipv6Addresses" .=) <$> _eC2SpotFleetNetworkInterfacesIpv6Addresses
-    , ("NetworkInterfaceId" .=) <$> _eC2SpotFleetNetworkInterfacesNetworkInterfaceId
-    , ("PrivateIpAddresses" .=) <$> _eC2SpotFleetNetworkInterfacesPrivateIpAddresses
-    , ("SecondaryPrivateIpAddressCount" .=) <$> _eC2SpotFleetNetworkInterfacesSecondaryPrivateIpAddressCount
-    , ("SubnetId" .=) <$> _eC2SpotFleetNetworkInterfacesSubnetId
-    ]
-
-instance FromJSON EC2SpotFleetNetworkInterfaces where
-  parseJSON (Object obj) =
-    EC2SpotFleetNetworkInterfaces <$>
-      obj .:? "AssociatePublicIpAddress" <*>
-      obj .:? "DeleteOnTermination" <*>
-      obj .:? "Description" <*>
-      obj .: "DeviceIndex" <*>
-      obj .:? "Groups" <*>
-      obj .:? "Ipv6AddressCount" <*>
-      obj .:? "Ipv6Addresses" <*>
-      obj .:? "NetworkInterfaceId" <*>
-      obj .:? "PrivateIpAddresses" <*>
-      obj .:? "SecondaryPrivateIpAddressCount" <*>
-      obj .:? "SubnetId"
-  parseJSON _ = mempty
-
--- | Constructor for 'EC2SpotFleetNetworkInterfaces' containing required
--- fields as arguments.
-ec2SpotFleetNetworkInterfaces
-  :: Val Integer' -- ^ 'ecsfniDeviceIndex'
-  -> EC2SpotFleetNetworkInterfaces
-ec2SpotFleetNetworkInterfaces deviceIndexarg =
-  EC2SpotFleetNetworkInterfaces
-  { _eC2SpotFleetNetworkInterfacesAssociatePublicIpAddress = Nothing
-  , _eC2SpotFleetNetworkInterfacesDeleteOnTermination = Nothing
-  , _eC2SpotFleetNetworkInterfacesDescription = Nothing
-  , _eC2SpotFleetNetworkInterfacesDeviceIndex = deviceIndexarg
-  , _eC2SpotFleetNetworkInterfacesGroups = Nothing
-  , _eC2SpotFleetNetworkInterfacesIpv6AddressCount = Nothing
-  , _eC2SpotFleetNetworkInterfacesIpv6Addresses = Nothing
-  , _eC2SpotFleetNetworkInterfacesNetworkInterfaceId = Nothing
-  , _eC2SpotFleetNetworkInterfacesPrivateIpAddresses = Nothing
-  , _eC2SpotFleetNetworkInterfacesSecondaryPrivateIpAddressCount = Nothing
-  , _eC2SpotFleetNetworkInterfacesSubnetId = Nothing
-  }
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-associatepublicipaddress
-ecsfniAssociatePublicIpAddress :: Lens' EC2SpotFleetNetworkInterfaces (Maybe (Val Bool'))
-ecsfniAssociatePublicIpAddress = lens _eC2SpotFleetNetworkInterfacesAssociatePublicIpAddress (\s a -> s { _eC2SpotFleetNetworkInterfacesAssociatePublicIpAddress = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-deleteontermination
-ecsfniDeleteOnTermination :: Lens' EC2SpotFleetNetworkInterfaces (Maybe (Val Bool'))
-ecsfniDeleteOnTermination = lens _eC2SpotFleetNetworkInterfacesDeleteOnTermination (\s a -> s { _eC2SpotFleetNetworkInterfacesDeleteOnTermination = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-description
-ecsfniDescription :: Lens' EC2SpotFleetNetworkInterfaces (Maybe (Val Text))
-ecsfniDescription = lens _eC2SpotFleetNetworkInterfacesDescription (\s a -> s { _eC2SpotFleetNetworkInterfacesDescription = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-deviceindex
-ecsfniDeviceIndex :: Lens' EC2SpotFleetNetworkInterfaces (Val Integer')
-ecsfniDeviceIndex = lens _eC2SpotFleetNetworkInterfacesDeviceIndex (\s a -> s { _eC2SpotFleetNetworkInterfacesDeviceIndex = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-groups
-ecsfniGroups :: Lens' EC2SpotFleetNetworkInterfaces (Maybe [Val Text])
-ecsfniGroups = lens _eC2SpotFleetNetworkInterfacesGroups (\s a -> s { _eC2SpotFleetNetworkInterfacesGroups = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-ipv6addresscount
-ecsfniIpv6AddressCount :: Lens' EC2SpotFleetNetworkInterfaces (Maybe (Val Integer'))
-ecsfniIpv6AddressCount = lens _eC2SpotFleetNetworkInterfacesIpv6AddressCount (\s a -> s { _eC2SpotFleetNetworkInterfacesIpv6AddressCount = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-ipv6addresses
-ecsfniIpv6Addresses :: Lens' EC2SpotFleetNetworkInterfaces (Maybe EC2SpotFleetInstanceIpv6Address)
-ecsfniIpv6Addresses = lens _eC2SpotFleetNetworkInterfacesIpv6Addresses (\s a -> s { _eC2SpotFleetNetworkInterfacesIpv6Addresses = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-networkinterfaceid
-ecsfniNetworkInterfaceId :: Lens' EC2SpotFleetNetworkInterfaces (Maybe (Val Text))
-ecsfniNetworkInterfaceId = lens _eC2SpotFleetNetworkInterfacesNetworkInterfaceId (\s a -> s { _eC2SpotFleetNetworkInterfacesNetworkInterfaceId = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-privateipaddresses
-ecsfniPrivateIpAddresses :: Lens' EC2SpotFleetNetworkInterfaces (Maybe [EC2SpotFleetPrivateIpAddresses])
-ecsfniPrivateIpAddresses = lens _eC2SpotFleetNetworkInterfacesPrivateIpAddresses (\s a -> s { _eC2SpotFleetNetworkInterfacesPrivateIpAddresses = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-secondaryprivateipaddresscount
-ecsfniSecondaryPrivateIpAddressCount :: Lens' EC2SpotFleetNetworkInterfaces (Maybe (Val Integer'))
-ecsfniSecondaryPrivateIpAddressCount = lens _eC2SpotFleetNetworkInterfacesSecondaryPrivateIpAddressCount (\s a -> s { _eC2SpotFleetNetworkInterfacesSecondaryPrivateIpAddressCount = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces.html#cfn-ec2-spotfleet-networkinterfaces-subnetid
-ecsfniSubnetId :: Lens' EC2SpotFleetNetworkInterfaces (Maybe (Val Text))
-ecsfniSubnetId = lens _eC2SpotFleetNetworkInterfacesSubnetId (\s a -> s { _eC2SpotFleetNetworkInterfacesSubnetId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPlacement.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPlacement.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPlacement.hs
+++ /dev/null
@@ -1,56 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-placement.html
-
-module Stratosphere.ResourceProperties.EC2SpotFleetPlacement where
-
-import Control.Lens hiding ((.=))
-import Data.Aeson
-import Data.Maybe (catMaybes)
-import Data.Monoid (mempty)
-import Data.Text
-
-import Stratosphere.Values
-
-
--- | Full data type definition for EC2SpotFleetPlacement. See
--- 'ec2SpotFleetPlacement' for a more convenient constructor.
-data EC2SpotFleetPlacement =
-  EC2SpotFleetPlacement
-  { _eC2SpotFleetPlacementAvailabilityZone :: Maybe (Val Text)
-  , _eC2SpotFleetPlacementGroupName :: Maybe (Val Text)
-  } deriving (Show, Eq)
-
-instance ToJSON EC2SpotFleetPlacement where
-  toJSON EC2SpotFleetPlacement{..} =
-    object $
-    catMaybes
-    [ ("AvailabilityZone" .=) <$> _eC2SpotFleetPlacementAvailabilityZone
-    , ("GroupName" .=) <$> _eC2SpotFleetPlacementGroupName
-    ]
-
-instance FromJSON EC2SpotFleetPlacement where
-  parseJSON (Object obj) =
-    EC2SpotFleetPlacement <$>
-      obj .:? "AvailabilityZone" <*>
-      obj .:? "GroupName"
-  parseJSON _ = mempty
-
--- | Constructor for 'EC2SpotFleetPlacement' containing required fields as
--- arguments.
-ec2SpotFleetPlacement
-  :: EC2SpotFleetPlacement
-ec2SpotFleetPlacement  =
-  EC2SpotFleetPlacement
-  { _eC2SpotFleetPlacementAvailabilityZone = Nothing
-  , _eC2SpotFleetPlacementGroupName = Nothing
-  }
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-placement.html#cfn-ec2-spotfleet-placement-availabilityzone
-ecsfpAvailabilityZone :: Lens' EC2SpotFleetPlacement (Maybe (Val Text))
-ecsfpAvailabilityZone = lens _eC2SpotFleetPlacementAvailabilityZone (\s a -> s { _eC2SpotFleetPlacementAvailabilityZone = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-placement.html#cfn-ec2-spotfleet-placement-groupname
-ecsfpGroupName :: Lens' EC2SpotFleetPlacement (Maybe (Val Text))
-ecsfpGroupName = lens _eC2SpotFleetPlacementGroupName (\s a -> s { _eC2SpotFleetPlacementGroupName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPrivateIpAddressSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPrivateIpAddressSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPrivateIpAddressSpecification.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces-privateipaddresses.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetPrivateIpAddressSpecification where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SpotFleetPrivateIpAddressSpecification.
+-- See 'ec2SpotFleetPrivateIpAddressSpecification' for a more convenient
+-- constructor.
+data EC2SpotFleetPrivateIpAddressSpecification =
+  EC2SpotFleetPrivateIpAddressSpecification
+  { _eC2SpotFleetPrivateIpAddressSpecificationPrimary :: Maybe (Val Bool')
+  , _eC2SpotFleetPrivateIpAddressSpecificationPrivateIpAddress :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON EC2SpotFleetPrivateIpAddressSpecification where
+  toJSON EC2SpotFleetPrivateIpAddressSpecification{..} =
+    object $
+    catMaybes
+    [ ("Primary" .=) <$> _eC2SpotFleetPrivateIpAddressSpecificationPrimary
+    , Just ("PrivateIpAddress" .= _eC2SpotFleetPrivateIpAddressSpecificationPrivateIpAddress)
+    ]
+
+instance FromJSON EC2SpotFleetPrivateIpAddressSpecification where
+  parseJSON (Object obj) =
+    EC2SpotFleetPrivateIpAddressSpecification <$>
+      obj .:? "Primary" <*>
+      obj .: "PrivateIpAddress"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2SpotFleetPrivateIpAddressSpecification' containing
+-- required fields as arguments.
+ec2SpotFleetPrivateIpAddressSpecification
+  :: Val Text -- ^ 'ecsfpiasPrivateIpAddress'
+  -> EC2SpotFleetPrivateIpAddressSpecification
+ec2SpotFleetPrivateIpAddressSpecification privateIpAddressarg =
+  EC2SpotFleetPrivateIpAddressSpecification
+  { _eC2SpotFleetPrivateIpAddressSpecificationPrimary = Nothing
+  , _eC2SpotFleetPrivateIpAddressSpecificationPrivateIpAddress = privateIpAddressarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces-privateipaddresses.html#cfn-ec2-spotfleet-privateipaddressspecification-primary
+ecsfpiasPrimary :: Lens' EC2SpotFleetPrivateIpAddressSpecification (Maybe (Val Bool'))
+ecsfpiasPrimary = lens _eC2SpotFleetPrivateIpAddressSpecificationPrimary (\s a -> s { _eC2SpotFleetPrivateIpAddressSpecificationPrimary = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces-privateipaddresses.html#cfn-ec2-spotfleet-privateipaddressspecification-privateipaddress
+ecsfpiasPrivateIpAddress :: Lens' EC2SpotFleetPrivateIpAddressSpecification (Val Text)
+ecsfpiasPrivateIpAddress = lens _eC2SpotFleetPrivateIpAddressSpecificationPrivateIpAddress (\s a -> s { _eC2SpotFleetPrivateIpAddressSpecificationPrivateIpAddress = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPrivateIpAddresses.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPrivateIpAddresses.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetPrivateIpAddresses.hs
+++ /dev/null
@@ -1,57 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces-privateipaddresses.html
-
-module Stratosphere.ResourceProperties.EC2SpotFleetPrivateIpAddresses where
-
-import Control.Lens hiding ((.=))
-import Data.Aeson
-import Data.Maybe (catMaybes)
-import Data.Monoid (mempty)
-import Data.Text
-
-import Stratosphere.Values
-
-
--- | Full data type definition for EC2SpotFleetPrivateIpAddresses. See
--- 'ec2SpotFleetPrivateIpAddresses' for a more convenient constructor.
-data EC2SpotFleetPrivateIpAddresses =
-  EC2SpotFleetPrivateIpAddresses
-  { _eC2SpotFleetPrivateIpAddressesPrimary :: Maybe (Val Bool')
-  , _eC2SpotFleetPrivateIpAddressesPrivateIpAddress :: Val Text
-  } deriving (Show, Eq)
-
-instance ToJSON EC2SpotFleetPrivateIpAddresses where
-  toJSON EC2SpotFleetPrivateIpAddresses{..} =
-    object $
-    catMaybes
-    [ ("Primary" .=) <$> _eC2SpotFleetPrivateIpAddressesPrimary
-    , Just ("PrivateIpAddress" .= _eC2SpotFleetPrivateIpAddressesPrivateIpAddress)
-    ]
-
-instance FromJSON EC2SpotFleetPrivateIpAddresses where
-  parseJSON (Object obj) =
-    EC2SpotFleetPrivateIpAddresses <$>
-      obj .:? "Primary" <*>
-      obj .: "PrivateIpAddress"
-  parseJSON _ = mempty
-
--- | Constructor for 'EC2SpotFleetPrivateIpAddresses' containing required
--- fields as arguments.
-ec2SpotFleetPrivateIpAddresses
-  :: Val Text -- ^ 'ecsfpiaPrivateIpAddress'
-  -> EC2SpotFleetPrivateIpAddresses
-ec2SpotFleetPrivateIpAddresses privateIpAddressarg =
-  EC2SpotFleetPrivateIpAddresses
-  { _eC2SpotFleetPrivateIpAddressesPrimary = Nothing
-  , _eC2SpotFleetPrivateIpAddressesPrivateIpAddress = privateIpAddressarg
-  }
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces-privateipaddresses.html#cfn-ec2-spotfleet-privateipaddresses-primary
-ecsfpiaPrimary :: Lens' EC2SpotFleetPrivateIpAddresses (Maybe (Val Bool'))
-ecsfpiaPrimary = lens _eC2SpotFleetPrivateIpAddressesPrimary (\s a -> s { _eC2SpotFleetPrivateIpAddressesPrimary = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-networkinterfaces-privateipaddresses.html#cfn-ec2-spotfleet-privateipaddresses-privateipaddress
-ecsfpiaPrivateIpAddress :: Lens' EC2SpotFleetPrivateIpAddresses (Val Text)
-ecsfpiaPrivateIpAddress = lens _eC2SpotFleetPrivateIpAddressesPrivateIpAddress (\s a -> s { _eC2SpotFleetPrivateIpAddressesPrivateIpAddress = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSecurityGroups.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSecurityGroups.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSecurityGroups.hs
+++ /dev/null
@@ -1,48 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-securitygroups.html
-
-module Stratosphere.ResourceProperties.EC2SpotFleetSecurityGroups where
-
-import Control.Lens hiding ((.=))
-import Data.Aeson
-import Data.Maybe (catMaybes)
-import Data.Monoid (mempty)
-import Data.Text
-
-import Stratosphere.Values
-
-
--- | Full data type definition for EC2SpotFleetSecurityGroups. See
--- 'ec2SpotFleetSecurityGroups' for a more convenient constructor.
-data EC2SpotFleetSecurityGroups =
-  EC2SpotFleetSecurityGroups
-  { _eC2SpotFleetSecurityGroupsGroupId :: Maybe (Val Text)
-  } deriving (Show, Eq)
-
-instance ToJSON EC2SpotFleetSecurityGroups where
-  toJSON EC2SpotFleetSecurityGroups{..} =
-    object $
-    catMaybes
-    [ ("GroupId" .=) <$> _eC2SpotFleetSecurityGroupsGroupId
-    ]
-
-instance FromJSON EC2SpotFleetSecurityGroups where
-  parseJSON (Object obj) =
-    EC2SpotFleetSecurityGroups <$>
-      obj .:? "GroupId"
-  parseJSON _ = mempty
-
--- | Constructor for 'EC2SpotFleetSecurityGroups' containing required fields
--- as arguments.
-ec2SpotFleetSecurityGroups
-  :: EC2SpotFleetSecurityGroups
-ec2SpotFleetSecurityGroups  =
-  EC2SpotFleetSecurityGroups
-  { _eC2SpotFleetSecurityGroupsGroupId = Nothing
-  }
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-securitygroups.html#cfn-ec2-spotfleet-securitygroups-groupid
-ecsfsgGroupId :: Lens' EC2SpotFleetSecurityGroups (Maybe (Val Text))
-ecsfsgGroupId = lens _eC2SpotFleetSecurityGroupsGroupId (\s a -> s { _eC2SpotFleetSecurityGroupsGroupId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetLaunchSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetLaunchSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetLaunchSpecification.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetLaunchSpecification where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMapping
+import Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfileSpecification
+import Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetMonitoring
+import Stratosphere.ResourceProperties.EC2SpotFleetInstanceNetworkInterfaceSpecification
+import Stratosphere.ResourceProperties.EC2SpotFleetSpotPlacement
+import Stratosphere.ResourceProperties.EC2SpotFleetGroupIdentifier
+
+-- | Full data type definition for EC2SpotFleetSpotFleetLaunchSpecification.
+-- See 'ec2SpotFleetSpotFleetLaunchSpecification' for a more convenient
+-- constructor.
+data EC2SpotFleetSpotFleetLaunchSpecification =
+  EC2SpotFleetSpotFleetLaunchSpecification
+  { _eC2SpotFleetSpotFleetLaunchSpecificationBlockDeviceMappings :: Maybe [EC2SpotFleetBlockDeviceMapping]
+  , _eC2SpotFleetSpotFleetLaunchSpecificationEbsOptimized :: Maybe (Val Bool')
+  , _eC2SpotFleetSpotFleetLaunchSpecificationIamInstanceProfile :: Maybe EC2SpotFleetIamInstanceProfileSpecification
+  , _eC2SpotFleetSpotFleetLaunchSpecificationImageId :: Val Text
+  , _eC2SpotFleetSpotFleetLaunchSpecificationInstanceType :: Val Text
+  , _eC2SpotFleetSpotFleetLaunchSpecificationKernelId :: Maybe (Val Text)
+  , _eC2SpotFleetSpotFleetLaunchSpecificationKeyName :: Maybe (Val Text)
+  , _eC2SpotFleetSpotFleetLaunchSpecificationMonitoring :: Maybe EC2SpotFleetSpotFleetMonitoring
+  , _eC2SpotFleetSpotFleetLaunchSpecificationNetworkInterfaces :: Maybe [EC2SpotFleetInstanceNetworkInterfaceSpecification]
+  , _eC2SpotFleetSpotFleetLaunchSpecificationPlacement :: Maybe EC2SpotFleetSpotPlacement
+  , _eC2SpotFleetSpotFleetLaunchSpecificationRamdiskId :: Maybe (Val Text)
+  , _eC2SpotFleetSpotFleetLaunchSpecificationSecurityGroups :: Maybe [EC2SpotFleetGroupIdentifier]
+  , _eC2SpotFleetSpotFleetLaunchSpecificationSpotPrice :: Maybe (Val Text)
+  , _eC2SpotFleetSpotFleetLaunchSpecificationSubnetId :: Maybe (Val Text)
+  , _eC2SpotFleetSpotFleetLaunchSpecificationUserData :: Maybe (Val Text)
+  , _eC2SpotFleetSpotFleetLaunchSpecificationWeightedCapacity :: Maybe (Val Double')
+  } deriving (Show, Eq)
+
+instance ToJSON EC2SpotFleetSpotFleetLaunchSpecification where
+  toJSON EC2SpotFleetSpotFleetLaunchSpecification{..} =
+    object $
+    catMaybes
+    [ ("BlockDeviceMappings" .=) <$> _eC2SpotFleetSpotFleetLaunchSpecificationBlockDeviceMappings
+    , ("EbsOptimized" .=) <$> _eC2SpotFleetSpotFleetLaunchSpecificationEbsOptimized
+    , ("IamInstanceProfile" .=) <$> _eC2SpotFleetSpotFleetLaunchSpecificationIamInstanceProfile
+    , Just ("ImageId" .= _eC2SpotFleetSpotFleetLaunchSpecificationImageId)
+    , Just ("InstanceType" .= _eC2SpotFleetSpotFleetLaunchSpecificationInstanceType)
+    , ("KernelId" .=) <$> _eC2SpotFleetSpotFleetLaunchSpecificationKernelId
+    , ("KeyName" .=) <$> _eC2SpotFleetSpotFleetLaunchSpecificationKeyName
+    , ("Monitoring" .=) <$> _eC2SpotFleetSpotFleetLaunchSpecificationMonitoring
+    , ("NetworkInterfaces" .=) <$> _eC2SpotFleetSpotFleetLaunchSpecificationNetworkInterfaces
+    , ("Placement" .=) <$> _eC2SpotFleetSpotFleetLaunchSpecificationPlacement
+    , ("RamdiskId" .=) <$> _eC2SpotFleetSpotFleetLaunchSpecificationRamdiskId
+    , ("SecurityGroups" .=) <$> _eC2SpotFleetSpotFleetLaunchSpecificationSecurityGroups
+    , ("SpotPrice" .=) <$> _eC2SpotFleetSpotFleetLaunchSpecificationSpotPrice
+    , ("SubnetId" .=) <$> _eC2SpotFleetSpotFleetLaunchSpecificationSubnetId
+    , ("UserData" .=) <$> _eC2SpotFleetSpotFleetLaunchSpecificationUserData
+    , ("WeightedCapacity" .=) <$> _eC2SpotFleetSpotFleetLaunchSpecificationWeightedCapacity
+    ]
+
+instance FromJSON EC2SpotFleetSpotFleetLaunchSpecification where
+  parseJSON (Object obj) =
+    EC2SpotFleetSpotFleetLaunchSpecification <$>
+      obj .:? "BlockDeviceMappings" <*>
+      obj .:? "EbsOptimized" <*>
+      obj .:? "IamInstanceProfile" <*>
+      obj .: "ImageId" <*>
+      obj .: "InstanceType" <*>
+      obj .:? "KernelId" <*>
+      obj .:? "KeyName" <*>
+      obj .:? "Monitoring" <*>
+      obj .:? "NetworkInterfaces" <*>
+      obj .:? "Placement" <*>
+      obj .:? "RamdiskId" <*>
+      obj .:? "SecurityGroups" <*>
+      obj .:? "SpotPrice" <*>
+      obj .:? "SubnetId" <*>
+      obj .:? "UserData" <*>
+      obj .:? "WeightedCapacity"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2SpotFleetSpotFleetLaunchSpecification' containing
+-- required fields as arguments.
+ec2SpotFleetSpotFleetLaunchSpecification
+  :: Val Text -- ^ 'ecsfsflsImageId'
+  -> Val Text -- ^ 'ecsfsflsInstanceType'
+  -> EC2SpotFleetSpotFleetLaunchSpecification
+ec2SpotFleetSpotFleetLaunchSpecification imageIdarg instanceTypearg =
+  EC2SpotFleetSpotFleetLaunchSpecification
+  { _eC2SpotFleetSpotFleetLaunchSpecificationBlockDeviceMappings = Nothing
+  , _eC2SpotFleetSpotFleetLaunchSpecificationEbsOptimized = Nothing
+  , _eC2SpotFleetSpotFleetLaunchSpecificationIamInstanceProfile = Nothing
+  , _eC2SpotFleetSpotFleetLaunchSpecificationImageId = imageIdarg
+  , _eC2SpotFleetSpotFleetLaunchSpecificationInstanceType = instanceTypearg
+  , _eC2SpotFleetSpotFleetLaunchSpecificationKernelId = Nothing
+  , _eC2SpotFleetSpotFleetLaunchSpecificationKeyName = Nothing
+  , _eC2SpotFleetSpotFleetLaunchSpecificationMonitoring = Nothing
+  , _eC2SpotFleetSpotFleetLaunchSpecificationNetworkInterfaces = Nothing
+  , _eC2SpotFleetSpotFleetLaunchSpecificationPlacement = Nothing
+  , _eC2SpotFleetSpotFleetLaunchSpecificationRamdiskId = Nothing
+  , _eC2SpotFleetSpotFleetLaunchSpecificationSecurityGroups = Nothing
+  , _eC2SpotFleetSpotFleetLaunchSpecificationSpotPrice = Nothing
+  , _eC2SpotFleetSpotFleetLaunchSpecificationSubnetId = Nothing
+  , _eC2SpotFleetSpotFleetLaunchSpecificationUserData = Nothing
+  , _eC2SpotFleetSpotFleetLaunchSpecificationWeightedCapacity = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-blockdevicemappings
+ecsfsflsBlockDeviceMappings :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Maybe [EC2SpotFleetBlockDeviceMapping])
+ecsfsflsBlockDeviceMappings = lens _eC2SpotFleetSpotFleetLaunchSpecificationBlockDeviceMappings (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationBlockDeviceMappings = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-ebsoptimized
+ecsfsflsEbsOptimized :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Maybe (Val Bool'))
+ecsfsflsEbsOptimized = lens _eC2SpotFleetSpotFleetLaunchSpecificationEbsOptimized (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationEbsOptimized = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-iaminstanceprofile
+ecsfsflsIamInstanceProfile :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Maybe EC2SpotFleetIamInstanceProfileSpecification)
+ecsfsflsIamInstanceProfile = lens _eC2SpotFleetSpotFleetLaunchSpecificationIamInstanceProfile (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationIamInstanceProfile = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-imageid
+ecsfsflsImageId :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Val Text)
+ecsfsflsImageId = lens _eC2SpotFleetSpotFleetLaunchSpecificationImageId (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationImageId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-instancetype
+ecsfsflsInstanceType :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Val Text)
+ecsfsflsInstanceType = lens _eC2SpotFleetSpotFleetLaunchSpecificationInstanceType (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationInstanceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-kernelid
+ecsfsflsKernelId :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Maybe (Val Text))
+ecsfsflsKernelId = lens _eC2SpotFleetSpotFleetLaunchSpecificationKernelId (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationKernelId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-keyname
+ecsfsflsKeyName :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Maybe (Val Text))
+ecsfsflsKeyName = lens _eC2SpotFleetSpotFleetLaunchSpecificationKeyName (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationKeyName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-monitoring
+ecsfsflsMonitoring :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Maybe EC2SpotFleetSpotFleetMonitoring)
+ecsfsflsMonitoring = lens _eC2SpotFleetSpotFleetLaunchSpecificationMonitoring (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationMonitoring = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-networkinterfaces
+ecsfsflsNetworkInterfaces :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Maybe [EC2SpotFleetInstanceNetworkInterfaceSpecification])
+ecsfsflsNetworkInterfaces = lens _eC2SpotFleetSpotFleetLaunchSpecificationNetworkInterfaces (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationNetworkInterfaces = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-placement
+ecsfsflsPlacement :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Maybe EC2SpotFleetSpotPlacement)
+ecsfsflsPlacement = lens _eC2SpotFleetSpotFleetLaunchSpecificationPlacement (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationPlacement = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-ramdiskid
+ecsfsflsRamdiskId :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Maybe (Val Text))
+ecsfsflsRamdiskId = lens _eC2SpotFleetSpotFleetLaunchSpecificationRamdiskId (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationRamdiskId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-securitygroups
+ecsfsflsSecurityGroups :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Maybe [EC2SpotFleetGroupIdentifier])
+ecsfsflsSecurityGroups = lens _eC2SpotFleetSpotFleetLaunchSpecificationSecurityGroups (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationSecurityGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-spotprice
+ecsfsflsSpotPrice :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Maybe (Val Text))
+ecsfsflsSpotPrice = lens _eC2SpotFleetSpotFleetLaunchSpecificationSpotPrice (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationSpotPrice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-subnetid
+ecsfsflsSubnetId :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Maybe (Val Text))
+ecsfsflsSubnetId = lens _eC2SpotFleetSpotFleetLaunchSpecificationSubnetId (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationSubnetId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-userdata
+ecsfsflsUserData :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Maybe (Val Text))
+ecsfsflsUserData = lens _eC2SpotFleetSpotFleetLaunchSpecificationUserData (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationUserData = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-weightedcapacity
+ecsfsflsWeightedCapacity :: Lens' EC2SpotFleetSpotFleetLaunchSpecification (Maybe (Val Double'))
+ecsfsflsWeightedCapacity = lens _eC2SpotFleetSpotFleetLaunchSpecificationWeightedCapacity (\s a -> s { _eC2SpotFleetSpotFleetLaunchSpecificationWeightedCapacity = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetMonitoring.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetMonitoring.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetMonitoring.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-monitoring.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetMonitoring where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SpotFleetSpotFleetMonitoring. See
+-- 'ec2SpotFleetSpotFleetMonitoring' for a more convenient constructor.
+data EC2SpotFleetSpotFleetMonitoring =
+  EC2SpotFleetSpotFleetMonitoring
+  { _eC2SpotFleetSpotFleetMonitoringEnabled :: Maybe (Val Bool')
+  } deriving (Show, Eq)
+
+instance ToJSON EC2SpotFleetSpotFleetMonitoring where
+  toJSON EC2SpotFleetSpotFleetMonitoring{..} =
+    object $
+    catMaybes
+    [ ("Enabled" .=) <$> _eC2SpotFleetSpotFleetMonitoringEnabled
+    ]
+
+instance FromJSON EC2SpotFleetSpotFleetMonitoring where
+  parseJSON (Object obj) =
+    EC2SpotFleetSpotFleetMonitoring <$>
+      obj .:? "Enabled"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2SpotFleetSpotFleetMonitoring' containing required
+-- fields as arguments.
+ec2SpotFleetSpotFleetMonitoring
+  :: EC2SpotFleetSpotFleetMonitoring
+ec2SpotFleetSpotFleetMonitoring  =
+  EC2SpotFleetSpotFleetMonitoring
+  { _eC2SpotFleetSpotFleetMonitoringEnabled = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-monitoring.html#cfn-ec2-spotfleet-spotfleetmonitoring-enabled
+ecsfsfmEnabled :: Lens' EC2SpotFleetSpotFleetMonitoring (Maybe (Val Bool'))
+ecsfsfmEnabled = lens _eC2SpotFleetSpotFleetMonitoringEnabled (\s a -> s { _eC2SpotFleetSpotFleetMonitoringEnabled = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetRequestConfigData.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetRequestConfigData.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetRequestConfigData.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetRequestConfigData.hs
@@ -12,7 +12,7 @@
 import Data.Text
 
 import Stratosphere.Values
-import Stratosphere.ResourceProperties.EC2SpotFleetLaunchSpecifications
+import Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetLaunchSpecification
 
 -- | Full data type definition for EC2SpotFleetSpotFleetRequestConfigData. See
 -- 'ec2SpotFleetSpotFleetRequestConfigData' for a more convenient
@@ -22,7 +22,7 @@
   { _eC2SpotFleetSpotFleetRequestConfigDataAllocationStrategy :: Maybe (Val Text)
   , _eC2SpotFleetSpotFleetRequestConfigDataExcessCapacityTerminationPolicy :: Maybe (Val Text)
   , _eC2SpotFleetSpotFleetRequestConfigDataIamFleetRole :: Val Text
-  , _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications :: [EC2SpotFleetLaunchSpecifications]
+  , _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications :: [EC2SpotFleetSpotFleetLaunchSpecification]
   , _eC2SpotFleetSpotFleetRequestConfigDataSpotPrice :: Val Text
   , _eC2SpotFleetSpotFleetRequestConfigDataTargetCapacity :: Val Integer'
   , _eC2SpotFleetSpotFleetRequestConfigDataTerminateInstancesWithExpiration :: Maybe (Val Bool')
@@ -63,7 +63,7 @@
 -- required fields as arguments.
 ec2SpotFleetSpotFleetRequestConfigData
   :: Val Text -- ^ 'ecsfsfrcdIamFleetRole'
-  -> [EC2SpotFleetLaunchSpecifications] -- ^ 'ecsfsfrcdLaunchSpecifications'
+  -> [EC2SpotFleetSpotFleetLaunchSpecification] -- ^ 'ecsfsfrcdLaunchSpecifications'
   -> Val Text -- ^ 'ecsfsfrcdSpotPrice'
   -> Val Integer' -- ^ 'ecsfsfrcdTargetCapacity'
   -> EC2SpotFleetSpotFleetRequestConfigData
@@ -93,7 +93,7 @@
 ecsfsfrcdIamFleetRole = lens _eC2SpotFleetSpotFleetRequestConfigDataIamFleetRole (\s a -> s { _eC2SpotFleetSpotFleetRequestConfigDataIamFleetRole = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications
-ecsfsfrcdLaunchSpecifications :: Lens' EC2SpotFleetSpotFleetRequestConfigData [EC2SpotFleetLaunchSpecifications]
+ecsfsfrcdLaunchSpecifications :: Lens' EC2SpotFleetSpotFleetRequestConfigData [EC2SpotFleetSpotFleetLaunchSpecification]
 ecsfsfrcdLaunchSpecifications = lens _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications (\s a -> s { _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-spotprice
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotPlacement.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotPlacement.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotPlacement.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-placement.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetSpotPlacement where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EC2SpotFleetSpotPlacement. See
+-- 'ec2SpotFleetSpotPlacement' for a more convenient constructor.
+data EC2SpotFleetSpotPlacement =
+  EC2SpotFleetSpotPlacement
+  { _eC2SpotFleetSpotPlacementAvailabilityZone :: Maybe (Val Text)
+  , _eC2SpotFleetSpotPlacementGroupName :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2SpotFleetSpotPlacement where
+  toJSON EC2SpotFleetSpotPlacement{..} =
+    object $
+    catMaybes
+    [ ("AvailabilityZone" .=) <$> _eC2SpotFleetSpotPlacementAvailabilityZone
+    , ("GroupName" .=) <$> _eC2SpotFleetSpotPlacementGroupName
+    ]
+
+instance FromJSON EC2SpotFleetSpotPlacement where
+  parseJSON (Object obj) =
+    EC2SpotFleetSpotPlacement <$>
+      obj .:? "AvailabilityZone" <*>
+      obj .:? "GroupName"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2SpotFleetSpotPlacement' containing required fields as
+-- arguments.
+ec2SpotFleetSpotPlacement
+  :: EC2SpotFleetSpotPlacement
+ec2SpotFleetSpotPlacement  =
+  EC2SpotFleetSpotPlacement
+  { _eC2SpotFleetSpotPlacementAvailabilityZone = Nothing
+  , _eC2SpotFleetSpotPlacementGroupName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-placement.html#cfn-ec2-spotfleet-spotplacement-availabilityzone
+ecsfspAvailabilityZone :: Lens' EC2SpotFleetSpotPlacement (Maybe (Val Text))
+ecsfspAvailabilityZone = lens _eC2SpotFleetSpotPlacementAvailabilityZone (\s a -> s { _eC2SpotFleetSpotPlacementAvailabilityZone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-placement.html#cfn-ec2-spotfleet-spotplacement-groupname
+ecsfspGroupName :: Lens' EC2SpotFleetSpotPlacement (Maybe (Val Text))
+ecsfspGroupName = lens _eC2SpotFleetSpotPlacementGroupName (\s a -> s { _eC2SpotFleetSpotPlacementGroupName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSServicePlacementConstraint.hs b/library-gen/Stratosphere/ResourceProperties/ECSServicePlacementConstraint.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ECSServicePlacementConstraint.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-placementconstraint.html
+
+module Stratosphere.ResourceProperties.ECSServicePlacementConstraint where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ECSServicePlacementConstraint. See
+-- 'ecsServicePlacementConstraint' for a more convenient constructor.
+data ECSServicePlacementConstraint =
+  ECSServicePlacementConstraint
+  { _eCSServicePlacementConstraintExpression :: Maybe (Val Text)
+  , _eCSServicePlacementConstraintType :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON ECSServicePlacementConstraint where
+  toJSON ECSServicePlacementConstraint{..} =
+    object $
+    catMaybes
+    [ ("Expression" .=) <$> _eCSServicePlacementConstraintExpression
+    , Just ("Type" .= _eCSServicePlacementConstraintType)
+    ]
+
+instance FromJSON ECSServicePlacementConstraint where
+  parseJSON (Object obj) =
+    ECSServicePlacementConstraint <$>
+      obj .:? "Expression" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
+
+-- | Constructor for 'ECSServicePlacementConstraint' containing required
+-- fields as arguments.
+ecsServicePlacementConstraint
+  :: Val Text -- ^ 'ecsspcType'
+  -> ECSServicePlacementConstraint
+ecsServicePlacementConstraint typearg =
+  ECSServicePlacementConstraint
+  { _eCSServicePlacementConstraintExpression = Nothing
+  , _eCSServicePlacementConstraintType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-placementconstraint.html#cfn-ecs-service-placementconstraint-expression
+ecsspcExpression :: Lens' ECSServicePlacementConstraint (Maybe (Val Text))
+ecsspcExpression = lens _eCSServicePlacementConstraintExpression (\s a -> s { _eCSServicePlacementConstraintExpression = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-placementconstraint.html#cfn-ecs-service-placementconstraint-type
+ecsspcType :: Lens' ECSServicePlacementConstraint (Val Text)
+ecsspcType = lens _eCSServicePlacementConstraintType (\s a -> s { _eCSServicePlacementConstraintType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSServicePlacementStrategy.hs b/library-gen/Stratosphere/ResourceProperties/ECSServicePlacementStrategy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ECSServicePlacementStrategy.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-placementstrategy.html
+
+module Stratosphere.ResourceProperties.ECSServicePlacementStrategy where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for ECSServicePlacementStrategy. See
+-- 'ecsServicePlacementStrategy' for a more convenient constructor.
+data ECSServicePlacementStrategy =
+  ECSServicePlacementStrategy
+  { _eCSServicePlacementStrategyField :: Maybe (Val Text)
+  , _eCSServicePlacementStrategyType :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON ECSServicePlacementStrategy where
+  toJSON ECSServicePlacementStrategy{..} =
+    object $
+    catMaybes
+    [ ("Field" .=) <$> _eCSServicePlacementStrategyField
+    , Just ("Type" .= _eCSServicePlacementStrategyType)
+    ]
+
+instance FromJSON ECSServicePlacementStrategy where
+  parseJSON (Object obj) =
+    ECSServicePlacementStrategy <$>
+      obj .:? "Field" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
+
+-- | Constructor for 'ECSServicePlacementStrategy' containing required fields
+-- as arguments.
+ecsServicePlacementStrategy
+  :: Val Text -- ^ 'ecsspsType'
+  -> ECSServicePlacementStrategy
+ecsServicePlacementStrategy typearg =
+  ECSServicePlacementStrategy
+  { _eCSServicePlacementStrategyField = Nothing
+  , _eCSServicePlacementStrategyType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-placementstrategy.html#cfn-ecs-service-placementstrategy-field
+ecsspsField :: Lens' ECSServicePlacementStrategy (Maybe (Val Text))
+ecsspsField = lens _eCSServicePlacementStrategyField (\s a -> s { _eCSServicePlacementStrategyField = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-placementstrategy.html#cfn-ecs-service-placementstrategy-type
+ecsspsType :: Lens' ECSServicePlacementStrategy (Val Text)
+ecsspsType = lens _eCSServicePlacementStrategyType (\s a -> s { _eCSServicePlacementStrategyType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionTaskDefinitionPlacementConstraint.hs b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionTaskDefinitionPlacementConstraint.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ECSTaskDefinitionTaskDefinitionPlacementConstraint.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-taskdefinitionplacementconstraint.html
+
+module Stratosphere.ResourceProperties.ECSTaskDefinitionTaskDefinitionPlacementConstraint where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- ECSTaskDefinitionTaskDefinitionPlacementConstraint. See
+-- 'ecsTaskDefinitionTaskDefinitionPlacementConstraint' for a more
+-- convenient constructor.
+data ECSTaskDefinitionTaskDefinitionPlacementConstraint =
+  ECSTaskDefinitionTaskDefinitionPlacementConstraint
+  { _eCSTaskDefinitionTaskDefinitionPlacementConstraintExpression :: Maybe (Val Text)
+  , _eCSTaskDefinitionTaskDefinitionPlacementConstraintType :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON ECSTaskDefinitionTaskDefinitionPlacementConstraint where
+  toJSON ECSTaskDefinitionTaskDefinitionPlacementConstraint{..} =
+    object $
+    catMaybes
+    [ ("Expression" .=) <$> _eCSTaskDefinitionTaskDefinitionPlacementConstraintExpression
+    , Just ("Type" .= _eCSTaskDefinitionTaskDefinitionPlacementConstraintType)
+    ]
+
+instance FromJSON ECSTaskDefinitionTaskDefinitionPlacementConstraint where
+  parseJSON (Object obj) =
+    ECSTaskDefinitionTaskDefinitionPlacementConstraint <$>
+      obj .:? "Expression" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
+
+-- | Constructor for 'ECSTaskDefinitionTaskDefinitionPlacementConstraint'
+-- containing required fields as arguments.
+ecsTaskDefinitionTaskDefinitionPlacementConstraint
+  :: Val Text -- ^ 'ecstdtdpcType'
+  -> ECSTaskDefinitionTaskDefinitionPlacementConstraint
+ecsTaskDefinitionTaskDefinitionPlacementConstraint typearg =
+  ECSTaskDefinitionTaskDefinitionPlacementConstraint
+  { _eCSTaskDefinitionTaskDefinitionPlacementConstraintExpression = Nothing
+  , _eCSTaskDefinitionTaskDefinitionPlacementConstraintType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-taskdefinitionplacementconstraint.html#cfn-ecs-taskdefinition-taskdefinitionplacementconstraint-expression
+ecstdtdpcExpression :: Lens' ECSTaskDefinitionTaskDefinitionPlacementConstraint (Maybe (Val Text))
+ecstdtdpcExpression = lens _eCSTaskDefinitionTaskDefinitionPlacementConstraintExpression (\s a -> s { _eCSTaskDefinitionTaskDefinitionPlacementConstraintExpression = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-taskdefinitionplacementconstraint.html#cfn-ecs-taskdefinition-taskdefinitionplacementconstraint-type
+ecstdtdpcType :: Lens' ECSTaskDefinitionTaskDefinitionPlacementConstraint (Val Text)
+ecstdtdpcType = lens _eCSTaskDefinitionTaskDefinitionPlacementConstraintType (\s a -> s { _eCSTaskDefinitionTaskDefinitionPlacementConstraintType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterAutoScalingPolicy.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterAutoScalingPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterAutoScalingPolicy.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-autoscalingpolicy.html
+
+module Stratosphere.ResourceProperties.EMRClusterAutoScalingPolicy where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRClusterScalingConstraints
+import Stratosphere.ResourceProperties.EMRClusterScalingRule
+
+-- | Full data type definition for EMRClusterAutoScalingPolicy. See
+-- 'emrClusterAutoScalingPolicy' for a more convenient constructor.
+data EMRClusterAutoScalingPolicy =
+  EMRClusterAutoScalingPolicy
+  { _eMRClusterAutoScalingPolicyConstraints :: EMRClusterScalingConstraints
+  , _eMRClusterAutoScalingPolicyRules :: [EMRClusterScalingRule]
+  } deriving (Show, Eq)
+
+instance ToJSON EMRClusterAutoScalingPolicy where
+  toJSON EMRClusterAutoScalingPolicy{..} =
+    object $
+    catMaybes
+    [ Just ("Constraints" .= _eMRClusterAutoScalingPolicyConstraints)
+    , Just ("Rules" .= _eMRClusterAutoScalingPolicyRules)
+    ]
+
+instance FromJSON EMRClusterAutoScalingPolicy where
+  parseJSON (Object obj) =
+    EMRClusterAutoScalingPolicy <$>
+      obj .: "Constraints" <*>
+      obj .: "Rules"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRClusterAutoScalingPolicy' containing required fields
+-- as arguments.
+emrClusterAutoScalingPolicy
+  :: EMRClusterScalingConstraints -- ^ 'emrcaspConstraints'
+  -> [EMRClusterScalingRule] -- ^ 'emrcaspRules'
+  -> EMRClusterAutoScalingPolicy
+emrClusterAutoScalingPolicy constraintsarg rulesarg =
+  EMRClusterAutoScalingPolicy
+  { _eMRClusterAutoScalingPolicyConstraints = constraintsarg
+  , _eMRClusterAutoScalingPolicyRules = rulesarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-autoscalingpolicy.html#cfn-elasticmapreduce-cluster-autoscalingpolicy-constraints
+emrcaspConstraints :: Lens' EMRClusterAutoScalingPolicy EMRClusterScalingConstraints
+emrcaspConstraints = lens _eMRClusterAutoScalingPolicyConstraints (\s a -> s { _eMRClusterAutoScalingPolicyConstraints = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-autoscalingpolicy.html#cfn-elasticmapreduce-cluster-autoscalingpolicy-rules
+emrcaspRules :: Lens' EMRClusterAutoScalingPolicy [EMRClusterScalingRule]
+emrcaspRules = lens _eMRClusterAutoScalingPolicyRules (\s a -> s { _eMRClusterAutoScalingPolicyRules = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterCloudWatchAlarmDefinition.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterCloudWatchAlarmDefinition.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterCloudWatchAlarmDefinition.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html
+
+module Stratosphere.ResourceProperties.EMRClusterCloudWatchAlarmDefinition where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRClusterMetricDimension
+
+-- | Full data type definition for EMRClusterCloudWatchAlarmDefinition. See
+-- 'emrClusterCloudWatchAlarmDefinition' for a more convenient constructor.
+data EMRClusterCloudWatchAlarmDefinition =
+  EMRClusterCloudWatchAlarmDefinition
+  { _eMRClusterCloudWatchAlarmDefinitionComparisonOperator :: Val Text
+  , _eMRClusterCloudWatchAlarmDefinitionDimensions :: Maybe [EMRClusterMetricDimension]
+  , _eMRClusterCloudWatchAlarmDefinitionEvaluationPeriods :: Maybe (Val Integer')
+  , _eMRClusterCloudWatchAlarmDefinitionMetricName :: Val Text
+  , _eMRClusterCloudWatchAlarmDefinitionNamespace :: Maybe (Val Text)
+  , _eMRClusterCloudWatchAlarmDefinitionPeriod :: Val Integer'
+  , _eMRClusterCloudWatchAlarmDefinitionStatistic :: Maybe (Val Text)
+  , _eMRClusterCloudWatchAlarmDefinitionThreshold :: Val Double'
+  , _eMRClusterCloudWatchAlarmDefinitionUnit :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EMRClusterCloudWatchAlarmDefinition where
+  toJSON EMRClusterCloudWatchAlarmDefinition{..} =
+    object $
+    catMaybes
+    [ Just ("ComparisonOperator" .= _eMRClusterCloudWatchAlarmDefinitionComparisonOperator)
+    , ("Dimensions" .=) <$> _eMRClusterCloudWatchAlarmDefinitionDimensions
+    , ("EvaluationPeriods" .=) <$> _eMRClusterCloudWatchAlarmDefinitionEvaluationPeriods
+    , Just ("MetricName" .= _eMRClusterCloudWatchAlarmDefinitionMetricName)
+    , ("Namespace" .=) <$> _eMRClusterCloudWatchAlarmDefinitionNamespace
+    , Just ("Period" .= _eMRClusterCloudWatchAlarmDefinitionPeriod)
+    , ("Statistic" .=) <$> _eMRClusterCloudWatchAlarmDefinitionStatistic
+    , Just ("Threshold" .= _eMRClusterCloudWatchAlarmDefinitionThreshold)
+    , ("Unit" .=) <$> _eMRClusterCloudWatchAlarmDefinitionUnit
+    ]
+
+instance FromJSON EMRClusterCloudWatchAlarmDefinition where
+  parseJSON (Object obj) =
+    EMRClusterCloudWatchAlarmDefinition <$>
+      obj .: "ComparisonOperator" <*>
+      obj .:? "Dimensions" <*>
+      obj .:? "EvaluationPeriods" <*>
+      obj .: "MetricName" <*>
+      obj .:? "Namespace" <*>
+      obj .: "Period" <*>
+      obj .:? "Statistic" <*>
+      obj .: "Threshold" <*>
+      obj .:? "Unit"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRClusterCloudWatchAlarmDefinition' containing required
+-- fields as arguments.
+emrClusterCloudWatchAlarmDefinition
+  :: Val Text -- ^ 'emrccwadComparisonOperator'
+  -> Val Text -- ^ 'emrccwadMetricName'
+  -> Val Integer' -- ^ 'emrccwadPeriod'
+  -> Val Double' -- ^ 'emrccwadThreshold'
+  -> EMRClusterCloudWatchAlarmDefinition
+emrClusterCloudWatchAlarmDefinition comparisonOperatorarg metricNamearg periodarg thresholdarg =
+  EMRClusterCloudWatchAlarmDefinition
+  { _eMRClusterCloudWatchAlarmDefinitionComparisonOperator = comparisonOperatorarg
+  , _eMRClusterCloudWatchAlarmDefinitionDimensions = Nothing
+  , _eMRClusterCloudWatchAlarmDefinitionEvaluationPeriods = Nothing
+  , _eMRClusterCloudWatchAlarmDefinitionMetricName = metricNamearg
+  , _eMRClusterCloudWatchAlarmDefinitionNamespace = Nothing
+  , _eMRClusterCloudWatchAlarmDefinitionPeriod = periodarg
+  , _eMRClusterCloudWatchAlarmDefinitionStatistic = Nothing
+  , _eMRClusterCloudWatchAlarmDefinitionThreshold = thresholdarg
+  , _eMRClusterCloudWatchAlarmDefinitionUnit = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-comparisonoperator
+emrccwadComparisonOperator :: Lens' EMRClusterCloudWatchAlarmDefinition (Val Text)
+emrccwadComparisonOperator = lens _eMRClusterCloudWatchAlarmDefinitionComparisonOperator (\s a -> s { _eMRClusterCloudWatchAlarmDefinitionComparisonOperator = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-dimensions
+emrccwadDimensions :: Lens' EMRClusterCloudWatchAlarmDefinition (Maybe [EMRClusterMetricDimension])
+emrccwadDimensions = lens _eMRClusterCloudWatchAlarmDefinitionDimensions (\s a -> s { _eMRClusterCloudWatchAlarmDefinitionDimensions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-evaluationperiods
+emrccwadEvaluationPeriods :: Lens' EMRClusterCloudWatchAlarmDefinition (Maybe (Val Integer'))
+emrccwadEvaluationPeriods = lens _eMRClusterCloudWatchAlarmDefinitionEvaluationPeriods (\s a -> s { _eMRClusterCloudWatchAlarmDefinitionEvaluationPeriods = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-metricname
+emrccwadMetricName :: Lens' EMRClusterCloudWatchAlarmDefinition (Val Text)
+emrccwadMetricName = lens _eMRClusterCloudWatchAlarmDefinitionMetricName (\s a -> s { _eMRClusterCloudWatchAlarmDefinitionMetricName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-namespace
+emrccwadNamespace :: Lens' EMRClusterCloudWatchAlarmDefinition (Maybe (Val Text))
+emrccwadNamespace = lens _eMRClusterCloudWatchAlarmDefinitionNamespace (\s a -> s { _eMRClusterCloudWatchAlarmDefinitionNamespace = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-period
+emrccwadPeriod :: Lens' EMRClusterCloudWatchAlarmDefinition (Val Integer')
+emrccwadPeriod = lens _eMRClusterCloudWatchAlarmDefinitionPeriod (\s a -> s { _eMRClusterCloudWatchAlarmDefinitionPeriod = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-statistic
+emrccwadStatistic :: Lens' EMRClusterCloudWatchAlarmDefinition (Maybe (Val Text))
+emrccwadStatistic = lens _eMRClusterCloudWatchAlarmDefinitionStatistic (\s a -> s { _eMRClusterCloudWatchAlarmDefinitionStatistic = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-threshold
+emrccwadThreshold :: Lens' EMRClusterCloudWatchAlarmDefinition (Val Double')
+emrccwadThreshold = lens _eMRClusterCloudWatchAlarmDefinitionThreshold (\s a -> s { _eMRClusterCloudWatchAlarmDefinitionThreshold = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-cluster-cloudwatchalarmdefinition-unit
+emrccwadUnit :: Lens' EMRClusterCloudWatchAlarmDefinition (Maybe (Val Text))
+emrccwadUnit = lens _eMRClusterCloudWatchAlarmDefinitionUnit (\s a -> s { _eMRClusterCloudWatchAlarmDefinitionUnit = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceGroupConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceGroupConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceGroupConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceGroupConfig.hs
@@ -12,6 +12,7 @@
 import Data.Text
 
 import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRClusterAutoScalingPolicy
 import Stratosphere.ResourceProperties.EMRClusterConfiguration
 import Stratosphere.ResourceProperties.EMRClusterEbsConfiguration
 
@@ -19,7 +20,8 @@
 -- 'emrClusterInstanceGroupConfig' for a more convenient constructor.
 data EMRClusterInstanceGroupConfig =
   EMRClusterInstanceGroupConfig
-  { _eMRClusterInstanceGroupConfigBidPrice :: Maybe (Val Text)
+  { _eMRClusterInstanceGroupConfigAutoScalingPolicy :: Maybe EMRClusterAutoScalingPolicy
+  , _eMRClusterInstanceGroupConfigBidPrice :: Maybe (Val Text)
   , _eMRClusterInstanceGroupConfigConfigurations :: Maybe [EMRClusterConfiguration]
   , _eMRClusterInstanceGroupConfigEbsConfiguration :: Maybe EMRClusterEbsConfiguration
   , _eMRClusterInstanceGroupConfigInstanceCount :: Val Integer'
@@ -32,7 +34,8 @@
   toJSON EMRClusterInstanceGroupConfig{..} =
     object $
     catMaybes
-    [ ("BidPrice" .=) <$> _eMRClusterInstanceGroupConfigBidPrice
+    [ ("AutoScalingPolicy" .=) <$> _eMRClusterInstanceGroupConfigAutoScalingPolicy
+    , ("BidPrice" .=) <$> _eMRClusterInstanceGroupConfigBidPrice
     , ("Configurations" .=) <$> _eMRClusterInstanceGroupConfigConfigurations
     , ("EbsConfiguration" .=) <$> _eMRClusterInstanceGroupConfigEbsConfiguration
     , Just ("InstanceCount" .= _eMRClusterInstanceGroupConfigInstanceCount)
@@ -44,6 +47,7 @@
 instance FromJSON EMRClusterInstanceGroupConfig where
   parseJSON (Object obj) =
     EMRClusterInstanceGroupConfig <$>
+      obj .:? "AutoScalingPolicy" <*>
       obj .:? "BidPrice" <*>
       obj .:? "Configurations" <*>
       obj .:? "EbsConfiguration" <*>
@@ -61,7 +65,8 @@
   -> EMRClusterInstanceGroupConfig
 emrClusterInstanceGroupConfig instanceCountarg instanceTypearg =
   EMRClusterInstanceGroupConfig
-  { _eMRClusterInstanceGroupConfigBidPrice = Nothing
+  { _eMRClusterInstanceGroupConfigAutoScalingPolicy = Nothing
+  , _eMRClusterInstanceGroupConfigBidPrice = Nothing
   , _eMRClusterInstanceGroupConfigConfigurations = Nothing
   , _eMRClusterInstanceGroupConfigEbsConfiguration = Nothing
   , _eMRClusterInstanceGroupConfigInstanceCount = instanceCountarg
@@ -69,6 +74,10 @@
   , _eMRClusterInstanceGroupConfigMarket = Nothing
   , _eMRClusterInstanceGroupConfigName = Nothing
   }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig-instancegroupconfig.html#cfn-elasticmapreduce-cluster-instancegroupconfig-autoscalingpolicy
+emrcigcAutoScalingPolicy :: Lens' EMRClusterInstanceGroupConfig (Maybe EMRClusterAutoScalingPolicy)
+emrcigcAutoScalingPolicy = lens _eMRClusterInstanceGroupConfigAutoScalingPolicy (\s a -> s { _eMRClusterInstanceGroupConfigAutoScalingPolicy = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig-instancegroupconfig.html#cfn-emr-cluster-jobflowinstancesconfig-instancegroupconfig-bidprice
 emrcigcBidPrice :: Lens' EMRClusterInstanceGroupConfig (Maybe (Val Text))
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterJobFlowInstancesConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterJobFlowInstancesConfig.hs
--- a/library-gen/Stratosphere/ResourceProperties/EMRClusterJobFlowInstancesConfig.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterJobFlowInstancesConfig.hs
@@ -21,7 +21,7 @@
   EMRClusterJobFlowInstancesConfig
   { _eMRClusterJobFlowInstancesConfigAdditionalMasterSecurityGroups :: Maybe [Val Text]
   , _eMRClusterJobFlowInstancesConfigAdditionalSlaveSecurityGroups :: Maybe [Val Text]
-  , _eMRClusterJobFlowInstancesConfigCoreInstanceGroup :: EMRClusterInstanceGroupConfig
+  , _eMRClusterJobFlowInstancesConfigCoreInstanceGroup :: Maybe EMRClusterInstanceGroupConfig
   , _eMRClusterJobFlowInstancesConfigEc2KeyName :: Maybe (Val Text)
   , _eMRClusterJobFlowInstancesConfigEc2SubnetId :: Maybe (Val Text)
   , _eMRClusterJobFlowInstancesConfigEmrManagedMasterSecurityGroup :: Maybe (Val Text)
@@ -39,7 +39,7 @@
     catMaybes
     [ ("AdditionalMasterSecurityGroups" .=) <$> _eMRClusterJobFlowInstancesConfigAdditionalMasterSecurityGroups
     , ("AdditionalSlaveSecurityGroups" .=) <$> _eMRClusterJobFlowInstancesConfigAdditionalSlaveSecurityGroups
-    , Just ("CoreInstanceGroup" .= _eMRClusterJobFlowInstancesConfigCoreInstanceGroup)
+    , ("CoreInstanceGroup" .=) <$> _eMRClusterJobFlowInstancesConfigCoreInstanceGroup
     , ("Ec2KeyName" .=) <$> _eMRClusterJobFlowInstancesConfigEc2KeyName
     , ("Ec2SubnetId" .=) <$> _eMRClusterJobFlowInstancesConfigEc2SubnetId
     , ("EmrManagedMasterSecurityGroup" .=) <$> _eMRClusterJobFlowInstancesConfigEmrManagedMasterSecurityGroup
@@ -56,7 +56,7 @@
     EMRClusterJobFlowInstancesConfig <$>
       obj .:? "AdditionalMasterSecurityGroups" <*>
       obj .:? "AdditionalSlaveSecurityGroups" <*>
-      obj .: "CoreInstanceGroup" <*>
+      obj .:? "CoreInstanceGroup" <*>
       obj .:? "Ec2KeyName" <*>
       obj .:? "Ec2SubnetId" <*>
       obj .:? "EmrManagedMasterSecurityGroup" <*>
@@ -71,14 +71,13 @@
 -- | Constructor for 'EMRClusterJobFlowInstancesConfig' containing required
 -- fields as arguments.
 emrClusterJobFlowInstancesConfig
-  :: EMRClusterInstanceGroupConfig -- ^ 'emrcjficCoreInstanceGroup'
-  -> EMRClusterInstanceGroupConfig -- ^ 'emrcjficMasterInstanceGroup'
+  :: EMRClusterInstanceGroupConfig -- ^ 'emrcjficMasterInstanceGroup'
   -> EMRClusterJobFlowInstancesConfig
-emrClusterJobFlowInstancesConfig coreInstanceGrouparg masterInstanceGrouparg =
+emrClusterJobFlowInstancesConfig masterInstanceGrouparg =
   EMRClusterJobFlowInstancesConfig
   { _eMRClusterJobFlowInstancesConfigAdditionalMasterSecurityGroups = Nothing
   , _eMRClusterJobFlowInstancesConfigAdditionalSlaveSecurityGroups = Nothing
-  , _eMRClusterJobFlowInstancesConfigCoreInstanceGroup = coreInstanceGrouparg
+  , _eMRClusterJobFlowInstancesConfigCoreInstanceGroup = Nothing
   , _eMRClusterJobFlowInstancesConfigEc2KeyName = Nothing
   , _eMRClusterJobFlowInstancesConfigEc2SubnetId = Nothing
   , _eMRClusterJobFlowInstancesConfigEmrManagedMasterSecurityGroup = Nothing
@@ -99,7 +98,7 @@
 emrcjficAdditionalSlaveSecurityGroups = lens _eMRClusterJobFlowInstancesConfigAdditionalSlaveSecurityGroups (\s a -> s { _eMRClusterJobFlowInstancesConfigAdditionalSlaveSecurityGroups = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-coreinstancegroup
-emrcjficCoreInstanceGroup :: Lens' EMRClusterJobFlowInstancesConfig EMRClusterInstanceGroupConfig
+emrcjficCoreInstanceGroup :: Lens' EMRClusterJobFlowInstancesConfig (Maybe EMRClusterInstanceGroupConfig)
 emrcjficCoreInstanceGroup = lens _eMRClusterJobFlowInstancesConfigCoreInstanceGroup (\s a -> s { _eMRClusterJobFlowInstancesConfigCoreInstanceGroup = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-ec2keyname
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterMetricDimension.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterMetricDimension.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterMetricDimension.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-metricdimension.html
+
+module Stratosphere.ResourceProperties.EMRClusterMetricDimension where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EMRClusterMetricDimension. See
+-- 'emrClusterMetricDimension' for a more convenient constructor.
+data EMRClusterMetricDimension =
+  EMRClusterMetricDimension
+  { _eMRClusterMetricDimensionKey :: Val Text
+  , _eMRClusterMetricDimensionValue :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON EMRClusterMetricDimension where
+  toJSON EMRClusterMetricDimension{..} =
+    object $
+    catMaybes
+    [ Just ("Key" .= _eMRClusterMetricDimensionKey)
+    , Just ("Value" .= _eMRClusterMetricDimensionValue)
+    ]
+
+instance FromJSON EMRClusterMetricDimension where
+  parseJSON (Object obj) =
+    EMRClusterMetricDimension <$>
+      obj .: "Key" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRClusterMetricDimension' containing required fields as
+-- arguments.
+emrClusterMetricDimension
+  :: Val Text -- ^ 'emrcmdKey'
+  -> Val Text -- ^ 'emrcmdValue'
+  -> EMRClusterMetricDimension
+emrClusterMetricDimension keyarg valuearg =
+  EMRClusterMetricDimension
+  { _eMRClusterMetricDimensionKey = keyarg
+  , _eMRClusterMetricDimensionValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-metricdimension.html#cfn-elasticmapreduce-cluster-metricdimension-key
+emrcmdKey :: Lens' EMRClusterMetricDimension (Val Text)
+emrcmdKey = lens _eMRClusterMetricDimensionKey (\s a -> s { _eMRClusterMetricDimensionKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-metricdimension.html#cfn-elasticmapreduce-cluster-metricdimension-value
+emrcmdValue :: Lens' EMRClusterMetricDimension (Val Text)
+emrcmdValue = lens _eMRClusterMetricDimensionValue (\s a -> s { _eMRClusterMetricDimensionValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterScalingAction.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterScalingAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterScalingAction.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingaction.html
+
+module Stratosphere.ResourceProperties.EMRClusterScalingAction where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRClusterSimpleScalingPolicyConfiguration
+
+-- | Full data type definition for EMRClusterScalingAction. See
+-- 'emrClusterScalingAction' for a more convenient constructor.
+data EMRClusterScalingAction =
+  EMRClusterScalingAction
+  { _eMRClusterScalingActionMarket :: Maybe (Val Text)
+  , _eMRClusterScalingActionSimpleScalingPolicyConfiguration :: EMRClusterSimpleScalingPolicyConfiguration
+  } deriving (Show, Eq)
+
+instance ToJSON EMRClusterScalingAction where
+  toJSON EMRClusterScalingAction{..} =
+    object $
+    catMaybes
+    [ ("Market" .=) <$> _eMRClusterScalingActionMarket
+    , Just ("SimpleScalingPolicyConfiguration" .= _eMRClusterScalingActionSimpleScalingPolicyConfiguration)
+    ]
+
+instance FromJSON EMRClusterScalingAction where
+  parseJSON (Object obj) =
+    EMRClusterScalingAction <$>
+      obj .:? "Market" <*>
+      obj .: "SimpleScalingPolicyConfiguration"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRClusterScalingAction' containing required fields as
+-- arguments.
+emrClusterScalingAction
+  :: EMRClusterSimpleScalingPolicyConfiguration -- ^ 'emrcsaSimpleScalingPolicyConfiguration'
+  -> EMRClusterScalingAction
+emrClusterScalingAction simpleScalingPolicyConfigurationarg =
+  EMRClusterScalingAction
+  { _eMRClusterScalingActionMarket = Nothing
+  , _eMRClusterScalingActionSimpleScalingPolicyConfiguration = simpleScalingPolicyConfigurationarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingaction.html#cfn-elasticmapreduce-cluster-scalingaction-market
+emrcsaMarket :: Lens' EMRClusterScalingAction (Maybe (Val Text))
+emrcsaMarket = lens _eMRClusterScalingActionMarket (\s a -> s { _eMRClusterScalingActionMarket = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingaction.html#cfn-elasticmapreduce-cluster-scalingaction-simplescalingpolicyconfiguration
+emrcsaSimpleScalingPolicyConfiguration :: Lens' EMRClusterScalingAction EMRClusterSimpleScalingPolicyConfiguration
+emrcsaSimpleScalingPolicyConfiguration = lens _eMRClusterScalingActionSimpleScalingPolicyConfiguration (\s a -> s { _eMRClusterScalingActionSimpleScalingPolicyConfiguration = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterScalingConstraints.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterScalingConstraints.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterScalingConstraints.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingconstraints.html
+
+module Stratosphere.ResourceProperties.EMRClusterScalingConstraints where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EMRClusterScalingConstraints. See
+-- 'emrClusterScalingConstraints' for a more convenient constructor.
+data EMRClusterScalingConstraints =
+  EMRClusterScalingConstraints
+  { _eMRClusterScalingConstraintsMaxCapacity :: Val Integer'
+  , _eMRClusterScalingConstraintsMinCapacity :: Val Integer'
+  } deriving (Show, Eq)
+
+instance ToJSON EMRClusterScalingConstraints where
+  toJSON EMRClusterScalingConstraints{..} =
+    object $
+    catMaybes
+    [ Just ("MaxCapacity" .= _eMRClusterScalingConstraintsMaxCapacity)
+    , Just ("MinCapacity" .= _eMRClusterScalingConstraintsMinCapacity)
+    ]
+
+instance FromJSON EMRClusterScalingConstraints where
+  parseJSON (Object obj) =
+    EMRClusterScalingConstraints <$>
+      obj .: "MaxCapacity" <*>
+      obj .: "MinCapacity"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRClusterScalingConstraints' containing required fields
+-- as arguments.
+emrClusterScalingConstraints
+  :: Val Integer' -- ^ 'emrcscMaxCapacity'
+  -> Val Integer' -- ^ 'emrcscMinCapacity'
+  -> EMRClusterScalingConstraints
+emrClusterScalingConstraints maxCapacityarg minCapacityarg =
+  EMRClusterScalingConstraints
+  { _eMRClusterScalingConstraintsMaxCapacity = maxCapacityarg
+  , _eMRClusterScalingConstraintsMinCapacity = minCapacityarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingconstraints.html#cfn-elasticmapreduce-cluster-scalingconstraints-maxcapacity
+emrcscMaxCapacity :: Lens' EMRClusterScalingConstraints (Val Integer')
+emrcscMaxCapacity = lens _eMRClusterScalingConstraintsMaxCapacity (\s a -> s { _eMRClusterScalingConstraintsMaxCapacity = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingconstraints.html#cfn-elasticmapreduce-cluster-scalingconstraints-mincapacity
+emrcscMinCapacity :: Lens' EMRClusterScalingConstraints (Val Integer')
+emrcscMinCapacity = lens _eMRClusterScalingConstraintsMinCapacity (\s a -> s { _eMRClusterScalingConstraintsMinCapacity = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterScalingRule.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterScalingRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterScalingRule.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingrule.html
+
+module Stratosphere.ResourceProperties.EMRClusterScalingRule where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRClusterScalingAction
+import Stratosphere.ResourceProperties.EMRClusterScalingTrigger
+
+-- | Full data type definition for EMRClusterScalingRule. See
+-- 'emrClusterScalingRule' for a more convenient constructor.
+data EMRClusterScalingRule =
+  EMRClusterScalingRule
+  { _eMRClusterScalingRuleAction :: EMRClusterScalingAction
+  , _eMRClusterScalingRuleDescription :: Maybe (Val Text)
+  , _eMRClusterScalingRuleName :: Val Text
+  , _eMRClusterScalingRuleTrigger :: EMRClusterScalingTrigger
+  } deriving (Show, Eq)
+
+instance ToJSON EMRClusterScalingRule where
+  toJSON EMRClusterScalingRule{..} =
+    object $
+    catMaybes
+    [ Just ("Action" .= _eMRClusterScalingRuleAction)
+    , ("Description" .=) <$> _eMRClusterScalingRuleDescription
+    , Just ("Name" .= _eMRClusterScalingRuleName)
+    , Just ("Trigger" .= _eMRClusterScalingRuleTrigger)
+    ]
+
+instance FromJSON EMRClusterScalingRule where
+  parseJSON (Object obj) =
+    EMRClusterScalingRule <$>
+      obj .: "Action" <*>
+      obj .:? "Description" <*>
+      obj .: "Name" <*>
+      obj .: "Trigger"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRClusterScalingRule' containing required fields as
+-- arguments.
+emrClusterScalingRule
+  :: EMRClusterScalingAction -- ^ 'emrcsrAction'
+  -> Val Text -- ^ 'emrcsrName'
+  -> EMRClusterScalingTrigger -- ^ 'emrcsrTrigger'
+  -> EMRClusterScalingRule
+emrClusterScalingRule actionarg namearg triggerarg =
+  EMRClusterScalingRule
+  { _eMRClusterScalingRuleAction = actionarg
+  , _eMRClusterScalingRuleDescription = Nothing
+  , _eMRClusterScalingRuleName = namearg
+  , _eMRClusterScalingRuleTrigger = triggerarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingrule.html#cfn-elasticmapreduce-cluster-scalingrule-action
+emrcsrAction :: Lens' EMRClusterScalingRule EMRClusterScalingAction
+emrcsrAction = lens _eMRClusterScalingRuleAction (\s a -> s { _eMRClusterScalingRuleAction = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingrule.html#cfn-elasticmapreduce-cluster-scalingrule-description
+emrcsrDescription :: Lens' EMRClusterScalingRule (Maybe (Val Text))
+emrcsrDescription = lens _eMRClusterScalingRuleDescription (\s a -> s { _eMRClusterScalingRuleDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingrule.html#cfn-elasticmapreduce-cluster-scalingrule-name
+emrcsrName :: Lens' EMRClusterScalingRule (Val Text)
+emrcsrName = lens _eMRClusterScalingRuleName (\s a -> s { _eMRClusterScalingRuleName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingrule.html#cfn-elasticmapreduce-cluster-scalingrule-trigger
+emrcsrTrigger :: Lens' EMRClusterScalingRule EMRClusterScalingTrigger
+emrcsrTrigger = lens _eMRClusterScalingRuleTrigger (\s a -> s { _eMRClusterScalingRuleTrigger = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterScalingTrigger.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterScalingTrigger.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterScalingTrigger.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingtrigger.html
+
+module Stratosphere.ResourceProperties.EMRClusterScalingTrigger where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRClusterCloudWatchAlarmDefinition
+
+-- | Full data type definition for EMRClusterScalingTrigger. See
+-- 'emrClusterScalingTrigger' for a more convenient constructor.
+data EMRClusterScalingTrigger =
+  EMRClusterScalingTrigger
+  { _eMRClusterScalingTriggerCloudWatchAlarmDefinition :: EMRClusterCloudWatchAlarmDefinition
+  } deriving (Show, Eq)
+
+instance ToJSON EMRClusterScalingTrigger where
+  toJSON EMRClusterScalingTrigger{..} =
+    object $
+    catMaybes
+    [ Just ("CloudWatchAlarmDefinition" .= _eMRClusterScalingTriggerCloudWatchAlarmDefinition)
+    ]
+
+instance FromJSON EMRClusterScalingTrigger where
+  parseJSON (Object obj) =
+    EMRClusterScalingTrigger <$>
+      obj .: "CloudWatchAlarmDefinition"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRClusterScalingTrigger' containing required fields as
+-- arguments.
+emrClusterScalingTrigger
+  :: EMRClusterCloudWatchAlarmDefinition -- ^ 'emrcstCloudWatchAlarmDefinition'
+  -> EMRClusterScalingTrigger
+emrClusterScalingTrigger cloudWatchAlarmDefinitionarg =
+  EMRClusterScalingTrigger
+  { _eMRClusterScalingTriggerCloudWatchAlarmDefinition = cloudWatchAlarmDefinitionarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-scalingtrigger.html#cfn-elasticmapreduce-cluster-scalingtrigger-cloudwatchalarmdefinition
+emrcstCloudWatchAlarmDefinition :: Lens' EMRClusterScalingTrigger EMRClusterCloudWatchAlarmDefinition
+emrcstCloudWatchAlarmDefinition = lens _eMRClusterScalingTriggerCloudWatchAlarmDefinition (\s a -> s { _eMRClusterScalingTriggerCloudWatchAlarmDefinition = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterSimpleScalingPolicyConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterSimpleScalingPolicyConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterSimpleScalingPolicyConfiguration.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-simplescalingpolicyconfiguration.html
+
+module Stratosphere.ResourceProperties.EMRClusterSimpleScalingPolicyConfiguration where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EMRClusterSimpleScalingPolicyConfiguration.
+-- See 'emrClusterSimpleScalingPolicyConfiguration' for a more convenient
+-- constructor.
+data EMRClusterSimpleScalingPolicyConfiguration =
+  EMRClusterSimpleScalingPolicyConfiguration
+  { _eMRClusterSimpleScalingPolicyConfigurationAdjustmentType :: Maybe (Val Text)
+  , _eMRClusterSimpleScalingPolicyConfigurationCoolDown :: Maybe (Val Integer')
+  , _eMRClusterSimpleScalingPolicyConfigurationScalingAdjustment :: Val Integer'
+  } deriving (Show, Eq)
+
+instance ToJSON EMRClusterSimpleScalingPolicyConfiguration where
+  toJSON EMRClusterSimpleScalingPolicyConfiguration{..} =
+    object $
+    catMaybes
+    [ ("AdjustmentType" .=) <$> _eMRClusterSimpleScalingPolicyConfigurationAdjustmentType
+    , ("CoolDown" .=) <$> _eMRClusterSimpleScalingPolicyConfigurationCoolDown
+    , Just ("ScalingAdjustment" .= _eMRClusterSimpleScalingPolicyConfigurationScalingAdjustment)
+    ]
+
+instance FromJSON EMRClusterSimpleScalingPolicyConfiguration where
+  parseJSON (Object obj) =
+    EMRClusterSimpleScalingPolicyConfiguration <$>
+      obj .:? "AdjustmentType" <*>
+      obj .:? "CoolDown" <*>
+      obj .: "ScalingAdjustment"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRClusterSimpleScalingPolicyConfiguration' containing
+-- required fields as arguments.
+emrClusterSimpleScalingPolicyConfiguration
+  :: Val Integer' -- ^ 'emrcsspcScalingAdjustment'
+  -> EMRClusterSimpleScalingPolicyConfiguration
+emrClusterSimpleScalingPolicyConfiguration scalingAdjustmentarg =
+  EMRClusterSimpleScalingPolicyConfiguration
+  { _eMRClusterSimpleScalingPolicyConfigurationAdjustmentType = Nothing
+  , _eMRClusterSimpleScalingPolicyConfigurationCoolDown = Nothing
+  , _eMRClusterSimpleScalingPolicyConfigurationScalingAdjustment = scalingAdjustmentarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-simplescalingpolicyconfiguration.html#cfn-elasticmapreduce-cluster-simplescalingpolicyconfiguration-adjustmenttype
+emrcsspcAdjustmentType :: Lens' EMRClusterSimpleScalingPolicyConfiguration (Maybe (Val Text))
+emrcsspcAdjustmentType = lens _eMRClusterSimpleScalingPolicyConfigurationAdjustmentType (\s a -> s { _eMRClusterSimpleScalingPolicyConfigurationAdjustmentType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-simplescalingpolicyconfiguration.html#cfn-elasticmapreduce-cluster-simplescalingpolicyconfiguration-cooldown
+emrcsspcCoolDown :: Lens' EMRClusterSimpleScalingPolicyConfiguration (Maybe (Val Integer'))
+emrcsspcCoolDown = lens _eMRClusterSimpleScalingPolicyConfigurationCoolDown (\s a -> s { _eMRClusterSimpleScalingPolicyConfigurationCoolDown = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-simplescalingpolicyconfiguration.html#cfn-elasticmapreduce-cluster-simplescalingpolicyconfiguration-scalingadjustment
+emrcsspcScalingAdjustment :: Lens' EMRClusterSimpleScalingPolicyConfiguration (Val Integer')
+emrcsspcScalingAdjustment = lens _eMRClusterSimpleScalingPolicyConfigurationScalingAdjustment (\s a -> s { _eMRClusterSimpleScalingPolicyConfigurationScalingAdjustment = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigAutoScalingPolicy.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigAutoScalingPolicy.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigAutoScalingPolicy.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-autoscalingpolicy.html
+
+module Stratosphere.ResourceProperties.EMRInstanceGroupConfigAutoScalingPolicy where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingConstraints
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingRule
+
+-- | Full data type definition for EMRInstanceGroupConfigAutoScalingPolicy.
+-- See 'emrInstanceGroupConfigAutoScalingPolicy' for a more convenient
+-- constructor.
+data EMRInstanceGroupConfigAutoScalingPolicy =
+  EMRInstanceGroupConfigAutoScalingPolicy
+  { _eMRInstanceGroupConfigAutoScalingPolicyConstraints :: EMRInstanceGroupConfigScalingConstraints
+  , _eMRInstanceGroupConfigAutoScalingPolicyRules :: [EMRInstanceGroupConfigScalingRule]
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceGroupConfigAutoScalingPolicy where
+  toJSON EMRInstanceGroupConfigAutoScalingPolicy{..} =
+    object $
+    catMaybes
+    [ Just ("Constraints" .= _eMRInstanceGroupConfigAutoScalingPolicyConstraints)
+    , Just ("Rules" .= _eMRInstanceGroupConfigAutoScalingPolicyRules)
+    ]
+
+instance FromJSON EMRInstanceGroupConfigAutoScalingPolicy where
+  parseJSON (Object obj) =
+    EMRInstanceGroupConfigAutoScalingPolicy <$>
+      obj .: "Constraints" <*>
+      obj .: "Rules"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRInstanceGroupConfigAutoScalingPolicy' containing
+-- required fields as arguments.
+emrInstanceGroupConfigAutoScalingPolicy
+  :: EMRInstanceGroupConfigScalingConstraints -- ^ 'emrigcaspConstraints'
+  -> [EMRInstanceGroupConfigScalingRule] -- ^ 'emrigcaspRules'
+  -> EMRInstanceGroupConfigAutoScalingPolicy
+emrInstanceGroupConfigAutoScalingPolicy constraintsarg rulesarg =
+  EMRInstanceGroupConfigAutoScalingPolicy
+  { _eMRInstanceGroupConfigAutoScalingPolicyConstraints = constraintsarg
+  , _eMRInstanceGroupConfigAutoScalingPolicyRules = rulesarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-autoscalingpolicy.html#cfn-elasticmapreduce-instancegroupconfig-autoscalingpolicy-constraints
+emrigcaspConstraints :: Lens' EMRInstanceGroupConfigAutoScalingPolicy EMRInstanceGroupConfigScalingConstraints
+emrigcaspConstraints = lens _eMRInstanceGroupConfigAutoScalingPolicyConstraints (\s a -> s { _eMRInstanceGroupConfigAutoScalingPolicyConstraints = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-autoscalingpolicy.html#cfn-elasticmapreduce-instancegroupconfig-autoscalingpolicy-rules
+emrigcaspRules :: Lens' EMRInstanceGroupConfigAutoScalingPolicy [EMRInstanceGroupConfigScalingRule]
+emrigcaspRules = lens _eMRInstanceGroupConfigAutoScalingPolicyRules (\s a -> s { _eMRInstanceGroupConfigAutoScalingPolicyRules = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigCloudWatchAlarmDefinition.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigCloudWatchAlarmDefinition.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigCloudWatchAlarmDefinition.hs
@@ -0,0 +1,118 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html
+
+module Stratosphere.ResourceProperties.EMRInstanceGroupConfigCloudWatchAlarmDefinition where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigMetricDimension
+
+-- | Full data type definition for
+-- EMRInstanceGroupConfigCloudWatchAlarmDefinition. See
+-- 'emrInstanceGroupConfigCloudWatchAlarmDefinition' for a more convenient
+-- constructor.
+data EMRInstanceGroupConfigCloudWatchAlarmDefinition =
+  EMRInstanceGroupConfigCloudWatchAlarmDefinition
+  { _eMRInstanceGroupConfigCloudWatchAlarmDefinitionComparisonOperator :: Val Text
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionDimensions :: Maybe [EMRInstanceGroupConfigMetricDimension]
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionEvaluationPeriods :: Maybe (Val Integer')
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionMetricName :: Val Text
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionNamespace :: Maybe (Val Text)
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionPeriod :: Val Integer'
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionStatistic :: Maybe (Val Text)
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionThreshold :: Val Double'
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionUnit :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceGroupConfigCloudWatchAlarmDefinition where
+  toJSON EMRInstanceGroupConfigCloudWatchAlarmDefinition{..} =
+    object $
+    catMaybes
+    [ Just ("ComparisonOperator" .= _eMRInstanceGroupConfigCloudWatchAlarmDefinitionComparisonOperator)
+    , ("Dimensions" .=) <$> _eMRInstanceGroupConfigCloudWatchAlarmDefinitionDimensions
+    , ("EvaluationPeriods" .=) <$> _eMRInstanceGroupConfigCloudWatchAlarmDefinitionEvaluationPeriods
+    , Just ("MetricName" .= _eMRInstanceGroupConfigCloudWatchAlarmDefinitionMetricName)
+    , ("Namespace" .=) <$> _eMRInstanceGroupConfigCloudWatchAlarmDefinitionNamespace
+    , Just ("Period" .= _eMRInstanceGroupConfigCloudWatchAlarmDefinitionPeriod)
+    , ("Statistic" .=) <$> _eMRInstanceGroupConfigCloudWatchAlarmDefinitionStatistic
+    , Just ("Threshold" .= _eMRInstanceGroupConfigCloudWatchAlarmDefinitionThreshold)
+    , ("Unit" .=) <$> _eMRInstanceGroupConfigCloudWatchAlarmDefinitionUnit
+    ]
+
+instance FromJSON EMRInstanceGroupConfigCloudWatchAlarmDefinition where
+  parseJSON (Object obj) =
+    EMRInstanceGroupConfigCloudWatchAlarmDefinition <$>
+      obj .: "ComparisonOperator" <*>
+      obj .:? "Dimensions" <*>
+      obj .:? "EvaluationPeriods" <*>
+      obj .: "MetricName" <*>
+      obj .:? "Namespace" <*>
+      obj .: "Period" <*>
+      obj .:? "Statistic" <*>
+      obj .: "Threshold" <*>
+      obj .:? "Unit"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRInstanceGroupConfigCloudWatchAlarmDefinition'
+-- containing required fields as arguments.
+emrInstanceGroupConfigCloudWatchAlarmDefinition
+  :: Val Text -- ^ 'emrigccwadComparisonOperator'
+  -> Val Text -- ^ 'emrigccwadMetricName'
+  -> Val Integer' -- ^ 'emrigccwadPeriod'
+  -> Val Double' -- ^ 'emrigccwadThreshold'
+  -> EMRInstanceGroupConfigCloudWatchAlarmDefinition
+emrInstanceGroupConfigCloudWatchAlarmDefinition comparisonOperatorarg metricNamearg periodarg thresholdarg =
+  EMRInstanceGroupConfigCloudWatchAlarmDefinition
+  { _eMRInstanceGroupConfigCloudWatchAlarmDefinitionComparisonOperator = comparisonOperatorarg
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionDimensions = Nothing
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionEvaluationPeriods = Nothing
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionMetricName = metricNamearg
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionNamespace = Nothing
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionPeriod = periodarg
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionStatistic = Nothing
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionThreshold = thresholdarg
+  , _eMRInstanceGroupConfigCloudWatchAlarmDefinitionUnit = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-comparisonoperator
+emrigccwadComparisonOperator :: Lens' EMRInstanceGroupConfigCloudWatchAlarmDefinition (Val Text)
+emrigccwadComparisonOperator = lens _eMRInstanceGroupConfigCloudWatchAlarmDefinitionComparisonOperator (\s a -> s { _eMRInstanceGroupConfigCloudWatchAlarmDefinitionComparisonOperator = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-dimensions
+emrigccwadDimensions :: Lens' EMRInstanceGroupConfigCloudWatchAlarmDefinition (Maybe [EMRInstanceGroupConfigMetricDimension])
+emrigccwadDimensions = lens _eMRInstanceGroupConfigCloudWatchAlarmDefinitionDimensions (\s a -> s { _eMRInstanceGroupConfigCloudWatchAlarmDefinitionDimensions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-evaluationperiods
+emrigccwadEvaluationPeriods :: Lens' EMRInstanceGroupConfigCloudWatchAlarmDefinition (Maybe (Val Integer'))
+emrigccwadEvaluationPeriods = lens _eMRInstanceGroupConfigCloudWatchAlarmDefinitionEvaluationPeriods (\s a -> s { _eMRInstanceGroupConfigCloudWatchAlarmDefinitionEvaluationPeriods = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-metricname
+emrigccwadMetricName :: Lens' EMRInstanceGroupConfigCloudWatchAlarmDefinition (Val Text)
+emrigccwadMetricName = lens _eMRInstanceGroupConfigCloudWatchAlarmDefinitionMetricName (\s a -> s { _eMRInstanceGroupConfigCloudWatchAlarmDefinitionMetricName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-namespace
+emrigccwadNamespace :: Lens' EMRInstanceGroupConfigCloudWatchAlarmDefinition (Maybe (Val Text))
+emrigccwadNamespace = lens _eMRInstanceGroupConfigCloudWatchAlarmDefinitionNamespace (\s a -> s { _eMRInstanceGroupConfigCloudWatchAlarmDefinitionNamespace = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-period
+emrigccwadPeriod :: Lens' EMRInstanceGroupConfigCloudWatchAlarmDefinition (Val Integer')
+emrigccwadPeriod = lens _eMRInstanceGroupConfigCloudWatchAlarmDefinitionPeriod (\s a -> s { _eMRInstanceGroupConfigCloudWatchAlarmDefinitionPeriod = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-statistic
+emrigccwadStatistic :: Lens' EMRInstanceGroupConfigCloudWatchAlarmDefinition (Maybe (Val Text))
+emrigccwadStatistic = lens _eMRInstanceGroupConfigCloudWatchAlarmDefinitionStatistic (\s a -> s { _eMRInstanceGroupConfigCloudWatchAlarmDefinitionStatistic = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-threshold
+emrigccwadThreshold :: Lens' EMRInstanceGroupConfigCloudWatchAlarmDefinition (Val Double')
+emrigccwadThreshold = lens _eMRInstanceGroupConfigCloudWatchAlarmDefinitionThreshold (\s a -> s { _eMRInstanceGroupConfigCloudWatchAlarmDefinitionThreshold = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition.html#cfn-elasticmapreduce-instancegroupconfig-cloudwatchalarmdefinition-unit
+emrigccwadUnit :: Lens' EMRInstanceGroupConfigCloudWatchAlarmDefinition (Maybe (Val Text))
+emrigccwadUnit = lens _eMRInstanceGroupConfigCloudWatchAlarmDefinitionUnit (\s a -> s { _eMRInstanceGroupConfigCloudWatchAlarmDefinitionUnit = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigMetricDimension.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigMetricDimension.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigMetricDimension.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-metricdimension.html
+
+module Stratosphere.ResourceProperties.EMRInstanceGroupConfigMetricDimension where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EMRInstanceGroupConfigMetricDimension. See
+-- 'emrInstanceGroupConfigMetricDimension' for a more convenient
+-- constructor.
+data EMRInstanceGroupConfigMetricDimension =
+  EMRInstanceGroupConfigMetricDimension
+  { _eMRInstanceGroupConfigMetricDimensionKey :: Val Text
+  , _eMRInstanceGroupConfigMetricDimensionValue :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceGroupConfigMetricDimension where
+  toJSON EMRInstanceGroupConfigMetricDimension{..} =
+    object $
+    catMaybes
+    [ Just ("Key" .= _eMRInstanceGroupConfigMetricDimensionKey)
+    , Just ("Value" .= _eMRInstanceGroupConfigMetricDimensionValue)
+    ]
+
+instance FromJSON EMRInstanceGroupConfigMetricDimension where
+  parseJSON (Object obj) =
+    EMRInstanceGroupConfigMetricDimension <$>
+      obj .: "Key" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRInstanceGroupConfigMetricDimension' containing
+-- required fields as arguments.
+emrInstanceGroupConfigMetricDimension
+  :: Val Text -- ^ 'emrigcmdKey'
+  -> Val Text -- ^ 'emrigcmdValue'
+  -> EMRInstanceGroupConfigMetricDimension
+emrInstanceGroupConfigMetricDimension keyarg valuearg =
+  EMRInstanceGroupConfigMetricDimension
+  { _eMRInstanceGroupConfigMetricDimensionKey = keyarg
+  , _eMRInstanceGroupConfigMetricDimensionValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-metricdimension.html#cfn-elasticmapreduce-instancegroupconfig-metricdimension-key
+emrigcmdKey :: Lens' EMRInstanceGroupConfigMetricDimension (Val Text)
+emrigcmdKey = lens _eMRInstanceGroupConfigMetricDimensionKey (\s a -> s { _eMRInstanceGroupConfigMetricDimensionKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-metricdimension.html#cfn-elasticmapreduce-instancegroupconfig-metricdimension-value
+emrigcmdValue :: Lens' EMRInstanceGroupConfigMetricDimension (Val Text)
+emrigcmdValue = lens _eMRInstanceGroupConfigMetricDimensionValue (\s a -> s { _eMRInstanceGroupConfigMetricDimensionValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigScalingAction.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigScalingAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigScalingAction.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingaction.html
+
+module Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingAction where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigSimpleScalingPolicyConfiguration
+
+-- | Full data type definition for EMRInstanceGroupConfigScalingAction. See
+-- 'emrInstanceGroupConfigScalingAction' for a more convenient constructor.
+data EMRInstanceGroupConfigScalingAction =
+  EMRInstanceGroupConfigScalingAction
+  { _eMRInstanceGroupConfigScalingActionMarket :: Maybe (Val Text)
+  , _eMRInstanceGroupConfigScalingActionSimpleScalingPolicyConfiguration :: EMRInstanceGroupConfigSimpleScalingPolicyConfiguration
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceGroupConfigScalingAction where
+  toJSON EMRInstanceGroupConfigScalingAction{..} =
+    object $
+    catMaybes
+    [ ("Market" .=) <$> _eMRInstanceGroupConfigScalingActionMarket
+    , Just ("SimpleScalingPolicyConfiguration" .= _eMRInstanceGroupConfigScalingActionSimpleScalingPolicyConfiguration)
+    ]
+
+instance FromJSON EMRInstanceGroupConfigScalingAction where
+  parseJSON (Object obj) =
+    EMRInstanceGroupConfigScalingAction <$>
+      obj .:? "Market" <*>
+      obj .: "SimpleScalingPolicyConfiguration"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRInstanceGroupConfigScalingAction' containing required
+-- fields as arguments.
+emrInstanceGroupConfigScalingAction
+  :: EMRInstanceGroupConfigSimpleScalingPolicyConfiguration -- ^ 'emrigcsaSimpleScalingPolicyConfiguration'
+  -> EMRInstanceGroupConfigScalingAction
+emrInstanceGroupConfigScalingAction simpleScalingPolicyConfigurationarg =
+  EMRInstanceGroupConfigScalingAction
+  { _eMRInstanceGroupConfigScalingActionMarket = Nothing
+  , _eMRInstanceGroupConfigScalingActionSimpleScalingPolicyConfiguration = simpleScalingPolicyConfigurationarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingaction.html#cfn-elasticmapreduce-instancegroupconfig-scalingaction-market
+emrigcsaMarket :: Lens' EMRInstanceGroupConfigScalingAction (Maybe (Val Text))
+emrigcsaMarket = lens _eMRInstanceGroupConfigScalingActionMarket (\s a -> s { _eMRInstanceGroupConfigScalingActionMarket = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingaction.html#cfn-elasticmapreduce-instancegroupconfig-scalingaction-simplescalingpolicyconfiguration
+emrigcsaSimpleScalingPolicyConfiguration :: Lens' EMRInstanceGroupConfigScalingAction EMRInstanceGroupConfigSimpleScalingPolicyConfiguration
+emrigcsaSimpleScalingPolicyConfiguration = lens _eMRInstanceGroupConfigScalingActionSimpleScalingPolicyConfiguration (\s a -> s { _eMRInstanceGroupConfigScalingActionSimpleScalingPolicyConfiguration = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigScalingConstraints.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigScalingConstraints.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigScalingConstraints.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingconstraints.html
+
+module Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingConstraints where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EMRInstanceGroupConfigScalingConstraints.
+-- See 'emrInstanceGroupConfigScalingConstraints' for a more convenient
+-- constructor.
+data EMRInstanceGroupConfigScalingConstraints =
+  EMRInstanceGroupConfigScalingConstraints
+  { _eMRInstanceGroupConfigScalingConstraintsMaxCapacity :: Val Integer'
+  , _eMRInstanceGroupConfigScalingConstraintsMinCapacity :: Val Integer'
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceGroupConfigScalingConstraints where
+  toJSON EMRInstanceGroupConfigScalingConstraints{..} =
+    object $
+    catMaybes
+    [ Just ("MaxCapacity" .= _eMRInstanceGroupConfigScalingConstraintsMaxCapacity)
+    , Just ("MinCapacity" .= _eMRInstanceGroupConfigScalingConstraintsMinCapacity)
+    ]
+
+instance FromJSON EMRInstanceGroupConfigScalingConstraints where
+  parseJSON (Object obj) =
+    EMRInstanceGroupConfigScalingConstraints <$>
+      obj .: "MaxCapacity" <*>
+      obj .: "MinCapacity"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRInstanceGroupConfigScalingConstraints' containing
+-- required fields as arguments.
+emrInstanceGroupConfigScalingConstraints
+  :: Val Integer' -- ^ 'emrigcscMaxCapacity'
+  -> Val Integer' -- ^ 'emrigcscMinCapacity'
+  -> EMRInstanceGroupConfigScalingConstraints
+emrInstanceGroupConfigScalingConstraints maxCapacityarg minCapacityarg =
+  EMRInstanceGroupConfigScalingConstraints
+  { _eMRInstanceGroupConfigScalingConstraintsMaxCapacity = maxCapacityarg
+  , _eMRInstanceGroupConfigScalingConstraintsMinCapacity = minCapacityarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingconstraints.html#cfn-elasticmapreduce-instancegroupconfig-scalingconstraints-maxcapacity
+emrigcscMaxCapacity :: Lens' EMRInstanceGroupConfigScalingConstraints (Val Integer')
+emrigcscMaxCapacity = lens _eMRInstanceGroupConfigScalingConstraintsMaxCapacity (\s a -> s { _eMRInstanceGroupConfigScalingConstraintsMaxCapacity = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingconstraints.html#cfn-elasticmapreduce-instancegroupconfig-scalingconstraints-mincapacity
+emrigcscMinCapacity :: Lens' EMRInstanceGroupConfigScalingConstraints (Val Integer')
+emrigcscMinCapacity = lens _eMRInstanceGroupConfigScalingConstraintsMinCapacity (\s a -> s { _eMRInstanceGroupConfigScalingConstraintsMinCapacity = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigScalingRule.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigScalingRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigScalingRule.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingrule.html
+
+module Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingRule where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingAction
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingTrigger
+
+-- | Full data type definition for EMRInstanceGroupConfigScalingRule. See
+-- 'emrInstanceGroupConfigScalingRule' for a more convenient constructor.
+data EMRInstanceGroupConfigScalingRule =
+  EMRInstanceGroupConfigScalingRule
+  { _eMRInstanceGroupConfigScalingRuleAction :: EMRInstanceGroupConfigScalingAction
+  , _eMRInstanceGroupConfigScalingRuleDescription :: Maybe (Val Text)
+  , _eMRInstanceGroupConfigScalingRuleName :: Val Text
+  , _eMRInstanceGroupConfigScalingRuleTrigger :: EMRInstanceGroupConfigScalingTrigger
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceGroupConfigScalingRule where
+  toJSON EMRInstanceGroupConfigScalingRule{..} =
+    object $
+    catMaybes
+    [ Just ("Action" .= _eMRInstanceGroupConfigScalingRuleAction)
+    , ("Description" .=) <$> _eMRInstanceGroupConfigScalingRuleDescription
+    , Just ("Name" .= _eMRInstanceGroupConfigScalingRuleName)
+    , Just ("Trigger" .= _eMRInstanceGroupConfigScalingRuleTrigger)
+    ]
+
+instance FromJSON EMRInstanceGroupConfigScalingRule where
+  parseJSON (Object obj) =
+    EMRInstanceGroupConfigScalingRule <$>
+      obj .: "Action" <*>
+      obj .:? "Description" <*>
+      obj .: "Name" <*>
+      obj .: "Trigger"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRInstanceGroupConfigScalingRule' containing required
+-- fields as arguments.
+emrInstanceGroupConfigScalingRule
+  :: EMRInstanceGroupConfigScalingAction -- ^ 'emrigcsrAction'
+  -> Val Text -- ^ 'emrigcsrName'
+  -> EMRInstanceGroupConfigScalingTrigger -- ^ 'emrigcsrTrigger'
+  -> EMRInstanceGroupConfigScalingRule
+emrInstanceGroupConfigScalingRule actionarg namearg triggerarg =
+  EMRInstanceGroupConfigScalingRule
+  { _eMRInstanceGroupConfigScalingRuleAction = actionarg
+  , _eMRInstanceGroupConfigScalingRuleDescription = Nothing
+  , _eMRInstanceGroupConfigScalingRuleName = namearg
+  , _eMRInstanceGroupConfigScalingRuleTrigger = triggerarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingrule.html#cfn-elasticmapreduce-instancegroupconfig-scalingrule-action
+emrigcsrAction :: Lens' EMRInstanceGroupConfigScalingRule EMRInstanceGroupConfigScalingAction
+emrigcsrAction = lens _eMRInstanceGroupConfigScalingRuleAction (\s a -> s { _eMRInstanceGroupConfigScalingRuleAction = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingrule.html#cfn-elasticmapreduce-instancegroupconfig-scalingrule-description
+emrigcsrDescription :: Lens' EMRInstanceGroupConfigScalingRule (Maybe (Val Text))
+emrigcsrDescription = lens _eMRInstanceGroupConfigScalingRuleDescription (\s a -> s { _eMRInstanceGroupConfigScalingRuleDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingrule.html#cfn-elasticmapreduce-instancegroupconfig-scalingrule-name
+emrigcsrName :: Lens' EMRInstanceGroupConfigScalingRule (Val Text)
+emrigcsrName = lens _eMRInstanceGroupConfigScalingRuleName (\s a -> s { _eMRInstanceGroupConfigScalingRuleName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingrule.html#cfn-elasticmapreduce-instancegroupconfig-scalingrule-trigger
+emrigcsrTrigger :: Lens' EMRInstanceGroupConfigScalingRule EMRInstanceGroupConfigScalingTrigger
+emrigcsrTrigger = lens _eMRInstanceGroupConfigScalingRuleTrigger (\s a -> s { _eMRInstanceGroupConfigScalingRuleTrigger = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigScalingTrigger.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigScalingTrigger.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigScalingTrigger.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingtrigger.html
+
+module Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingTrigger where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigCloudWatchAlarmDefinition
+
+-- | Full data type definition for EMRInstanceGroupConfigScalingTrigger. See
+-- 'emrInstanceGroupConfigScalingTrigger' for a more convenient constructor.
+data EMRInstanceGroupConfigScalingTrigger =
+  EMRInstanceGroupConfigScalingTrigger
+  { _eMRInstanceGroupConfigScalingTriggerCloudWatchAlarmDefinition :: EMRInstanceGroupConfigCloudWatchAlarmDefinition
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceGroupConfigScalingTrigger where
+  toJSON EMRInstanceGroupConfigScalingTrigger{..} =
+    object $
+    catMaybes
+    [ Just ("CloudWatchAlarmDefinition" .= _eMRInstanceGroupConfigScalingTriggerCloudWatchAlarmDefinition)
+    ]
+
+instance FromJSON EMRInstanceGroupConfigScalingTrigger where
+  parseJSON (Object obj) =
+    EMRInstanceGroupConfigScalingTrigger <$>
+      obj .: "CloudWatchAlarmDefinition"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRInstanceGroupConfigScalingTrigger' containing
+-- required fields as arguments.
+emrInstanceGroupConfigScalingTrigger
+  :: EMRInstanceGroupConfigCloudWatchAlarmDefinition -- ^ 'emrigcstCloudWatchAlarmDefinition'
+  -> EMRInstanceGroupConfigScalingTrigger
+emrInstanceGroupConfigScalingTrigger cloudWatchAlarmDefinitionarg =
+  EMRInstanceGroupConfigScalingTrigger
+  { _eMRInstanceGroupConfigScalingTriggerCloudWatchAlarmDefinition = cloudWatchAlarmDefinitionarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-scalingtrigger.html#cfn-elasticmapreduce-instancegroupconfig-scalingtrigger-cloudwatchalarmdefinition
+emrigcstCloudWatchAlarmDefinition :: Lens' EMRInstanceGroupConfigScalingTrigger EMRInstanceGroupConfigCloudWatchAlarmDefinition
+emrigcstCloudWatchAlarmDefinition = lens _eMRInstanceGroupConfigScalingTriggerCloudWatchAlarmDefinition (\s a -> s { _eMRInstanceGroupConfigScalingTriggerCloudWatchAlarmDefinition = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigSimpleScalingPolicyConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigSimpleScalingPolicyConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceGroupConfigSimpleScalingPolicyConfiguration.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-simplescalingpolicyconfiguration.html
+
+module Stratosphere.ResourceProperties.EMRInstanceGroupConfigSimpleScalingPolicyConfiguration where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- EMRInstanceGroupConfigSimpleScalingPolicyConfiguration. See
+-- 'emrInstanceGroupConfigSimpleScalingPolicyConfiguration' for a more
+-- convenient constructor.
+data EMRInstanceGroupConfigSimpleScalingPolicyConfiguration =
+  EMRInstanceGroupConfigSimpleScalingPolicyConfiguration
+  { _eMRInstanceGroupConfigSimpleScalingPolicyConfigurationAdjustmentType :: Maybe (Val Text)
+  , _eMRInstanceGroupConfigSimpleScalingPolicyConfigurationCoolDown :: Maybe (Val Integer')
+  , _eMRInstanceGroupConfigSimpleScalingPolicyConfigurationScalingAdjustment :: Val Integer'
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceGroupConfigSimpleScalingPolicyConfiguration where
+  toJSON EMRInstanceGroupConfigSimpleScalingPolicyConfiguration{..} =
+    object $
+    catMaybes
+    [ ("AdjustmentType" .=) <$> _eMRInstanceGroupConfigSimpleScalingPolicyConfigurationAdjustmentType
+    , ("CoolDown" .=) <$> _eMRInstanceGroupConfigSimpleScalingPolicyConfigurationCoolDown
+    , Just ("ScalingAdjustment" .= _eMRInstanceGroupConfigSimpleScalingPolicyConfigurationScalingAdjustment)
+    ]
+
+instance FromJSON EMRInstanceGroupConfigSimpleScalingPolicyConfiguration where
+  parseJSON (Object obj) =
+    EMRInstanceGroupConfigSimpleScalingPolicyConfiguration <$>
+      obj .:? "AdjustmentType" <*>
+      obj .:? "CoolDown" <*>
+      obj .: "ScalingAdjustment"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRInstanceGroupConfigSimpleScalingPolicyConfiguration'
+-- containing required fields as arguments.
+emrInstanceGroupConfigSimpleScalingPolicyConfiguration
+  :: Val Integer' -- ^ 'emrigcsspcScalingAdjustment'
+  -> EMRInstanceGroupConfigSimpleScalingPolicyConfiguration
+emrInstanceGroupConfigSimpleScalingPolicyConfiguration scalingAdjustmentarg =
+  EMRInstanceGroupConfigSimpleScalingPolicyConfiguration
+  { _eMRInstanceGroupConfigSimpleScalingPolicyConfigurationAdjustmentType = Nothing
+  , _eMRInstanceGroupConfigSimpleScalingPolicyConfigurationCoolDown = Nothing
+  , _eMRInstanceGroupConfigSimpleScalingPolicyConfigurationScalingAdjustment = scalingAdjustmentarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-simplescalingpolicyconfiguration.html#cfn-elasticmapreduce-instancegroupconfig-simplescalingpolicyconfiguration-adjustmenttype
+emrigcsspcAdjustmentType :: Lens' EMRInstanceGroupConfigSimpleScalingPolicyConfiguration (Maybe (Val Text))
+emrigcsspcAdjustmentType = lens _eMRInstanceGroupConfigSimpleScalingPolicyConfigurationAdjustmentType (\s a -> s { _eMRInstanceGroupConfigSimpleScalingPolicyConfigurationAdjustmentType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-simplescalingpolicyconfiguration.html#cfn-elasticmapreduce-instancegroupconfig-simplescalingpolicyconfiguration-cooldown
+emrigcsspcCoolDown :: Lens' EMRInstanceGroupConfigSimpleScalingPolicyConfiguration (Maybe (Val Integer'))
+emrigcsspcCoolDown = lens _eMRInstanceGroupConfigSimpleScalingPolicyConfigurationCoolDown (\s a -> s { _eMRInstanceGroupConfigSimpleScalingPolicyConfigurationCoolDown = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancegroupconfig-simplescalingpolicyconfiguration.html#cfn-elasticmapreduce-instancegroupconfig-simplescalingpolicyconfiguration-scalingadjustment
+emrigcsspcScalingAdjustment :: Lens' EMRInstanceGroupConfigSimpleScalingPolicyConfiguration (Val Integer')
+emrigcsspcScalingAdjustment = lens _eMRInstanceGroupConfigSimpleScalingPolicyConfigurationScalingAdjustment (\s a -> s { _eMRInstanceGroupConfigSimpleScalingPolicyConfigurationScalingAdjustment = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EventsRuleTarget.hs b/library-gen/Stratosphere/ResourceProperties/EventsRuleTarget.hs
--- a/library-gen/Stratosphere/ResourceProperties/EventsRuleTarget.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EventsRuleTarget.hs
@@ -22,6 +22,7 @@
   , _eventsRuleTargetId :: Val Text
   , _eventsRuleTargetInput :: Maybe (Val Text)
   , _eventsRuleTargetInputPath :: Maybe (Val Text)
+  , _eventsRuleTargetRoleArn :: Maybe (Val Text)
   } deriving (Show, Eq)
 
 instance ToJSON EventsRuleTarget where
@@ -32,6 +33,7 @@
     , Just ("Id" .= _eventsRuleTargetId)
     , ("Input" .=) <$> _eventsRuleTargetInput
     , ("InputPath" .=) <$> _eventsRuleTargetInputPath
+    , ("RoleArn" .=) <$> _eventsRuleTargetRoleArn
     ]
 
 instance FromJSON EventsRuleTarget where
@@ -40,7 +42,8 @@
       obj .: "Arn" <*>
       obj .: "Id" <*>
       obj .:? "Input" <*>
-      obj .:? "InputPath"
+      obj .:? "InputPath" <*>
+      obj .:? "RoleArn"
   parseJSON _ = mempty
 
 -- | Constructor for 'EventsRuleTarget' containing required fields as
@@ -55,6 +58,7 @@
   , _eventsRuleTargetId = idarg
   , _eventsRuleTargetInput = Nothing
   , _eventsRuleTargetInputPath = Nothing
+  , _eventsRuleTargetRoleArn = Nothing
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-target.html#cfn-events-rule-target-arn
@@ -72,3 +76,7 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-target.html#cfn-events-rule-target-inputpath
 ertInputPath :: Lens' EventsRuleTarget (Maybe (Val Text))
 ertInputPath = lens _eventsRuleTargetInputPath (\s a -> s { _eventsRuleTargetInputPath = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-target.html#cfn-events-rule-target-rolearn
+ertRoleArn :: Lens' EventsRuleTarget (Maybe (Val Text))
+ertRoleArn = lens _eventsRuleTargetRoleArn (\s a -> s { _eventsRuleTargetRoleArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/LambdaFunctionTracingConfig.hs b/library-gen/Stratosphere/ResourceProperties/LambdaFunctionTracingConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/LambdaFunctionTracingConfig.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-tracingconfig.html
+
+module Stratosphere.ResourceProperties.LambdaFunctionTracingConfig where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for LambdaFunctionTracingConfig. See
+-- 'lambdaFunctionTracingConfig' for a more convenient constructor.
+data LambdaFunctionTracingConfig =
+  LambdaFunctionTracingConfig
+  { _lambdaFunctionTracingConfigMode :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON LambdaFunctionTracingConfig where
+  toJSON LambdaFunctionTracingConfig{..} =
+    object $
+    catMaybes
+    [ ("Mode" .=) <$> _lambdaFunctionTracingConfigMode
+    ]
+
+instance FromJSON LambdaFunctionTracingConfig where
+  parseJSON (Object obj) =
+    LambdaFunctionTracingConfig <$>
+      obj .:? "Mode"
+  parseJSON _ = mempty
+
+-- | Constructor for 'LambdaFunctionTracingConfig' containing required fields
+-- as arguments.
+lambdaFunctionTracingConfig
+  :: LambdaFunctionTracingConfig
+lambdaFunctionTracingConfig  =
+  LambdaFunctionTracingConfig
+  { _lambdaFunctionTracingConfigMode = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-tracingconfig.html#cfn-lambda-function-tracingconfig-mode
+lftcMode :: Lens' LambdaFunctionTracingConfig (Maybe (Val Text))
+lftcMode = lens _lambdaFunctionTracingConfigMode (\s a -> s { _lambdaFunctionTracingConfigMode = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/RDSDBSecurityGroupIngressProperty.hs b/library-gen/Stratosphere/ResourceProperties/RDSDBSecurityGroupIngressProperty.hs
--- a/library-gen/Stratosphere/ResourceProperties/RDSDBSecurityGroupIngressProperty.hs
+++ b/library-gen/Stratosphere/ResourceProperties/RDSDBSecurityGroupIngressProperty.hs
@@ -18,7 +18,7 @@
 -- 'rdsdbSecurityGroupIngressProperty' for a more convenient constructor.
 data RDSDBSecurityGroupIngressProperty =
   RDSDBSecurityGroupIngressProperty
-  { _rDSDBSecurityGroupIngressPropertyCDIRIP :: Maybe (Val Text)
+  { _rDSDBSecurityGroupIngressPropertyCIDRIP :: Maybe (Val Text)
   , _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupId :: Maybe (Val Text)
   , _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupName :: Maybe (Val Text)
   , _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupOwnerId :: Maybe (Val Text)
@@ -28,7 +28,7 @@
   toJSON RDSDBSecurityGroupIngressProperty{..} =
     object $
     catMaybes
-    [ ("CDIRIP" .=) <$> _rDSDBSecurityGroupIngressPropertyCDIRIP
+    [ ("CIDRIP" .=) <$> _rDSDBSecurityGroupIngressPropertyCIDRIP
     , ("EC2SecurityGroupId" .=) <$> _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupId
     , ("EC2SecurityGroupName" .=) <$> _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupName
     , ("EC2SecurityGroupOwnerId" .=) <$> _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupOwnerId
@@ -37,7 +37,7 @@
 instance FromJSON RDSDBSecurityGroupIngressProperty where
   parseJSON (Object obj) =
     RDSDBSecurityGroupIngressProperty <$>
-      obj .:? "CDIRIP" <*>
+      obj .:? "CIDRIP" <*>
       obj .:? "EC2SecurityGroupId" <*>
       obj .:? "EC2SecurityGroupName" <*>
       obj .:? "EC2SecurityGroupOwnerId"
@@ -49,15 +49,15 @@
   :: RDSDBSecurityGroupIngressProperty
 rdsdbSecurityGroupIngressProperty  =
   RDSDBSecurityGroupIngressProperty
-  { _rDSDBSecurityGroupIngressPropertyCDIRIP = Nothing
+  { _rDSDBSecurityGroupIngressPropertyCIDRIP = Nothing
   , _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupId = Nothing
   , _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupName = Nothing
   , _rDSDBSecurityGroupIngressPropertyEC2SecurityGroupOwnerId = Nothing
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group-rule.html#cfn-rds-securitygroup-cidrip
-rdsdbsgipCDIRIP :: Lens' RDSDBSecurityGroupIngressProperty (Maybe (Val Text))
-rdsdbsgipCDIRIP = lens _rDSDBSecurityGroupIngressPropertyCDIRIP (\s a -> s { _rDSDBSecurityGroupIngressPropertyCDIRIP = a })
+rdsdbsgipCIDRIP :: Lens' RDSDBSecurityGroupIngressProperty (Maybe (Val Text))
+rdsdbsgipCIDRIP = lens _rDSDBSecurityGroupIngressPropertyCIDRIP (\s a -> s { _rDSDBSecurityGroupIngressPropertyCIDRIP = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group-rule.html#cfn-rds-securitygroup-ec2securitygroupid
 rdsdbsgipEC2SecurityGroupId :: Lens' RDSDBSecurityGroupIngressProperty (Maybe (Val Text))
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFRegionalByteMatchSetByteMatchTuple.hs b/library-gen/Stratosphere/ResourceProperties/WAFRegionalByteMatchSetByteMatchTuple.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFRegionalByteMatchSetByteMatchTuple.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-bytematchset-bytematchtuple.html
+
+module Stratosphere.ResourceProperties.WAFRegionalByteMatchSetByteMatchTuple where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFRegionalByteMatchSetFieldToMatch
+
+-- | Full data type definition for WAFRegionalByteMatchSetByteMatchTuple. See
+-- 'wafRegionalByteMatchSetByteMatchTuple' for a more convenient
+-- constructor.
+data WAFRegionalByteMatchSetByteMatchTuple =
+  WAFRegionalByteMatchSetByteMatchTuple
+  { _wAFRegionalByteMatchSetByteMatchTupleFieldToMatch :: WAFRegionalByteMatchSetFieldToMatch
+  , _wAFRegionalByteMatchSetByteMatchTuplePositionalConstraint :: Val Text
+  , _wAFRegionalByteMatchSetByteMatchTupleTargetString :: Maybe (Val Text)
+  , _wAFRegionalByteMatchSetByteMatchTupleTargetStringBase64 :: Maybe (Val Text)
+  , _wAFRegionalByteMatchSetByteMatchTupleTextTransformation :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalByteMatchSetByteMatchTuple where
+  toJSON WAFRegionalByteMatchSetByteMatchTuple{..} =
+    object $
+    catMaybes
+    [ Just ("FieldToMatch" .= _wAFRegionalByteMatchSetByteMatchTupleFieldToMatch)
+    , Just ("PositionalConstraint" .= _wAFRegionalByteMatchSetByteMatchTuplePositionalConstraint)
+    , ("TargetString" .=) <$> _wAFRegionalByteMatchSetByteMatchTupleTargetString
+    , ("TargetStringBase64" .=) <$> _wAFRegionalByteMatchSetByteMatchTupleTargetStringBase64
+    , Just ("TextTransformation" .= _wAFRegionalByteMatchSetByteMatchTupleTextTransformation)
+    ]
+
+instance FromJSON WAFRegionalByteMatchSetByteMatchTuple where
+  parseJSON (Object obj) =
+    WAFRegionalByteMatchSetByteMatchTuple <$>
+      obj .: "FieldToMatch" <*>
+      obj .: "PositionalConstraint" <*>
+      obj .:? "TargetString" <*>
+      obj .:? "TargetStringBase64" <*>
+      obj .: "TextTransformation"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalByteMatchSetByteMatchTuple' containing
+-- required fields as arguments.
+wafRegionalByteMatchSetByteMatchTuple
+  :: WAFRegionalByteMatchSetFieldToMatch -- ^ 'wafrbmsbmtFieldToMatch'
+  -> Val Text -- ^ 'wafrbmsbmtPositionalConstraint'
+  -> Val Text -- ^ 'wafrbmsbmtTextTransformation'
+  -> WAFRegionalByteMatchSetByteMatchTuple
+wafRegionalByteMatchSetByteMatchTuple fieldToMatcharg positionalConstraintarg textTransformationarg =
+  WAFRegionalByteMatchSetByteMatchTuple
+  { _wAFRegionalByteMatchSetByteMatchTupleFieldToMatch = fieldToMatcharg
+  , _wAFRegionalByteMatchSetByteMatchTuplePositionalConstraint = positionalConstraintarg
+  , _wAFRegionalByteMatchSetByteMatchTupleTargetString = Nothing
+  , _wAFRegionalByteMatchSetByteMatchTupleTargetStringBase64 = Nothing
+  , _wAFRegionalByteMatchSetByteMatchTupleTextTransformation = textTransformationarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-bytematchset-bytematchtuple.html#cfn-wafregional-bytematchset-bytematchtuple-fieldtomatch
+wafrbmsbmtFieldToMatch :: Lens' WAFRegionalByteMatchSetByteMatchTuple WAFRegionalByteMatchSetFieldToMatch
+wafrbmsbmtFieldToMatch = lens _wAFRegionalByteMatchSetByteMatchTupleFieldToMatch (\s a -> s { _wAFRegionalByteMatchSetByteMatchTupleFieldToMatch = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-bytematchset-bytematchtuple.html#cfn-wafregional-bytematchset-bytematchtuple-positionalconstraint
+wafrbmsbmtPositionalConstraint :: Lens' WAFRegionalByteMatchSetByteMatchTuple (Val Text)
+wafrbmsbmtPositionalConstraint = lens _wAFRegionalByteMatchSetByteMatchTuplePositionalConstraint (\s a -> s { _wAFRegionalByteMatchSetByteMatchTuplePositionalConstraint = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-bytematchset-bytematchtuple.html#cfn-wafregional-bytematchset-bytematchtuple-targetstring
+wafrbmsbmtTargetString :: Lens' WAFRegionalByteMatchSetByteMatchTuple (Maybe (Val Text))
+wafrbmsbmtTargetString = lens _wAFRegionalByteMatchSetByteMatchTupleTargetString (\s a -> s { _wAFRegionalByteMatchSetByteMatchTupleTargetString = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-bytematchset-bytematchtuple.html#cfn-wafregional-bytematchset-bytematchtuple-targetstringbase64
+wafrbmsbmtTargetStringBase64 :: Lens' WAFRegionalByteMatchSetByteMatchTuple (Maybe (Val Text))
+wafrbmsbmtTargetStringBase64 = lens _wAFRegionalByteMatchSetByteMatchTupleTargetStringBase64 (\s a -> s { _wAFRegionalByteMatchSetByteMatchTupleTargetStringBase64 = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-bytematchset-bytematchtuple.html#cfn-wafregional-bytematchset-bytematchtuple-texttransformation
+wafrbmsbmtTextTransformation :: Lens' WAFRegionalByteMatchSetByteMatchTuple (Val Text)
+wafrbmsbmtTextTransformation = lens _wAFRegionalByteMatchSetByteMatchTupleTextTransformation (\s a -> s { _wAFRegionalByteMatchSetByteMatchTupleTextTransformation = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFRegionalByteMatchSetFieldToMatch.hs b/library-gen/Stratosphere/ResourceProperties/WAFRegionalByteMatchSetFieldToMatch.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFRegionalByteMatchSetFieldToMatch.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-bytematchset-fieldtomatch.html
+
+module Stratosphere.ResourceProperties.WAFRegionalByteMatchSetFieldToMatch where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for WAFRegionalByteMatchSetFieldToMatch. See
+-- 'wafRegionalByteMatchSetFieldToMatch' for a more convenient constructor.
+data WAFRegionalByteMatchSetFieldToMatch =
+  WAFRegionalByteMatchSetFieldToMatch
+  { _wAFRegionalByteMatchSetFieldToMatchData :: Maybe (Val Text)
+  , _wAFRegionalByteMatchSetFieldToMatchType :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalByteMatchSetFieldToMatch where
+  toJSON WAFRegionalByteMatchSetFieldToMatch{..} =
+    object $
+    catMaybes
+    [ ("Data" .=) <$> _wAFRegionalByteMatchSetFieldToMatchData
+    , Just ("Type" .= _wAFRegionalByteMatchSetFieldToMatchType)
+    ]
+
+instance FromJSON WAFRegionalByteMatchSetFieldToMatch where
+  parseJSON (Object obj) =
+    WAFRegionalByteMatchSetFieldToMatch <$>
+      obj .:? "Data" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalByteMatchSetFieldToMatch' containing required
+-- fields as arguments.
+wafRegionalByteMatchSetFieldToMatch
+  :: Val Text -- ^ 'wafrbmsftmType'
+  -> WAFRegionalByteMatchSetFieldToMatch
+wafRegionalByteMatchSetFieldToMatch typearg =
+  WAFRegionalByteMatchSetFieldToMatch
+  { _wAFRegionalByteMatchSetFieldToMatchData = Nothing
+  , _wAFRegionalByteMatchSetFieldToMatchType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-bytematchset-fieldtomatch.html#cfn-wafregional-bytematchset-fieldtomatch-data
+wafrbmsftmData :: Lens' WAFRegionalByteMatchSetFieldToMatch (Maybe (Val Text))
+wafrbmsftmData = lens _wAFRegionalByteMatchSetFieldToMatchData (\s a -> s { _wAFRegionalByteMatchSetFieldToMatchData = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-bytematchset-fieldtomatch.html#cfn-wafregional-bytematchset-fieldtomatch-type
+wafrbmsftmType :: Lens' WAFRegionalByteMatchSetFieldToMatch (Val Text)
+wafrbmsftmType = lens _wAFRegionalByteMatchSetFieldToMatchType (\s a -> s { _wAFRegionalByteMatchSetFieldToMatchType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFRegionalIPSetIPSetDescriptor.hs b/library-gen/Stratosphere/ResourceProperties/WAFRegionalIPSetIPSetDescriptor.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFRegionalIPSetIPSetDescriptor.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-ipset-ipsetdescriptor.html
+
+module Stratosphere.ResourceProperties.WAFRegionalIPSetIPSetDescriptor where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for WAFRegionalIPSetIPSetDescriptor. See
+-- 'wafRegionalIPSetIPSetDescriptor' for a more convenient constructor.
+data WAFRegionalIPSetIPSetDescriptor =
+  WAFRegionalIPSetIPSetDescriptor
+  { _wAFRegionalIPSetIPSetDescriptorType :: Val Text
+  , _wAFRegionalIPSetIPSetDescriptorValue :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalIPSetIPSetDescriptor where
+  toJSON WAFRegionalIPSetIPSetDescriptor{..} =
+    object $
+    catMaybes
+    [ Just ("Type" .= _wAFRegionalIPSetIPSetDescriptorType)
+    , Just ("Value" .= _wAFRegionalIPSetIPSetDescriptorValue)
+    ]
+
+instance FromJSON WAFRegionalIPSetIPSetDescriptor where
+  parseJSON (Object obj) =
+    WAFRegionalIPSetIPSetDescriptor <$>
+      obj .: "Type" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalIPSetIPSetDescriptor' containing required
+-- fields as arguments.
+wafRegionalIPSetIPSetDescriptor
+  :: Val Text -- ^ 'wafripsipsdType'
+  -> Val Text -- ^ 'wafripsipsdValue'
+  -> WAFRegionalIPSetIPSetDescriptor
+wafRegionalIPSetIPSetDescriptor typearg valuearg =
+  WAFRegionalIPSetIPSetDescriptor
+  { _wAFRegionalIPSetIPSetDescriptorType = typearg
+  , _wAFRegionalIPSetIPSetDescriptorValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-ipset-ipsetdescriptor.html#cfn-wafregional-ipset-ipsetdescriptor-type
+wafripsipsdType :: Lens' WAFRegionalIPSetIPSetDescriptor (Val Text)
+wafripsipsdType = lens _wAFRegionalIPSetIPSetDescriptorType (\s a -> s { _wAFRegionalIPSetIPSetDescriptorType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-ipset-ipsetdescriptor.html#cfn-wafregional-ipset-ipsetdescriptor-value
+wafripsipsdValue :: Lens' WAFRegionalIPSetIPSetDescriptor (Val Text)
+wafripsipsdValue = lens _wAFRegionalIPSetIPSetDescriptorValue (\s a -> s { _wAFRegionalIPSetIPSetDescriptorValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFRegionalRulePredicate.hs b/library-gen/Stratosphere/ResourceProperties/WAFRegionalRulePredicate.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFRegionalRulePredicate.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-rule-predicate.html
+
+module Stratosphere.ResourceProperties.WAFRegionalRulePredicate where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for WAFRegionalRulePredicate. See
+-- 'wafRegionalRulePredicate' for a more convenient constructor.
+data WAFRegionalRulePredicate =
+  WAFRegionalRulePredicate
+  { _wAFRegionalRulePredicateDataId :: Val Text
+  , _wAFRegionalRulePredicateNegated :: Val Bool'
+  , _wAFRegionalRulePredicateType :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalRulePredicate where
+  toJSON WAFRegionalRulePredicate{..} =
+    object $
+    catMaybes
+    [ Just ("DataId" .= _wAFRegionalRulePredicateDataId)
+    , Just ("Negated" .= _wAFRegionalRulePredicateNegated)
+    , Just ("Type" .= _wAFRegionalRulePredicateType)
+    ]
+
+instance FromJSON WAFRegionalRulePredicate where
+  parseJSON (Object obj) =
+    WAFRegionalRulePredicate <$>
+      obj .: "DataId" <*>
+      obj .: "Negated" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalRulePredicate' containing required fields as
+-- arguments.
+wafRegionalRulePredicate
+  :: Val Text -- ^ 'wafrrpDataId'
+  -> Val Bool' -- ^ 'wafrrpNegated'
+  -> Val Text -- ^ 'wafrrpType'
+  -> WAFRegionalRulePredicate
+wafRegionalRulePredicate dataIdarg negatedarg typearg =
+  WAFRegionalRulePredicate
+  { _wAFRegionalRulePredicateDataId = dataIdarg
+  , _wAFRegionalRulePredicateNegated = negatedarg
+  , _wAFRegionalRulePredicateType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-rule-predicate.html#cfn-wafregional-rule-predicate-dataid
+wafrrpDataId :: Lens' WAFRegionalRulePredicate (Val Text)
+wafrrpDataId = lens _wAFRegionalRulePredicateDataId (\s a -> s { _wAFRegionalRulePredicateDataId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-rule-predicate.html#cfn-wafregional-rule-predicate-negated
+wafrrpNegated :: Lens' WAFRegionalRulePredicate (Val Bool')
+wafrrpNegated = lens _wAFRegionalRulePredicateNegated (\s a -> s { _wAFRegionalRulePredicateNegated = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-rule-predicate.html#cfn-wafregional-rule-predicate-type
+wafrrpType :: Lens' WAFRegionalRulePredicate (Val Text)
+wafrrpType = lens _wAFRegionalRulePredicateType (\s a -> s { _wAFRegionalRulePredicateType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFRegionalSizeConstraintSetFieldToMatch.hs b/library-gen/Stratosphere/ResourceProperties/WAFRegionalSizeConstraintSetFieldToMatch.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFRegionalSizeConstraintSetFieldToMatch.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-sizeconstraintset-fieldtomatch.html
+
+module Stratosphere.ResourceProperties.WAFRegionalSizeConstraintSetFieldToMatch where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for WAFRegionalSizeConstraintSetFieldToMatch.
+-- See 'wafRegionalSizeConstraintSetFieldToMatch' for a more convenient
+-- constructor.
+data WAFRegionalSizeConstraintSetFieldToMatch =
+  WAFRegionalSizeConstraintSetFieldToMatch
+  { _wAFRegionalSizeConstraintSetFieldToMatchData :: Maybe (Val Text)
+  , _wAFRegionalSizeConstraintSetFieldToMatchType :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalSizeConstraintSetFieldToMatch where
+  toJSON WAFRegionalSizeConstraintSetFieldToMatch{..} =
+    object $
+    catMaybes
+    [ ("Data" .=) <$> _wAFRegionalSizeConstraintSetFieldToMatchData
+    , Just ("Type" .= _wAFRegionalSizeConstraintSetFieldToMatchType)
+    ]
+
+instance FromJSON WAFRegionalSizeConstraintSetFieldToMatch where
+  parseJSON (Object obj) =
+    WAFRegionalSizeConstraintSetFieldToMatch <$>
+      obj .:? "Data" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalSizeConstraintSetFieldToMatch' containing
+-- required fields as arguments.
+wafRegionalSizeConstraintSetFieldToMatch
+  :: Val Text -- ^ 'wafrscsftmType'
+  -> WAFRegionalSizeConstraintSetFieldToMatch
+wafRegionalSizeConstraintSetFieldToMatch typearg =
+  WAFRegionalSizeConstraintSetFieldToMatch
+  { _wAFRegionalSizeConstraintSetFieldToMatchData = Nothing
+  , _wAFRegionalSizeConstraintSetFieldToMatchType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-sizeconstraintset-fieldtomatch.html#cfn-wafregional-sizeconstraintset-fieldtomatch-data
+wafrscsftmData :: Lens' WAFRegionalSizeConstraintSetFieldToMatch (Maybe (Val Text))
+wafrscsftmData = lens _wAFRegionalSizeConstraintSetFieldToMatchData (\s a -> s { _wAFRegionalSizeConstraintSetFieldToMatchData = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-sizeconstraintset-fieldtomatch.html#cfn-wafregional-sizeconstraintset-fieldtomatch-type
+wafrscsftmType :: Lens' WAFRegionalSizeConstraintSetFieldToMatch (Val Text)
+wafrscsftmType = lens _wAFRegionalSizeConstraintSetFieldToMatchType (\s a -> s { _wAFRegionalSizeConstraintSetFieldToMatchType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFRegionalSizeConstraintSetSizeConstraint.hs b/library-gen/Stratosphere/ResourceProperties/WAFRegionalSizeConstraintSetSizeConstraint.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFRegionalSizeConstraintSetSizeConstraint.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-sizeconstraintset-sizeconstraint.html
+
+module Stratosphere.ResourceProperties.WAFRegionalSizeConstraintSetSizeConstraint where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFRegionalSizeConstraintSetFieldToMatch
+
+-- | Full data type definition for WAFRegionalSizeConstraintSetSizeConstraint.
+-- See 'wafRegionalSizeConstraintSetSizeConstraint' for a more convenient
+-- constructor.
+data WAFRegionalSizeConstraintSetSizeConstraint =
+  WAFRegionalSizeConstraintSetSizeConstraint
+  { _wAFRegionalSizeConstraintSetSizeConstraintComparisonOperator :: Val Text
+  , _wAFRegionalSizeConstraintSetSizeConstraintFieldToMatch :: WAFRegionalSizeConstraintSetFieldToMatch
+  , _wAFRegionalSizeConstraintSetSizeConstraintSize :: Val Integer'
+  , _wAFRegionalSizeConstraintSetSizeConstraintTextTransformation :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalSizeConstraintSetSizeConstraint where
+  toJSON WAFRegionalSizeConstraintSetSizeConstraint{..} =
+    object $
+    catMaybes
+    [ Just ("ComparisonOperator" .= _wAFRegionalSizeConstraintSetSizeConstraintComparisonOperator)
+    , Just ("FieldToMatch" .= _wAFRegionalSizeConstraintSetSizeConstraintFieldToMatch)
+    , Just ("Size" .= _wAFRegionalSizeConstraintSetSizeConstraintSize)
+    , Just ("TextTransformation" .= _wAFRegionalSizeConstraintSetSizeConstraintTextTransformation)
+    ]
+
+instance FromJSON WAFRegionalSizeConstraintSetSizeConstraint where
+  parseJSON (Object obj) =
+    WAFRegionalSizeConstraintSetSizeConstraint <$>
+      obj .: "ComparisonOperator" <*>
+      obj .: "FieldToMatch" <*>
+      obj .: "Size" <*>
+      obj .: "TextTransformation"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalSizeConstraintSetSizeConstraint' containing
+-- required fields as arguments.
+wafRegionalSizeConstraintSetSizeConstraint
+  :: Val Text -- ^ 'wafrscsscComparisonOperator'
+  -> WAFRegionalSizeConstraintSetFieldToMatch -- ^ 'wafrscsscFieldToMatch'
+  -> Val Integer' -- ^ 'wafrscsscSize'
+  -> Val Text -- ^ 'wafrscsscTextTransformation'
+  -> WAFRegionalSizeConstraintSetSizeConstraint
+wafRegionalSizeConstraintSetSizeConstraint comparisonOperatorarg fieldToMatcharg sizearg textTransformationarg =
+  WAFRegionalSizeConstraintSetSizeConstraint
+  { _wAFRegionalSizeConstraintSetSizeConstraintComparisonOperator = comparisonOperatorarg
+  , _wAFRegionalSizeConstraintSetSizeConstraintFieldToMatch = fieldToMatcharg
+  , _wAFRegionalSizeConstraintSetSizeConstraintSize = sizearg
+  , _wAFRegionalSizeConstraintSetSizeConstraintTextTransformation = textTransformationarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-sizeconstraintset-sizeconstraint.html#cfn-wafregional-sizeconstraintset-sizeconstraint-comparisonoperator
+wafrscsscComparisonOperator :: Lens' WAFRegionalSizeConstraintSetSizeConstraint (Val Text)
+wafrscsscComparisonOperator = lens _wAFRegionalSizeConstraintSetSizeConstraintComparisonOperator (\s a -> s { _wAFRegionalSizeConstraintSetSizeConstraintComparisonOperator = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-sizeconstraintset-sizeconstraint.html#cfn-wafregional-sizeconstraintset-sizeconstraint-fieldtomatch
+wafrscsscFieldToMatch :: Lens' WAFRegionalSizeConstraintSetSizeConstraint WAFRegionalSizeConstraintSetFieldToMatch
+wafrscsscFieldToMatch = lens _wAFRegionalSizeConstraintSetSizeConstraintFieldToMatch (\s a -> s { _wAFRegionalSizeConstraintSetSizeConstraintFieldToMatch = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-sizeconstraintset-sizeconstraint.html#cfn-wafregional-sizeconstraintset-sizeconstraint-size
+wafrscsscSize :: Lens' WAFRegionalSizeConstraintSetSizeConstraint (Val Integer')
+wafrscsscSize = lens _wAFRegionalSizeConstraintSetSizeConstraintSize (\s a -> s { _wAFRegionalSizeConstraintSetSizeConstraintSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-sizeconstraintset-sizeconstraint.html#cfn-wafregional-sizeconstraintset-sizeconstraint-texttransformation
+wafrscsscTextTransformation :: Lens' WAFRegionalSizeConstraintSetSizeConstraint (Val Text)
+wafrscsscTextTransformation = lens _wAFRegionalSizeConstraintSetSizeConstraintTextTransformation (\s a -> s { _wAFRegionalSizeConstraintSetSizeConstraintTextTransformation = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFRegionalSqlInjectionMatchSetFieldToMatch.hs b/library-gen/Stratosphere/ResourceProperties/WAFRegionalSqlInjectionMatchSetFieldToMatch.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFRegionalSqlInjectionMatchSetFieldToMatch.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-sqlinjectionmatchset-fieldtomatch.html
+
+module Stratosphere.ResourceProperties.WAFRegionalSqlInjectionMatchSetFieldToMatch where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for
+-- WAFRegionalSqlInjectionMatchSetFieldToMatch. See
+-- 'wafRegionalSqlInjectionMatchSetFieldToMatch' for a more convenient
+-- constructor.
+data WAFRegionalSqlInjectionMatchSetFieldToMatch =
+  WAFRegionalSqlInjectionMatchSetFieldToMatch
+  { _wAFRegionalSqlInjectionMatchSetFieldToMatchData :: Maybe (Val Text)
+  , _wAFRegionalSqlInjectionMatchSetFieldToMatchType :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalSqlInjectionMatchSetFieldToMatch where
+  toJSON WAFRegionalSqlInjectionMatchSetFieldToMatch{..} =
+    object $
+    catMaybes
+    [ ("Data" .=) <$> _wAFRegionalSqlInjectionMatchSetFieldToMatchData
+    , Just ("Type" .= _wAFRegionalSqlInjectionMatchSetFieldToMatchType)
+    ]
+
+instance FromJSON WAFRegionalSqlInjectionMatchSetFieldToMatch where
+  parseJSON (Object obj) =
+    WAFRegionalSqlInjectionMatchSetFieldToMatch <$>
+      obj .:? "Data" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalSqlInjectionMatchSetFieldToMatch' containing
+-- required fields as arguments.
+wafRegionalSqlInjectionMatchSetFieldToMatch
+  :: Val Text -- ^ 'wafrsimsftmType'
+  -> WAFRegionalSqlInjectionMatchSetFieldToMatch
+wafRegionalSqlInjectionMatchSetFieldToMatch typearg =
+  WAFRegionalSqlInjectionMatchSetFieldToMatch
+  { _wAFRegionalSqlInjectionMatchSetFieldToMatchData = Nothing
+  , _wAFRegionalSqlInjectionMatchSetFieldToMatchType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-sqlinjectionmatchset-fieldtomatch.html#cfn-wafregional-sqlinjectionmatchset-fieldtomatch-data
+wafrsimsftmData :: Lens' WAFRegionalSqlInjectionMatchSetFieldToMatch (Maybe (Val Text))
+wafrsimsftmData = lens _wAFRegionalSqlInjectionMatchSetFieldToMatchData (\s a -> s { _wAFRegionalSqlInjectionMatchSetFieldToMatchData = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-sqlinjectionmatchset-fieldtomatch.html#cfn-wafregional-sqlinjectionmatchset-fieldtomatch-type
+wafrsimsftmType :: Lens' WAFRegionalSqlInjectionMatchSetFieldToMatch (Val Text)
+wafrsimsftmType = lens _wAFRegionalSqlInjectionMatchSetFieldToMatchType (\s a -> s { _wAFRegionalSqlInjectionMatchSetFieldToMatchType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple.hs b/library-gen/Stratosphere/ResourceProperties/WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-sqlinjectionmatchset-sqlinjectionmatchtuple.html
+
+module Stratosphere.ResourceProperties.WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFRegionalSqlInjectionMatchSetFieldToMatch
+
+-- | Full data type definition for
+-- WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple. See
+-- 'wafRegionalSqlInjectionMatchSetSqlInjectionMatchTuple' for a more
+-- convenient constructor.
+data WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple =
+  WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple
+  { _wAFRegionalSqlInjectionMatchSetSqlInjectionMatchTupleFieldToMatch :: WAFRegionalSqlInjectionMatchSetFieldToMatch
+  , _wAFRegionalSqlInjectionMatchSetSqlInjectionMatchTupleTextTransformation :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple where
+  toJSON WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple{..} =
+    object $
+    catMaybes
+    [ Just ("FieldToMatch" .= _wAFRegionalSqlInjectionMatchSetSqlInjectionMatchTupleFieldToMatch)
+    , Just ("TextTransformation" .= _wAFRegionalSqlInjectionMatchSetSqlInjectionMatchTupleTextTransformation)
+    ]
+
+instance FromJSON WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple where
+  parseJSON (Object obj) =
+    WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple <$>
+      obj .: "FieldToMatch" <*>
+      obj .: "TextTransformation"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple'
+-- containing required fields as arguments.
+wafRegionalSqlInjectionMatchSetSqlInjectionMatchTuple
+  :: WAFRegionalSqlInjectionMatchSetFieldToMatch -- ^ 'wafrsimssimtFieldToMatch'
+  -> Val Text -- ^ 'wafrsimssimtTextTransformation'
+  -> WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple
+wafRegionalSqlInjectionMatchSetSqlInjectionMatchTuple fieldToMatcharg textTransformationarg =
+  WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple
+  { _wAFRegionalSqlInjectionMatchSetSqlInjectionMatchTupleFieldToMatch = fieldToMatcharg
+  , _wAFRegionalSqlInjectionMatchSetSqlInjectionMatchTupleTextTransformation = textTransformationarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-sqlinjectionmatchset-sqlinjectionmatchtuple.html#cfn-wafregional-sqlinjectionmatchset-sqlinjectionmatchtuple-fieldtomatch
+wafrsimssimtFieldToMatch :: Lens' WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple WAFRegionalSqlInjectionMatchSetFieldToMatch
+wafrsimssimtFieldToMatch = lens _wAFRegionalSqlInjectionMatchSetSqlInjectionMatchTupleFieldToMatch (\s a -> s { _wAFRegionalSqlInjectionMatchSetSqlInjectionMatchTupleFieldToMatch = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-sqlinjectionmatchset-sqlinjectionmatchtuple.html#cfn-wafregional-sqlinjectionmatchset-sqlinjectionmatchtuple-texttransformation
+wafrsimssimtTextTransformation :: Lens' WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple (Val Text)
+wafrsimssimtTextTransformation = lens _wAFRegionalSqlInjectionMatchSetSqlInjectionMatchTupleTextTransformation (\s a -> s { _wAFRegionalSqlInjectionMatchSetSqlInjectionMatchTupleTextTransformation = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFRegionalWebACLAction.hs b/library-gen/Stratosphere/ResourceProperties/WAFRegionalWebACLAction.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFRegionalWebACLAction.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-webacl-action.html
+
+module Stratosphere.ResourceProperties.WAFRegionalWebACLAction where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for WAFRegionalWebACLAction. See
+-- 'wafRegionalWebACLAction' for a more convenient constructor.
+data WAFRegionalWebACLAction =
+  WAFRegionalWebACLAction
+  { _wAFRegionalWebACLActionType :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalWebACLAction where
+  toJSON WAFRegionalWebACLAction{..} =
+    object $
+    catMaybes
+    [ Just ("Type" .= _wAFRegionalWebACLActionType)
+    ]
+
+instance FromJSON WAFRegionalWebACLAction where
+  parseJSON (Object obj) =
+    WAFRegionalWebACLAction <$>
+      obj .: "Type"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalWebACLAction' containing required fields as
+-- arguments.
+wafRegionalWebACLAction
+  :: Val Text -- ^ 'wafrwaclaType'
+  -> WAFRegionalWebACLAction
+wafRegionalWebACLAction typearg =
+  WAFRegionalWebACLAction
+  { _wAFRegionalWebACLActionType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-webacl-action.html#cfn-wafregional-webacl-action-type
+wafrwaclaType :: Lens' WAFRegionalWebACLAction (Val Text)
+wafrwaclaType = lens _wAFRegionalWebACLActionType (\s a -> s { _wAFRegionalWebACLActionType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFRegionalWebACLRule.hs b/library-gen/Stratosphere/ResourceProperties/WAFRegionalWebACLRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFRegionalWebACLRule.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-webacl-rule.html
+
+module Stratosphere.ResourceProperties.WAFRegionalWebACLRule where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFRegionalWebACLAction
+
+-- | Full data type definition for WAFRegionalWebACLRule. See
+-- 'wafRegionalWebACLRule' for a more convenient constructor.
+data WAFRegionalWebACLRule =
+  WAFRegionalWebACLRule
+  { _wAFRegionalWebACLRuleAction :: WAFRegionalWebACLAction
+  , _wAFRegionalWebACLRulePriority :: Val Integer'
+  , _wAFRegionalWebACLRuleRuleId :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalWebACLRule where
+  toJSON WAFRegionalWebACLRule{..} =
+    object $
+    catMaybes
+    [ Just ("Action" .= _wAFRegionalWebACLRuleAction)
+    , Just ("Priority" .= _wAFRegionalWebACLRulePriority)
+    , Just ("RuleId" .= _wAFRegionalWebACLRuleRuleId)
+    ]
+
+instance FromJSON WAFRegionalWebACLRule where
+  parseJSON (Object obj) =
+    WAFRegionalWebACLRule <$>
+      obj .: "Action" <*>
+      obj .: "Priority" <*>
+      obj .: "RuleId"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalWebACLRule' containing required fields as
+-- arguments.
+wafRegionalWebACLRule
+  :: WAFRegionalWebACLAction -- ^ 'wafrwaclrAction'
+  -> Val Integer' -- ^ 'wafrwaclrPriority'
+  -> Val Text -- ^ 'wafrwaclrRuleId'
+  -> WAFRegionalWebACLRule
+wafRegionalWebACLRule actionarg priorityarg ruleIdarg =
+  WAFRegionalWebACLRule
+  { _wAFRegionalWebACLRuleAction = actionarg
+  , _wAFRegionalWebACLRulePriority = priorityarg
+  , _wAFRegionalWebACLRuleRuleId = ruleIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-webacl-rule.html#cfn-wafregional-webacl-rule-action
+wafrwaclrAction :: Lens' WAFRegionalWebACLRule WAFRegionalWebACLAction
+wafrwaclrAction = lens _wAFRegionalWebACLRuleAction (\s a -> s { _wAFRegionalWebACLRuleAction = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-webacl-rule.html#cfn-wafregional-webacl-rule-priority
+wafrwaclrPriority :: Lens' WAFRegionalWebACLRule (Val Integer')
+wafrwaclrPriority = lens _wAFRegionalWebACLRulePriority (\s a -> s { _wAFRegionalWebACLRulePriority = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-webacl-rule.html#cfn-wafregional-webacl-rule-ruleid
+wafrwaclrRuleId :: Lens' WAFRegionalWebACLRule (Val Text)
+wafrwaclrRuleId = lens _wAFRegionalWebACLRuleRuleId (\s a -> s { _wAFRegionalWebACLRuleRuleId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFRegionalXssMatchSetFieldToMatch.hs b/library-gen/Stratosphere/ResourceProperties/WAFRegionalXssMatchSetFieldToMatch.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFRegionalXssMatchSetFieldToMatch.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-xssmatchset-fieldtomatch.html
+
+module Stratosphere.ResourceProperties.WAFRegionalXssMatchSetFieldToMatch where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for WAFRegionalXssMatchSetFieldToMatch. See
+-- 'wafRegionalXssMatchSetFieldToMatch' for a more convenient constructor.
+data WAFRegionalXssMatchSetFieldToMatch =
+  WAFRegionalXssMatchSetFieldToMatch
+  { _wAFRegionalXssMatchSetFieldToMatchData :: Maybe (Val Text)
+  , _wAFRegionalXssMatchSetFieldToMatchType :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalXssMatchSetFieldToMatch where
+  toJSON WAFRegionalXssMatchSetFieldToMatch{..} =
+    object $
+    catMaybes
+    [ ("Data" .=) <$> _wAFRegionalXssMatchSetFieldToMatchData
+    , Just ("Type" .= _wAFRegionalXssMatchSetFieldToMatchType)
+    ]
+
+instance FromJSON WAFRegionalXssMatchSetFieldToMatch where
+  parseJSON (Object obj) =
+    WAFRegionalXssMatchSetFieldToMatch <$>
+      obj .:? "Data" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalXssMatchSetFieldToMatch' containing required
+-- fields as arguments.
+wafRegionalXssMatchSetFieldToMatch
+  :: Val Text -- ^ 'wafrxmsftmType'
+  -> WAFRegionalXssMatchSetFieldToMatch
+wafRegionalXssMatchSetFieldToMatch typearg =
+  WAFRegionalXssMatchSetFieldToMatch
+  { _wAFRegionalXssMatchSetFieldToMatchData = Nothing
+  , _wAFRegionalXssMatchSetFieldToMatchType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-xssmatchset-fieldtomatch.html#cfn-wafregional-xssmatchset-fieldtomatch-data
+wafrxmsftmData :: Lens' WAFRegionalXssMatchSetFieldToMatch (Maybe (Val Text))
+wafrxmsftmData = lens _wAFRegionalXssMatchSetFieldToMatchData (\s a -> s { _wAFRegionalXssMatchSetFieldToMatchData = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-xssmatchset-fieldtomatch.html#cfn-wafregional-xssmatchset-fieldtomatch-type
+wafrxmsftmType :: Lens' WAFRegionalXssMatchSetFieldToMatch (Val Text)
+wafrxmsftmType = lens _wAFRegionalXssMatchSetFieldToMatchType (\s a -> s { _wAFRegionalXssMatchSetFieldToMatchType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/WAFRegionalXssMatchSetXssMatchTuple.hs b/library-gen/Stratosphere/ResourceProperties/WAFRegionalXssMatchSetXssMatchTuple.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/WAFRegionalXssMatchSetXssMatchTuple.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-xssmatchset-xssmatchtuple.html
+
+module Stratosphere.ResourceProperties.WAFRegionalXssMatchSetXssMatchTuple where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFRegionalXssMatchSetFieldToMatch
+
+-- | Full data type definition for WAFRegionalXssMatchSetXssMatchTuple. See
+-- 'wafRegionalXssMatchSetXssMatchTuple' for a more convenient constructor.
+data WAFRegionalXssMatchSetXssMatchTuple =
+  WAFRegionalXssMatchSetXssMatchTuple
+  { _wAFRegionalXssMatchSetXssMatchTupleFieldToMatch :: WAFRegionalXssMatchSetFieldToMatch
+  , _wAFRegionalXssMatchSetXssMatchTupleTextTransformation :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalXssMatchSetXssMatchTuple where
+  toJSON WAFRegionalXssMatchSetXssMatchTuple{..} =
+    object $
+    catMaybes
+    [ Just ("FieldToMatch" .= _wAFRegionalXssMatchSetXssMatchTupleFieldToMatch)
+    , Just ("TextTransformation" .= _wAFRegionalXssMatchSetXssMatchTupleTextTransformation)
+    ]
+
+instance FromJSON WAFRegionalXssMatchSetXssMatchTuple where
+  parseJSON (Object obj) =
+    WAFRegionalXssMatchSetXssMatchTuple <$>
+      obj .: "FieldToMatch" <*>
+      obj .: "TextTransformation"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalXssMatchSetXssMatchTuple' containing required
+-- fields as arguments.
+wafRegionalXssMatchSetXssMatchTuple
+  :: WAFRegionalXssMatchSetFieldToMatch -- ^ 'wafrxmsxmtFieldToMatch'
+  -> Val Text -- ^ 'wafrxmsxmtTextTransformation'
+  -> WAFRegionalXssMatchSetXssMatchTuple
+wafRegionalXssMatchSetXssMatchTuple fieldToMatcharg textTransformationarg =
+  WAFRegionalXssMatchSetXssMatchTuple
+  { _wAFRegionalXssMatchSetXssMatchTupleFieldToMatch = fieldToMatcharg
+  , _wAFRegionalXssMatchSetXssMatchTupleTextTransformation = textTransformationarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-xssmatchset-xssmatchtuple.html#cfn-wafregional-xssmatchset-xssmatchtuple-fieldtomatch
+wafrxmsxmtFieldToMatch :: Lens' WAFRegionalXssMatchSetXssMatchTuple WAFRegionalXssMatchSetFieldToMatch
+wafrxmsxmtFieldToMatch = lens _wAFRegionalXssMatchSetXssMatchTupleFieldToMatch (\s a -> s { _wAFRegionalXssMatchSetXssMatchTupleFieldToMatch = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-xssmatchset-xssmatchtuple.html#cfn-wafregional-xssmatchset-xssmatchtuple-texttransformation
+wafrxmsxmtTextTransformation :: Lens' WAFRegionalXssMatchSetXssMatchTuple (Val Text)
+wafrxmsxmtTextTransformation = lens _wAFRegionalXssMatchSetXssMatchTupleTextTransformation (\s a -> s { _wAFRegionalXssMatchSetXssMatchTupleTextTransformation = a })
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
@@ -10,7 +10,7 @@
 {-# LANGUAGE TypeFamilies #-}
 
 #if MIN_VERSION_GLASGOW_HASKELL(8,0,1,0)
-{-# OPTIONS_GHC -fmax-pmcheck-iterations=10000000 #-}
+{-# OPTIONS_GHC -fmax-pmcheck-iterations=20000000 #-}
 #endif
 
 -- | See:
@@ -79,6 +79,13 @@
 import Stratosphere.Resources.CodeDeployDeploymentGroup as X
 import Stratosphere.Resources.CodePipelineCustomActionType as X
 import Stratosphere.Resources.CodePipelinePipeline as X
+import Stratosphere.Resources.CognitoIdentityPool as X
+import Stratosphere.Resources.CognitoIdentityPoolRoleAttachment as X
+import Stratosphere.Resources.CognitoUserPool as X
+import Stratosphere.Resources.CognitoUserPoolClient as X
+import Stratosphere.Resources.CognitoUserPoolGroup as X
+import Stratosphere.Resources.CognitoUserPoolUser as X
+import Stratosphere.Resources.CognitoUserPoolUserToGroupAttachment as X
 import Stratosphere.Resources.ConfigConfigRule as X
 import Stratosphere.Resources.ConfigConfigurationRecorder as X
 import Stratosphere.Resources.ConfigDeliveryChannel as X
@@ -130,6 +137,7 @@
 import Stratosphere.Resources.EFSMountTarget as X
 import Stratosphere.Resources.EMRCluster as X
 import Stratosphere.Resources.EMRInstanceGroupConfig as X
+import Stratosphere.Resources.EMRSecurityConfiguration as X
 import Stratosphere.Resources.EMRStep as X
 import Stratosphere.Resources.ElastiCacheCacheCluster as X
 import Stratosphere.Resources.ElastiCacheParameterGroup as X
@@ -214,6 +222,9 @@
 import Stratosphere.Resources.SQSQueuePolicy as X
 import Stratosphere.Resources.SSMAssociation as X
 import Stratosphere.Resources.SSMDocument as X
+import Stratosphere.Resources.SSMParameter as X
+import Stratosphere.Resources.StepFunctionsActivity as X
+import Stratosphere.Resources.StepFunctionsStateMachine as X
 import Stratosphere.Resources.WAFByteMatchSet as X
 import Stratosphere.Resources.WAFIPSet as X
 import Stratosphere.Resources.WAFRule as X
@@ -221,6 +232,14 @@
 import Stratosphere.Resources.WAFSqlInjectionMatchSet as X
 import Stratosphere.Resources.WAFWebACL as X
 import Stratosphere.Resources.WAFXssMatchSet as X
+import Stratosphere.Resources.WAFRegionalByteMatchSet as X
+import Stratosphere.Resources.WAFRegionalIPSet as X
+import Stratosphere.Resources.WAFRegionalRule as X
+import Stratosphere.Resources.WAFRegionalSizeConstraintSet as X
+import Stratosphere.Resources.WAFRegionalSqlInjectionMatchSet as X
+import Stratosphere.Resources.WAFRegionalWebACL as X
+import Stratosphere.Resources.WAFRegionalWebACLAssociation as X
+import Stratosphere.Resources.WAFRegionalXssMatchSet as X
 import Stratosphere.Resources.WorkSpacesWorkspace as X
 import Stratosphere.ResourceProperties.ApiGatewayApiKeyStageKey as X
 import Stratosphere.ResourceProperties.ApiGatewayDeploymentMethodSetting as X
@@ -264,12 +283,15 @@
 import Stratosphere.ResourceProperties.CodeBuildProjectSourceAuth as X
 import Stratosphere.ResourceProperties.CodeCommitRepositoryRepositoryTrigger as X
 import Stratosphere.ResourceProperties.CodeDeployDeploymentConfigMinimumHealthyHosts as X
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupAlarm as X
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupAlarmConfiguration as X
 import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupDeployment as X
 import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupEC2TagFilter as X
 import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupGitHubLocation as X
 import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupRevisionLocation as X
 import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupS3Location as X
 import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupTagFilter as X
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupTriggerConfig as X
 import Stratosphere.ResourceProperties.CodePipelineCustomActionTypeArtifactDetails as X
 import Stratosphere.ResourceProperties.CodePipelineCustomActionTypeConfigurationProperties as X
 import Stratosphere.ResourceProperties.CodePipelineCustomActionTypeSettings as X
@@ -282,6 +304,24 @@
 import Stratosphere.ResourceProperties.CodePipelinePipelineOutputArtifact as X
 import Stratosphere.ResourceProperties.CodePipelinePipelineStageDeclaration as X
 import Stratosphere.ResourceProperties.CodePipelinePipelineStageTransition as X
+import Stratosphere.ResourceProperties.CognitoIdentityPoolCognitoIdentityProvider as X
+import Stratosphere.ResourceProperties.CognitoIdentityPoolCognitoStreams as X
+import Stratosphere.ResourceProperties.CognitoIdentityPoolPushSync as X
+import Stratosphere.ResourceProperties.CognitoIdentityPoolRoleAttachmentMappingRule as X
+import Stratosphere.ResourceProperties.CognitoIdentityPoolRoleAttachmentRoleMapping as X
+import Stratosphere.ResourceProperties.CognitoIdentityPoolRoleAttachmentRulesConfigurationType as X
+import Stratosphere.ResourceProperties.CognitoUserPoolAdminCreateUserConfig as X
+import Stratosphere.ResourceProperties.CognitoUserPoolDeviceConfiguration as X
+import Stratosphere.ResourceProperties.CognitoUserPoolEmailConfiguration as X
+import Stratosphere.ResourceProperties.CognitoUserPoolInviteMessageTemplate as X
+import Stratosphere.ResourceProperties.CognitoUserPoolLambdaConfig as X
+import Stratosphere.ResourceProperties.CognitoUserPoolNumberAttributeConstraints as X
+import Stratosphere.ResourceProperties.CognitoUserPoolPasswordPolicy as X
+import Stratosphere.ResourceProperties.CognitoUserPoolPolicies as X
+import Stratosphere.ResourceProperties.CognitoUserPoolSchemaAttribute as X
+import Stratosphere.ResourceProperties.CognitoUserPoolSmsConfiguration as X
+import Stratosphere.ResourceProperties.CognitoUserPoolStringAttributeConstraints as X
+import Stratosphere.ResourceProperties.CognitoUserPoolUserAttributeType as X
 import Stratosphere.ResourceProperties.ConfigConfigRuleScope as X
 import Stratosphere.ResourceProperties.ConfigConfigRuleSource as X
 import Stratosphere.ResourceProperties.ConfigConfigRuleSourceDetail as X
@@ -316,19 +356,21 @@
 import Stratosphere.ResourceProperties.EC2NetworkInterfaceInstanceIpv6Address as X
 import Stratosphere.ResourceProperties.EC2NetworkInterfacePrivateIpAddressSpecification as X
 import Stratosphere.ResourceProperties.EC2SecurityGroupRule as X
-import Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMappings as X
-import Stratosphere.ResourceProperties.EC2SpotFleetEbs as X
-import Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfile as X
+import Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMapping as X
+import Stratosphere.ResourceProperties.EC2SpotFleetEbsBlockDevice as X
+import Stratosphere.ResourceProperties.EC2SpotFleetGroupIdentifier as X
+import Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfileSpecification as X
 import Stratosphere.ResourceProperties.EC2SpotFleetInstanceIpv6Address as X
-import Stratosphere.ResourceProperties.EC2SpotFleetLaunchSpecifications as X
-import Stratosphere.ResourceProperties.EC2SpotFleetMonitoring as X
-import Stratosphere.ResourceProperties.EC2SpotFleetNetworkInterfaces as X
-import Stratosphere.ResourceProperties.EC2SpotFleetPlacement as X
-import Stratosphere.ResourceProperties.EC2SpotFleetPrivateIpAddresses as X
-import Stratosphere.ResourceProperties.EC2SpotFleetSecurityGroups as X
+import Stratosphere.ResourceProperties.EC2SpotFleetInstanceNetworkInterfaceSpecification as X
+import Stratosphere.ResourceProperties.EC2SpotFleetPrivateIpAddressSpecification as X
+import Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetLaunchSpecification as X
+import Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetMonitoring as X
 import Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetRequestConfigData as X
+import Stratosphere.ResourceProperties.EC2SpotFleetSpotPlacement as X
 import Stratosphere.ResourceProperties.ECSServiceDeploymentConfiguration as X
 import Stratosphere.ResourceProperties.ECSServiceLoadBalancer as X
+import Stratosphere.ResourceProperties.ECSServicePlacementConstraint as X
+import Stratosphere.ResourceProperties.ECSServicePlacementStrategy as X
 import Stratosphere.ResourceProperties.ECSTaskDefinitionContainerDefinition as X
 import Stratosphere.ResourceProperties.ECSTaskDefinitionHostEntry as X
 import Stratosphere.ResourceProperties.ECSTaskDefinitionHostVolumeProperties as X
@@ -336,23 +378,40 @@
 import Stratosphere.ResourceProperties.ECSTaskDefinitionLogConfiguration as X
 import Stratosphere.ResourceProperties.ECSTaskDefinitionMountPoint as X
 import Stratosphere.ResourceProperties.ECSTaskDefinitionPortMapping as X
+import Stratosphere.ResourceProperties.ECSTaskDefinitionTaskDefinitionPlacementConstraint as X
 import Stratosphere.ResourceProperties.ECSTaskDefinitionUlimit as X
 import Stratosphere.ResourceProperties.ECSTaskDefinitionVolume as X
 import Stratosphere.ResourceProperties.ECSTaskDefinitionVolumeFrom as X
 import Stratosphere.ResourceProperties.EFSFileSystemElasticFileSystemTag as X
 import Stratosphere.ResourceProperties.EMRClusterApplication as X
+import Stratosphere.ResourceProperties.EMRClusterAutoScalingPolicy as X
 import Stratosphere.ResourceProperties.EMRClusterBootstrapActionConfig as X
+import Stratosphere.ResourceProperties.EMRClusterCloudWatchAlarmDefinition as X
 import Stratosphere.ResourceProperties.EMRClusterConfiguration as X
 import Stratosphere.ResourceProperties.EMRClusterEbsBlockDeviceConfig as X
 import Stratosphere.ResourceProperties.EMRClusterEbsConfiguration as X
 import Stratosphere.ResourceProperties.EMRClusterInstanceGroupConfig as X
 import Stratosphere.ResourceProperties.EMRClusterJobFlowInstancesConfig as X
+import Stratosphere.ResourceProperties.EMRClusterMetricDimension as X
 import Stratosphere.ResourceProperties.EMRClusterPlacementType as X
+import Stratosphere.ResourceProperties.EMRClusterScalingAction as X
+import Stratosphere.ResourceProperties.EMRClusterScalingConstraints as X
+import Stratosphere.ResourceProperties.EMRClusterScalingRule as X
+import Stratosphere.ResourceProperties.EMRClusterScalingTrigger as X
 import Stratosphere.ResourceProperties.EMRClusterScriptBootstrapActionConfig as X
+import Stratosphere.ResourceProperties.EMRClusterSimpleScalingPolicyConfiguration as X
 import Stratosphere.ResourceProperties.EMRClusterVolumeSpecification as X
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigAutoScalingPolicy as X
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigCloudWatchAlarmDefinition as X
 import Stratosphere.ResourceProperties.EMRInstanceGroupConfigConfiguration as X
 import Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsBlockDeviceConfig as X
 import Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsConfiguration as X
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigMetricDimension as X
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingAction as X
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingConstraints as X
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingRule as X
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingTrigger as X
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigSimpleScalingPolicyConfiguration as X
 import Stratosphere.ResourceProperties.EMRInstanceGroupConfigVolumeSpecification as X
 import Stratosphere.ResourceProperties.EMRStepHadoopJarStepConfig as X
 import Stratosphere.ResourceProperties.EMRStepKeyValue as X
@@ -416,6 +475,7 @@
 import Stratosphere.ResourceProperties.LambdaFunctionCode as X
 import Stratosphere.ResourceProperties.LambdaFunctionDeadLetterConfig as X
 import Stratosphere.ResourceProperties.LambdaFunctionEnvironment as X
+import Stratosphere.ResourceProperties.LambdaFunctionTracingConfig as X
 import Stratosphere.ResourceProperties.LambdaFunctionVpcConfig as X
 import Stratosphere.ResourceProperties.LogsMetricFilterMetricTransformation as X
 import Stratosphere.ResourceProperties.OpsWorksAppDataSource as X
@@ -489,6 +549,18 @@
 import Stratosphere.ResourceProperties.WAFWebACLWafAction as X
 import Stratosphere.ResourceProperties.WAFXssMatchSetFieldToMatch as X
 import Stratosphere.ResourceProperties.WAFXssMatchSetXssMatchTuple as X
+import Stratosphere.ResourceProperties.WAFRegionalByteMatchSetByteMatchTuple as X
+import Stratosphere.ResourceProperties.WAFRegionalByteMatchSetFieldToMatch as X
+import Stratosphere.ResourceProperties.WAFRegionalIPSetIPSetDescriptor as X
+import Stratosphere.ResourceProperties.WAFRegionalRulePredicate as X
+import Stratosphere.ResourceProperties.WAFRegionalSizeConstraintSetFieldToMatch as X
+import Stratosphere.ResourceProperties.WAFRegionalSizeConstraintSetSizeConstraint as X
+import Stratosphere.ResourceProperties.WAFRegionalSqlInjectionMatchSetFieldToMatch as X
+import Stratosphere.ResourceProperties.WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple as X
+import Stratosphere.ResourceProperties.WAFRegionalWebACLAction as X
+import Stratosphere.ResourceProperties.WAFRegionalWebACLRule as X
+import Stratosphere.ResourceProperties.WAFRegionalXssMatchSetFieldToMatch as X
+import Stratosphere.ResourceProperties.WAFRegionalXssMatchSetXssMatchTuple as X
 import Stratosphere.ResourceProperties.Tag as X
 
 import Stratosphere.ResourceAttributes.AutoScalingReplacingUpdatePolicy as X
@@ -535,6 +607,13 @@
   | CodeDeployDeploymentGroupProperties CodeDeployDeploymentGroup
   | CodePipelineCustomActionTypeProperties CodePipelineCustomActionType
   | CodePipelinePipelineProperties CodePipelinePipeline
+  | CognitoIdentityPoolProperties CognitoIdentityPool
+  | CognitoIdentityPoolRoleAttachmentProperties CognitoIdentityPoolRoleAttachment
+  | CognitoUserPoolProperties CognitoUserPool
+  | CognitoUserPoolClientProperties CognitoUserPoolClient
+  | CognitoUserPoolGroupProperties CognitoUserPoolGroup
+  | CognitoUserPoolUserProperties CognitoUserPoolUser
+  | CognitoUserPoolUserToGroupAttachmentProperties CognitoUserPoolUserToGroupAttachment
   | ConfigConfigRuleProperties ConfigConfigRule
   | ConfigConfigurationRecorderProperties ConfigConfigurationRecorder
   | ConfigDeliveryChannelProperties ConfigDeliveryChannel
@@ -586,6 +665,7 @@
   | EFSMountTargetProperties EFSMountTarget
   | EMRClusterProperties EMRCluster
   | EMRInstanceGroupConfigProperties EMRInstanceGroupConfig
+  | EMRSecurityConfigurationProperties EMRSecurityConfiguration
   | EMRStepProperties EMRStep
   | ElastiCacheCacheClusterProperties ElastiCacheCacheCluster
   | ElastiCacheParameterGroupProperties ElastiCacheParameterGroup
@@ -670,6 +750,9 @@
   | SQSQueuePolicyProperties SQSQueuePolicy
   | SSMAssociationProperties SSMAssociation
   | SSMDocumentProperties SSMDocument
+  | SSMParameterProperties SSMParameter
+  | StepFunctionsActivityProperties StepFunctionsActivity
+  | StepFunctionsStateMachineProperties StepFunctionsStateMachine
   | WAFByteMatchSetProperties WAFByteMatchSet
   | WAFIPSetProperties WAFIPSet
   | WAFRuleProperties WAFRule
@@ -677,6 +760,14 @@
   | WAFSqlInjectionMatchSetProperties WAFSqlInjectionMatchSet
   | WAFWebACLProperties WAFWebACL
   | WAFXssMatchSetProperties WAFXssMatchSet
+  | WAFRegionalByteMatchSetProperties WAFRegionalByteMatchSet
+  | WAFRegionalIPSetProperties WAFRegionalIPSet
+  | WAFRegionalRuleProperties WAFRegionalRule
+  | WAFRegionalSizeConstraintSetProperties WAFRegionalSizeConstraintSet
+  | WAFRegionalSqlInjectionMatchSetProperties WAFRegionalSqlInjectionMatchSet
+  | WAFRegionalWebACLProperties WAFRegionalWebACL
+  | WAFRegionalWebACLAssociationProperties WAFRegionalWebACLAssociation
+  | WAFRegionalXssMatchSetProperties WAFRegionalXssMatchSet
   | WorkSpacesWorkspaceProperties WorkSpacesWorkspace
 
   deriving (Show, Eq)
@@ -798,6 +889,20 @@
   [ "Type" .= ("AWS::CodePipeline::CustomActionType" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (CodePipelinePipelineProperties x) =
   [ "Type" .= ("AWS::CodePipeline::Pipeline" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CognitoIdentityPoolProperties x) =
+  [ "Type" .= ("AWS::Cognito::IdentityPool" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CognitoIdentityPoolRoleAttachmentProperties x) =
+  [ "Type" .= ("AWS::Cognito::IdentityPoolRoleAttachment" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CognitoUserPoolProperties x) =
+  [ "Type" .= ("AWS::Cognito::UserPool" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CognitoUserPoolClientProperties x) =
+  [ "Type" .= ("AWS::Cognito::UserPoolClient" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CognitoUserPoolGroupProperties x) =
+  [ "Type" .= ("AWS::Cognito::UserPoolGroup" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CognitoUserPoolUserProperties x) =
+  [ "Type" .= ("AWS::Cognito::UserPoolUser" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (CognitoUserPoolUserToGroupAttachmentProperties x) =
+  [ "Type" .= ("AWS::Cognito::UserPoolUserToGroupAttachment" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (ConfigConfigRuleProperties x) =
   [ "Type" .= ("AWS::Config::ConfigRule" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (ConfigConfigurationRecorderProperties x) =
@@ -900,6 +1005,8 @@
   [ "Type" .= ("AWS::EMR::Cluster" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EMRInstanceGroupConfigProperties x) =
   [ "Type" .= ("AWS::EMR::InstanceGroupConfig" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EMRSecurityConfigurationProperties x) =
+  [ "Type" .= ("AWS::EMR::SecurityConfiguration" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EMRStepProperties x) =
   [ "Type" .= ("AWS::EMR::Step" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (ElastiCacheCacheClusterProperties x) =
@@ -1068,6 +1175,12 @@
   [ "Type" .= ("AWS::SSM::Association" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (SSMDocumentProperties x) =
   [ "Type" .= ("AWS::SSM::Document" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (SSMParameterProperties x) =
+  [ "Type" .= ("AWS::SSM::Parameter" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (StepFunctionsActivityProperties x) =
+  [ "Type" .= ("AWS::StepFunctions::Activity" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (StepFunctionsStateMachineProperties x) =
+  [ "Type" .= ("AWS::StepFunctions::StateMachine" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (WAFByteMatchSetProperties x) =
   [ "Type" .= ("AWS::WAF::ByteMatchSet" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (WAFIPSetProperties x) =
@@ -1082,6 +1195,22 @@
   [ "Type" .= ("AWS::WAF::WebACL" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (WAFXssMatchSetProperties x) =
   [ "Type" .= ("AWS::WAF::XssMatchSet" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WAFRegionalByteMatchSetProperties x) =
+  [ "Type" .= ("AWS::WAFRegional::ByteMatchSet" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WAFRegionalIPSetProperties x) =
+  [ "Type" .= ("AWS::WAFRegional::IPSet" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WAFRegionalRuleProperties x) =
+  [ "Type" .= ("AWS::WAFRegional::Rule" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WAFRegionalSizeConstraintSetProperties x) =
+  [ "Type" .= ("AWS::WAFRegional::SizeConstraintSet" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WAFRegionalSqlInjectionMatchSetProperties x) =
+  [ "Type" .= ("AWS::WAFRegional::SqlInjectionMatchSet" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WAFRegionalWebACLProperties x) =
+  [ "Type" .= ("AWS::WAFRegional::WebACL" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WAFRegionalWebACLAssociationProperties x) =
+  [ "Type" .= ("AWS::WAFRegional::WebACLAssociation" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (WAFRegionalXssMatchSetProperties x) =
+  [ "Type" .= ("AWS::WAFRegional::XssMatchSet" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (WorkSpacesWorkspaceProperties x) =
   [ "Type" .= ("AWS::WorkSpaces::Workspace" :: String), "Properties" .= toJSON x]
 
@@ -1124,6 +1253,13 @@
          "AWS::CodeDeploy::DeploymentGroup" -> CodeDeployDeploymentGroupProperties <$> (o .: "Properties")
          "AWS::CodePipeline::CustomActionType" -> CodePipelineCustomActionTypeProperties <$> (o .: "Properties")
          "AWS::CodePipeline::Pipeline" -> CodePipelinePipelineProperties <$> (o .: "Properties")
+         "AWS::Cognito::IdentityPool" -> CognitoIdentityPoolProperties <$> (o .: "Properties")
+         "AWS::Cognito::IdentityPoolRoleAttachment" -> CognitoIdentityPoolRoleAttachmentProperties <$> (o .: "Properties")
+         "AWS::Cognito::UserPool" -> CognitoUserPoolProperties <$> (o .: "Properties")
+         "AWS::Cognito::UserPoolClient" -> CognitoUserPoolClientProperties <$> (o .: "Properties")
+         "AWS::Cognito::UserPoolGroup" -> CognitoUserPoolGroupProperties <$> (o .: "Properties")
+         "AWS::Cognito::UserPoolUser" -> CognitoUserPoolUserProperties <$> (o .: "Properties")
+         "AWS::Cognito::UserPoolUserToGroupAttachment" -> CognitoUserPoolUserToGroupAttachmentProperties <$> (o .: "Properties")
          "AWS::Config::ConfigRule" -> ConfigConfigRuleProperties <$> (o .: "Properties")
          "AWS::Config::ConfigurationRecorder" -> ConfigConfigurationRecorderProperties <$> (o .: "Properties")
          "AWS::Config::DeliveryChannel" -> ConfigDeliveryChannelProperties <$> (o .: "Properties")
@@ -1175,6 +1311,7 @@
          "AWS::EFS::MountTarget" -> EFSMountTargetProperties <$> (o .: "Properties")
          "AWS::EMR::Cluster" -> EMRClusterProperties <$> (o .: "Properties")
          "AWS::EMR::InstanceGroupConfig" -> EMRInstanceGroupConfigProperties <$> (o .: "Properties")
+         "AWS::EMR::SecurityConfiguration" -> EMRSecurityConfigurationProperties <$> (o .: "Properties")
          "AWS::EMR::Step" -> EMRStepProperties <$> (o .: "Properties")
          "AWS::ElastiCache::CacheCluster" -> ElastiCacheCacheClusterProperties <$> (o .: "Properties")
          "AWS::ElastiCache::ParameterGroup" -> ElastiCacheParameterGroupProperties <$> (o .: "Properties")
@@ -1259,6 +1396,9 @@
          "AWS::SQS::QueuePolicy" -> SQSQueuePolicyProperties <$> (o .: "Properties")
          "AWS::SSM::Association" -> SSMAssociationProperties <$> (o .: "Properties")
          "AWS::SSM::Document" -> SSMDocumentProperties <$> (o .: "Properties")
+         "AWS::SSM::Parameter" -> SSMParameterProperties <$> (o .: "Properties")
+         "AWS::StepFunctions::Activity" -> StepFunctionsActivityProperties <$> (o .: "Properties")
+         "AWS::StepFunctions::StateMachine" -> StepFunctionsStateMachineProperties <$> (o .: "Properties")
          "AWS::WAF::ByteMatchSet" -> WAFByteMatchSetProperties <$> (o .: "Properties")
          "AWS::WAF::IPSet" -> WAFIPSetProperties <$> (o .: "Properties")
          "AWS::WAF::Rule" -> WAFRuleProperties <$> (o .: "Properties")
@@ -1266,6 +1406,14 @@
          "AWS::WAF::SqlInjectionMatchSet" -> WAFSqlInjectionMatchSetProperties <$> (o .: "Properties")
          "AWS::WAF::WebACL" -> WAFWebACLProperties <$> (o .: "Properties")
          "AWS::WAF::XssMatchSet" -> WAFXssMatchSetProperties <$> (o .: "Properties")
+         "AWS::WAFRegional::ByteMatchSet" -> WAFRegionalByteMatchSetProperties <$> (o .: "Properties")
+         "AWS::WAFRegional::IPSet" -> WAFRegionalIPSetProperties <$> (o .: "Properties")
+         "AWS::WAFRegional::Rule" -> WAFRegionalRuleProperties <$> (o .: "Properties")
+         "AWS::WAFRegional::SizeConstraintSet" -> WAFRegionalSizeConstraintSetProperties <$> (o .: "Properties")
+         "AWS::WAFRegional::SqlInjectionMatchSet" -> WAFRegionalSqlInjectionMatchSetProperties <$> (o .: "Properties")
+         "AWS::WAFRegional::WebACL" -> WAFRegionalWebACLProperties <$> (o .: "Properties")
+         "AWS::WAFRegional::WebACLAssociation" -> WAFRegionalWebACLAssociationProperties <$> (o .: "Properties")
+         "AWS::WAFRegional::XssMatchSet" -> WAFRegionalXssMatchSetProperties <$> (o .: "Properties")
          "AWS::WorkSpaces::Workspace" -> WorkSpacesWorkspaceProperties <$> (o .: "Properties")
 
          _ -> fail $ "Unknown resource type: " ++ type'
diff --git a/library-gen/Stratosphere/Resources/AutoScalingLifecycleHook.hs b/library-gen/Stratosphere/Resources/AutoScalingLifecycleHook.hs
--- a/library-gen/Stratosphere/Resources/AutoScalingLifecycleHook.hs
+++ b/library-gen/Stratosphere/Resources/AutoScalingLifecycleHook.hs
@@ -23,8 +23,8 @@
   , _autoScalingLifecycleHookHeartbeatTimeout :: Maybe (Val Integer')
   , _autoScalingLifecycleHookLifecycleTransition :: Val Text
   , _autoScalingLifecycleHookNotificationMetadata :: Maybe (Val Text)
-  , _autoScalingLifecycleHookNotificationTargetARN :: Val Text
-  , _autoScalingLifecycleHookRoleARN :: Val Text
+  , _autoScalingLifecycleHookNotificationTargetARN :: Maybe (Val Text)
+  , _autoScalingLifecycleHookRoleARN :: Maybe (Val Text)
   } deriving (Show, Eq)
 
 instance ToJSON AutoScalingLifecycleHook where
@@ -36,8 +36,8 @@
     , ("HeartbeatTimeout" .=) <$> _autoScalingLifecycleHookHeartbeatTimeout
     , Just ("LifecycleTransition" .= _autoScalingLifecycleHookLifecycleTransition)
     , ("NotificationMetadata" .=) <$> _autoScalingLifecycleHookNotificationMetadata
-    , Just ("NotificationTargetARN" .= _autoScalingLifecycleHookNotificationTargetARN)
-    , Just ("RoleARN" .= _autoScalingLifecycleHookRoleARN)
+    , ("NotificationTargetARN" .=) <$> _autoScalingLifecycleHookNotificationTargetARN
+    , ("RoleARN" .=) <$> _autoScalingLifecycleHookRoleARN
     ]
 
 instance FromJSON AutoScalingLifecycleHook where
@@ -48,8 +48,8 @@
       obj .:? "HeartbeatTimeout" <*>
       obj .: "LifecycleTransition" <*>
       obj .:? "NotificationMetadata" <*>
-      obj .: "NotificationTargetARN" <*>
-      obj .: "RoleARN"
+      obj .:? "NotificationTargetARN" <*>
+      obj .:? "RoleARN"
   parseJSON _ = mempty
 
 -- | Constructor for 'AutoScalingLifecycleHook' containing required fields as
@@ -57,18 +57,16 @@
 autoScalingLifecycleHook
   :: Val Text -- ^ 'aslhAutoScalingGroupName'
   -> Val Text -- ^ 'aslhLifecycleTransition'
-  -> Val Text -- ^ 'aslhNotificationTargetARN'
-  -> Val Text -- ^ 'aslhRoleARN'
   -> AutoScalingLifecycleHook
-autoScalingLifecycleHook autoScalingGroupNamearg lifecycleTransitionarg notificationTargetARNarg roleARNarg =
+autoScalingLifecycleHook autoScalingGroupNamearg lifecycleTransitionarg =
   AutoScalingLifecycleHook
   { _autoScalingLifecycleHookAutoScalingGroupName = autoScalingGroupNamearg
   , _autoScalingLifecycleHookDefaultResult = Nothing
   , _autoScalingLifecycleHookHeartbeatTimeout = Nothing
   , _autoScalingLifecycleHookLifecycleTransition = lifecycleTransitionarg
   , _autoScalingLifecycleHookNotificationMetadata = Nothing
-  , _autoScalingLifecycleHookNotificationTargetARN = notificationTargetARNarg
-  , _autoScalingLifecycleHookRoleARN = roleARNarg
+  , _autoScalingLifecycleHookNotificationTargetARN = Nothing
+  , _autoScalingLifecycleHookRoleARN = Nothing
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html#cfn-as-lifecyclehook-autoscalinggroupname
@@ -92,9 +90,9 @@
 aslhNotificationMetadata = lens _autoScalingLifecycleHookNotificationMetadata (\s a -> s { _autoScalingLifecycleHookNotificationMetadata = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html#cfn-as-lifecyclehook-notificationtargetarn
-aslhNotificationTargetARN :: Lens' AutoScalingLifecycleHook (Val Text)
+aslhNotificationTargetARN :: Lens' AutoScalingLifecycleHook (Maybe (Val Text))
 aslhNotificationTargetARN = lens _autoScalingLifecycleHookNotificationTargetARN (\s a -> s { _autoScalingLifecycleHookNotificationTargetARN = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html#cfn-as-lifecyclehook-rolearn
-aslhRoleARN :: Lens' AutoScalingLifecycleHook (Val Text)
+aslhRoleARN :: Lens' AutoScalingLifecycleHook (Maybe (Val Text))
 aslhRoleARN = lens _autoScalingLifecycleHookRoleARN (\s a -> s { _autoScalingLifecycleHookRoleARN = a })
diff --git a/library-gen/Stratosphere/Resources/CloudWatchAlarm.hs b/library-gen/Stratosphere/Resources/CloudWatchAlarm.hs
--- a/library-gen/Stratosphere/Resources/CloudWatchAlarm.hs
+++ b/library-gen/Stratosphere/Resources/CloudWatchAlarm.hs
@@ -24,14 +24,17 @@
   , _cloudWatchAlarmAlarmName :: Maybe (Val Text)
   , _cloudWatchAlarmComparisonOperator :: Val Text
   , _cloudWatchAlarmDimensions :: Maybe [CloudWatchAlarmDimension]
+  , _cloudWatchAlarmEvaluateLowSampleCountPercentile :: Maybe (Val Text)
   , _cloudWatchAlarmEvaluationPeriods :: Val Integer'
+  , _cloudWatchAlarmExtendedStatistic :: Maybe (Val Text)
   , _cloudWatchAlarmInsufficientDataActions :: Maybe [Val Text]
   , _cloudWatchAlarmMetricName :: Val Text
   , _cloudWatchAlarmNamespace :: Val Text
   , _cloudWatchAlarmOKActions :: Maybe [Val Text]
   , _cloudWatchAlarmPeriod :: Val Integer'
-  , _cloudWatchAlarmStatistic :: Val Text
+  , _cloudWatchAlarmStatistic :: Maybe (Val Text)
   , _cloudWatchAlarmThreshold :: Val Double'
+  , _cloudWatchAlarmTreatMissingData :: Maybe (Val Text)
   , _cloudWatchAlarmUnit :: Maybe (Val Text)
   } deriving (Show, Eq)
 
@@ -45,14 +48,17 @@
     , ("AlarmName" .=) <$> _cloudWatchAlarmAlarmName
     , Just ("ComparisonOperator" .= _cloudWatchAlarmComparisonOperator)
     , ("Dimensions" .=) <$> _cloudWatchAlarmDimensions
+    , ("EvaluateLowSampleCountPercentile" .=) <$> _cloudWatchAlarmEvaluateLowSampleCountPercentile
     , Just ("EvaluationPeriods" .= _cloudWatchAlarmEvaluationPeriods)
+    , ("ExtendedStatistic" .=) <$> _cloudWatchAlarmExtendedStatistic
     , ("InsufficientDataActions" .=) <$> _cloudWatchAlarmInsufficientDataActions
     , Just ("MetricName" .= _cloudWatchAlarmMetricName)
     , Just ("Namespace" .= _cloudWatchAlarmNamespace)
     , ("OKActions" .=) <$> _cloudWatchAlarmOKActions
     , Just ("Period" .= _cloudWatchAlarmPeriod)
-    , Just ("Statistic" .= _cloudWatchAlarmStatistic)
+    , ("Statistic" .=) <$> _cloudWatchAlarmStatistic
     , Just ("Threshold" .= _cloudWatchAlarmThreshold)
+    , ("TreatMissingData" .=) <$> _cloudWatchAlarmTreatMissingData
     , ("Unit" .=) <$> _cloudWatchAlarmUnit
     ]
 
@@ -65,14 +71,17 @@
       obj .:? "AlarmName" <*>
       obj .: "ComparisonOperator" <*>
       obj .:? "Dimensions" <*>
+      obj .:? "EvaluateLowSampleCountPercentile" <*>
       obj .: "EvaluationPeriods" <*>
+      obj .:? "ExtendedStatistic" <*>
       obj .:? "InsufficientDataActions" <*>
       obj .: "MetricName" <*>
       obj .: "Namespace" <*>
       obj .:? "OKActions" <*>
       obj .: "Period" <*>
-      obj .: "Statistic" <*>
+      obj .:? "Statistic" <*>
       obj .: "Threshold" <*>
+      obj .:? "TreatMissingData" <*>
       obj .:? "Unit"
   parseJSON _ = mempty
 
@@ -84,10 +93,9 @@
   -> Val Text -- ^ 'cwaMetricName'
   -> Val Text -- ^ 'cwaNamespace'
   -> Val Integer' -- ^ 'cwaPeriod'
-  -> Val Text -- ^ 'cwaStatistic'
   -> Val Double' -- ^ 'cwaThreshold'
   -> CloudWatchAlarm
-cloudWatchAlarm comparisonOperatorarg evaluationPeriodsarg metricNamearg namespacearg periodarg statisticarg thresholdarg =
+cloudWatchAlarm comparisonOperatorarg evaluationPeriodsarg metricNamearg namespacearg periodarg thresholdarg =
   CloudWatchAlarm
   { _cloudWatchAlarmActionsEnabled = Nothing
   , _cloudWatchAlarmAlarmActions = Nothing
@@ -95,14 +103,17 @@
   , _cloudWatchAlarmAlarmName = Nothing
   , _cloudWatchAlarmComparisonOperator = comparisonOperatorarg
   , _cloudWatchAlarmDimensions = Nothing
+  , _cloudWatchAlarmEvaluateLowSampleCountPercentile = Nothing
   , _cloudWatchAlarmEvaluationPeriods = evaluationPeriodsarg
+  , _cloudWatchAlarmExtendedStatistic = Nothing
   , _cloudWatchAlarmInsufficientDataActions = Nothing
   , _cloudWatchAlarmMetricName = metricNamearg
   , _cloudWatchAlarmNamespace = namespacearg
   , _cloudWatchAlarmOKActions = Nothing
   , _cloudWatchAlarmPeriod = periodarg
-  , _cloudWatchAlarmStatistic = statisticarg
+  , _cloudWatchAlarmStatistic = Nothing
   , _cloudWatchAlarmThreshold = thresholdarg
+  , _cloudWatchAlarmTreatMissingData = Nothing
   , _cloudWatchAlarmUnit = Nothing
   }
 
@@ -130,10 +141,18 @@
 cwaDimensions :: Lens' CloudWatchAlarm (Maybe [CloudWatchAlarmDimension])
 cwaDimensions = lens _cloudWatchAlarmDimensions (\s a -> s { _cloudWatchAlarmDimensions = a })
 
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-evaluatelowsamplecountpercentile
+cwaEvaluateLowSampleCountPercentile :: Lens' CloudWatchAlarm (Maybe (Val Text))
+cwaEvaluateLowSampleCountPercentile = lens _cloudWatchAlarmEvaluateLowSampleCountPercentile (\s a -> s { _cloudWatchAlarmEvaluateLowSampleCountPercentile = a })
+
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-evaluationperiods
 cwaEvaluationPeriods :: Lens' CloudWatchAlarm (Val Integer')
 cwaEvaluationPeriods = lens _cloudWatchAlarmEvaluationPeriods (\s a -> s { _cloudWatchAlarmEvaluationPeriods = a })
 
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-extendedstatistic
+cwaExtendedStatistic :: Lens' CloudWatchAlarm (Maybe (Val Text))
+cwaExtendedStatistic = lens _cloudWatchAlarmExtendedStatistic (\s a -> s { _cloudWatchAlarmExtendedStatistic = a })
+
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-insufficientdataactions
 cwaInsufficientDataActions :: Lens' CloudWatchAlarm (Maybe [Val Text])
 cwaInsufficientDataActions = lens _cloudWatchAlarmInsufficientDataActions (\s a -> s { _cloudWatchAlarmInsufficientDataActions = a })
@@ -155,12 +174,16 @@
 cwaPeriod = lens _cloudWatchAlarmPeriod (\s a -> s { _cloudWatchAlarmPeriod = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-statistic
-cwaStatistic :: Lens' CloudWatchAlarm (Val Text)
+cwaStatistic :: Lens' CloudWatchAlarm (Maybe (Val Text))
 cwaStatistic = lens _cloudWatchAlarmStatistic (\s a -> s { _cloudWatchAlarmStatistic = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-threshold
 cwaThreshold :: Lens' CloudWatchAlarm (Val Double')
 cwaThreshold = lens _cloudWatchAlarmThreshold (\s a -> s { _cloudWatchAlarmThreshold = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-treatmissingdata
+cwaTreatMissingData :: Lens' CloudWatchAlarm (Maybe (Val Text))
+cwaTreatMissingData = lens _cloudWatchAlarmTreatMissingData (\s a -> s { _cloudWatchAlarmTreatMissingData = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-unit
 cwaUnit :: Lens' CloudWatchAlarm (Maybe (Val Text))
diff --git a/library-gen/Stratosphere/Resources/CodeDeployDeploymentGroup.hs b/library-gen/Stratosphere/Resources/CodeDeployDeploymentGroup.hs
--- a/library-gen/Stratosphere/Resources/CodeDeployDeploymentGroup.hs
+++ b/library-gen/Stratosphere/Resources/CodeDeployDeploymentGroup.hs
@@ -12,15 +12,18 @@
 import Data.Text
 
 import Stratosphere.Values
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupAlarmConfiguration
 import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupDeployment
 import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupEC2TagFilter
 import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupTagFilter
+import Stratosphere.ResourceProperties.CodeDeployDeploymentGroupTriggerConfig
 
 -- | Full data type definition for CodeDeployDeploymentGroup. See
 -- 'codeDeployDeploymentGroup' for a more convenient constructor.
 data CodeDeployDeploymentGroup =
   CodeDeployDeploymentGroup
-  { _codeDeployDeploymentGroupApplicationName :: Val Text
+  { _codeDeployDeploymentGroupAlarmConfiguration :: Maybe CodeDeployDeploymentGroupAlarmConfiguration
+  , _codeDeployDeploymentGroupApplicationName :: Val Text
   , _codeDeployDeploymentGroupAutoScalingGroups :: Maybe [Val Text]
   , _codeDeployDeploymentGroupDeployment :: Maybe CodeDeployDeploymentGroupDeployment
   , _codeDeployDeploymentGroupDeploymentConfigName :: Maybe (Val Text)
@@ -28,13 +31,15 @@
   , _codeDeployDeploymentGroupEc2TagFilters :: Maybe [CodeDeployDeploymentGroupEC2TagFilter]
   , _codeDeployDeploymentGroupOnPremisesInstanceTagFilters :: Maybe [CodeDeployDeploymentGroupTagFilter]
   , _codeDeployDeploymentGroupServiceRoleArn :: Val Text
+  , _codeDeployDeploymentGroupTriggerConfigurations :: Maybe [CodeDeployDeploymentGroupTriggerConfig]
   } deriving (Show, Eq)
 
 instance ToJSON CodeDeployDeploymentGroup where
   toJSON CodeDeployDeploymentGroup{..} =
     object $
     catMaybes
-    [ Just ("ApplicationName" .= _codeDeployDeploymentGroupApplicationName)
+    [ ("AlarmConfiguration" .=) <$> _codeDeployDeploymentGroupAlarmConfiguration
+    , Just ("ApplicationName" .= _codeDeployDeploymentGroupApplicationName)
     , ("AutoScalingGroups" .=) <$> _codeDeployDeploymentGroupAutoScalingGroups
     , ("Deployment" .=) <$> _codeDeployDeploymentGroupDeployment
     , ("DeploymentConfigName" .=) <$> _codeDeployDeploymentGroupDeploymentConfigName
@@ -42,11 +47,13 @@
     , ("Ec2TagFilters" .=) <$> _codeDeployDeploymentGroupEc2TagFilters
     , ("OnPremisesInstanceTagFilters" .=) <$> _codeDeployDeploymentGroupOnPremisesInstanceTagFilters
     , Just ("ServiceRoleArn" .= _codeDeployDeploymentGroupServiceRoleArn)
+    , ("TriggerConfigurations" .=) <$> _codeDeployDeploymentGroupTriggerConfigurations
     ]
 
 instance FromJSON CodeDeployDeploymentGroup where
   parseJSON (Object obj) =
     CodeDeployDeploymentGroup <$>
+      obj .:? "AlarmConfiguration" <*>
       obj .: "ApplicationName" <*>
       obj .:? "AutoScalingGroups" <*>
       obj .:? "Deployment" <*>
@@ -54,7 +61,8 @@
       obj .:? "DeploymentGroupName" <*>
       obj .:? "Ec2TagFilters" <*>
       obj .:? "OnPremisesInstanceTagFilters" <*>
-      obj .: "ServiceRoleArn"
+      obj .: "ServiceRoleArn" <*>
+      obj .:? "TriggerConfigurations"
   parseJSON _ = mempty
 
 -- | Constructor for 'CodeDeployDeploymentGroup' containing required fields as
@@ -65,7 +73,8 @@
   -> CodeDeployDeploymentGroup
 codeDeployDeploymentGroup applicationNamearg serviceRoleArnarg =
   CodeDeployDeploymentGroup
-  { _codeDeployDeploymentGroupApplicationName = applicationNamearg
+  { _codeDeployDeploymentGroupAlarmConfiguration = Nothing
+  , _codeDeployDeploymentGroupApplicationName = applicationNamearg
   , _codeDeployDeploymentGroupAutoScalingGroups = Nothing
   , _codeDeployDeploymentGroupDeployment = Nothing
   , _codeDeployDeploymentGroupDeploymentConfigName = Nothing
@@ -73,8 +82,13 @@
   , _codeDeployDeploymentGroupEc2TagFilters = Nothing
   , _codeDeployDeploymentGroupOnPremisesInstanceTagFilters = Nothing
   , _codeDeployDeploymentGroupServiceRoleArn = serviceRoleArnarg
+  , _codeDeployDeploymentGroupTriggerConfigurations = Nothing
   }
 
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentgroup.html#cfn-codedeploy-deploymentgroup-alarmconfiguration
+cddgAlarmConfiguration :: Lens' CodeDeployDeploymentGroup (Maybe CodeDeployDeploymentGroupAlarmConfiguration)
+cddgAlarmConfiguration = lens _codeDeployDeploymentGroupAlarmConfiguration (\s a -> s { _codeDeployDeploymentGroupAlarmConfiguration = a })
+
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentgroup.html#cfn-codedeploy-deploymentgroup-applicationname
 cddgApplicationName :: Lens' CodeDeployDeploymentGroup (Val Text)
 cddgApplicationName = lens _codeDeployDeploymentGroupApplicationName (\s a -> s { _codeDeployDeploymentGroupApplicationName = a })
@@ -106,3 +120,7 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentgroup.html#cfn-codedeploy-deploymentgroup-servicerolearn
 cddgServiceRoleArn :: Lens' CodeDeployDeploymentGroup (Val Text)
 cddgServiceRoleArn = lens _codeDeployDeploymentGroupServiceRoleArn (\s a -> s { _codeDeployDeploymentGroupServiceRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentgroup.html#cfn-codedeploy-deploymentgroup-triggerconfigurations
+cddgTriggerConfigurations :: Lens' CodeDeployDeploymentGroup (Maybe [CodeDeployDeploymentGroupTriggerConfig])
+cddgTriggerConfigurations = lens _codeDeployDeploymentGroupTriggerConfigurations (\s a -> s { _codeDeployDeploymentGroupTriggerConfigurations = a })
diff --git a/library-gen/Stratosphere/Resources/CognitoIdentityPool.hs b/library-gen/Stratosphere/Resources/CognitoIdentityPool.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CognitoIdentityPool.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html
+
+module Stratosphere.Resources.CognitoIdentityPool where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CognitoIdentityPoolCognitoIdentityProvider
+import Stratosphere.ResourceProperties.CognitoIdentityPoolCognitoStreams
+import Stratosphere.ResourceProperties.CognitoIdentityPoolPushSync
+
+-- | Full data type definition for CognitoIdentityPool. See
+-- 'cognitoIdentityPool' for a more convenient constructor.
+data CognitoIdentityPool =
+  CognitoIdentityPool
+  { _cognitoIdentityPoolAllowUnauthenticatedIdentities :: Val Bool'
+  , _cognitoIdentityPoolCognitoEvents :: Maybe Object
+  , _cognitoIdentityPoolCognitoIdentityProviders :: Maybe [CognitoIdentityPoolCognitoIdentityProvider]
+  , _cognitoIdentityPoolCognitoStreams :: Maybe CognitoIdentityPoolCognitoStreams
+  , _cognitoIdentityPoolDeveloperProviderName :: Maybe (Val Text)
+  , _cognitoIdentityPoolIdentityPoolName :: Maybe (Val Text)
+  , _cognitoIdentityPoolOpenIdConnectProviderARNs :: Maybe [Val Text]
+  , _cognitoIdentityPoolPushSync :: Maybe CognitoIdentityPoolPushSync
+  , _cognitoIdentityPoolSamlProviderARNs :: Maybe [Val Text]
+  , _cognitoIdentityPoolSupportedLoginProviders :: Maybe Object
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoIdentityPool where
+  toJSON CognitoIdentityPool{..} =
+    object $
+    catMaybes
+    [ Just ("AllowUnauthenticatedIdentities" .= _cognitoIdentityPoolAllowUnauthenticatedIdentities)
+    , ("CognitoEvents" .=) <$> _cognitoIdentityPoolCognitoEvents
+    , ("CognitoIdentityProviders" .=) <$> _cognitoIdentityPoolCognitoIdentityProviders
+    , ("CognitoStreams" .=) <$> _cognitoIdentityPoolCognitoStreams
+    , ("DeveloperProviderName" .=) <$> _cognitoIdentityPoolDeveloperProviderName
+    , ("IdentityPoolName" .=) <$> _cognitoIdentityPoolIdentityPoolName
+    , ("OpenIdConnectProviderARNs" .=) <$> _cognitoIdentityPoolOpenIdConnectProviderARNs
+    , ("PushSync" .=) <$> _cognitoIdentityPoolPushSync
+    , ("SamlProviderARNs" .=) <$> _cognitoIdentityPoolSamlProviderARNs
+    , ("SupportedLoginProviders" .=) <$> _cognitoIdentityPoolSupportedLoginProviders
+    ]
+
+instance FromJSON CognitoIdentityPool where
+  parseJSON (Object obj) =
+    CognitoIdentityPool <$>
+      obj .: "AllowUnauthenticatedIdentities" <*>
+      obj .:? "CognitoEvents" <*>
+      obj .:? "CognitoIdentityProviders" <*>
+      obj .:? "CognitoStreams" <*>
+      obj .:? "DeveloperProviderName" <*>
+      obj .:? "IdentityPoolName" <*>
+      obj .:? "OpenIdConnectProviderARNs" <*>
+      obj .:? "PushSync" <*>
+      obj .:? "SamlProviderARNs" <*>
+      obj .:? "SupportedLoginProviders"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoIdentityPool' containing required fields as
+-- arguments.
+cognitoIdentityPool
+  :: Val Bool' -- ^ 'cipAllowUnauthenticatedIdentities'
+  -> CognitoIdentityPool
+cognitoIdentityPool allowUnauthenticatedIdentitiesarg =
+  CognitoIdentityPool
+  { _cognitoIdentityPoolAllowUnauthenticatedIdentities = allowUnauthenticatedIdentitiesarg
+  , _cognitoIdentityPoolCognitoEvents = Nothing
+  , _cognitoIdentityPoolCognitoIdentityProviders = Nothing
+  , _cognitoIdentityPoolCognitoStreams = Nothing
+  , _cognitoIdentityPoolDeveloperProviderName = Nothing
+  , _cognitoIdentityPoolIdentityPoolName = Nothing
+  , _cognitoIdentityPoolOpenIdConnectProviderARNs = Nothing
+  , _cognitoIdentityPoolPushSync = Nothing
+  , _cognitoIdentityPoolSamlProviderARNs = Nothing
+  , _cognitoIdentityPoolSupportedLoginProviders = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-allowunauthenticatedidentities
+cipAllowUnauthenticatedIdentities :: Lens' CognitoIdentityPool (Val Bool')
+cipAllowUnauthenticatedIdentities = lens _cognitoIdentityPoolAllowUnauthenticatedIdentities (\s a -> s { _cognitoIdentityPoolAllowUnauthenticatedIdentities = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-cognitoevents
+cipCognitoEvents :: Lens' CognitoIdentityPool (Maybe Object)
+cipCognitoEvents = lens _cognitoIdentityPoolCognitoEvents (\s a -> s { _cognitoIdentityPoolCognitoEvents = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-cognitoidentityproviders
+cipCognitoIdentityProviders :: Lens' CognitoIdentityPool (Maybe [CognitoIdentityPoolCognitoIdentityProvider])
+cipCognitoIdentityProviders = lens _cognitoIdentityPoolCognitoIdentityProviders (\s a -> s { _cognitoIdentityPoolCognitoIdentityProviders = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-cognitostreams
+cipCognitoStreams :: Lens' CognitoIdentityPool (Maybe CognitoIdentityPoolCognitoStreams)
+cipCognitoStreams = lens _cognitoIdentityPoolCognitoStreams (\s a -> s { _cognitoIdentityPoolCognitoStreams = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-developerprovidername
+cipDeveloperProviderName :: Lens' CognitoIdentityPool (Maybe (Val Text))
+cipDeveloperProviderName = lens _cognitoIdentityPoolDeveloperProviderName (\s a -> s { _cognitoIdentityPoolDeveloperProviderName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-identitypoolname
+cipIdentityPoolName :: Lens' CognitoIdentityPool (Maybe (Val Text))
+cipIdentityPoolName = lens _cognitoIdentityPoolIdentityPoolName (\s a -> s { _cognitoIdentityPoolIdentityPoolName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-openidconnectproviderarns
+cipOpenIdConnectProviderARNs :: Lens' CognitoIdentityPool (Maybe [Val Text])
+cipOpenIdConnectProviderARNs = lens _cognitoIdentityPoolOpenIdConnectProviderARNs (\s a -> s { _cognitoIdentityPoolOpenIdConnectProviderARNs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-pushsync
+cipPushSync :: Lens' CognitoIdentityPool (Maybe CognitoIdentityPoolPushSync)
+cipPushSync = lens _cognitoIdentityPoolPushSync (\s a -> s { _cognitoIdentityPoolPushSync = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-samlproviderarns
+cipSamlProviderARNs :: Lens' CognitoIdentityPool (Maybe [Val Text])
+cipSamlProviderARNs = lens _cognitoIdentityPoolSamlProviderARNs (\s a -> s { _cognitoIdentityPoolSamlProviderARNs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypool.html#cfn-cognito-identitypool-supportedloginproviders
+cipSupportedLoginProviders :: Lens' CognitoIdentityPool (Maybe Object)
+cipSupportedLoginProviders = lens _cognitoIdentityPoolSupportedLoginProviders (\s a -> s { _cognitoIdentityPoolSupportedLoginProviders = a })
diff --git a/library-gen/Stratosphere/Resources/CognitoIdentityPoolRoleAttachment.hs b/library-gen/Stratosphere/Resources/CognitoIdentityPoolRoleAttachment.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CognitoIdentityPoolRoleAttachment.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypoolroleattachment.html
+
+module Stratosphere.Resources.CognitoIdentityPoolRoleAttachment where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoIdentityPoolRoleAttachment. See
+-- 'cognitoIdentityPoolRoleAttachment' for a more convenient constructor.
+data CognitoIdentityPoolRoleAttachment =
+  CognitoIdentityPoolRoleAttachment
+  { _cognitoIdentityPoolRoleAttachmentIdentityPoolId :: Val Text
+  , _cognitoIdentityPoolRoleAttachmentRoleMappings :: Maybe Object
+  , _cognitoIdentityPoolRoleAttachmentRoles :: Maybe Object
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoIdentityPoolRoleAttachment where
+  toJSON CognitoIdentityPoolRoleAttachment{..} =
+    object $
+    catMaybes
+    [ Just ("IdentityPoolId" .= _cognitoIdentityPoolRoleAttachmentIdentityPoolId)
+    , ("RoleMappings" .=) <$> _cognitoIdentityPoolRoleAttachmentRoleMappings
+    , ("Roles" .=) <$> _cognitoIdentityPoolRoleAttachmentRoles
+    ]
+
+instance FromJSON CognitoIdentityPoolRoleAttachment where
+  parseJSON (Object obj) =
+    CognitoIdentityPoolRoleAttachment <$>
+      obj .: "IdentityPoolId" <*>
+      obj .:? "RoleMappings" <*>
+      obj .:? "Roles"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoIdentityPoolRoleAttachment' containing required
+-- fields as arguments.
+cognitoIdentityPoolRoleAttachment
+  :: Val Text -- ^ 'cipraIdentityPoolId'
+  -> CognitoIdentityPoolRoleAttachment
+cognitoIdentityPoolRoleAttachment identityPoolIdarg =
+  CognitoIdentityPoolRoleAttachment
+  { _cognitoIdentityPoolRoleAttachmentIdentityPoolId = identityPoolIdarg
+  , _cognitoIdentityPoolRoleAttachmentRoleMappings = Nothing
+  , _cognitoIdentityPoolRoleAttachmentRoles = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypoolroleattachment.html#cfn-cognito-identitypoolroleattachment-identitypoolid
+cipraIdentityPoolId :: Lens' CognitoIdentityPoolRoleAttachment (Val Text)
+cipraIdentityPoolId = lens _cognitoIdentityPoolRoleAttachmentIdentityPoolId (\s a -> s { _cognitoIdentityPoolRoleAttachmentIdentityPoolId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypoolroleattachment.html#cfn-cognito-identitypoolroleattachment-rolemappings
+cipraRoleMappings :: Lens' CognitoIdentityPoolRoleAttachment (Maybe Object)
+cipraRoleMappings = lens _cognitoIdentityPoolRoleAttachmentRoleMappings (\s a -> s { _cognitoIdentityPoolRoleAttachmentRoleMappings = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-identitypoolroleattachment.html#cfn-cognito-identitypoolroleattachment-roles
+cipraRoles :: Lens' CognitoIdentityPoolRoleAttachment (Maybe Object)
+cipraRoles = lens _cognitoIdentityPoolRoleAttachmentRoles (\s a -> s { _cognitoIdentityPoolRoleAttachmentRoles = a })
diff --git a/library-gen/Stratosphere/Resources/CognitoUserPool.hs b/library-gen/Stratosphere/Resources/CognitoUserPool.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CognitoUserPool.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html
+
+module Stratosphere.Resources.CognitoUserPool where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CognitoUserPoolAdminCreateUserConfig
+import Stratosphere.ResourceProperties.CognitoUserPoolDeviceConfiguration
+import Stratosphere.ResourceProperties.CognitoUserPoolEmailConfiguration
+import Stratosphere.ResourceProperties.CognitoUserPoolLambdaConfig
+import Stratosphere.ResourceProperties.CognitoUserPoolPolicies
+import Stratosphere.ResourceProperties.CognitoUserPoolSchemaAttribute
+import Stratosphere.ResourceProperties.CognitoUserPoolSmsConfiguration
+
+-- | Full data type definition for CognitoUserPool. See 'cognitoUserPool' for
+-- a more convenient constructor.
+data CognitoUserPool =
+  CognitoUserPool
+  { _cognitoUserPoolAdminCreateUserConfig :: Maybe CognitoUserPoolAdminCreateUserConfig
+  , _cognitoUserPoolAliasAttributes :: Maybe [Val Text]
+  , _cognitoUserPoolAutoVerifiedAttributes :: Maybe [Val Text]
+  , _cognitoUserPoolDeviceConfiguration :: Maybe CognitoUserPoolDeviceConfiguration
+  , _cognitoUserPoolEmailConfiguration :: Maybe CognitoUserPoolEmailConfiguration
+  , _cognitoUserPoolEmailVerificationMessage :: Maybe (Val Text)
+  , _cognitoUserPoolEmailVerificationSubject :: Maybe (Val Text)
+  , _cognitoUserPoolLambdaConfig :: Maybe CognitoUserPoolLambdaConfig
+  , _cognitoUserPoolMfaConfiguration :: Maybe (Val Text)
+  , _cognitoUserPoolPolicies :: Maybe CognitoUserPoolPolicies
+  , _cognitoUserPoolSchema :: Maybe [CognitoUserPoolSchemaAttribute]
+  , _cognitoUserPoolSmsAuthenticationMessage :: Maybe (Val Text)
+  , _cognitoUserPoolSmsConfiguration :: Maybe CognitoUserPoolSmsConfiguration
+  , _cognitoUserPoolSmsVerificationMessage :: Maybe (Val Text)
+  , _cognitoUserPoolUserPoolName :: Maybe (Val Text)
+  , _cognitoUserPoolUserPoolTags :: Maybe Object
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPool where
+  toJSON CognitoUserPool{..} =
+    object $
+    catMaybes
+    [ ("AdminCreateUserConfig" .=) <$> _cognitoUserPoolAdminCreateUserConfig
+    , ("AliasAttributes" .=) <$> _cognitoUserPoolAliasAttributes
+    , ("AutoVerifiedAttributes" .=) <$> _cognitoUserPoolAutoVerifiedAttributes
+    , ("DeviceConfiguration" .=) <$> _cognitoUserPoolDeviceConfiguration
+    , ("EmailConfiguration" .=) <$> _cognitoUserPoolEmailConfiguration
+    , ("EmailVerificationMessage" .=) <$> _cognitoUserPoolEmailVerificationMessage
+    , ("EmailVerificationSubject" .=) <$> _cognitoUserPoolEmailVerificationSubject
+    , ("LambdaConfig" .=) <$> _cognitoUserPoolLambdaConfig
+    , ("MfaConfiguration" .=) <$> _cognitoUserPoolMfaConfiguration
+    , ("Policies" .=) <$> _cognitoUserPoolPolicies
+    , ("Schema" .=) <$> _cognitoUserPoolSchema
+    , ("SmsAuthenticationMessage" .=) <$> _cognitoUserPoolSmsAuthenticationMessage
+    , ("SmsConfiguration" .=) <$> _cognitoUserPoolSmsConfiguration
+    , ("SmsVerificationMessage" .=) <$> _cognitoUserPoolSmsVerificationMessage
+    , ("UserPoolName" .=) <$> _cognitoUserPoolUserPoolName
+    , ("UserPoolTags" .=) <$> _cognitoUserPoolUserPoolTags
+    ]
+
+instance FromJSON CognitoUserPool where
+  parseJSON (Object obj) =
+    CognitoUserPool <$>
+      obj .:? "AdminCreateUserConfig" <*>
+      obj .:? "AliasAttributes" <*>
+      obj .:? "AutoVerifiedAttributes" <*>
+      obj .:? "DeviceConfiguration" <*>
+      obj .:? "EmailConfiguration" <*>
+      obj .:? "EmailVerificationMessage" <*>
+      obj .:? "EmailVerificationSubject" <*>
+      obj .:? "LambdaConfig" <*>
+      obj .:? "MfaConfiguration" <*>
+      obj .:? "Policies" <*>
+      obj .:? "Schema" <*>
+      obj .:? "SmsAuthenticationMessage" <*>
+      obj .:? "SmsConfiguration" <*>
+      obj .:? "SmsVerificationMessage" <*>
+      obj .:? "UserPoolName" <*>
+      obj .:? "UserPoolTags"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPool' containing required fields as
+-- arguments.
+cognitoUserPool
+  :: CognitoUserPool
+cognitoUserPool  =
+  CognitoUserPool
+  { _cognitoUserPoolAdminCreateUserConfig = Nothing
+  , _cognitoUserPoolAliasAttributes = Nothing
+  , _cognitoUserPoolAutoVerifiedAttributes = Nothing
+  , _cognitoUserPoolDeviceConfiguration = Nothing
+  , _cognitoUserPoolEmailConfiguration = Nothing
+  , _cognitoUserPoolEmailVerificationMessage = Nothing
+  , _cognitoUserPoolEmailVerificationSubject = Nothing
+  , _cognitoUserPoolLambdaConfig = Nothing
+  , _cognitoUserPoolMfaConfiguration = Nothing
+  , _cognitoUserPoolPolicies = Nothing
+  , _cognitoUserPoolSchema = Nothing
+  , _cognitoUserPoolSmsAuthenticationMessage = Nothing
+  , _cognitoUserPoolSmsConfiguration = Nothing
+  , _cognitoUserPoolSmsVerificationMessage = Nothing
+  , _cognitoUserPoolUserPoolName = Nothing
+  , _cognitoUserPoolUserPoolTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-admincreateuserconfig
+cupAdminCreateUserConfig :: Lens' CognitoUserPool (Maybe CognitoUserPoolAdminCreateUserConfig)
+cupAdminCreateUserConfig = lens _cognitoUserPoolAdminCreateUserConfig (\s a -> s { _cognitoUserPoolAdminCreateUserConfig = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-aliasattributes
+cupAliasAttributes :: Lens' CognitoUserPool (Maybe [Val Text])
+cupAliasAttributes = lens _cognitoUserPoolAliasAttributes (\s a -> s { _cognitoUserPoolAliasAttributes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-autoverifiedattributes
+cupAutoVerifiedAttributes :: Lens' CognitoUserPool (Maybe [Val Text])
+cupAutoVerifiedAttributes = lens _cognitoUserPoolAutoVerifiedAttributes (\s a -> s { _cognitoUserPoolAutoVerifiedAttributes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-deviceconfiguration
+cupDeviceConfiguration :: Lens' CognitoUserPool (Maybe CognitoUserPoolDeviceConfiguration)
+cupDeviceConfiguration = lens _cognitoUserPoolDeviceConfiguration (\s a -> s { _cognitoUserPoolDeviceConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-emailconfiguration
+cupEmailConfiguration :: Lens' CognitoUserPool (Maybe CognitoUserPoolEmailConfiguration)
+cupEmailConfiguration = lens _cognitoUserPoolEmailConfiguration (\s a -> s { _cognitoUserPoolEmailConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-emailverificationmessage
+cupEmailVerificationMessage :: Lens' CognitoUserPool (Maybe (Val Text))
+cupEmailVerificationMessage = lens _cognitoUserPoolEmailVerificationMessage (\s a -> s { _cognitoUserPoolEmailVerificationMessage = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-emailverificationsubject
+cupEmailVerificationSubject :: Lens' CognitoUserPool (Maybe (Val Text))
+cupEmailVerificationSubject = lens _cognitoUserPoolEmailVerificationSubject (\s a -> s { _cognitoUserPoolEmailVerificationSubject = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-lambdaconfig
+cupLambdaConfig :: Lens' CognitoUserPool (Maybe CognitoUserPoolLambdaConfig)
+cupLambdaConfig = lens _cognitoUserPoolLambdaConfig (\s a -> s { _cognitoUserPoolLambdaConfig = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-mfaconfiguration
+cupMfaConfiguration :: Lens' CognitoUserPool (Maybe (Val Text))
+cupMfaConfiguration = lens _cognitoUserPoolMfaConfiguration (\s a -> s { _cognitoUserPoolMfaConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-policies
+cupPolicies :: Lens' CognitoUserPool (Maybe CognitoUserPoolPolicies)
+cupPolicies = lens _cognitoUserPoolPolicies (\s a -> s { _cognitoUserPoolPolicies = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-schema
+cupSchema :: Lens' CognitoUserPool (Maybe [CognitoUserPoolSchemaAttribute])
+cupSchema = lens _cognitoUserPoolSchema (\s a -> s { _cognitoUserPoolSchema = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-smsauthenticationmessage
+cupSmsAuthenticationMessage :: Lens' CognitoUserPool (Maybe (Val Text))
+cupSmsAuthenticationMessage = lens _cognitoUserPoolSmsAuthenticationMessage (\s a -> s { _cognitoUserPoolSmsAuthenticationMessage = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-smsconfiguration
+cupSmsConfiguration :: Lens' CognitoUserPool (Maybe CognitoUserPoolSmsConfiguration)
+cupSmsConfiguration = lens _cognitoUserPoolSmsConfiguration (\s a -> s { _cognitoUserPoolSmsConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-smsverificationmessage
+cupSmsVerificationMessage :: Lens' CognitoUserPool (Maybe (Val Text))
+cupSmsVerificationMessage = lens _cognitoUserPoolSmsVerificationMessage (\s a -> s { _cognitoUserPoolSmsVerificationMessage = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-userpoolname
+cupUserPoolName :: Lens' CognitoUserPool (Maybe (Val Text))
+cupUserPoolName = lens _cognitoUserPoolUserPoolName (\s a -> s { _cognitoUserPoolUserPoolName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-userpooltags
+cupUserPoolTags :: Lens' CognitoUserPool (Maybe Object)
+cupUserPoolTags = lens _cognitoUserPoolUserPoolTags (\s a -> s { _cognitoUserPoolUserPoolTags = a })
diff --git a/library-gen/Stratosphere/Resources/CognitoUserPoolClient.hs b/library-gen/Stratosphere/Resources/CognitoUserPoolClient.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CognitoUserPoolClient.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html
+
+module Stratosphere.Resources.CognitoUserPoolClient where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoUserPoolClient. See
+-- 'cognitoUserPoolClient' for a more convenient constructor.
+data CognitoUserPoolClient =
+  CognitoUserPoolClient
+  { _cognitoUserPoolClientClientName :: Maybe (Val Text)
+  , _cognitoUserPoolClientExplicitAuthFlows :: Maybe [Val Text]
+  , _cognitoUserPoolClientGenerateSecret :: Maybe (Val Bool')
+  , _cognitoUserPoolClientReadAttributes :: Maybe [Val Text]
+  , _cognitoUserPoolClientRefreshTokenValidity :: Maybe (Val Double')
+  , _cognitoUserPoolClientUserPoolId :: Val Text
+  , _cognitoUserPoolClientWriteAttributes :: Maybe [Val Text]
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolClient where
+  toJSON CognitoUserPoolClient{..} =
+    object $
+    catMaybes
+    [ ("ClientName" .=) <$> _cognitoUserPoolClientClientName
+    , ("ExplicitAuthFlows" .=) <$> _cognitoUserPoolClientExplicitAuthFlows
+    , ("GenerateSecret" .=) <$> _cognitoUserPoolClientGenerateSecret
+    , ("ReadAttributes" .=) <$> _cognitoUserPoolClientReadAttributes
+    , ("RefreshTokenValidity" .=) <$> _cognitoUserPoolClientRefreshTokenValidity
+    , Just ("UserPoolId" .= _cognitoUserPoolClientUserPoolId)
+    , ("WriteAttributes" .=) <$> _cognitoUserPoolClientWriteAttributes
+    ]
+
+instance FromJSON CognitoUserPoolClient where
+  parseJSON (Object obj) =
+    CognitoUserPoolClient <$>
+      obj .:? "ClientName" <*>
+      obj .:? "ExplicitAuthFlows" <*>
+      obj .:? "GenerateSecret" <*>
+      obj .:? "ReadAttributes" <*>
+      obj .:? "RefreshTokenValidity" <*>
+      obj .: "UserPoolId" <*>
+      obj .:? "WriteAttributes"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolClient' containing required fields as
+-- arguments.
+cognitoUserPoolClient
+  :: Val Text -- ^ 'cupcUserPoolId'
+  -> CognitoUserPoolClient
+cognitoUserPoolClient userPoolIdarg =
+  CognitoUserPoolClient
+  { _cognitoUserPoolClientClientName = Nothing
+  , _cognitoUserPoolClientExplicitAuthFlows = Nothing
+  , _cognitoUserPoolClientGenerateSecret = Nothing
+  , _cognitoUserPoolClientReadAttributes = Nothing
+  , _cognitoUserPoolClientRefreshTokenValidity = Nothing
+  , _cognitoUserPoolClientUserPoolId = userPoolIdarg
+  , _cognitoUserPoolClientWriteAttributes = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-clientname
+cupcClientName :: Lens' CognitoUserPoolClient (Maybe (Val Text))
+cupcClientName = lens _cognitoUserPoolClientClientName (\s a -> s { _cognitoUserPoolClientClientName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-explicitauthflows
+cupcExplicitAuthFlows :: Lens' CognitoUserPoolClient (Maybe [Val Text])
+cupcExplicitAuthFlows = lens _cognitoUserPoolClientExplicitAuthFlows (\s a -> s { _cognitoUserPoolClientExplicitAuthFlows = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-generatesecret
+cupcGenerateSecret :: Lens' CognitoUserPoolClient (Maybe (Val Bool'))
+cupcGenerateSecret = lens _cognitoUserPoolClientGenerateSecret (\s a -> s { _cognitoUserPoolClientGenerateSecret = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-readattributes
+cupcReadAttributes :: Lens' CognitoUserPoolClient (Maybe [Val Text])
+cupcReadAttributes = lens _cognitoUserPoolClientReadAttributes (\s a -> s { _cognitoUserPoolClientReadAttributes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-refreshtokenvalidity
+cupcRefreshTokenValidity :: Lens' CognitoUserPoolClient (Maybe (Val Double'))
+cupcRefreshTokenValidity = lens _cognitoUserPoolClientRefreshTokenValidity (\s a -> s { _cognitoUserPoolClientRefreshTokenValidity = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-userpoolid
+cupcUserPoolId :: Lens' CognitoUserPoolClient (Val Text)
+cupcUserPoolId = lens _cognitoUserPoolClientUserPoolId (\s a -> s { _cognitoUserPoolClientUserPoolId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolclient.html#cfn-cognito-userpoolclient-writeattributes
+cupcWriteAttributes :: Lens' CognitoUserPoolClient (Maybe [Val Text])
+cupcWriteAttributes = lens _cognitoUserPoolClientWriteAttributes (\s a -> s { _cognitoUserPoolClientWriteAttributes = a })
diff --git a/library-gen/Stratosphere/Resources/CognitoUserPoolGroup.hs b/library-gen/Stratosphere/Resources/CognitoUserPoolGroup.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CognitoUserPoolGroup.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolgroup.html
+
+module Stratosphere.Resources.CognitoUserPoolGroup where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoUserPoolGroup. See
+-- 'cognitoUserPoolGroup' for a more convenient constructor.
+data CognitoUserPoolGroup =
+  CognitoUserPoolGroup
+  { _cognitoUserPoolGroupDescription :: Maybe (Val Text)
+  , _cognitoUserPoolGroupGroupName :: Maybe (Val Text)
+  , _cognitoUserPoolGroupPrecedence :: Maybe (Val Double')
+  , _cognitoUserPoolGroupRoleArn :: Maybe (Val Text)
+  , _cognitoUserPoolGroupUserPoolId :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolGroup where
+  toJSON CognitoUserPoolGroup{..} =
+    object $
+    catMaybes
+    [ ("Description" .=) <$> _cognitoUserPoolGroupDescription
+    , ("GroupName" .=) <$> _cognitoUserPoolGroupGroupName
+    , ("Precedence" .=) <$> _cognitoUserPoolGroupPrecedence
+    , ("RoleArn" .=) <$> _cognitoUserPoolGroupRoleArn
+    , Just ("UserPoolId" .= _cognitoUserPoolGroupUserPoolId)
+    ]
+
+instance FromJSON CognitoUserPoolGroup where
+  parseJSON (Object obj) =
+    CognitoUserPoolGroup <$>
+      obj .:? "Description" <*>
+      obj .:? "GroupName" <*>
+      obj .:? "Precedence" <*>
+      obj .:? "RoleArn" <*>
+      obj .: "UserPoolId"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolGroup' containing required fields as
+-- arguments.
+cognitoUserPoolGroup
+  :: Val Text -- ^ 'cupgUserPoolId'
+  -> CognitoUserPoolGroup
+cognitoUserPoolGroup userPoolIdarg =
+  CognitoUserPoolGroup
+  { _cognitoUserPoolGroupDescription = Nothing
+  , _cognitoUserPoolGroupGroupName = Nothing
+  , _cognitoUserPoolGroupPrecedence = Nothing
+  , _cognitoUserPoolGroupRoleArn = Nothing
+  , _cognitoUserPoolGroupUserPoolId = userPoolIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolgroup.html#cfn-cognito-userpoolgroup-description
+cupgDescription :: Lens' CognitoUserPoolGroup (Maybe (Val Text))
+cupgDescription = lens _cognitoUserPoolGroupDescription (\s a -> s { _cognitoUserPoolGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolgroup.html#cfn-cognito-userpoolgroup-groupname
+cupgGroupName :: Lens' CognitoUserPoolGroup (Maybe (Val Text))
+cupgGroupName = lens _cognitoUserPoolGroupGroupName (\s a -> s { _cognitoUserPoolGroupGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolgroup.html#cfn-cognito-userpoolgroup-precedence
+cupgPrecedence :: Lens' CognitoUserPoolGroup (Maybe (Val Double'))
+cupgPrecedence = lens _cognitoUserPoolGroupPrecedence (\s a -> s { _cognitoUserPoolGroupPrecedence = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolgroup.html#cfn-cognito-userpoolgroup-rolearn
+cupgRoleArn :: Lens' CognitoUserPoolGroup (Maybe (Val Text))
+cupgRoleArn = lens _cognitoUserPoolGroupRoleArn (\s a -> s { _cognitoUserPoolGroupRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolgroup.html#cfn-cognito-userpoolgroup-userpoolid
+cupgUserPoolId :: Lens' CognitoUserPoolGroup (Val Text)
+cupgUserPoolId = lens _cognitoUserPoolGroupUserPoolId (\s a -> s { _cognitoUserPoolGroupUserPoolId = a })
diff --git a/library-gen/Stratosphere/Resources/CognitoUserPoolUser.hs b/library-gen/Stratosphere/Resources/CognitoUserPoolUser.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CognitoUserPoolUser.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html
+
+module Stratosphere.Resources.CognitoUserPoolUser where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.CognitoUserPoolUserAttributeType
+
+-- | Full data type definition for CognitoUserPoolUser. See
+-- 'cognitoUserPoolUser' for a more convenient constructor.
+data CognitoUserPoolUser =
+  CognitoUserPoolUser
+  { _cognitoUserPoolUserDesiredDeliveryMediums :: Maybe [Val Text]
+  , _cognitoUserPoolUserForceAliasCreation :: Maybe (Val Bool')
+  , _cognitoUserPoolUserMessageAction :: Maybe (Val Text)
+  , _cognitoUserPoolUserUserAttributes :: Maybe [CognitoUserPoolUserAttributeType]
+  , _cognitoUserPoolUserUserPoolId :: Val Text
+  , _cognitoUserPoolUserUsername :: Maybe (Val Text)
+  , _cognitoUserPoolUserValidationData :: Maybe [CognitoUserPoolUserAttributeType]
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolUser where
+  toJSON CognitoUserPoolUser{..} =
+    object $
+    catMaybes
+    [ ("DesiredDeliveryMediums" .=) <$> _cognitoUserPoolUserDesiredDeliveryMediums
+    , ("ForceAliasCreation" .=) <$> _cognitoUserPoolUserForceAliasCreation
+    , ("MessageAction" .=) <$> _cognitoUserPoolUserMessageAction
+    , ("UserAttributes" .=) <$> _cognitoUserPoolUserUserAttributes
+    , Just ("UserPoolId" .= _cognitoUserPoolUserUserPoolId)
+    , ("Username" .=) <$> _cognitoUserPoolUserUsername
+    , ("ValidationData" .=) <$> _cognitoUserPoolUserValidationData
+    ]
+
+instance FromJSON CognitoUserPoolUser where
+  parseJSON (Object obj) =
+    CognitoUserPoolUser <$>
+      obj .:? "DesiredDeliveryMediums" <*>
+      obj .:? "ForceAliasCreation" <*>
+      obj .:? "MessageAction" <*>
+      obj .:? "UserAttributes" <*>
+      obj .: "UserPoolId" <*>
+      obj .:? "Username" <*>
+      obj .:? "ValidationData"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolUser' containing required fields as
+-- arguments.
+cognitoUserPoolUser
+  :: Val Text -- ^ 'cupuUserPoolId'
+  -> CognitoUserPoolUser
+cognitoUserPoolUser userPoolIdarg =
+  CognitoUserPoolUser
+  { _cognitoUserPoolUserDesiredDeliveryMediums = Nothing
+  , _cognitoUserPoolUserForceAliasCreation = Nothing
+  , _cognitoUserPoolUserMessageAction = Nothing
+  , _cognitoUserPoolUserUserAttributes = Nothing
+  , _cognitoUserPoolUserUserPoolId = userPoolIdarg
+  , _cognitoUserPoolUserUsername = Nothing
+  , _cognitoUserPoolUserValidationData = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html#cfn-cognito-userpooluser-desireddeliverymediums
+cupuDesiredDeliveryMediums :: Lens' CognitoUserPoolUser (Maybe [Val Text])
+cupuDesiredDeliveryMediums = lens _cognitoUserPoolUserDesiredDeliveryMediums (\s a -> s { _cognitoUserPoolUserDesiredDeliveryMediums = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html#cfn-cognito-userpooluser-forcealiascreation
+cupuForceAliasCreation :: Lens' CognitoUserPoolUser (Maybe (Val Bool'))
+cupuForceAliasCreation = lens _cognitoUserPoolUserForceAliasCreation (\s a -> s { _cognitoUserPoolUserForceAliasCreation = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html#cfn-cognito-userpooluser-messageaction
+cupuMessageAction :: Lens' CognitoUserPoolUser (Maybe (Val Text))
+cupuMessageAction = lens _cognitoUserPoolUserMessageAction (\s a -> s { _cognitoUserPoolUserMessageAction = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html#cfn-cognito-userpooluser-userattributes
+cupuUserAttributes :: Lens' CognitoUserPoolUser (Maybe [CognitoUserPoolUserAttributeType])
+cupuUserAttributes = lens _cognitoUserPoolUserUserAttributes (\s a -> s { _cognitoUserPoolUserUserAttributes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html#cfn-cognito-userpooluser-userpoolid
+cupuUserPoolId :: Lens' CognitoUserPoolUser (Val Text)
+cupuUserPoolId = lens _cognitoUserPoolUserUserPoolId (\s a -> s { _cognitoUserPoolUserUserPoolId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html#cfn-cognito-userpooluser-username
+cupuUsername :: Lens' CognitoUserPoolUser (Maybe (Val Text))
+cupuUsername = lens _cognitoUserPoolUserUsername (\s a -> s { _cognitoUserPoolUserUsername = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpooluser.html#cfn-cognito-userpooluser-validationdata
+cupuValidationData :: Lens' CognitoUserPoolUser (Maybe [CognitoUserPoolUserAttributeType])
+cupuValidationData = lens _cognitoUserPoolUserValidationData (\s a -> s { _cognitoUserPoolUserValidationData = a })
diff --git a/library-gen/Stratosphere/Resources/CognitoUserPoolUserToGroupAttachment.hs b/library-gen/Stratosphere/Resources/CognitoUserPoolUserToGroupAttachment.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/CognitoUserPoolUserToGroupAttachment.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolusertogroupattachment.html
+
+module Stratosphere.Resources.CognitoUserPoolUserToGroupAttachment where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for CognitoUserPoolUserToGroupAttachment. See
+-- 'cognitoUserPoolUserToGroupAttachment' for a more convenient constructor.
+data CognitoUserPoolUserToGroupAttachment =
+  CognitoUserPoolUserToGroupAttachment
+  { _cognitoUserPoolUserToGroupAttachmentGroupName :: Val Text
+  , _cognitoUserPoolUserToGroupAttachmentUserPoolId :: Val Text
+  , _cognitoUserPoolUserToGroupAttachmentUsername :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON CognitoUserPoolUserToGroupAttachment where
+  toJSON CognitoUserPoolUserToGroupAttachment{..} =
+    object $
+    catMaybes
+    [ Just ("GroupName" .= _cognitoUserPoolUserToGroupAttachmentGroupName)
+    , Just ("UserPoolId" .= _cognitoUserPoolUserToGroupAttachmentUserPoolId)
+    , Just ("Username" .= _cognitoUserPoolUserToGroupAttachmentUsername)
+    ]
+
+instance FromJSON CognitoUserPoolUserToGroupAttachment where
+  parseJSON (Object obj) =
+    CognitoUserPoolUserToGroupAttachment <$>
+      obj .: "GroupName" <*>
+      obj .: "UserPoolId" <*>
+      obj .: "Username"
+  parseJSON _ = mempty
+
+-- | Constructor for 'CognitoUserPoolUserToGroupAttachment' containing
+-- required fields as arguments.
+cognitoUserPoolUserToGroupAttachment
+  :: Val Text -- ^ 'cuputgaGroupName'
+  -> Val Text -- ^ 'cuputgaUserPoolId'
+  -> Val Text -- ^ 'cuputgaUsername'
+  -> CognitoUserPoolUserToGroupAttachment
+cognitoUserPoolUserToGroupAttachment groupNamearg userPoolIdarg usernamearg =
+  CognitoUserPoolUserToGroupAttachment
+  { _cognitoUserPoolUserToGroupAttachmentGroupName = groupNamearg
+  , _cognitoUserPoolUserToGroupAttachmentUserPoolId = userPoolIdarg
+  , _cognitoUserPoolUserToGroupAttachmentUsername = usernamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolusertogroupattachment.html#cfn-cognito-userpoolusertogroupattachment-groupname
+cuputgaGroupName :: Lens' CognitoUserPoolUserToGroupAttachment (Val Text)
+cuputgaGroupName = lens _cognitoUserPoolUserToGroupAttachmentGroupName (\s a -> s { _cognitoUserPoolUserToGroupAttachmentGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolusertogroupattachment.html#cfn-cognito-userpoolusertogroupattachment-userpoolid
+cuputgaUserPoolId :: Lens' CognitoUserPoolUserToGroupAttachment (Val Text)
+cuputgaUserPoolId = lens _cognitoUserPoolUserToGroupAttachmentUserPoolId (\s a -> s { _cognitoUserPoolUserToGroupAttachmentUserPoolId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolusertogroupattachment.html#cfn-cognito-userpoolusertogroupattachment-username
+cuputgaUsername :: Lens' CognitoUserPoolUserToGroupAttachment (Val Text)
+cuputgaUsername = lens _cognitoUserPoolUserToGroupAttachmentUsername (\s a -> s { _cognitoUserPoolUserToGroupAttachmentUsername = a })
diff --git a/library-gen/Stratosphere/Resources/EC2EIPAssociation.hs b/library-gen/Stratosphere/Resources/EC2EIPAssociation.hs
--- a/library-gen/Stratosphere/Resources/EC2EIPAssociation.hs
+++ b/library-gen/Stratosphere/Resources/EC2EIPAssociation.hs
@@ -19,7 +19,7 @@
 data EC2EIPAssociation =
   EC2EIPAssociation
   { _eC2EIPAssociationAllocationId :: Maybe (Val Text)
-  , _eC2EIPAssociationEip :: Maybe (Val Text)
+  , _eC2EIPAssociationEIP :: Maybe (Val Text)
   , _eC2EIPAssociationInstanceId :: Maybe (Val Text)
   , _eC2EIPAssociationNetworkInterfaceId :: Maybe (Val Text)
   , _eC2EIPAssociationPrivateIpAddress :: Maybe (Val Text)
@@ -30,7 +30,7 @@
     object $
     catMaybes
     [ ("AllocationId" .=) <$> _eC2EIPAssociationAllocationId
-    , ("Eip" .=) <$> _eC2EIPAssociationEip
+    , ("EIP" .=) <$> _eC2EIPAssociationEIP
     , ("InstanceId" .=) <$> _eC2EIPAssociationInstanceId
     , ("NetworkInterfaceId" .=) <$> _eC2EIPAssociationNetworkInterfaceId
     , ("PrivateIpAddress" .=) <$> _eC2EIPAssociationPrivateIpAddress
@@ -40,7 +40,7 @@
   parseJSON (Object obj) =
     EC2EIPAssociation <$>
       obj .:? "AllocationId" <*>
-      obj .:? "Eip" <*>
+      obj .:? "EIP" <*>
       obj .:? "InstanceId" <*>
       obj .:? "NetworkInterfaceId" <*>
       obj .:? "PrivateIpAddress"
@@ -53,7 +53,7 @@
 ec2EIPAssociation  =
   EC2EIPAssociation
   { _eC2EIPAssociationAllocationId = Nothing
-  , _eC2EIPAssociationEip = Nothing
+  , _eC2EIPAssociationEIP = Nothing
   , _eC2EIPAssociationInstanceId = Nothing
   , _eC2EIPAssociationNetworkInterfaceId = Nothing
   , _eC2EIPAssociationPrivateIpAddress = Nothing
@@ -64,8 +64,8 @@
 eceipaAllocationId = lens _eC2EIPAssociationAllocationId (\s a -> s { _eC2EIPAssociationAllocationId = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip-association.html#cfn-ec2-eipassociation-eip
-eceipaEip :: Lens' EC2EIPAssociation (Maybe (Val Text))
-eceipaEip = lens _eC2EIPAssociationEip (\s a -> s { _eC2EIPAssociationEip = a })
+eceipaEIP :: Lens' EC2EIPAssociation (Maybe (Val Text))
+eceipaEIP = lens _eC2EIPAssociationEIP (\s a -> s { _eC2EIPAssociationEIP = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip-association.html#cfn-ec2-eipassociation-instanceid
 eceipaInstanceId :: Lens' EC2EIPAssociation (Maybe (Val Text))
diff --git a/library-gen/Stratosphere/Resources/EC2SecurityGroup.hs b/library-gen/Stratosphere/Resources/EC2SecurityGroup.hs
--- a/library-gen/Stratosphere/Resources/EC2SecurityGroup.hs
+++ b/library-gen/Stratosphere/Resources/EC2SecurityGroup.hs
@@ -20,6 +20,7 @@
 data EC2SecurityGroup =
   EC2SecurityGroup
   { _eC2SecurityGroupGroupDescription :: Val Text
+  , _eC2SecurityGroupGroupName :: Maybe (Val Text)
   , _eC2SecurityGroupSecurityGroupEgress :: Maybe [EC2SecurityGroupRule]
   , _eC2SecurityGroupSecurityGroupIngress :: Maybe [EC2SecurityGroupRule]
   , _eC2SecurityGroupTags :: Maybe [Tag]
@@ -31,6 +32,7 @@
     object $
     catMaybes
     [ Just ("GroupDescription" .= _eC2SecurityGroupGroupDescription)
+    , ("GroupName" .=) <$> _eC2SecurityGroupGroupName
     , ("SecurityGroupEgress" .=) <$> _eC2SecurityGroupSecurityGroupEgress
     , ("SecurityGroupIngress" .=) <$> _eC2SecurityGroupSecurityGroupIngress
     , ("Tags" .=) <$> _eC2SecurityGroupTags
@@ -41,6 +43,7 @@
   parseJSON (Object obj) =
     EC2SecurityGroup <$>
       obj .: "GroupDescription" <*>
+      obj .:? "GroupName" <*>
       obj .:? "SecurityGroupEgress" <*>
       obj .:? "SecurityGroupIngress" <*>
       obj .:? "Tags" <*>
@@ -55,6 +58,7 @@
 ec2SecurityGroup groupDescriptionarg =
   EC2SecurityGroup
   { _eC2SecurityGroupGroupDescription = groupDescriptionarg
+  , _eC2SecurityGroupGroupName = Nothing
   , _eC2SecurityGroupSecurityGroupEgress = Nothing
   , _eC2SecurityGroupSecurityGroupIngress = Nothing
   , _eC2SecurityGroupTags = Nothing
@@ -64,6 +68,10 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html#cfn-ec2-securitygroup-groupdescription
 ecsgGroupDescription :: Lens' EC2SecurityGroup (Val Text)
 ecsgGroupDescription = lens _eC2SecurityGroupGroupDescription (\s a -> s { _eC2SecurityGroupGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html#cfn-ec2-securitygroup-groupname
+ecsgGroupName :: Lens' EC2SecurityGroup (Maybe (Val Text))
+ecsgGroupName = lens _eC2SecurityGroupGroupName (\s a -> s { _eC2SecurityGroupGroupName = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html#cfn-ec2-securitygroup-securitygroupegress
 ecsgSecurityGroupEgress :: Lens' EC2SecurityGroup (Maybe [EC2SecurityGroupRule])
diff --git a/library-gen/Stratosphere/Resources/ECSService.hs b/library-gen/Stratosphere/Resources/ECSService.hs
--- a/library-gen/Stratosphere/Resources/ECSService.hs
+++ b/library-gen/Stratosphere/Resources/ECSService.hs
@@ -14,6 +14,8 @@
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ECSServiceDeploymentConfiguration
 import Stratosphere.ResourceProperties.ECSServiceLoadBalancer
+import Stratosphere.ResourceProperties.ECSServicePlacementConstraint
+import Stratosphere.ResourceProperties.ECSServicePlacementStrategy
 
 -- | Full data type definition for ECSService. See 'ecsService' for a more
 -- convenient constructor.
@@ -21,9 +23,12 @@
   ECSService
   { _eCSServiceCluster :: Maybe (Val Text)
   , _eCSServiceDeploymentConfiguration :: Maybe ECSServiceDeploymentConfiguration
-  , _eCSServiceDesiredCount :: Val Integer'
+  , _eCSServiceDesiredCount :: Maybe (Val Integer')
   , _eCSServiceLoadBalancers :: Maybe [ECSServiceLoadBalancer]
+  , _eCSServicePlacementConstraints :: Maybe [ECSServicePlacementConstraint]
+  , _eCSServicePlacementStrategies :: Maybe [ECSServicePlacementStrategy]
   , _eCSServiceRole :: Maybe (Val Text)
+  , _eCSServiceServiceName :: Maybe (Val Text)
   , _eCSServiceTaskDefinition :: Val Text
   } deriving (Show, Eq)
 
@@ -33,9 +38,12 @@
     catMaybes
     [ ("Cluster" .=) <$> _eCSServiceCluster
     , ("DeploymentConfiguration" .=) <$> _eCSServiceDeploymentConfiguration
-    , Just ("DesiredCount" .= _eCSServiceDesiredCount)
+    , ("DesiredCount" .=) <$> _eCSServiceDesiredCount
     , ("LoadBalancers" .=) <$> _eCSServiceLoadBalancers
+    , ("PlacementConstraints" .=) <$> _eCSServicePlacementConstraints
+    , ("PlacementStrategies" .=) <$> _eCSServicePlacementStrategies
     , ("Role" .=) <$> _eCSServiceRole
+    , ("ServiceName" .=) <$> _eCSServiceServiceName
     , Just ("TaskDefinition" .= _eCSServiceTaskDefinition)
     ]
 
@@ -44,24 +52,29 @@
     ECSService <$>
       obj .:? "Cluster" <*>
       obj .:? "DeploymentConfiguration" <*>
-      obj .: "DesiredCount" <*>
+      obj .:? "DesiredCount" <*>
       obj .:? "LoadBalancers" <*>
+      obj .:? "PlacementConstraints" <*>
+      obj .:? "PlacementStrategies" <*>
       obj .:? "Role" <*>
+      obj .:? "ServiceName" <*>
       obj .: "TaskDefinition"
   parseJSON _ = mempty
 
 -- | Constructor for 'ECSService' containing required fields as arguments.
 ecsService
-  :: Val Integer' -- ^ 'ecssDesiredCount'
-  -> Val Text -- ^ 'ecssTaskDefinition'
+  :: Val Text -- ^ 'ecssTaskDefinition'
   -> ECSService
-ecsService desiredCountarg taskDefinitionarg =
+ecsService taskDefinitionarg =
   ECSService
   { _eCSServiceCluster = Nothing
   , _eCSServiceDeploymentConfiguration = Nothing
-  , _eCSServiceDesiredCount = desiredCountarg
+  , _eCSServiceDesiredCount = Nothing
   , _eCSServiceLoadBalancers = Nothing
+  , _eCSServicePlacementConstraints = Nothing
+  , _eCSServicePlacementStrategies = Nothing
   , _eCSServiceRole = Nothing
+  , _eCSServiceServiceName = Nothing
   , _eCSServiceTaskDefinition = taskDefinitionarg
   }
 
@@ -74,16 +87,28 @@
 ecssDeploymentConfiguration = lens _eCSServiceDeploymentConfiguration (\s a -> s { _eCSServiceDeploymentConfiguration = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-desiredcount
-ecssDesiredCount :: Lens' ECSService (Val Integer')
+ecssDesiredCount :: Lens' ECSService (Maybe (Val Integer'))
 ecssDesiredCount = lens _eCSServiceDesiredCount (\s a -> s { _eCSServiceDesiredCount = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-loadbalancers
 ecssLoadBalancers :: Lens' ECSService (Maybe [ECSServiceLoadBalancer])
 ecssLoadBalancers = lens _eCSServiceLoadBalancers (\s a -> s { _eCSServiceLoadBalancers = a })
 
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-placementconstraints
+ecssPlacementConstraints :: Lens' ECSService (Maybe [ECSServicePlacementConstraint])
+ecssPlacementConstraints = lens _eCSServicePlacementConstraints (\s a -> s { _eCSServicePlacementConstraints = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-placementstrategies
+ecssPlacementStrategies :: Lens' ECSService (Maybe [ECSServicePlacementStrategy])
+ecssPlacementStrategies = lens _eCSServicePlacementStrategies (\s a -> s { _eCSServicePlacementStrategies = a })
+
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-role
 ecssRole :: Lens' ECSService (Maybe (Val Text))
 ecssRole = lens _eCSServiceRole (\s a -> s { _eCSServiceRole = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-servicename
+ecssServiceName :: Lens' ECSService (Maybe (Val Text))
+ecssServiceName = lens _eCSServiceServiceName (\s a -> s { _eCSServiceServiceName = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-taskdefinition
 ecssTaskDefinition :: Lens' ECSService (Val Text)
diff --git a/library-gen/Stratosphere/Resources/ECSTaskDefinition.hs b/library-gen/Stratosphere/Resources/ECSTaskDefinition.hs
--- a/library-gen/Stratosphere/Resources/ECSTaskDefinition.hs
+++ b/library-gen/Stratosphere/Resources/ECSTaskDefinition.hs
@@ -13,6 +13,7 @@
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ECSTaskDefinitionContainerDefinition
+import Stratosphere.ResourceProperties.ECSTaskDefinitionTaskDefinitionPlacementConstraint
 import Stratosphere.ResourceProperties.ECSTaskDefinitionVolume
 
 -- | Full data type definition for ECSTaskDefinition. See 'ecsTaskDefinition'
@@ -22,6 +23,7 @@
   { _eCSTaskDefinitionContainerDefinitions :: Maybe [ECSTaskDefinitionContainerDefinition]
   , _eCSTaskDefinitionFamily :: Maybe (Val Text)
   , _eCSTaskDefinitionNetworkMode :: Maybe (Val Text)
+  , _eCSTaskDefinitionPlacementConstraints :: Maybe [ECSTaskDefinitionTaskDefinitionPlacementConstraint]
   , _eCSTaskDefinitionTaskRoleArn :: Maybe (Val Text)
   , _eCSTaskDefinitionVolumes :: Maybe [ECSTaskDefinitionVolume]
   } deriving (Show, Eq)
@@ -33,6 +35,7 @@
     [ ("ContainerDefinitions" .=) <$> _eCSTaskDefinitionContainerDefinitions
     , ("Family" .=) <$> _eCSTaskDefinitionFamily
     , ("NetworkMode" .=) <$> _eCSTaskDefinitionNetworkMode
+    , ("PlacementConstraints" .=) <$> _eCSTaskDefinitionPlacementConstraints
     , ("TaskRoleArn" .=) <$> _eCSTaskDefinitionTaskRoleArn
     , ("Volumes" .=) <$> _eCSTaskDefinitionVolumes
     ]
@@ -43,6 +46,7 @@
       obj .:? "ContainerDefinitions" <*>
       obj .:? "Family" <*>
       obj .:? "NetworkMode" <*>
+      obj .:? "PlacementConstraints" <*>
       obj .:? "TaskRoleArn" <*>
       obj .:? "Volumes"
   parseJSON _ = mempty
@@ -56,6 +60,7 @@
   { _eCSTaskDefinitionContainerDefinitions = Nothing
   , _eCSTaskDefinitionFamily = Nothing
   , _eCSTaskDefinitionNetworkMode = Nothing
+  , _eCSTaskDefinitionPlacementConstraints = Nothing
   , _eCSTaskDefinitionTaskRoleArn = Nothing
   , _eCSTaskDefinitionVolumes = Nothing
   }
@@ -71,6 +76,10 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-networkmode
 ecstdNetworkMode :: Lens' ECSTaskDefinition (Maybe (Val Text))
 ecstdNetworkMode = lens _eCSTaskDefinitionNetworkMode (\s a -> s { _eCSTaskDefinitionNetworkMode = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-placementconstraints
+ecstdPlacementConstraints :: Lens' ECSTaskDefinition (Maybe [ECSTaskDefinitionTaskDefinitionPlacementConstraint])
+ecstdPlacementConstraints = lens _eCSTaskDefinitionPlacementConstraints (\s a -> s { _eCSTaskDefinitionPlacementConstraints = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-taskrolearn
 ecstdTaskRoleArn :: Lens' ECSTaskDefinition (Maybe (Val Text))
diff --git a/library-gen/Stratosphere/Resources/EMRCluster.hs b/library-gen/Stratosphere/Resources/EMRCluster.hs
--- a/library-gen/Stratosphere/Resources/EMRCluster.hs
+++ b/library-gen/Stratosphere/Resources/EMRCluster.hs
@@ -24,6 +24,7 @@
   EMRCluster
   { _eMRClusterAdditionalInfo :: Maybe Object
   , _eMRClusterApplications :: Maybe [EMRClusterApplication]
+  , _eMRClusterAutoScalingRole :: Maybe (Val Text)
   , _eMRClusterBootstrapActions :: Maybe [EMRClusterBootstrapActionConfig]
   , _eMRClusterConfigurations :: Maybe [EMRClusterConfiguration]
   , _eMRClusterInstances :: EMRClusterJobFlowInstancesConfig
@@ -31,6 +32,8 @@
   , _eMRClusterLogUri :: Maybe (Val Text)
   , _eMRClusterName :: Val Text
   , _eMRClusterReleaseLabel :: Maybe (Val Text)
+  , _eMRClusterScaleDownBehavior :: Maybe (Val Text)
+  , _eMRClusterSecurityConfiguration :: Maybe (Val Text)
   , _eMRClusterServiceRole :: Val Text
   , _eMRClusterTags :: Maybe [Tag]
   , _eMRClusterVisibleToAllUsers :: Maybe (Val Bool')
@@ -42,6 +45,7 @@
     catMaybes
     [ ("AdditionalInfo" .=) <$> _eMRClusterAdditionalInfo
     , ("Applications" .=) <$> _eMRClusterApplications
+    , ("AutoScalingRole" .=) <$> _eMRClusterAutoScalingRole
     , ("BootstrapActions" .=) <$> _eMRClusterBootstrapActions
     , ("Configurations" .=) <$> _eMRClusterConfigurations
     , Just ("Instances" .= _eMRClusterInstances)
@@ -49,6 +53,8 @@
     , ("LogUri" .=) <$> _eMRClusterLogUri
     , Just ("Name" .= _eMRClusterName)
     , ("ReleaseLabel" .=) <$> _eMRClusterReleaseLabel
+    , ("ScaleDownBehavior" .=) <$> _eMRClusterScaleDownBehavior
+    , ("SecurityConfiguration" .=) <$> _eMRClusterSecurityConfiguration
     , Just ("ServiceRole" .= _eMRClusterServiceRole)
     , ("Tags" .=) <$> _eMRClusterTags
     , ("VisibleToAllUsers" .=) <$> _eMRClusterVisibleToAllUsers
@@ -59,6 +65,7 @@
     EMRCluster <$>
       obj .:? "AdditionalInfo" <*>
       obj .:? "Applications" <*>
+      obj .:? "AutoScalingRole" <*>
       obj .:? "BootstrapActions" <*>
       obj .:? "Configurations" <*>
       obj .: "Instances" <*>
@@ -66,6 +73,8 @@
       obj .:? "LogUri" <*>
       obj .: "Name" <*>
       obj .:? "ReleaseLabel" <*>
+      obj .:? "ScaleDownBehavior" <*>
+      obj .:? "SecurityConfiguration" <*>
       obj .: "ServiceRole" <*>
       obj .:? "Tags" <*>
       obj .:? "VisibleToAllUsers"
@@ -82,6 +91,7 @@
   EMRCluster
   { _eMRClusterAdditionalInfo = Nothing
   , _eMRClusterApplications = Nothing
+  , _eMRClusterAutoScalingRole = Nothing
   , _eMRClusterBootstrapActions = Nothing
   , _eMRClusterConfigurations = Nothing
   , _eMRClusterInstances = instancesarg
@@ -89,6 +99,8 @@
   , _eMRClusterLogUri = Nothing
   , _eMRClusterName = namearg
   , _eMRClusterReleaseLabel = Nothing
+  , _eMRClusterScaleDownBehavior = Nothing
+  , _eMRClusterSecurityConfiguration = Nothing
   , _eMRClusterServiceRole = serviceRolearg
   , _eMRClusterTags = Nothing
   , _eMRClusterVisibleToAllUsers = Nothing
@@ -102,6 +114,10 @@
 emrcApplications :: Lens' EMRCluster (Maybe [EMRClusterApplication])
 emrcApplications = lens _eMRClusterApplications (\s a -> s { _eMRClusterApplications = a })
 
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-elasticmapreduce-cluster-autoscalingrole
+emrcAutoScalingRole :: Lens' EMRCluster (Maybe (Val Text))
+emrcAutoScalingRole = lens _eMRClusterAutoScalingRole (\s a -> s { _eMRClusterAutoScalingRole = a })
+
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-cluster-bootstrapactions
 emrcBootstrapActions :: Lens' EMRCluster (Maybe [EMRClusterBootstrapActionConfig])
 emrcBootstrapActions = lens _eMRClusterBootstrapActions (\s a -> s { _eMRClusterBootstrapActions = a })
@@ -129,6 +145,14 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-cluster-releaselabel
 emrcReleaseLabel :: Lens' EMRCluster (Maybe (Val Text))
 emrcReleaseLabel = lens _eMRClusterReleaseLabel (\s a -> s { _eMRClusterReleaseLabel = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-elasticmapreduce-cluster-scaledownbehavior
+emrcScaleDownBehavior :: Lens' EMRCluster (Maybe (Val Text))
+emrcScaleDownBehavior = lens _eMRClusterScaleDownBehavior (\s a -> s { _eMRClusterScaleDownBehavior = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-securityconfiguration
+emrcSecurityConfiguration :: Lens' EMRCluster (Maybe (Val Text))
+emrcSecurityConfiguration = lens _eMRClusterSecurityConfiguration (\s a -> s { _eMRClusterSecurityConfiguration = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-cluster-servicerole
 emrcServiceRole :: Lens' EMRCluster (Val Text)
diff --git a/library-gen/Stratosphere/Resources/EMRInstanceGroupConfig.hs b/library-gen/Stratosphere/Resources/EMRInstanceGroupConfig.hs
--- a/library-gen/Stratosphere/Resources/EMRInstanceGroupConfig.hs
+++ b/library-gen/Stratosphere/Resources/EMRInstanceGroupConfig.hs
@@ -12,6 +12,7 @@
 import Data.Text
 
 import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRInstanceGroupConfigAutoScalingPolicy
 import Stratosphere.ResourceProperties.EMRInstanceGroupConfigConfiguration
 import Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsConfiguration
 
@@ -19,7 +20,8 @@
 -- 'emrInstanceGroupConfig' for a more convenient constructor.
 data EMRInstanceGroupConfig =
   EMRInstanceGroupConfig
-  { _eMRInstanceGroupConfigBidPrice :: Maybe (Val Text)
+  { _eMRInstanceGroupConfigAutoScalingPolicy :: Maybe EMRInstanceGroupConfigAutoScalingPolicy
+  , _eMRInstanceGroupConfigBidPrice :: Maybe (Val Text)
   , _eMRInstanceGroupConfigConfigurations :: Maybe [EMRInstanceGroupConfigConfiguration]
   , _eMRInstanceGroupConfigEbsConfiguration :: Maybe EMRInstanceGroupConfigEbsConfiguration
   , _eMRInstanceGroupConfigInstanceCount :: Val Integer'
@@ -34,7 +36,8 @@
   toJSON EMRInstanceGroupConfig{..} =
     object $
     catMaybes
-    [ ("BidPrice" .=) <$> _eMRInstanceGroupConfigBidPrice
+    [ ("AutoScalingPolicy" .=) <$> _eMRInstanceGroupConfigAutoScalingPolicy
+    , ("BidPrice" .=) <$> _eMRInstanceGroupConfigBidPrice
     , ("Configurations" .=) <$> _eMRInstanceGroupConfigConfigurations
     , ("EbsConfiguration" .=) <$> _eMRInstanceGroupConfigEbsConfiguration
     , Just ("InstanceCount" .= _eMRInstanceGroupConfigInstanceCount)
@@ -48,6 +51,7 @@
 instance FromJSON EMRInstanceGroupConfig where
   parseJSON (Object obj) =
     EMRInstanceGroupConfig <$>
+      obj .:? "AutoScalingPolicy" <*>
       obj .:? "BidPrice" <*>
       obj .:? "Configurations" <*>
       obj .:? "EbsConfiguration" <*>
@@ -69,7 +73,8 @@
   -> EMRInstanceGroupConfig
 emrInstanceGroupConfig instanceCountarg instanceRolearg instanceTypearg jobFlowIdarg =
   EMRInstanceGroupConfig
-  { _eMRInstanceGroupConfigBidPrice = Nothing
+  { _eMRInstanceGroupConfigAutoScalingPolicy = Nothing
+  , _eMRInstanceGroupConfigBidPrice = Nothing
   , _eMRInstanceGroupConfigConfigurations = Nothing
   , _eMRInstanceGroupConfigEbsConfiguration = Nothing
   , _eMRInstanceGroupConfigInstanceCount = instanceCountarg
@@ -79,6 +84,10 @@
   , _eMRInstanceGroupConfigMarket = Nothing
   , _eMRInstanceGroupConfigName = Nothing
   }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-elasticmapreduce-instancegroupconfig-autoscalingpolicy
+emrigcAutoScalingPolicy :: Lens' EMRInstanceGroupConfig (Maybe EMRInstanceGroupConfigAutoScalingPolicy)
+emrigcAutoScalingPolicy = lens _eMRInstanceGroupConfigAutoScalingPolicy (\s a -> s { _eMRInstanceGroupConfigAutoScalingPolicy = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html#cfn-emr-instancegroupconfig-bidprice
 emrigcBidPrice :: Lens' EMRInstanceGroupConfig (Maybe (Val Text))
diff --git a/library-gen/Stratosphere/Resources/EMRSecurityConfiguration.hs b/library-gen/Stratosphere/Resources/EMRSecurityConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EMRSecurityConfiguration.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-securityconfiguration.html
+
+module Stratosphere.Resources.EMRSecurityConfiguration where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for EMRSecurityConfiguration. See
+-- 'emrSecurityConfiguration' for a more convenient constructor.
+data EMRSecurityConfiguration =
+  EMRSecurityConfiguration
+  { _eMRSecurityConfigurationName :: Maybe (Val Text)
+  , _eMRSecurityConfigurationSecurityConfiguration :: Object
+  } deriving (Show, Eq)
+
+instance ToJSON EMRSecurityConfiguration where
+  toJSON EMRSecurityConfiguration{..} =
+    object $
+    catMaybes
+    [ ("Name" .=) <$> _eMRSecurityConfigurationName
+    , Just ("SecurityConfiguration" .= _eMRSecurityConfigurationSecurityConfiguration)
+    ]
+
+instance FromJSON EMRSecurityConfiguration where
+  parseJSON (Object obj) =
+    EMRSecurityConfiguration <$>
+      obj .:? "Name" <*>
+      obj .: "SecurityConfiguration"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRSecurityConfiguration' containing required fields as
+-- arguments.
+emrSecurityConfiguration
+  :: Object -- ^ 'emrscSecurityConfiguration'
+  -> EMRSecurityConfiguration
+emrSecurityConfiguration securityConfigurationarg =
+  EMRSecurityConfiguration
+  { _eMRSecurityConfigurationName = Nothing
+  , _eMRSecurityConfigurationSecurityConfiguration = securityConfigurationarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-securityconfiguration.html#cfn-emr-securityconfiguration-name
+emrscName :: Lens' EMRSecurityConfiguration (Maybe (Val Text))
+emrscName = lens _eMRSecurityConfigurationName (\s a -> s { _eMRSecurityConfigurationName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-securityconfiguration.html#cfn-emr-securityconfiguration-securityconfiguration
+emrscSecurityConfiguration :: Lens' EMRSecurityConfiguration Object
+emrscSecurityConfiguration = lens _eMRSecurityConfigurationSecurityConfiguration (\s a -> s { _eMRSecurityConfigurationSecurityConfiguration = a })
diff --git a/library-gen/Stratosphere/Resources/IAMManagedPolicy.hs b/library-gen/Stratosphere/Resources/IAMManagedPolicy.hs
--- a/library-gen/Stratosphere/Resources/IAMManagedPolicy.hs
+++ b/library-gen/Stratosphere/Resources/IAMManagedPolicy.hs
@@ -20,8 +20,9 @@
   IAMManagedPolicy
   { _iAMManagedPolicyDescription :: Maybe (Val Text)
   , _iAMManagedPolicyGroups :: Maybe [Val Text]
+  , _iAMManagedPolicyManagedPolicyName :: Maybe (Val Text)
   , _iAMManagedPolicyPath :: Maybe (Val Text)
-  , _iAMManagedPolicyPolicyDocument :: Maybe Object
+  , _iAMManagedPolicyPolicyDocument :: Object
   , _iAMManagedPolicyRoles :: Maybe [Val Text]
   , _iAMManagedPolicyUsers :: Maybe [Val Text]
   } deriving (Show, Eq)
@@ -32,8 +33,9 @@
     catMaybes
     [ ("Description" .=) <$> _iAMManagedPolicyDescription
     , ("Groups" .=) <$> _iAMManagedPolicyGroups
+    , ("ManagedPolicyName" .=) <$> _iAMManagedPolicyManagedPolicyName
     , ("Path" .=) <$> _iAMManagedPolicyPath
-    , ("PolicyDocument" .=) <$> _iAMManagedPolicyPolicyDocument
+    , Just ("PolicyDocument" .= _iAMManagedPolicyPolicyDocument)
     , ("Roles" .=) <$> _iAMManagedPolicyRoles
     , ("Users" .=) <$> _iAMManagedPolicyUsers
     ]
@@ -43,8 +45,9 @@
     IAMManagedPolicy <$>
       obj .:? "Description" <*>
       obj .:? "Groups" <*>
+      obj .:? "ManagedPolicyName" <*>
       obj .:? "Path" <*>
-      obj .:? "PolicyDocument" <*>
+      obj .: "PolicyDocument" <*>
       obj .:? "Roles" <*>
       obj .:? "Users"
   parseJSON _ = mempty
@@ -52,13 +55,15 @@
 -- | Constructor for 'IAMManagedPolicy' containing required fields as
 -- arguments.
 iamManagedPolicy
-  :: IAMManagedPolicy
-iamManagedPolicy  =
+  :: Object -- ^ 'iammpPolicyDocument'
+  -> IAMManagedPolicy
+iamManagedPolicy policyDocumentarg =
   IAMManagedPolicy
   { _iAMManagedPolicyDescription = Nothing
   , _iAMManagedPolicyGroups = Nothing
+  , _iAMManagedPolicyManagedPolicyName = Nothing
   , _iAMManagedPolicyPath = Nothing
-  , _iAMManagedPolicyPolicyDocument = Nothing
+  , _iAMManagedPolicyPolicyDocument = policyDocumentarg
   , _iAMManagedPolicyRoles = Nothing
   , _iAMManagedPolicyUsers = Nothing
   }
@@ -71,12 +76,16 @@
 iammpGroups :: Lens' IAMManagedPolicy (Maybe [Val Text])
 iammpGroups = lens _iAMManagedPolicyGroups (\s a -> s { _iAMManagedPolicyGroups = a })
 
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html#cfn-iam-managedpolicy-managedpolicyname
+iammpManagedPolicyName :: Lens' IAMManagedPolicy (Maybe (Val Text))
+iammpManagedPolicyName = lens _iAMManagedPolicyManagedPolicyName (\s a -> s { _iAMManagedPolicyManagedPolicyName = a })
+
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html#cfn-ec2-dhcpoptions-path
 iammpPath :: Lens' IAMManagedPolicy (Maybe (Val Text))
 iammpPath = lens _iAMManagedPolicyPath (\s a -> s { _iAMManagedPolicyPath = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html#cfn-iam-managedpolicy-policydocument
-iammpPolicyDocument :: Lens' IAMManagedPolicy (Maybe Object)
+iammpPolicyDocument :: Lens' IAMManagedPolicy Object
 iammpPolicyDocument = lens _iAMManagedPolicyPolicyDocument (\s a -> s { _iAMManagedPolicyPolicyDocument = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html#cfn-iam-managedpolicy-roles
diff --git a/library-gen/Stratosphere/Resources/LambdaFunction.hs b/library-gen/Stratosphere/Resources/LambdaFunction.hs
--- a/library-gen/Stratosphere/Resources/LambdaFunction.hs
+++ b/library-gen/Stratosphere/Resources/LambdaFunction.hs
@@ -16,6 +16,8 @@
 import Stratosphere.ResourceProperties.LambdaFunctionCode
 import Stratosphere.ResourceProperties.LambdaFunctionDeadLetterConfig
 import Stratosphere.ResourceProperties.LambdaFunctionEnvironment
+import Stratosphere.ResourceProperties.Tag
+import Stratosphere.ResourceProperties.LambdaFunctionTracingConfig
 import Stratosphere.ResourceProperties.LambdaFunctionVpcConfig
 
 -- | Full data type definition for LambdaFunction. See 'lambdaFunction' for a
@@ -32,7 +34,9 @@
   , _lambdaFunctionMemorySize :: Maybe (Val Integer')
   , _lambdaFunctionRole :: Val Text
   , _lambdaFunctionRuntime :: Val Runtime
+  , _lambdaFunctionTags :: Maybe [Tag]
   , _lambdaFunctionTimeout :: Maybe (Val Integer')
+  , _lambdaFunctionTracingConfig :: Maybe LambdaFunctionTracingConfig
   , _lambdaFunctionVpcConfig :: Maybe LambdaFunctionVpcConfig
   } deriving (Show, Eq)
 
@@ -50,7 +54,9 @@
     , ("MemorySize" .=) <$> _lambdaFunctionMemorySize
     , Just ("Role" .= _lambdaFunctionRole)
     , Just ("Runtime" .= _lambdaFunctionRuntime)
+    , ("Tags" .=) <$> _lambdaFunctionTags
     , ("Timeout" .=) <$> _lambdaFunctionTimeout
+    , ("TracingConfig" .=) <$> _lambdaFunctionTracingConfig
     , ("VpcConfig" .=) <$> _lambdaFunctionVpcConfig
     ]
 
@@ -67,7 +73,9 @@
       obj .:? "MemorySize" <*>
       obj .: "Role" <*>
       obj .: "Runtime" <*>
+      obj .:? "Tags" <*>
       obj .:? "Timeout" <*>
+      obj .:? "TracingConfig" <*>
       obj .:? "VpcConfig"
   parseJSON _ = mempty
 
@@ -90,7 +98,9 @@
   , _lambdaFunctionMemorySize = Nothing
   , _lambdaFunctionRole = rolearg
   , _lambdaFunctionRuntime = runtimearg
+  , _lambdaFunctionTags = Nothing
   , _lambdaFunctionTimeout = Nothing
+  , _lambdaFunctionTracingConfig = Nothing
   , _lambdaFunctionVpcConfig = Nothing
   }
 
@@ -134,9 +144,17 @@
 lfRuntime :: Lens' LambdaFunction (Val Runtime)
 lfRuntime = lens _lambdaFunctionRuntime (\s a -> s { _lambdaFunctionRuntime = a })
 
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-tags
+lfTags :: Lens' LambdaFunction (Maybe [Tag])
+lfTags = lens _lambdaFunctionTags (\s a -> s { _lambdaFunctionTags = a })
+
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-timeout
 lfTimeout :: Lens' LambdaFunction (Maybe (Val Integer'))
 lfTimeout = lens _lambdaFunctionTimeout (\s a -> s { _lambdaFunctionTimeout = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-tracingconfig
+lfTracingConfig :: Lens' LambdaFunction (Maybe LambdaFunctionTracingConfig)
+lfTracingConfig = lens _lambdaFunctionTracingConfig (\s a -> s { _lambdaFunctionTracingConfig = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-vpcconfig
 lfVpcConfig :: Lens' LambdaFunction (Maybe LambdaFunctionVpcConfig)
diff --git a/library-gen/Stratosphere/Resources/RedshiftCluster.hs b/library-gen/Stratosphere/Resources/RedshiftCluster.hs
--- a/library-gen/Stratosphere/Resources/RedshiftCluster.hs
+++ b/library-gen/Stratosphere/Resources/RedshiftCluster.hs
@@ -12,13 +12,13 @@
 import Data.Text
 
 import Stratosphere.Values
-
+import Stratosphere.ResourceProperties.Tag
 
 -- | Full data type definition for RedshiftCluster. See 'redshiftCluster' for
 -- a more convenient constructor.
 data RedshiftCluster =
   RedshiftCluster
-  { _redshiftClusterAllowVersionUpdate :: Maybe (Val Bool')
+  { _redshiftClusterAllowVersionUpgrade :: Maybe (Val Bool')
   , _redshiftClusterAutomatedSnapshotRetentionPeriod :: Maybe (Val Integer')
   , _redshiftClusterAvailabilityZone :: Maybe (Val Text)
   , _redshiftClusterClusterParameterGroupName :: Maybe (Val Text)
@@ -30,6 +30,8 @@
   , _redshiftClusterElasticIp :: Maybe (Val Text)
   , _redshiftClusterEncrypted :: Maybe (Val Bool')
   , _redshiftClusterHsmClientCertificateIdentifier :: Maybe (Val Text)
+  , _redshiftClusterHsmConfigurationIdentifier :: Maybe (Val Text)
+  , _redshiftClusterIamRoles :: Maybe [Val Text]
   , _redshiftClusterKmsKeyId :: Maybe (Val Text)
   , _redshiftClusterMasterUserPassword :: Val Text
   , _redshiftClusterMasterUsername :: Val Text
@@ -41,6 +43,7 @@
   , _redshiftClusterPubliclyAccessible :: Maybe (Val Bool')
   , _redshiftClusterSnapshotClusterIdentifier :: Maybe (Val Text)
   , _redshiftClusterSnapshotIdentifier :: Maybe (Val Text)
+  , _redshiftClusterTags :: Maybe [Tag]
   , _redshiftClusterVpcSecurityGroupIds :: Maybe [Val Text]
   } deriving (Show, Eq)
 
@@ -48,7 +51,7 @@
   toJSON RedshiftCluster{..} =
     object $
     catMaybes
-    [ ("AllowVersionUpdate" .=) <$> _redshiftClusterAllowVersionUpdate
+    [ ("AllowVersionUpgrade" .=) <$> _redshiftClusterAllowVersionUpgrade
     , ("AutomatedSnapshotRetentionPeriod" .=) <$> _redshiftClusterAutomatedSnapshotRetentionPeriod
     , ("AvailabilityZone" .=) <$> _redshiftClusterAvailabilityZone
     , ("ClusterParameterGroupName" .=) <$> _redshiftClusterClusterParameterGroupName
@@ -60,6 +63,8 @@
     , ("ElasticIp" .=) <$> _redshiftClusterElasticIp
     , ("Encrypted" .=) <$> _redshiftClusterEncrypted
     , ("HsmClientCertificateIdentifier" .=) <$> _redshiftClusterHsmClientCertificateIdentifier
+    , ("HsmConfigurationIdentifier" .=) <$> _redshiftClusterHsmConfigurationIdentifier
+    , ("IamRoles" .=) <$> _redshiftClusterIamRoles
     , ("KmsKeyId" .=) <$> _redshiftClusterKmsKeyId
     , Just ("MasterUserPassword" .= _redshiftClusterMasterUserPassword)
     , Just ("MasterUsername" .= _redshiftClusterMasterUsername)
@@ -71,13 +76,14 @@
     , ("PubliclyAccessible" .=) <$> _redshiftClusterPubliclyAccessible
     , ("SnapshotClusterIdentifier" .=) <$> _redshiftClusterSnapshotClusterIdentifier
     , ("SnapshotIdentifier" .=) <$> _redshiftClusterSnapshotIdentifier
+    , ("Tags" .=) <$> _redshiftClusterTags
     , ("VpcSecurityGroupIds" .=) <$> _redshiftClusterVpcSecurityGroupIds
     ]
 
 instance FromJSON RedshiftCluster where
   parseJSON (Object obj) =
     RedshiftCluster <$>
-      obj .:? "AllowVersionUpdate" <*>
+      obj .:? "AllowVersionUpgrade" <*>
       obj .:? "AutomatedSnapshotRetentionPeriod" <*>
       obj .:? "AvailabilityZone" <*>
       obj .:? "ClusterParameterGroupName" <*>
@@ -89,6 +95,8 @@
       obj .:? "ElasticIp" <*>
       obj .:? "Encrypted" <*>
       obj .:? "HsmClientCertificateIdentifier" <*>
+      obj .:? "HsmConfigurationIdentifier" <*>
+      obj .:? "IamRoles" <*>
       obj .:? "KmsKeyId" <*>
       obj .: "MasterUserPassword" <*>
       obj .: "MasterUsername" <*>
@@ -100,6 +108,7 @@
       obj .:? "PubliclyAccessible" <*>
       obj .:? "SnapshotClusterIdentifier" <*>
       obj .:? "SnapshotIdentifier" <*>
+      obj .:? "Tags" <*>
       obj .:? "VpcSecurityGroupIds"
   parseJSON _ = mempty
 
@@ -114,7 +123,7 @@
   -> RedshiftCluster
 redshiftCluster clusterTypearg dBNamearg masterUserPasswordarg masterUsernamearg nodeTypearg =
   RedshiftCluster
-  { _redshiftClusterAllowVersionUpdate = Nothing
+  { _redshiftClusterAllowVersionUpgrade = Nothing
   , _redshiftClusterAutomatedSnapshotRetentionPeriod = Nothing
   , _redshiftClusterAvailabilityZone = Nothing
   , _redshiftClusterClusterParameterGroupName = Nothing
@@ -126,6 +135,8 @@
   , _redshiftClusterElasticIp = Nothing
   , _redshiftClusterEncrypted = Nothing
   , _redshiftClusterHsmClientCertificateIdentifier = Nothing
+  , _redshiftClusterHsmConfigurationIdentifier = Nothing
+  , _redshiftClusterIamRoles = Nothing
   , _redshiftClusterKmsKeyId = Nothing
   , _redshiftClusterMasterUserPassword = masterUserPasswordarg
   , _redshiftClusterMasterUsername = masterUsernamearg
@@ -137,12 +148,13 @@
   , _redshiftClusterPubliclyAccessible = Nothing
   , _redshiftClusterSnapshotClusterIdentifier = Nothing
   , _redshiftClusterSnapshotIdentifier = Nothing
+  , _redshiftClusterTags = Nothing
   , _redshiftClusterVpcSecurityGroupIds = Nothing
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-allowversionupgrade
-rcAllowVersionUpdate :: Lens' RedshiftCluster (Maybe (Val Bool'))
-rcAllowVersionUpdate = lens _redshiftClusterAllowVersionUpdate (\s a -> s { _redshiftClusterAllowVersionUpdate = a })
+rcAllowVersionUpgrade :: Lens' RedshiftCluster (Maybe (Val Bool'))
+rcAllowVersionUpgrade = lens _redshiftClusterAllowVersionUpgrade (\s a -> s { _redshiftClusterAllowVersionUpgrade = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-automatedsnapshotretentionperiod
 rcAutomatedSnapshotRetentionPeriod :: Lens' RedshiftCluster (Maybe (Val Integer'))
@@ -188,6 +200,14 @@
 rcHsmClientCertificateIdentifier :: Lens' RedshiftCluster (Maybe (Val Text))
 rcHsmClientCertificateIdentifier = lens _redshiftClusterHsmClientCertificateIdentifier (\s a -> s { _redshiftClusterHsmClientCertificateIdentifier = a })
 
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-HsmConfigurationIdentifier
+rcHsmConfigurationIdentifier :: Lens' RedshiftCluster (Maybe (Val Text))
+rcHsmConfigurationIdentifier = lens _redshiftClusterHsmConfigurationIdentifier (\s a -> s { _redshiftClusterHsmConfigurationIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-iamroles
+rcIamRoles :: Lens' RedshiftCluster (Maybe [Val Text])
+rcIamRoles = lens _redshiftClusterIamRoles (\s a -> s { _redshiftClusterIamRoles = a })
+
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-kmskeyid
 rcKmsKeyId :: Lens' RedshiftCluster (Maybe (Val Text))
 rcKmsKeyId = lens _redshiftClusterKmsKeyId (\s a -> s { _redshiftClusterKmsKeyId = a })
@@ -231,6 +251,10 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-snapshotidentifier
 rcSnapshotIdentifier :: Lens' RedshiftCluster (Maybe (Val Text))
 rcSnapshotIdentifier = lens _redshiftClusterSnapshotIdentifier (\s a -> s { _redshiftClusterSnapshotIdentifier = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-tags
+rcTags :: Lens' RedshiftCluster (Maybe [Tag])
+rcTags = lens _redshiftClusterTags (\s a -> s { _redshiftClusterTags = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-vpcsecuritygroupids
 rcVpcSecurityGroupIds :: Lens' RedshiftCluster (Maybe [Val Text])
diff --git a/library-gen/Stratosphere/Resources/RedshiftClusterParameterGroup.hs b/library-gen/Stratosphere/Resources/RedshiftClusterParameterGroup.hs
--- a/library-gen/Stratosphere/Resources/RedshiftClusterParameterGroup.hs
+++ b/library-gen/Stratosphere/Resources/RedshiftClusterParameterGroup.hs
@@ -13,6 +13,7 @@
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.RedshiftClusterParameterGroupParameter
+import Stratosphere.ResourceProperties.Tag
 
 -- | Full data type definition for RedshiftClusterParameterGroup. See
 -- 'redshiftClusterParameterGroup' for a more convenient constructor.
@@ -21,6 +22,7 @@
   { _redshiftClusterParameterGroupDescription :: Val Text
   , _redshiftClusterParameterGroupParameterGroupFamily :: Val Text
   , _redshiftClusterParameterGroupParameters :: Maybe [RedshiftClusterParameterGroupParameter]
+  , _redshiftClusterParameterGroupTags :: Maybe [Tag]
   } deriving (Show, Eq)
 
 instance ToJSON RedshiftClusterParameterGroup where
@@ -30,6 +32,7 @@
     [ Just ("Description" .= _redshiftClusterParameterGroupDescription)
     , Just ("ParameterGroupFamily" .= _redshiftClusterParameterGroupParameterGroupFamily)
     , ("Parameters" .=) <$> _redshiftClusterParameterGroupParameters
+    , ("Tags" .=) <$> _redshiftClusterParameterGroupTags
     ]
 
 instance FromJSON RedshiftClusterParameterGroup where
@@ -37,7 +40,8 @@
     RedshiftClusterParameterGroup <$>
       obj .: "Description" <*>
       obj .: "ParameterGroupFamily" <*>
-      obj .:? "Parameters"
+      obj .:? "Parameters" <*>
+      obj .:? "Tags"
   parseJSON _ = mempty
 
 -- | Constructor for 'RedshiftClusterParameterGroup' containing required
@@ -51,6 +55,7 @@
   { _redshiftClusterParameterGroupDescription = descriptionarg
   , _redshiftClusterParameterGroupParameterGroupFamily = parameterGroupFamilyarg
   , _redshiftClusterParameterGroupParameters = Nothing
+  , _redshiftClusterParameterGroupTags = Nothing
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clusterparametergroup.html#cfn-redshift-clusterparametergroup-description
@@ -64,3 +69,7 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clusterparametergroup.html#cfn-redshift-clusterparametergroup-parameters
 rcpgParameters :: Lens' RedshiftClusterParameterGroup (Maybe [RedshiftClusterParameterGroupParameter])
 rcpgParameters = lens _redshiftClusterParameterGroupParameters (\s a -> s { _redshiftClusterParameterGroupParameters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clusterparametergroup.html#cfn-redshift-clusterparametergroup-tags
+rcpgTags :: Lens' RedshiftClusterParameterGroup (Maybe [Tag])
+rcpgTags = lens _redshiftClusterParameterGroupTags (\s a -> s { _redshiftClusterParameterGroupTags = a })
diff --git a/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroup.hs b/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroup.hs
--- a/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroup.hs
+++ b/library-gen/Stratosphere/Resources/RedshiftClusterSecurityGroup.hs
@@ -12,13 +12,14 @@
 import Data.Text
 
 import Stratosphere.Values
-
+import Stratosphere.ResourceProperties.Tag
 
 -- | Full data type definition for RedshiftClusterSecurityGroup. See
 -- 'redshiftClusterSecurityGroup' for a more convenient constructor.
 data RedshiftClusterSecurityGroup =
   RedshiftClusterSecurityGroup
   { _redshiftClusterSecurityGroupDescription :: Val Text
+  , _redshiftClusterSecurityGroupTags :: Maybe [Tag]
   } deriving (Show, Eq)
 
 instance ToJSON RedshiftClusterSecurityGroup where
@@ -26,12 +27,14 @@
     object $
     catMaybes
     [ Just ("Description" .= _redshiftClusterSecurityGroupDescription)
+    , ("Tags" .=) <$> _redshiftClusterSecurityGroupTags
     ]
 
 instance FromJSON RedshiftClusterSecurityGroup where
   parseJSON (Object obj) =
     RedshiftClusterSecurityGroup <$>
-      obj .: "Description"
+      obj .: "Description" <*>
+      obj .:? "Tags"
   parseJSON _ = mempty
 
 -- | Constructor for 'RedshiftClusterSecurityGroup' containing required fields
@@ -42,8 +45,13 @@
 redshiftClusterSecurityGroup descriptionarg =
   RedshiftClusterSecurityGroup
   { _redshiftClusterSecurityGroupDescription = descriptionarg
+  , _redshiftClusterSecurityGroupTags = Nothing
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersecuritygroup.html#cfn-redshift-clustersecuritygroup-description
 rcsegDescription :: Lens' RedshiftClusterSecurityGroup (Val Text)
 rcsegDescription = lens _redshiftClusterSecurityGroupDescription (\s a -> s { _redshiftClusterSecurityGroupDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersecuritygroup.html#cfn-redshift-clustersecuritygroup-tags
+rcsegTags :: Lens' RedshiftClusterSecurityGroup (Maybe [Tag])
+rcsegTags = lens _redshiftClusterSecurityGroupTags (\s a -> s { _redshiftClusterSecurityGroupTags = a })
diff --git a/library-gen/Stratosphere/Resources/RedshiftClusterSubnetGroup.hs b/library-gen/Stratosphere/Resources/RedshiftClusterSubnetGroup.hs
--- a/library-gen/Stratosphere/Resources/RedshiftClusterSubnetGroup.hs
+++ b/library-gen/Stratosphere/Resources/RedshiftClusterSubnetGroup.hs
@@ -12,7 +12,7 @@
 import Data.Text
 
 import Stratosphere.Values
-
+import Stratosphere.ResourceProperties.Tag
 
 -- | Full data type definition for RedshiftClusterSubnetGroup. See
 -- 'redshiftClusterSubnetGroup' for a more convenient constructor.
@@ -20,6 +20,7 @@
   RedshiftClusterSubnetGroup
   { _redshiftClusterSubnetGroupDescription :: Val Text
   , _redshiftClusterSubnetGroupSubnetIds :: [Val Text]
+  , _redshiftClusterSubnetGroupTags :: Maybe [Tag]
   } deriving (Show, Eq)
 
 instance ToJSON RedshiftClusterSubnetGroup where
@@ -28,13 +29,15 @@
     catMaybes
     [ Just ("Description" .= _redshiftClusterSubnetGroupDescription)
     , Just ("SubnetIds" .= _redshiftClusterSubnetGroupSubnetIds)
+    , ("Tags" .=) <$> _redshiftClusterSubnetGroupTags
     ]
 
 instance FromJSON RedshiftClusterSubnetGroup where
   parseJSON (Object obj) =
     RedshiftClusterSubnetGroup <$>
       obj .: "Description" <*>
-      obj .: "SubnetIds"
+      obj .: "SubnetIds" <*>
+      obj .:? "Tags"
   parseJSON _ = mempty
 
 -- | Constructor for 'RedshiftClusterSubnetGroup' containing required fields
@@ -47,6 +50,7 @@
   RedshiftClusterSubnetGroup
   { _redshiftClusterSubnetGroupDescription = descriptionarg
   , _redshiftClusterSubnetGroupSubnetIds = subnetIdsarg
+  , _redshiftClusterSubnetGroupTags = Nothing
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersubnetgroup.html#cfn-redshift-clustersubnetgroup-description
@@ -56,3 +60,7 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersubnetgroup.html#cfn-redshift-clustersubnetgroup-subnetids
 rcsugSubnetIds :: Lens' RedshiftClusterSubnetGroup [Val Text]
 rcsugSubnetIds = lens _redshiftClusterSubnetGroupSubnetIds (\s a -> s { _redshiftClusterSubnetGroupSubnetIds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersubnetgroup.html#cfn-redshift-clustersubnetgroup-tags
+rcsugTags :: Lens' RedshiftClusterSubnetGroup (Maybe [Tag])
+rcsugTags = lens _redshiftClusterSubnetGroupTags (\s a -> s { _redshiftClusterSubnetGroupTags = a })
diff --git a/library-gen/Stratosphere/Resources/SSMParameter.hs b/library-gen/Stratosphere/Resources/SSMParameter.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/SSMParameter.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-parameter.html
+
+module Stratosphere.Resources.SSMParameter where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for SSMParameter. See 'ssmParameter' for a more
+-- convenient constructor.
+data SSMParameter =
+  SSMParameter
+  { _sSMParameterDescription :: Maybe (Val Text)
+  , _sSMParameterName :: Maybe (Val Text)
+  , _sSMParameterType :: Val Text
+  , _sSMParameterValue :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON SSMParameter where
+  toJSON SSMParameter{..} =
+    object $
+    catMaybes
+    [ ("Description" .=) <$> _sSMParameterDescription
+    , ("Name" .=) <$> _sSMParameterName
+    , Just ("Type" .= _sSMParameterType)
+    , Just ("Value" .= _sSMParameterValue)
+    ]
+
+instance FromJSON SSMParameter where
+  parseJSON (Object obj) =
+    SSMParameter <$>
+      obj .:? "Description" <*>
+      obj .:? "Name" <*>
+      obj .: "Type" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
+
+-- | Constructor for 'SSMParameter' containing required fields as arguments.
+ssmParameter
+  :: Val Text -- ^ 'ssmpType'
+  -> Val Text -- ^ 'ssmpValue'
+  -> SSMParameter
+ssmParameter typearg valuearg =
+  SSMParameter
+  { _sSMParameterDescription = Nothing
+  , _sSMParameterName = Nothing
+  , _sSMParameterType = typearg
+  , _sSMParameterValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-parameter.html#cfn-ssm-parameter-description
+ssmpDescription :: Lens' SSMParameter (Maybe (Val Text))
+ssmpDescription = lens _sSMParameterDescription (\s a -> s { _sSMParameterDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-parameter.html#cfn-ssm-parameter-name
+ssmpName :: Lens' SSMParameter (Maybe (Val Text))
+ssmpName = lens _sSMParameterName (\s a -> s { _sSMParameterName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-parameter.html#cfn-ssm-parameter-type
+ssmpType :: Lens' SSMParameter (Val Text)
+ssmpType = lens _sSMParameterType (\s a -> s { _sSMParameterType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-parameter.html#cfn-ssm-parameter-value
+ssmpValue :: Lens' SSMParameter (Val Text)
+ssmpValue = lens _sSMParameterValue (\s a -> s { _sSMParameterValue = a })
diff --git a/library-gen/Stratosphere/Resources/StepFunctionsActivity.hs b/library-gen/Stratosphere/Resources/StepFunctionsActivity.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/StepFunctionsActivity.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-activity.html
+
+module Stratosphere.Resources.StepFunctionsActivity where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for StepFunctionsActivity. See
+-- 'stepFunctionsActivity' for a more convenient constructor.
+data StepFunctionsActivity =
+  StepFunctionsActivity
+  { _stepFunctionsActivityName :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON StepFunctionsActivity where
+  toJSON StepFunctionsActivity{..} =
+    object $
+    catMaybes
+    [ Just ("Name" .= _stepFunctionsActivityName)
+    ]
+
+instance FromJSON StepFunctionsActivity where
+  parseJSON (Object obj) =
+    StepFunctionsActivity <$>
+      obj .: "Name"
+  parseJSON _ = mempty
+
+-- | Constructor for 'StepFunctionsActivity' containing required fields as
+-- arguments.
+stepFunctionsActivity
+  :: Val Text -- ^ 'sfaName'
+  -> StepFunctionsActivity
+stepFunctionsActivity namearg =
+  StepFunctionsActivity
+  { _stepFunctionsActivityName = namearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-activity.html#cfn-stepfunctions-activity-name
+sfaName :: Lens' StepFunctionsActivity (Val Text)
+sfaName = lens _stepFunctionsActivityName (\s a -> s { _stepFunctionsActivityName = a })
diff --git a/library-gen/Stratosphere/Resources/StepFunctionsStateMachine.hs b/library-gen/Stratosphere/Resources/StepFunctionsStateMachine.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/StepFunctionsStateMachine.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html
+
+module Stratosphere.Resources.StepFunctionsStateMachine where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for StepFunctionsStateMachine. See
+-- 'stepFunctionsStateMachine' for a more convenient constructor.
+data StepFunctionsStateMachine =
+  StepFunctionsStateMachine
+  { _stepFunctionsStateMachineDefinitionString :: Val Text
+  , _stepFunctionsStateMachineRoleArn :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON StepFunctionsStateMachine where
+  toJSON StepFunctionsStateMachine{..} =
+    object $
+    catMaybes
+    [ Just ("DefinitionString" .= _stepFunctionsStateMachineDefinitionString)
+    , Just ("RoleArn" .= _stepFunctionsStateMachineRoleArn)
+    ]
+
+instance FromJSON StepFunctionsStateMachine where
+  parseJSON (Object obj) =
+    StepFunctionsStateMachine <$>
+      obj .: "DefinitionString" <*>
+      obj .: "RoleArn"
+  parseJSON _ = mempty
+
+-- | Constructor for 'StepFunctionsStateMachine' containing required fields as
+-- arguments.
+stepFunctionsStateMachine
+  :: Val Text -- ^ 'sfsmDefinitionString'
+  -> Val Text -- ^ 'sfsmRoleArn'
+  -> StepFunctionsStateMachine
+stepFunctionsStateMachine definitionStringarg roleArnarg =
+  StepFunctionsStateMachine
+  { _stepFunctionsStateMachineDefinitionString = definitionStringarg
+  , _stepFunctionsStateMachineRoleArn = roleArnarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definitionstring
+sfsmDefinitionString :: Lens' StepFunctionsStateMachine (Val Text)
+sfsmDefinitionString = lens _stepFunctionsStateMachineDefinitionString (\s a -> s { _stepFunctionsStateMachineDefinitionString = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-rolearn
+sfsmRoleArn :: Lens' StepFunctionsStateMachine (Val Text)
+sfsmRoleArn = lens _stepFunctionsStateMachineRoleArn (\s a -> s { _stepFunctionsStateMachineRoleArn = a })
diff --git a/library-gen/Stratosphere/Resources/WAFRegionalByteMatchSet.hs b/library-gen/Stratosphere/Resources/WAFRegionalByteMatchSet.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WAFRegionalByteMatchSet.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-bytematchset.html
+
+module Stratosphere.Resources.WAFRegionalByteMatchSet where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFRegionalByteMatchSetByteMatchTuple
+
+-- | Full data type definition for WAFRegionalByteMatchSet. See
+-- 'wafRegionalByteMatchSet' for a more convenient constructor.
+data WAFRegionalByteMatchSet =
+  WAFRegionalByteMatchSet
+  { _wAFRegionalByteMatchSetByteMatchTuples :: Maybe [WAFRegionalByteMatchSetByteMatchTuple]
+  , _wAFRegionalByteMatchSetName :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalByteMatchSet where
+  toJSON WAFRegionalByteMatchSet{..} =
+    object $
+    catMaybes
+    [ ("ByteMatchTuples" .=) <$> _wAFRegionalByteMatchSetByteMatchTuples
+    , Just ("Name" .= _wAFRegionalByteMatchSetName)
+    ]
+
+instance FromJSON WAFRegionalByteMatchSet where
+  parseJSON (Object obj) =
+    WAFRegionalByteMatchSet <$>
+      obj .:? "ByteMatchTuples" <*>
+      obj .: "Name"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalByteMatchSet' containing required fields as
+-- arguments.
+wafRegionalByteMatchSet
+  :: Val Text -- ^ 'wafrbmsName'
+  -> WAFRegionalByteMatchSet
+wafRegionalByteMatchSet namearg =
+  WAFRegionalByteMatchSet
+  { _wAFRegionalByteMatchSetByteMatchTuples = Nothing
+  , _wAFRegionalByteMatchSetName = namearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-bytematchset.html#cfn-wafregional-bytematchset-bytematchtuples
+wafrbmsByteMatchTuples :: Lens' WAFRegionalByteMatchSet (Maybe [WAFRegionalByteMatchSetByteMatchTuple])
+wafrbmsByteMatchTuples = lens _wAFRegionalByteMatchSetByteMatchTuples (\s a -> s { _wAFRegionalByteMatchSetByteMatchTuples = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-bytematchset.html#cfn-wafregional-bytematchset-name
+wafrbmsName :: Lens' WAFRegionalByteMatchSet (Val Text)
+wafrbmsName = lens _wAFRegionalByteMatchSetName (\s a -> s { _wAFRegionalByteMatchSetName = a })
diff --git a/library-gen/Stratosphere/Resources/WAFRegionalIPSet.hs b/library-gen/Stratosphere/Resources/WAFRegionalIPSet.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WAFRegionalIPSet.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-ipset.html
+
+module Stratosphere.Resources.WAFRegionalIPSet where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFRegionalIPSetIPSetDescriptor
+
+-- | Full data type definition for WAFRegionalIPSet. See 'wafRegionalIPSet'
+-- for a more convenient constructor.
+data WAFRegionalIPSet =
+  WAFRegionalIPSet
+  { _wAFRegionalIPSetIPSetDescriptors :: Maybe [WAFRegionalIPSetIPSetDescriptor]
+  , _wAFRegionalIPSetName :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalIPSet where
+  toJSON WAFRegionalIPSet{..} =
+    object $
+    catMaybes
+    [ ("IPSetDescriptors" .=) <$> _wAFRegionalIPSetIPSetDescriptors
+    , Just ("Name" .= _wAFRegionalIPSetName)
+    ]
+
+instance FromJSON WAFRegionalIPSet where
+  parseJSON (Object obj) =
+    WAFRegionalIPSet <$>
+      obj .:? "IPSetDescriptors" <*>
+      obj .: "Name"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalIPSet' containing required fields as
+-- arguments.
+wafRegionalIPSet
+  :: Val Text -- ^ 'wafripsName'
+  -> WAFRegionalIPSet
+wafRegionalIPSet namearg =
+  WAFRegionalIPSet
+  { _wAFRegionalIPSetIPSetDescriptors = Nothing
+  , _wAFRegionalIPSetName = namearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-ipset.html#cfn-wafregional-ipset-ipsetdescriptors
+wafripsIPSetDescriptors :: Lens' WAFRegionalIPSet (Maybe [WAFRegionalIPSetIPSetDescriptor])
+wafripsIPSetDescriptors = lens _wAFRegionalIPSetIPSetDescriptors (\s a -> s { _wAFRegionalIPSetIPSetDescriptors = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-ipset.html#cfn-wafregional-ipset-name
+wafripsName :: Lens' WAFRegionalIPSet (Val Text)
+wafripsName = lens _wAFRegionalIPSetName (\s a -> s { _wAFRegionalIPSetName = a })
diff --git a/library-gen/Stratosphere/Resources/WAFRegionalRule.hs b/library-gen/Stratosphere/Resources/WAFRegionalRule.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WAFRegionalRule.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-rule.html
+
+module Stratosphere.Resources.WAFRegionalRule where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFRegionalRulePredicate
+
+-- | Full data type definition for WAFRegionalRule. See 'wafRegionalRule' for
+-- a more convenient constructor.
+data WAFRegionalRule =
+  WAFRegionalRule
+  { _wAFRegionalRuleMetricName :: Val Text
+  , _wAFRegionalRuleName :: Val Text
+  , _wAFRegionalRulePredicates :: Maybe [WAFRegionalRulePredicate]
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalRule where
+  toJSON WAFRegionalRule{..} =
+    object $
+    catMaybes
+    [ Just ("MetricName" .= _wAFRegionalRuleMetricName)
+    , Just ("Name" .= _wAFRegionalRuleName)
+    , ("Predicates" .=) <$> _wAFRegionalRulePredicates
+    ]
+
+instance FromJSON WAFRegionalRule where
+  parseJSON (Object obj) =
+    WAFRegionalRule <$>
+      obj .: "MetricName" <*>
+      obj .: "Name" <*>
+      obj .:? "Predicates"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalRule' containing required fields as
+-- arguments.
+wafRegionalRule
+  :: Val Text -- ^ 'wafrrMetricName'
+  -> Val Text -- ^ 'wafrrName'
+  -> WAFRegionalRule
+wafRegionalRule metricNamearg namearg =
+  WAFRegionalRule
+  { _wAFRegionalRuleMetricName = metricNamearg
+  , _wAFRegionalRuleName = namearg
+  , _wAFRegionalRulePredicates = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-rule.html#cfn-wafregional-rule-metricname
+wafrrMetricName :: Lens' WAFRegionalRule (Val Text)
+wafrrMetricName = lens _wAFRegionalRuleMetricName (\s a -> s { _wAFRegionalRuleMetricName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-rule.html#cfn-wafregional-rule-name
+wafrrName :: Lens' WAFRegionalRule (Val Text)
+wafrrName = lens _wAFRegionalRuleName (\s a -> s { _wAFRegionalRuleName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-rule.html#cfn-wafregional-rule-predicates
+wafrrPredicates :: Lens' WAFRegionalRule (Maybe [WAFRegionalRulePredicate])
+wafrrPredicates = lens _wAFRegionalRulePredicates (\s a -> s { _wAFRegionalRulePredicates = a })
diff --git a/library-gen/Stratosphere/Resources/WAFRegionalSizeConstraintSet.hs b/library-gen/Stratosphere/Resources/WAFRegionalSizeConstraintSet.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WAFRegionalSizeConstraintSet.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-sizeconstraintset.html
+
+module Stratosphere.Resources.WAFRegionalSizeConstraintSet where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFRegionalSizeConstraintSetSizeConstraint
+
+-- | Full data type definition for WAFRegionalSizeConstraintSet. See
+-- 'wafRegionalSizeConstraintSet' for a more convenient constructor.
+data WAFRegionalSizeConstraintSet =
+  WAFRegionalSizeConstraintSet
+  { _wAFRegionalSizeConstraintSetName :: Val Text
+  , _wAFRegionalSizeConstraintSetSizeConstraints :: Maybe [WAFRegionalSizeConstraintSetSizeConstraint]
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalSizeConstraintSet where
+  toJSON WAFRegionalSizeConstraintSet{..} =
+    object $
+    catMaybes
+    [ Just ("Name" .= _wAFRegionalSizeConstraintSetName)
+    , ("SizeConstraints" .=) <$> _wAFRegionalSizeConstraintSetSizeConstraints
+    ]
+
+instance FromJSON WAFRegionalSizeConstraintSet where
+  parseJSON (Object obj) =
+    WAFRegionalSizeConstraintSet <$>
+      obj .: "Name" <*>
+      obj .:? "SizeConstraints"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalSizeConstraintSet' containing required fields
+-- as arguments.
+wafRegionalSizeConstraintSet
+  :: Val Text -- ^ 'wafrscsName'
+  -> WAFRegionalSizeConstraintSet
+wafRegionalSizeConstraintSet namearg =
+  WAFRegionalSizeConstraintSet
+  { _wAFRegionalSizeConstraintSetName = namearg
+  , _wAFRegionalSizeConstraintSetSizeConstraints = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-sizeconstraintset.html#cfn-wafregional-sizeconstraintset-name
+wafrscsName :: Lens' WAFRegionalSizeConstraintSet (Val Text)
+wafrscsName = lens _wAFRegionalSizeConstraintSetName (\s a -> s { _wAFRegionalSizeConstraintSetName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-sizeconstraintset.html#cfn-wafregional-sizeconstraintset-sizeconstraints
+wafrscsSizeConstraints :: Lens' WAFRegionalSizeConstraintSet (Maybe [WAFRegionalSizeConstraintSetSizeConstraint])
+wafrscsSizeConstraints = lens _wAFRegionalSizeConstraintSetSizeConstraints (\s a -> s { _wAFRegionalSizeConstraintSetSizeConstraints = a })
diff --git a/library-gen/Stratosphere/Resources/WAFRegionalSqlInjectionMatchSet.hs b/library-gen/Stratosphere/Resources/WAFRegionalSqlInjectionMatchSet.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WAFRegionalSqlInjectionMatchSet.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-sqlinjectionmatchset.html
+
+module Stratosphere.Resources.WAFRegionalSqlInjectionMatchSet where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple
+
+-- | Full data type definition for WAFRegionalSqlInjectionMatchSet. See
+-- 'wafRegionalSqlInjectionMatchSet' for a more convenient constructor.
+data WAFRegionalSqlInjectionMatchSet =
+  WAFRegionalSqlInjectionMatchSet
+  { _wAFRegionalSqlInjectionMatchSetName :: Val Text
+  , _wAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuples :: Maybe [WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple]
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalSqlInjectionMatchSet where
+  toJSON WAFRegionalSqlInjectionMatchSet{..} =
+    object $
+    catMaybes
+    [ Just ("Name" .= _wAFRegionalSqlInjectionMatchSetName)
+    , ("SqlInjectionMatchTuples" .=) <$> _wAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuples
+    ]
+
+instance FromJSON WAFRegionalSqlInjectionMatchSet where
+  parseJSON (Object obj) =
+    WAFRegionalSqlInjectionMatchSet <$>
+      obj .: "Name" <*>
+      obj .:? "SqlInjectionMatchTuples"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalSqlInjectionMatchSet' containing required
+-- fields as arguments.
+wafRegionalSqlInjectionMatchSet
+  :: Val Text -- ^ 'wafrsimsName'
+  -> WAFRegionalSqlInjectionMatchSet
+wafRegionalSqlInjectionMatchSet namearg =
+  WAFRegionalSqlInjectionMatchSet
+  { _wAFRegionalSqlInjectionMatchSetName = namearg
+  , _wAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuples = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-sqlinjectionmatchset.html#cfn-wafregional-sqlinjectionmatchset-name
+wafrsimsName :: Lens' WAFRegionalSqlInjectionMatchSet (Val Text)
+wafrsimsName = lens _wAFRegionalSqlInjectionMatchSetName (\s a -> s { _wAFRegionalSqlInjectionMatchSetName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-sqlinjectionmatchset.html#cfn-wafregional-sqlinjectionmatchset-sqlinjectionmatchtuples
+wafrsimsSqlInjectionMatchTuples :: Lens' WAFRegionalSqlInjectionMatchSet (Maybe [WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple])
+wafrsimsSqlInjectionMatchTuples = lens _wAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuples (\s a -> s { _wAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuples = a })
diff --git a/library-gen/Stratosphere/Resources/WAFRegionalWebACL.hs b/library-gen/Stratosphere/Resources/WAFRegionalWebACL.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WAFRegionalWebACL.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-webacl.html
+
+module Stratosphere.Resources.WAFRegionalWebACL where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFRegionalWebACLAction
+import Stratosphere.ResourceProperties.WAFRegionalWebACLRule
+
+-- | Full data type definition for WAFRegionalWebACL. See 'wafRegionalWebACL'
+-- for a more convenient constructor.
+data WAFRegionalWebACL =
+  WAFRegionalWebACL
+  { _wAFRegionalWebACLDefaultAction :: WAFRegionalWebACLAction
+  , _wAFRegionalWebACLMetricName :: Val Text
+  , _wAFRegionalWebACLName :: Val Text
+  , _wAFRegionalWebACLRules :: Maybe [WAFRegionalWebACLRule]
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalWebACL where
+  toJSON WAFRegionalWebACL{..} =
+    object $
+    catMaybes
+    [ Just ("DefaultAction" .= _wAFRegionalWebACLDefaultAction)
+    , Just ("MetricName" .= _wAFRegionalWebACLMetricName)
+    , Just ("Name" .= _wAFRegionalWebACLName)
+    , ("Rules" .=) <$> _wAFRegionalWebACLRules
+    ]
+
+instance FromJSON WAFRegionalWebACL where
+  parseJSON (Object obj) =
+    WAFRegionalWebACL <$>
+      obj .: "DefaultAction" <*>
+      obj .: "MetricName" <*>
+      obj .: "Name" <*>
+      obj .:? "Rules"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalWebACL' containing required fields as
+-- arguments.
+wafRegionalWebACL
+  :: WAFRegionalWebACLAction -- ^ 'wafrwaclDefaultAction'
+  -> Val Text -- ^ 'wafrwaclMetricName'
+  -> Val Text -- ^ 'wafrwaclName'
+  -> WAFRegionalWebACL
+wafRegionalWebACL defaultActionarg metricNamearg namearg =
+  WAFRegionalWebACL
+  { _wAFRegionalWebACLDefaultAction = defaultActionarg
+  , _wAFRegionalWebACLMetricName = metricNamearg
+  , _wAFRegionalWebACLName = namearg
+  , _wAFRegionalWebACLRules = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-webacl.html#cfn-wafregional-webacl-defaultaction
+wafrwaclDefaultAction :: Lens' WAFRegionalWebACL WAFRegionalWebACLAction
+wafrwaclDefaultAction = lens _wAFRegionalWebACLDefaultAction (\s a -> s { _wAFRegionalWebACLDefaultAction = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-webacl.html#cfn-wafregional-webacl-metricname
+wafrwaclMetricName :: Lens' WAFRegionalWebACL (Val Text)
+wafrwaclMetricName = lens _wAFRegionalWebACLMetricName (\s a -> s { _wAFRegionalWebACLMetricName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-webacl.html#cfn-wafregional-webacl-name
+wafrwaclName :: Lens' WAFRegionalWebACL (Val Text)
+wafrwaclName = lens _wAFRegionalWebACLName (\s a -> s { _wAFRegionalWebACLName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-webacl.html#cfn-wafregional-webacl-rules
+wafrwaclRules :: Lens' WAFRegionalWebACL (Maybe [WAFRegionalWebACLRule])
+wafrwaclRules = lens _wAFRegionalWebACLRules (\s a -> s { _wAFRegionalWebACLRules = a })
diff --git a/library-gen/Stratosphere/Resources/WAFRegionalWebACLAssociation.hs b/library-gen/Stratosphere/Resources/WAFRegionalWebACLAssociation.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WAFRegionalWebACLAssociation.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-webaclassociation.html
+
+module Stratosphere.Resources.WAFRegionalWebACLAssociation where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+
+
+-- | Full data type definition for WAFRegionalWebACLAssociation. See
+-- 'wafRegionalWebACLAssociation' for a more convenient constructor.
+data WAFRegionalWebACLAssociation =
+  WAFRegionalWebACLAssociation
+  { _wAFRegionalWebACLAssociationResourceArn :: Val Text
+  , _wAFRegionalWebACLAssociationWebACLId :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalWebACLAssociation where
+  toJSON WAFRegionalWebACLAssociation{..} =
+    object $
+    catMaybes
+    [ Just ("ResourceArn" .= _wAFRegionalWebACLAssociationResourceArn)
+    , Just ("WebACLId" .= _wAFRegionalWebACLAssociationWebACLId)
+    ]
+
+instance FromJSON WAFRegionalWebACLAssociation where
+  parseJSON (Object obj) =
+    WAFRegionalWebACLAssociation <$>
+      obj .: "ResourceArn" <*>
+      obj .: "WebACLId"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalWebACLAssociation' containing required fields
+-- as arguments.
+wafRegionalWebACLAssociation
+  :: Val Text -- ^ 'wafrwaclaResourceArn'
+  -> Val Text -- ^ 'wafrwaclaWebACLId'
+  -> WAFRegionalWebACLAssociation
+wafRegionalWebACLAssociation resourceArnarg webACLIdarg =
+  WAFRegionalWebACLAssociation
+  { _wAFRegionalWebACLAssociationResourceArn = resourceArnarg
+  , _wAFRegionalWebACLAssociationWebACLId = webACLIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-webaclassociation.html#cfn-wafregional-webaclassociation-resourcearn
+wafrwaclaResourceArn :: Lens' WAFRegionalWebACLAssociation (Val Text)
+wafrwaclaResourceArn = lens _wAFRegionalWebACLAssociationResourceArn (\s a -> s { _wAFRegionalWebACLAssociationResourceArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-webaclassociation.html#cfn-wafregional-webaclassociation-webaclid
+wafrwaclaWebACLId :: Lens' WAFRegionalWebACLAssociation (Val Text)
+wafrwaclaWebACLId = lens _wAFRegionalWebACLAssociationWebACLId (\s a -> s { _wAFRegionalWebACLAssociationWebACLId = a })
diff --git a/library-gen/Stratosphere/Resources/WAFRegionalXssMatchSet.hs b/library-gen/Stratosphere/Resources/WAFRegionalXssMatchSet.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/WAFRegionalXssMatchSet.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-xssmatchset.html
+
+module Stratosphere.Resources.WAFRegionalXssMatchSet where
+
+import Control.Lens hiding ((.=))
+import Data.Aeson
+import Data.Maybe (catMaybes)
+import Data.Monoid (mempty)
+import Data.Text
+
+import Stratosphere.Values
+import Stratosphere.ResourceProperties.WAFRegionalXssMatchSetXssMatchTuple
+
+-- | Full data type definition for WAFRegionalXssMatchSet. See
+-- 'wafRegionalXssMatchSet' for a more convenient constructor.
+data WAFRegionalXssMatchSet =
+  WAFRegionalXssMatchSet
+  { _wAFRegionalXssMatchSetName :: Val Text
+  , _wAFRegionalXssMatchSetXssMatchTuples :: Maybe [WAFRegionalXssMatchSetXssMatchTuple]
+  } deriving (Show, Eq)
+
+instance ToJSON WAFRegionalXssMatchSet where
+  toJSON WAFRegionalXssMatchSet{..} =
+    object $
+    catMaybes
+    [ Just ("Name" .= _wAFRegionalXssMatchSetName)
+    , ("XssMatchTuples" .=) <$> _wAFRegionalXssMatchSetXssMatchTuples
+    ]
+
+instance FromJSON WAFRegionalXssMatchSet where
+  parseJSON (Object obj) =
+    WAFRegionalXssMatchSet <$>
+      obj .: "Name" <*>
+      obj .:? "XssMatchTuples"
+  parseJSON _ = mempty
+
+-- | Constructor for 'WAFRegionalXssMatchSet' containing required fields as
+-- arguments.
+wafRegionalXssMatchSet
+  :: Val Text -- ^ 'wafrxmsName'
+  -> WAFRegionalXssMatchSet
+wafRegionalXssMatchSet namearg =
+  WAFRegionalXssMatchSet
+  { _wAFRegionalXssMatchSetName = namearg
+  , _wAFRegionalXssMatchSetXssMatchTuples = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-xssmatchset.html#cfn-wafregional-xssmatchset-name
+wafrxmsName :: Lens' WAFRegionalXssMatchSet (Val Text)
+wafrxmsName = lens _wAFRegionalXssMatchSetName (\s a -> s { _wAFRegionalXssMatchSetName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-xssmatchset.html#cfn-wafregional-xssmatchset-xssmatchtuples
+wafrxmsXssMatchTuples :: Lens' WAFRegionalXssMatchSet (Maybe [WAFRegionalXssMatchSetXssMatchTuple])
+wafrxmsXssMatchTuples = lens _wAFRegionalXssMatchSetXssMatchTuples (\s a -> s { _wAFRegionalXssMatchSetXssMatchTuples = a })
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,4 +1,4 @@
-resolver: nightly-2017-03-04
+resolver: nightly-2017-05-15
 packages:
   - '.'
 extra-deps: []
diff --git a/stratosphere.cabal b/stratosphere.cabal
--- a/stratosphere.cabal
+++ b/stratosphere.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           stratosphere
-version:        0.4.2
+version:        0.4.3
 synopsis:       EDSL for AWS CloudFormation
 description:    EDSL for AWS CloudFormation
 category:       AWS, Cloud
@@ -102,12 +102,15 @@
       Stratosphere.ResourceProperties.CodeBuildProjectSourceAuth
       Stratosphere.ResourceProperties.CodeCommitRepositoryRepositoryTrigger
       Stratosphere.ResourceProperties.CodeDeployDeploymentConfigMinimumHealthyHosts
+      Stratosphere.ResourceProperties.CodeDeployDeploymentGroupAlarm
+      Stratosphere.ResourceProperties.CodeDeployDeploymentGroupAlarmConfiguration
       Stratosphere.ResourceProperties.CodeDeployDeploymentGroupDeployment
       Stratosphere.ResourceProperties.CodeDeployDeploymentGroupEC2TagFilter
       Stratosphere.ResourceProperties.CodeDeployDeploymentGroupGitHubLocation
       Stratosphere.ResourceProperties.CodeDeployDeploymentGroupRevisionLocation
       Stratosphere.ResourceProperties.CodeDeployDeploymentGroupS3Location
       Stratosphere.ResourceProperties.CodeDeployDeploymentGroupTagFilter
+      Stratosphere.ResourceProperties.CodeDeployDeploymentGroupTriggerConfig
       Stratosphere.ResourceProperties.CodePipelineCustomActionTypeArtifactDetails
       Stratosphere.ResourceProperties.CodePipelineCustomActionTypeConfigurationProperties
       Stratosphere.ResourceProperties.CodePipelineCustomActionTypeSettings
@@ -120,6 +123,24 @@
       Stratosphere.ResourceProperties.CodePipelinePipelineOutputArtifact
       Stratosphere.ResourceProperties.CodePipelinePipelineStageDeclaration
       Stratosphere.ResourceProperties.CodePipelinePipelineStageTransition
+      Stratosphere.ResourceProperties.CognitoIdentityPoolCognitoIdentityProvider
+      Stratosphere.ResourceProperties.CognitoIdentityPoolCognitoStreams
+      Stratosphere.ResourceProperties.CognitoIdentityPoolPushSync
+      Stratosphere.ResourceProperties.CognitoIdentityPoolRoleAttachmentMappingRule
+      Stratosphere.ResourceProperties.CognitoIdentityPoolRoleAttachmentRoleMapping
+      Stratosphere.ResourceProperties.CognitoIdentityPoolRoleAttachmentRulesConfigurationType
+      Stratosphere.ResourceProperties.CognitoUserPoolAdminCreateUserConfig
+      Stratosphere.ResourceProperties.CognitoUserPoolDeviceConfiguration
+      Stratosphere.ResourceProperties.CognitoUserPoolEmailConfiguration
+      Stratosphere.ResourceProperties.CognitoUserPoolInviteMessageTemplate
+      Stratosphere.ResourceProperties.CognitoUserPoolLambdaConfig
+      Stratosphere.ResourceProperties.CognitoUserPoolNumberAttributeConstraints
+      Stratosphere.ResourceProperties.CognitoUserPoolPasswordPolicy
+      Stratosphere.ResourceProperties.CognitoUserPoolPolicies
+      Stratosphere.ResourceProperties.CognitoUserPoolSchemaAttribute
+      Stratosphere.ResourceProperties.CognitoUserPoolSmsConfiguration
+      Stratosphere.ResourceProperties.CognitoUserPoolStringAttributeConstraints
+      Stratosphere.ResourceProperties.CognitoUserPoolUserAttributeType
       Stratosphere.ResourceProperties.ConfigConfigRuleScope
       Stratosphere.ResourceProperties.ConfigConfigRuleSource
       Stratosphere.ResourceProperties.ConfigConfigRuleSourceDetail
@@ -154,19 +175,21 @@
       Stratosphere.ResourceProperties.EC2NetworkInterfaceInstanceIpv6Address
       Stratosphere.ResourceProperties.EC2NetworkInterfacePrivateIpAddressSpecification
       Stratosphere.ResourceProperties.EC2SecurityGroupRule
-      Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMappings
-      Stratosphere.ResourceProperties.EC2SpotFleetEbs
-      Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfile
+      Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMapping
+      Stratosphere.ResourceProperties.EC2SpotFleetEbsBlockDevice
+      Stratosphere.ResourceProperties.EC2SpotFleetGroupIdentifier
+      Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfileSpecification
       Stratosphere.ResourceProperties.EC2SpotFleetInstanceIpv6Address
-      Stratosphere.ResourceProperties.EC2SpotFleetLaunchSpecifications
-      Stratosphere.ResourceProperties.EC2SpotFleetMonitoring
-      Stratosphere.ResourceProperties.EC2SpotFleetNetworkInterfaces
-      Stratosphere.ResourceProperties.EC2SpotFleetPlacement
-      Stratosphere.ResourceProperties.EC2SpotFleetPrivateIpAddresses
-      Stratosphere.ResourceProperties.EC2SpotFleetSecurityGroups
+      Stratosphere.ResourceProperties.EC2SpotFleetInstanceNetworkInterfaceSpecification
+      Stratosphere.ResourceProperties.EC2SpotFleetPrivateIpAddressSpecification
+      Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetLaunchSpecification
+      Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetMonitoring
       Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetRequestConfigData
+      Stratosphere.ResourceProperties.EC2SpotFleetSpotPlacement
       Stratosphere.ResourceProperties.ECSServiceDeploymentConfiguration
       Stratosphere.ResourceProperties.ECSServiceLoadBalancer
+      Stratosphere.ResourceProperties.ECSServicePlacementConstraint
+      Stratosphere.ResourceProperties.ECSServicePlacementStrategy
       Stratosphere.ResourceProperties.ECSTaskDefinitionContainerDefinition
       Stratosphere.ResourceProperties.ECSTaskDefinitionHostEntry
       Stratosphere.ResourceProperties.ECSTaskDefinitionHostVolumeProperties
@@ -174,6 +197,7 @@
       Stratosphere.ResourceProperties.ECSTaskDefinitionLogConfiguration
       Stratosphere.ResourceProperties.ECSTaskDefinitionMountPoint
       Stratosphere.ResourceProperties.ECSTaskDefinitionPortMapping
+      Stratosphere.ResourceProperties.ECSTaskDefinitionTaskDefinitionPlacementConstraint
       Stratosphere.ResourceProperties.ECSTaskDefinitionUlimit
       Stratosphere.ResourceProperties.ECSTaskDefinitionVolume
       Stratosphere.ResourceProperties.ECSTaskDefinitionVolumeFrom
@@ -204,18 +228,34 @@
       Stratosphere.ResourceProperties.ElasticsearchDomainElasticsearchClusterConfig
       Stratosphere.ResourceProperties.ElasticsearchDomainSnapshotOptions
       Stratosphere.ResourceProperties.EMRClusterApplication
+      Stratosphere.ResourceProperties.EMRClusterAutoScalingPolicy
       Stratosphere.ResourceProperties.EMRClusterBootstrapActionConfig
+      Stratosphere.ResourceProperties.EMRClusterCloudWatchAlarmDefinition
       Stratosphere.ResourceProperties.EMRClusterConfiguration
       Stratosphere.ResourceProperties.EMRClusterEbsBlockDeviceConfig
       Stratosphere.ResourceProperties.EMRClusterEbsConfiguration
       Stratosphere.ResourceProperties.EMRClusterInstanceGroupConfig
       Stratosphere.ResourceProperties.EMRClusterJobFlowInstancesConfig
+      Stratosphere.ResourceProperties.EMRClusterMetricDimension
       Stratosphere.ResourceProperties.EMRClusterPlacementType
+      Stratosphere.ResourceProperties.EMRClusterScalingAction
+      Stratosphere.ResourceProperties.EMRClusterScalingConstraints
+      Stratosphere.ResourceProperties.EMRClusterScalingRule
+      Stratosphere.ResourceProperties.EMRClusterScalingTrigger
       Stratosphere.ResourceProperties.EMRClusterScriptBootstrapActionConfig
+      Stratosphere.ResourceProperties.EMRClusterSimpleScalingPolicyConfiguration
       Stratosphere.ResourceProperties.EMRClusterVolumeSpecification
+      Stratosphere.ResourceProperties.EMRInstanceGroupConfigAutoScalingPolicy
+      Stratosphere.ResourceProperties.EMRInstanceGroupConfigCloudWatchAlarmDefinition
       Stratosphere.ResourceProperties.EMRInstanceGroupConfigConfiguration
       Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsBlockDeviceConfig
       Stratosphere.ResourceProperties.EMRInstanceGroupConfigEbsConfiguration
+      Stratosphere.ResourceProperties.EMRInstanceGroupConfigMetricDimension
+      Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingAction
+      Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingConstraints
+      Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingRule
+      Stratosphere.ResourceProperties.EMRInstanceGroupConfigScalingTrigger
+      Stratosphere.ResourceProperties.EMRInstanceGroupConfigSimpleScalingPolicyConfiguration
       Stratosphere.ResourceProperties.EMRInstanceGroupConfigVolumeSpecification
       Stratosphere.ResourceProperties.EMRStepHadoopJarStepConfig
       Stratosphere.ResourceProperties.EMRStepKeyValue
@@ -254,6 +294,7 @@
       Stratosphere.ResourceProperties.LambdaFunctionCode
       Stratosphere.ResourceProperties.LambdaFunctionDeadLetterConfig
       Stratosphere.ResourceProperties.LambdaFunctionEnvironment
+      Stratosphere.ResourceProperties.LambdaFunctionTracingConfig
       Stratosphere.ResourceProperties.LambdaFunctionVpcConfig
       Stratosphere.ResourceProperties.LogsMetricFilterMetricTransformation
       Stratosphere.ResourceProperties.OpsWorksAppDataSource
@@ -319,6 +360,18 @@
       Stratosphere.ResourceProperties.WAFByteMatchSetByteMatchTuple
       Stratosphere.ResourceProperties.WAFByteMatchSetFieldToMatch
       Stratosphere.ResourceProperties.WAFIPSetIPSetDescriptor
+      Stratosphere.ResourceProperties.WAFRegionalByteMatchSetByteMatchTuple
+      Stratosphere.ResourceProperties.WAFRegionalByteMatchSetFieldToMatch
+      Stratosphere.ResourceProperties.WAFRegionalIPSetIPSetDescriptor
+      Stratosphere.ResourceProperties.WAFRegionalRulePredicate
+      Stratosphere.ResourceProperties.WAFRegionalSizeConstraintSetFieldToMatch
+      Stratosphere.ResourceProperties.WAFRegionalSizeConstraintSetSizeConstraint
+      Stratosphere.ResourceProperties.WAFRegionalSqlInjectionMatchSetFieldToMatch
+      Stratosphere.ResourceProperties.WAFRegionalSqlInjectionMatchSetSqlInjectionMatchTuple
+      Stratosphere.ResourceProperties.WAFRegionalWebACLAction
+      Stratosphere.ResourceProperties.WAFRegionalWebACLRule
+      Stratosphere.ResourceProperties.WAFRegionalXssMatchSetFieldToMatch
+      Stratosphere.ResourceProperties.WAFRegionalXssMatchSetXssMatchTuple
       Stratosphere.ResourceProperties.WAFRulePredicate
       Stratosphere.ResourceProperties.WAFSizeConstraintSetFieldToMatch
       Stratosphere.ResourceProperties.WAFSizeConstraintSetSizeConstraint
@@ -363,6 +416,13 @@
       Stratosphere.Resources.CodeDeployDeploymentGroup
       Stratosphere.Resources.CodePipelineCustomActionType
       Stratosphere.Resources.CodePipelinePipeline
+      Stratosphere.Resources.CognitoIdentityPool
+      Stratosphere.Resources.CognitoIdentityPoolRoleAttachment
+      Stratosphere.Resources.CognitoUserPool
+      Stratosphere.Resources.CognitoUserPoolClient
+      Stratosphere.Resources.CognitoUserPoolGroup
+      Stratosphere.Resources.CognitoUserPoolUser
+      Stratosphere.Resources.CognitoUserPoolUserToGroupAttachment
       Stratosphere.Resources.ConfigConfigRule
       Stratosphere.Resources.ConfigConfigurationRecorder
       Stratosphere.Resources.ConfigDeliveryChannel
@@ -430,6 +490,7 @@
       Stratosphere.Resources.ElasticsearchDomain
       Stratosphere.Resources.EMRCluster
       Stratosphere.Resources.EMRInstanceGroupConfig
+      Stratosphere.Resources.EMRSecurityConfiguration
       Stratosphere.Resources.EMRStep
       Stratosphere.Resources.EventsRule
       Stratosphere.Resources.GameLiftAlias
@@ -498,8 +559,19 @@
       Stratosphere.Resources.SQSQueuePolicy
       Stratosphere.Resources.SSMAssociation
       Stratosphere.Resources.SSMDocument
+      Stratosphere.Resources.SSMParameter
+      Stratosphere.Resources.StepFunctionsActivity
+      Stratosphere.Resources.StepFunctionsStateMachine
       Stratosphere.Resources.WAFByteMatchSet
       Stratosphere.Resources.WAFIPSet
+      Stratosphere.Resources.WAFRegionalByteMatchSet
+      Stratosphere.Resources.WAFRegionalIPSet
+      Stratosphere.Resources.WAFRegionalRule
+      Stratosphere.Resources.WAFRegionalSizeConstraintSet
+      Stratosphere.Resources.WAFRegionalSqlInjectionMatchSet
+      Stratosphere.Resources.WAFRegionalWebACL
+      Stratosphere.Resources.WAFRegionalWebACLAssociation
+      Stratosphere.Resources.WAFRegionalXssMatchSet
       Stratosphere.Resources.WAFRule
       Stratosphere.Resources.WAFSizeConstraintSet
       Stratosphere.Resources.WAFSqlInjectionMatchSet
