diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Change Log
 
+## 0.4.4
+
+* Update the resource specification document to version `1.4.2`
+
 ## 0.4.3
 
 * Update the resource specification document to version `1.4.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
@@ -34,11 +34,11 @@
     ec2SecurityGroup
     "Enable SSH Access"
     & ecsgSecurityGroupIngress ?~ [
-      ec2SecurityGroupRule
+      ec2SecurityGroupIngressProperty
       "tcp"
-      & ecsgrFromPort ?~ Literal 22
-      & ecsgrToPort ?~ Literal 22
-      & ecsgrCidrIp ?~ Ref "SSHLocation"
+      & ecsgipFromPort ?~ Literal 22
+      & ecsgipToPort ?~ Literal 22
+      & ecsgipCidrIp ?~ Ref "SSHLocation"
       ]
   , resource "IPAddress" (EC2EIPProperties ec2EIP)
   , resource "IPAssoc" $
diff --git a/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification.hs b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-customizedmetricspecification.html
+
+module Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification 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.ApplicationAutoScalingScalingPolicyMetricDimension
+
+-- | Full data type definition for
+-- ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification. See
+-- 'applicationAutoScalingScalingPolicyCustomizedMetricSpecification' for a
+-- more convenient constructor.
+data ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification =
+  ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification
+  { _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationDimensions :: Maybe [ApplicationAutoScalingScalingPolicyMetricDimension]
+  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationMetricName :: Val Text
+  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationNamespace :: Val Text
+  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationStatistic :: Val Text
+  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationUnit :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification where
+  toJSON ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification{..} =
+    object $
+    catMaybes
+    [ ("Dimensions" .=) <$> _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationDimensions
+    , Just ("MetricName" .= _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationMetricName)
+    , Just ("Namespace" .= _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationNamespace)
+    , Just ("Statistic" .= _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationStatistic)
+    , ("Unit" .=) <$> _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationUnit
+    ]
+
+instance FromJSON ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification where
+  parseJSON (Object obj) =
+    ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification <$>
+      obj .:? "Dimensions" <*>
+      obj .: "MetricName" <*>
+      obj .: "Namespace" <*>
+      obj .: "Statistic" <*>
+      obj .:? "Unit"
+  parseJSON _ = mempty
+
+-- | Constructor for
+-- 'ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification'
+-- containing required fields as arguments.
+applicationAutoScalingScalingPolicyCustomizedMetricSpecification
+  :: Val Text -- ^ 'aasspcmsMetricName'
+  -> Val Text -- ^ 'aasspcmsNamespace'
+  -> Val Text -- ^ 'aasspcmsStatistic'
+  -> ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification
+applicationAutoScalingScalingPolicyCustomizedMetricSpecification metricNamearg namespacearg statisticarg =
+  ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification
+  { _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationDimensions = Nothing
+  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationMetricName = metricNamearg
+  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationNamespace = namespacearg
+  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationStatistic = statisticarg
+  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationUnit = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-customizedmetricspecification.html#cfn-applicationautoscaling-scalingpolicy-customizedmetricspecification-dimensions
+aasspcmsDimensions :: Lens' ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification (Maybe [ApplicationAutoScalingScalingPolicyMetricDimension])
+aasspcmsDimensions = lens _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationDimensions (\s a -> s { _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationDimensions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-customizedmetricspecification.html#cfn-applicationautoscaling-scalingpolicy-customizedmetricspecification-metricname
+aasspcmsMetricName :: Lens' ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification (Val Text)
+aasspcmsMetricName = lens _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationMetricName (\s a -> s { _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationMetricName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-customizedmetricspecification.html#cfn-applicationautoscaling-scalingpolicy-customizedmetricspecification-namespace
+aasspcmsNamespace :: Lens' ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification (Val Text)
+aasspcmsNamespace = lens _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationNamespace (\s a -> s { _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationNamespace = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-customizedmetricspecification.html#cfn-applicationautoscaling-scalingpolicy-customizedmetricspecification-statistic
+aasspcmsStatistic :: Lens' ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification (Val Text)
+aasspcmsStatistic = lens _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationStatistic (\s a -> s { _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationStatistic = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-customizedmetricspecification.html#cfn-applicationautoscaling-scalingpolicy-customizedmetricspecification-unit
+aasspcmsUnit :: Lens' ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification (Maybe (Val Text))
+aasspcmsUnit = lens _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationUnit (\s a -> s { _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationUnit = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyMetricDimension.hs b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyMetricDimension.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyMetricDimension.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-metricdimension.html
+
+module Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyMetricDimension 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
+-- ApplicationAutoScalingScalingPolicyMetricDimension. See
+-- 'applicationAutoScalingScalingPolicyMetricDimension' for a more
+-- convenient constructor.
+data ApplicationAutoScalingScalingPolicyMetricDimension =
+  ApplicationAutoScalingScalingPolicyMetricDimension
+  { _applicationAutoScalingScalingPolicyMetricDimensionName :: Val Text
+  , _applicationAutoScalingScalingPolicyMetricDimensionValue :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON ApplicationAutoScalingScalingPolicyMetricDimension where
+  toJSON ApplicationAutoScalingScalingPolicyMetricDimension{..} =
+    object $
+    catMaybes
+    [ Just ("Name" .= _applicationAutoScalingScalingPolicyMetricDimensionName)
+    , Just ("Value" .= _applicationAutoScalingScalingPolicyMetricDimensionValue)
+    ]
+
+instance FromJSON ApplicationAutoScalingScalingPolicyMetricDimension where
+  parseJSON (Object obj) =
+    ApplicationAutoScalingScalingPolicyMetricDimension <$>
+      obj .: "Name" <*>
+      obj .: "Value"
+  parseJSON _ = mempty
+
+-- | Constructor for 'ApplicationAutoScalingScalingPolicyMetricDimension'
+-- containing required fields as arguments.
+applicationAutoScalingScalingPolicyMetricDimension
+  :: Val Text -- ^ 'aasspmdName'
+  -> Val Text -- ^ 'aasspmdValue'
+  -> ApplicationAutoScalingScalingPolicyMetricDimension
+applicationAutoScalingScalingPolicyMetricDimension namearg valuearg =
+  ApplicationAutoScalingScalingPolicyMetricDimension
+  { _applicationAutoScalingScalingPolicyMetricDimensionName = namearg
+  , _applicationAutoScalingScalingPolicyMetricDimensionValue = valuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-metricdimension.html#cfn-applicationautoscaling-scalingpolicy-metricdimension-name
+aasspmdName :: Lens' ApplicationAutoScalingScalingPolicyMetricDimension (Val Text)
+aasspmdName = lens _applicationAutoScalingScalingPolicyMetricDimensionName (\s a -> s { _applicationAutoScalingScalingPolicyMetricDimensionName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-metricdimension.html#cfn-applicationautoscaling-scalingpolicy-metricdimension-value
+aasspmdValue :: Lens' ApplicationAutoScalingScalingPolicyMetricDimension (Val Text)
+aasspmdValue = lens _applicationAutoScalingScalingPolicyMetricDimensionValue (\s a -> s { _applicationAutoScalingScalingPolicyMetricDimensionValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification.hs b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-predefinedmetricspecification.html
+
+module Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification 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
+-- ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification. See
+-- 'applicationAutoScalingScalingPolicyPredefinedMetricSpecification' for a
+-- more convenient constructor.
+data ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification =
+  ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification
+  { _applicationAutoScalingScalingPolicyPredefinedMetricSpecificationPredefinedMetricType :: Val Text
+  , _applicationAutoScalingScalingPolicyPredefinedMetricSpecificationResourceLabel :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification where
+  toJSON ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification{..} =
+    object $
+    catMaybes
+    [ Just ("PredefinedMetricType" .= _applicationAutoScalingScalingPolicyPredefinedMetricSpecificationPredefinedMetricType)
+    , ("ResourceLabel" .=) <$> _applicationAutoScalingScalingPolicyPredefinedMetricSpecificationResourceLabel
+    ]
+
+instance FromJSON ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification where
+  parseJSON (Object obj) =
+    ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification <$>
+      obj .: "PredefinedMetricType" <*>
+      obj .:? "ResourceLabel"
+  parseJSON _ = mempty
+
+-- | Constructor for
+-- 'ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification'
+-- containing required fields as arguments.
+applicationAutoScalingScalingPolicyPredefinedMetricSpecification
+  :: Val Text -- ^ 'aassppmsPredefinedMetricType'
+  -> ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification
+applicationAutoScalingScalingPolicyPredefinedMetricSpecification predefinedMetricTypearg =
+  ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification
+  { _applicationAutoScalingScalingPolicyPredefinedMetricSpecificationPredefinedMetricType = predefinedMetricTypearg
+  , _applicationAutoScalingScalingPolicyPredefinedMetricSpecificationResourceLabel = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-predefinedmetricspecification.html#cfn-applicationautoscaling-scalingpolicy-predefinedmetricspecification-predefinedmetrictype
+aassppmsPredefinedMetricType :: Lens' ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification (Val Text)
+aassppmsPredefinedMetricType = lens _applicationAutoScalingScalingPolicyPredefinedMetricSpecificationPredefinedMetricType (\s a -> s { _applicationAutoScalingScalingPolicyPredefinedMetricSpecificationPredefinedMetricType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-predefinedmetricspecification.html#cfn-applicationautoscaling-scalingpolicy-predefinedmetricspecification-resourcelabel
+aassppmsResourceLabel :: Lens' ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification (Maybe (Val Text))
+aassppmsResourceLabel = lens _applicationAutoScalingScalingPolicyPredefinedMetricSpecificationResourceLabel (\s a -> s { _applicationAutoScalingScalingPolicyPredefinedMetricSpecificationResourceLabel = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration.html
+
+module Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration 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.ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification
+import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification
+
+-- | Full data type definition for
+-- ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration.
+-- See
+-- 'applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration'
+-- for a more convenient constructor.
+data ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration =
+  ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration
+  { _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecification :: Maybe ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification
+  , _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationPredefinedMetricSpecification :: Maybe ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification
+  , _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationScaleInCooldown :: Maybe (Val Integer')
+  , _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationScaleOutCooldown :: Maybe (Val Integer')
+  , _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationTargetValue :: Val Double'
+  } deriving (Show, Eq)
+
+instance ToJSON ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration where
+  toJSON ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration{..} =
+    object $
+    catMaybes
+    [ ("CustomizedMetricSpecification" .=) <$> _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecification
+    , ("PredefinedMetricSpecification" .=) <$> _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationPredefinedMetricSpecification
+    , ("ScaleInCooldown" .=) <$> _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationScaleInCooldown
+    , ("ScaleOutCooldown" .=) <$> _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationScaleOutCooldown
+    , Just ("TargetValue" .= _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationTargetValue)
+    ]
+
+instance FromJSON ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration where
+  parseJSON (Object obj) =
+    ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration <$>
+      obj .:? "CustomizedMetricSpecification" <*>
+      obj .:? "PredefinedMetricSpecification" <*>
+      obj .:? "ScaleInCooldown" <*>
+      obj .:? "ScaleOutCooldown" <*>
+      obj .: "TargetValue"
+  parseJSON _ = mempty
+
+-- | Constructor for
+-- 'ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration'
+-- containing required fields as arguments.
+applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration
+  :: Val Double' -- ^ 'aasspttspcTargetValue'
+  -> ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration
+applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration targetValuearg =
+  ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration
+  { _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecification = Nothing
+  , _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationPredefinedMetricSpecification = Nothing
+  , _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationScaleInCooldown = Nothing
+  , _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationScaleOutCooldown = Nothing
+  , _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationTargetValue = targetValuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration.html#cfn-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration-customizedmetricspecification
+aasspttspcCustomizedMetricSpecification :: Lens' ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration (Maybe ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification)
+aasspttspcCustomizedMetricSpecification = lens _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecification (\s a -> s { _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecification = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration.html#cfn-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration-predefinedmetricspecification
+aasspttspcPredefinedMetricSpecification :: Lens' ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration (Maybe ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification)
+aasspttspcPredefinedMetricSpecification = lens _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationPredefinedMetricSpecification (\s a -> s { _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationPredefinedMetricSpecification = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration.html#cfn-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration-scaleincooldown
+aasspttspcScaleInCooldown :: Lens' ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration (Maybe (Val Integer'))
+aasspttspcScaleInCooldown = lens _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationScaleInCooldown (\s a -> s { _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationScaleInCooldown = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration.html#cfn-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration-scaleoutcooldown
+aasspttspcScaleOutCooldown :: Lens' ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration (Maybe (Val Integer'))
+aasspttspcScaleOutCooldown = lens _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationScaleOutCooldown (\s a -> s { _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationScaleOutCooldown = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration.html#cfn-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration-targetvalue
+aasspttspcTargetValue :: Lens' ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration (Val Double')
+aasspttspcTargetValue = lens _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationTargetValue (\s a -> s { _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfigurationTargetValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupNotificationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupNotificationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupNotificationConfiguration.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-notificationconfigurations.html
+
+module Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupNotificationConfiguration 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
+-- AutoScalingAutoScalingGroupNotificationConfiguration. See
+-- 'autoScalingAutoScalingGroupNotificationConfiguration' for a more
+-- convenient constructor.
+data AutoScalingAutoScalingGroupNotificationConfiguration =
+  AutoScalingAutoScalingGroupNotificationConfiguration
+  { _autoScalingAutoScalingGroupNotificationConfigurationNotificationTypes :: Maybe [Val Text]
+  , _autoScalingAutoScalingGroupNotificationConfigurationTopicARN :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON AutoScalingAutoScalingGroupNotificationConfiguration where
+  toJSON AutoScalingAutoScalingGroupNotificationConfiguration{..} =
+    object $
+    catMaybes
+    [ ("NotificationTypes" .=) <$> _autoScalingAutoScalingGroupNotificationConfigurationNotificationTypes
+    , Just ("TopicARN" .= _autoScalingAutoScalingGroupNotificationConfigurationTopicARN)
+    ]
+
+instance FromJSON AutoScalingAutoScalingGroupNotificationConfiguration where
+  parseJSON (Object obj) =
+    AutoScalingAutoScalingGroupNotificationConfiguration <$>
+      obj .:? "NotificationTypes" <*>
+      obj .: "TopicARN"
+  parseJSON _ = mempty
+
+-- | Constructor for 'AutoScalingAutoScalingGroupNotificationConfiguration'
+-- containing required fields as arguments.
+autoScalingAutoScalingGroupNotificationConfiguration
+  :: Val Text -- ^ 'asasgncTopicARN'
+  -> AutoScalingAutoScalingGroupNotificationConfiguration
+autoScalingAutoScalingGroupNotificationConfiguration topicARNarg =
+  AutoScalingAutoScalingGroupNotificationConfiguration
+  { _autoScalingAutoScalingGroupNotificationConfigurationNotificationTypes = Nothing
+  , _autoScalingAutoScalingGroupNotificationConfigurationTopicARN = topicARNarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-notificationconfigurations.html#cfn-as-group-notificationconfigurations-notificationtypes
+asasgncNotificationTypes :: Lens' AutoScalingAutoScalingGroupNotificationConfiguration (Maybe [Val Text])
+asasgncNotificationTypes = lens _autoScalingAutoScalingGroupNotificationConfigurationNotificationTypes (\s a -> s { _autoScalingAutoScalingGroupNotificationConfigurationNotificationTypes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-notificationconfigurations.html#cfn-autoscaling-autoscalinggroup-notificationconfigurations-topicarn
+asasgncTopicARN :: Lens' AutoScalingAutoScalingGroupNotificationConfiguration (Val Text)
+asasgncTopicARN = lens _autoScalingAutoScalingGroupNotificationConfigurationTopicARN (\s a -> s { _autoScalingAutoScalingGroupNotificationConfigurationTopicARN = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupNotificationConfigurations.hs b/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupNotificationConfigurations.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/AutoScalingAutoScalingGroupNotificationConfigurations.hs
+++ /dev/null
@@ -1,59 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-notificationconfigurations.html
-
-module Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupNotificationConfigurations 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
--- AutoScalingAutoScalingGroupNotificationConfigurations. See
--- 'autoScalingAutoScalingGroupNotificationConfigurations' for a more
--- convenient constructor.
-data AutoScalingAutoScalingGroupNotificationConfigurations =
-  AutoScalingAutoScalingGroupNotificationConfigurations
-  { _autoScalingAutoScalingGroupNotificationConfigurationsNotificationTypes :: Maybe [Val Text]
-  , _autoScalingAutoScalingGroupNotificationConfigurationsTopicARN :: Val Text
-  } deriving (Show, Eq)
-
-instance ToJSON AutoScalingAutoScalingGroupNotificationConfigurations where
-  toJSON AutoScalingAutoScalingGroupNotificationConfigurations{..} =
-    object $
-    catMaybes
-    [ ("NotificationTypes" .=) <$> _autoScalingAutoScalingGroupNotificationConfigurationsNotificationTypes
-    , Just ("TopicARN" .= _autoScalingAutoScalingGroupNotificationConfigurationsTopicARN)
-    ]
-
-instance FromJSON AutoScalingAutoScalingGroupNotificationConfigurations where
-  parseJSON (Object obj) =
-    AutoScalingAutoScalingGroupNotificationConfigurations <$>
-      obj .:? "NotificationTypes" <*>
-      obj .: "TopicARN"
-  parseJSON _ = mempty
-
--- | Constructor for 'AutoScalingAutoScalingGroupNotificationConfigurations'
--- containing required fields as arguments.
-autoScalingAutoScalingGroupNotificationConfigurations
-  :: Val Text -- ^ 'asasgncTopicARN'
-  -> AutoScalingAutoScalingGroupNotificationConfigurations
-autoScalingAutoScalingGroupNotificationConfigurations topicARNarg =
-  AutoScalingAutoScalingGroupNotificationConfigurations
-  { _autoScalingAutoScalingGroupNotificationConfigurationsNotificationTypes = Nothing
-  , _autoScalingAutoScalingGroupNotificationConfigurationsTopicARN = topicARNarg
-  }
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-notificationconfigurations.html#cfn-as-group-notificationconfigurations-notificationtypes
-asasgncNotificationTypes :: Lens' AutoScalingAutoScalingGroupNotificationConfigurations (Maybe [Val Text])
-asasgncNotificationTypes = lens _autoScalingAutoScalingGroupNotificationConfigurationsNotificationTypes (\s a -> s { _autoScalingAutoScalingGroupNotificationConfigurationsNotificationTypes = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-notificationconfigurations.html#cfn-autoscaling-autoscalinggroup-notificationconfigurations-topicarn
-asasgncTopicARN :: Lens' AutoScalingAutoScalingGroupNotificationConfigurations (Val Text)
-asasgncTopicARN = lens _autoScalingAutoScalingGroupNotificationConfigurationsTopicARN (\s a -> s { _autoScalingAutoScalingGroupNotificationConfigurationsTopicARN = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectArtifacts.hs b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectArtifacts.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectArtifacts.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectArtifacts.hs
@@ -23,7 +23,7 @@
   , _codeBuildProjectArtifactsNamespaceType :: Maybe (Val Text)
   , _codeBuildProjectArtifactsPackaging :: Maybe (Val Text)
   , _codeBuildProjectArtifactsPath :: Maybe (Val Text)
-  , _codeBuildProjectArtifactsType :: Maybe (Val Text)
+  , _codeBuildProjectArtifactsType :: Val Text
   } deriving (Show, Eq)
 
 instance ToJSON CodeBuildProjectArtifacts where
@@ -35,7 +35,7 @@
     , ("NamespaceType" .=) <$> _codeBuildProjectArtifactsNamespaceType
     , ("Packaging" .=) <$> _codeBuildProjectArtifactsPackaging
     , ("Path" .=) <$> _codeBuildProjectArtifactsPath
-    , ("Type" .=) <$> _codeBuildProjectArtifactsType
+    , Just ("Type" .= _codeBuildProjectArtifactsType)
     ]
 
 instance FromJSON CodeBuildProjectArtifacts where
@@ -46,21 +46,22 @@
       obj .:? "NamespaceType" <*>
       obj .:? "Packaging" <*>
       obj .:? "Path" <*>
-      obj .:? "Type"
+      obj .: "Type"
   parseJSON _ = mempty
 
 -- | Constructor for 'CodeBuildProjectArtifacts' containing required fields as
 -- arguments.
 codeBuildProjectArtifacts
-  :: CodeBuildProjectArtifacts
-codeBuildProjectArtifacts  =
+  :: Val Text -- ^ 'cbpaType'
+  -> CodeBuildProjectArtifacts
+codeBuildProjectArtifacts typearg =
   CodeBuildProjectArtifacts
   { _codeBuildProjectArtifactsLocation = Nothing
   , _codeBuildProjectArtifactsName = Nothing
   , _codeBuildProjectArtifactsNamespaceType = Nothing
   , _codeBuildProjectArtifactsPackaging = Nothing
   , _codeBuildProjectArtifactsPath = Nothing
-  , _codeBuildProjectArtifactsType = Nothing
+  , _codeBuildProjectArtifactsType = typearg
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html#cfn-codebuild-project-artifacts-location
@@ -84,5 +85,5 @@
 cbpaPath = lens _codeBuildProjectArtifactsPath (\s a -> s { _codeBuildProjectArtifactsPath = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html#cfn-codebuild-project-artifacts-type
-cbpaType :: Lens' CodeBuildProjectArtifacts (Maybe (Val Text))
+cbpaType :: Lens' CodeBuildProjectArtifacts (Val Text)
 cbpaType = lens _codeBuildProjectArtifactsType (\s a -> s { _codeBuildProjectArtifactsType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironment.hs b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironment.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironment.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironment.hs
@@ -18,45 +18,52 @@
 -- 'codeBuildProjectEnvironment' for a more convenient constructor.
 data CodeBuildProjectEnvironment =
   CodeBuildProjectEnvironment
-  { _codeBuildProjectEnvironmentComputeType :: Maybe (Val Text)
+  { _codeBuildProjectEnvironmentComputeType :: Val Text
   , _codeBuildProjectEnvironmentEnvironmentVariables :: Maybe [CodeBuildProjectEnvironmentVariable]
-  , _codeBuildProjectEnvironmentImage :: Maybe (Val Text)
-  , _codeBuildProjectEnvironmentType :: Maybe (Val Text)
+  , _codeBuildProjectEnvironmentImage :: Val Text
+  , _codeBuildProjectEnvironmentPrivilegedMode :: Maybe (Val Bool')
+  , _codeBuildProjectEnvironmentType :: Val Text
   } deriving (Show, Eq)
 
 instance ToJSON CodeBuildProjectEnvironment where
   toJSON CodeBuildProjectEnvironment{..} =
     object $
     catMaybes
-    [ ("ComputeType" .=) <$> _codeBuildProjectEnvironmentComputeType
+    [ Just ("ComputeType" .= _codeBuildProjectEnvironmentComputeType)
     , ("EnvironmentVariables" .=) <$> _codeBuildProjectEnvironmentEnvironmentVariables
-    , ("Image" .=) <$> _codeBuildProjectEnvironmentImage
-    , ("Type" .=) <$> _codeBuildProjectEnvironmentType
+    , Just ("Image" .= _codeBuildProjectEnvironmentImage)
+    , ("PrivilegedMode" .=) <$> _codeBuildProjectEnvironmentPrivilegedMode
+    , Just ("Type" .= _codeBuildProjectEnvironmentType)
     ]
 
 instance FromJSON CodeBuildProjectEnvironment where
   parseJSON (Object obj) =
     CodeBuildProjectEnvironment <$>
-      obj .:? "ComputeType" <*>
+      obj .: "ComputeType" <*>
       obj .:? "EnvironmentVariables" <*>
-      obj .:? "Image" <*>
-      obj .:? "Type"
+      obj .: "Image" <*>
+      obj .:? "PrivilegedMode" <*>
+      obj .: "Type"
   parseJSON _ = mempty
 
 -- | Constructor for 'CodeBuildProjectEnvironment' containing required fields
 -- as arguments.
 codeBuildProjectEnvironment
-  :: CodeBuildProjectEnvironment
-codeBuildProjectEnvironment  =
+  :: Val Text -- ^ 'cbpeComputeType'
+  -> Val Text -- ^ 'cbpeImage'
+  -> Val Text -- ^ 'cbpeType'
+  -> CodeBuildProjectEnvironment
+codeBuildProjectEnvironment computeTypearg imagearg typearg =
   CodeBuildProjectEnvironment
-  { _codeBuildProjectEnvironmentComputeType = Nothing
+  { _codeBuildProjectEnvironmentComputeType = computeTypearg
   , _codeBuildProjectEnvironmentEnvironmentVariables = Nothing
-  , _codeBuildProjectEnvironmentImage = Nothing
-  , _codeBuildProjectEnvironmentType = Nothing
+  , _codeBuildProjectEnvironmentImage = imagearg
+  , _codeBuildProjectEnvironmentPrivilegedMode = Nothing
+  , _codeBuildProjectEnvironmentType = typearg
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environment.html#cfn-codebuild-project-environment-computetype
-cbpeComputeType :: Lens' CodeBuildProjectEnvironment (Maybe (Val Text))
+cbpeComputeType :: Lens' CodeBuildProjectEnvironment (Val Text)
 cbpeComputeType = lens _codeBuildProjectEnvironmentComputeType (\s a -> s { _codeBuildProjectEnvironmentComputeType = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environment.html#cfn-codebuild-project-environment-environmentvariables
@@ -64,9 +71,13 @@
 cbpeEnvironmentVariables = lens _codeBuildProjectEnvironmentEnvironmentVariables (\s a -> s { _codeBuildProjectEnvironmentEnvironmentVariables = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environment.html#cfn-codebuild-project-environment-image
-cbpeImage :: Lens' CodeBuildProjectEnvironment (Maybe (Val Text))
+cbpeImage :: Lens' CodeBuildProjectEnvironment (Val Text)
 cbpeImage = lens _codeBuildProjectEnvironmentImage (\s a -> s { _codeBuildProjectEnvironmentImage = a })
 
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environment.html#cfn-codebuild-project-environment-privilegedmode
+cbpePrivilegedMode :: Lens' CodeBuildProjectEnvironment (Maybe (Val Bool'))
+cbpePrivilegedMode = lens _codeBuildProjectEnvironmentPrivilegedMode (\s a -> s { _codeBuildProjectEnvironmentPrivilegedMode = a })
+
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environment.html#cfn-codebuild-project-environment-type
-cbpeType :: Lens' CodeBuildProjectEnvironment (Maybe (Val Text))
+cbpeType :: Lens' CodeBuildProjectEnvironment (Val Text)
 cbpeType = lens _codeBuildProjectEnvironmentType (\s a -> s { _codeBuildProjectEnvironmentType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironmentVariable.hs b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironmentVariable.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironmentVariable.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectEnvironmentVariable.hs
@@ -18,39 +18,41 @@
 -- 'codeBuildProjectEnvironmentVariable' for a more convenient constructor.
 data CodeBuildProjectEnvironmentVariable =
   CodeBuildProjectEnvironmentVariable
-  { _codeBuildProjectEnvironmentVariableName :: Maybe (Val Text)
-  , _codeBuildProjectEnvironmentVariableValue :: Maybe (Val Text)
+  { _codeBuildProjectEnvironmentVariableName :: Val Text
+  , _codeBuildProjectEnvironmentVariableValue :: Val Text
   } deriving (Show, Eq)
 
 instance ToJSON CodeBuildProjectEnvironmentVariable where
   toJSON CodeBuildProjectEnvironmentVariable{..} =
     object $
     catMaybes
-    [ ("Name" .=) <$> _codeBuildProjectEnvironmentVariableName
-    , ("Value" .=) <$> _codeBuildProjectEnvironmentVariableValue
+    [ Just ("Name" .= _codeBuildProjectEnvironmentVariableName)
+    , Just ("Value" .= _codeBuildProjectEnvironmentVariableValue)
     ]
 
 instance FromJSON CodeBuildProjectEnvironmentVariable where
   parseJSON (Object obj) =
     CodeBuildProjectEnvironmentVariable <$>
-      obj .:? "Name" <*>
-      obj .:? "Value"
+      obj .: "Name" <*>
+      obj .: "Value"
   parseJSON _ = mempty
 
 -- | Constructor for 'CodeBuildProjectEnvironmentVariable' containing required
 -- fields as arguments.
 codeBuildProjectEnvironmentVariable
-  :: CodeBuildProjectEnvironmentVariable
-codeBuildProjectEnvironmentVariable  =
+  :: Val Text -- ^ 'cbpevName'
+  -> Val Text -- ^ 'cbpevValue'
+  -> CodeBuildProjectEnvironmentVariable
+codeBuildProjectEnvironmentVariable namearg valuearg =
   CodeBuildProjectEnvironmentVariable
-  { _codeBuildProjectEnvironmentVariableName = Nothing
-  , _codeBuildProjectEnvironmentVariableValue = Nothing
+  { _codeBuildProjectEnvironmentVariableName = namearg
+  , _codeBuildProjectEnvironmentVariableValue = valuearg
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environmentvariable.html#cfn-codebuild-project-environmentvariable-name
-cbpevName :: Lens' CodeBuildProjectEnvironmentVariable (Maybe (Val Text))
+cbpevName :: Lens' CodeBuildProjectEnvironmentVariable (Val Text)
 cbpevName = lens _codeBuildProjectEnvironmentVariableName (\s a -> s { _codeBuildProjectEnvironmentVariableName = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-environmentvariable.html#cfn-codebuild-project-environmentvariable-value
-cbpevValue :: Lens' CodeBuildProjectEnvironmentVariable (Maybe (Val Text))
+cbpevValue :: Lens' CodeBuildProjectEnvironmentVariable (Val Text)
 cbpevValue = lens _codeBuildProjectEnvironmentVariableValue (\s a -> s { _codeBuildProjectEnvironmentVariableValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSource.hs b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSource.hs
--- a/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSource.hs
+++ b/library-gen/Stratosphere/ResourceProperties/CodeBuildProjectSource.hs
@@ -21,7 +21,7 @@
   { _codeBuildProjectSourceAuth :: Maybe CodeBuildProjectSourceAuth
   , _codeBuildProjectSourceBuildSpec :: Maybe (Val Text)
   , _codeBuildProjectSourceLocation :: Maybe (Val Text)
-  , _codeBuildProjectSourceType :: Maybe (Val Text)
+  , _codeBuildProjectSourceType :: Val Text
   } deriving (Show, Eq)
 
 instance ToJSON CodeBuildProjectSource where
@@ -31,7 +31,7 @@
     [ ("Auth" .=) <$> _codeBuildProjectSourceAuth
     , ("BuildSpec" .=) <$> _codeBuildProjectSourceBuildSpec
     , ("Location" .=) <$> _codeBuildProjectSourceLocation
-    , ("Type" .=) <$> _codeBuildProjectSourceType
+    , Just ("Type" .= _codeBuildProjectSourceType)
     ]
 
 instance FromJSON CodeBuildProjectSource where
@@ -40,19 +40,20 @@
       obj .:? "Auth" <*>
       obj .:? "BuildSpec" <*>
       obj .:? "Location" <*>
-      obj .:? "Type"
+      obj .: "Type"
   parseJSON _ = mempty
 
 -- | Constructor for 'CodeBuildProjectSource' containing required fields as
 -- arguments.
 codeBuildProjectSource
-  :: CodeBuildProjectSource
-codeBuildProjectSource  =
+  :: Val Text -- ^ 'cbpsType'
+  -> CodeBuildProjectSource
+codeBuildProjectSource typearg =
   CodeBuildProjectSource
   { _codeBuildProjectSourceAuth = Nothing
   , _codeBuildProjectSourceBuildSpec = Nothing
   , _codeBuildProjectSourceLocation = Nothing
-  , _codeBuildProjectSourceType = Nothing
+  , _codeBuildProjectSourceType = typearg
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-source.html#cfn-codebuild-project-source-auth
@@ -68,5 +69,5 @@
 cbpsLocation = lens _codeBuildProjectSourceLocation (\s a -> s { _codeBuildProjectSourceLocation = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-source.html#cfn-codebuild-project-source-type
-cbpsType :: Lens' CodeBuildProjectSource (Maybe (Val Text))
+cbpsType :: Lens' CodeBuildProjectSource (Val Text)
 cbpsType = lens _codeBuildProjectSourceType (\s a -> s { _codeBuildProjectSourceType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupEgressProperty.hs b/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupEgressProperty.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupEgressProperty.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html
+
+module Stratosphere.ResourceProperties.EC2SecurityGroupEgressProperty 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 EC2SecurityGroupEgressProperty. See
+-- 'ec2SecurityGroupEgressProperty' for a more convenient constructor.
+data EC2SecurityGroupEgressProperty =
+  EC2SecurityGroupEgressProperty
+  { _eC2SecurityGroupEgressPropertyCidrIp :: Maybe (Val Text)
+  , _eC2SecurityGroupEgressPropertyCidrIpv6 :: Maybe (Val Text)
+  , _eC2SecurityGroupEgressPropertyDestinationPrefixListId :: Maybe (Val Text)
+  , _eC2SecurityGroupEgressPropertyDestinationSecurityGroupId :: Maybe (Val Text)
+  , _eC2SecurityGroupEgressPropertyFromPort :: Maybe (Val Integer')
+  , _eC2SecurityGroupEgressPropertyIpProtocol :: Val Text
+  , _eC2SecurityGroupEgressPropertyToPort :: Maybe (Val Integer')
+  } deriving (Show, Eq)
+
+instance ToJSON EC2SecurityGroupEgressProperty where
+  toJSON EC2SecurityGroupEgressProperty{..} =
+    object $
+    catMaybes
+    [ ("CidrIp" .=) <$> _eC2SecurityGroupEgressPropertyCidrIp
+    , ("CidrIpv6" .=) <$> _eC2SecurityGroupEgressPropertyCidrIpv6
+    , ("DestinationPrefixListId" .=) <$> _eC2SecurityGroupEgressPropertyDestinationPrefixListId
+    , ("DestinationSecurityGroupId" .=) <$> _eC2SecurityGroupEgressPropertyDestinationSecurityGroupId
+    , ("FromPort" .=) <$> _eC2SecurityGroupEgressPropertyFromPort
+    , Just ("IpProtocol" .= _eC2SecurityGroupEgressPropertyIpProtocol)
+    , ("ToPort" .=) <$> _eC2SecurityGroupEgressPropertyToPort
+    ]
+
+instance FromJSON EC2SecurityGroupEgressProperty where
+  parseJSON (Object obj) =
+    EC2SecurityGroupEgressProperty <$>
+      obj .:? "CidrIp" <*>
+      obj .:? "CidrIpv6" <*>
+      obj .:? "DestinationPrefixListId" <*>
+      obj .:? "DestinationSecurityGroupId" <*>
+      obj .:? "FromPort" <*>
+      obj .: "IpProtocol" <*>
+      obj .:? "ToPort"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2SecurityGroupEgressProperty' containing required
+-- fields as arguments.
+ec2SecurityGroupEgressProperty
+  :: Val Text -- ^ 'ecsgepIpProtocol'
+  -> EC2SecurityGroupEgressProperty
+ec2SecurityGroupEgressProperty ipProtocolarg =
+  EC2SecurityGroupEgressProperty
+  { _eC2SecurityGroupEgressPropertyCidrIp = Nothing
+  , _eC2SecurityGroupEgressPropertyCidrIpv6 = Nothing
+  , _eC2SecurityGroupEgressPropertyDestinationPrefixListId = Nothing
+  , _eC2SecurityGroupEgressPropertyDestinationSecurityGroupId = Nothing
+  , _eC2SecurityGroupEgressPropertyFromPort = Nothing
+  , _eC2SecurityGroupEgressPropertyIpProtocol = ipProtocolarg
+  , _eC2SecurityGroupEgressPropertyToPort = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-cidrip
+ecsgepCidrIp :: Lens' EC2SecurityGroupEgressProperty (Maybe (Val Text))
+ecsgepCidrIp = lens _eC2SecurityGroupEgressPropertyCidrIp (\s a -> s { _eC2SecurityGroupEgressPropertyCidrIp = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-cidripv6
+ecsgepCidrIpv6 :: Lens' EC2SecurityGroupEgressProperty (Maybe (Val Text))
+ecsgepCidrIpv6 = lens _eC2SecurityGroupEgressPropertyCidrIpv6 (\s a -> s { _eC2SecurityGroupEgressPropertyCidrIpv6 = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-destinationprefixlistid
+ecsgepDestinationPrefixListId :: Lens' EC2SecurityGroupEgressProperty (Maybe (Val Text))
+ecsgepDestinationPrefixListId = lens _eC2SecurityGroupEgressPropertyDestinationPrefixListId (\s a -> s { _eC2SecurityGroupEgressPropertyDestinationPrefixListId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-destsecgroupid
+ecsgepDestinationSecurityGroupId :: Lens' EC2SecurityGroupEgressProperty (Maybe (Val Text))
+ecsgepDestinationSecurityGroupId = lens _eC2SecurityGroupEgressPropertyDestinationSecurityGroupId (\s a -> s { _eC2SecurityGroupEgressPropertyDestinationSecurityGroupId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-fromport
+ecsgepFromPort :: Lens' EC2SecurityGroupEgressProperty (Maybe (Val Integer'))
+ecsgepFromPort = lens _eC2SecurityGroupEgressPropertyFromPort (\s a -> s { _eC2SecurityGroupEgressPropertyFromPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-ipprotocol
+ecsgepIpProtocol :: Lens' EC2SecurityGroupEgressProperty (Val Text)
+ecsgepIpProtocol = lens _eC2SecurityGroupEgressPropertyIpProtocol (\s a -> s { _eC2SecurityGroupEgressPropertyIpProtocol = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-toport
+ecsgepToPort :: Lens' EC2SecurityGroupEgressProperty (Maybe (Val Integer'))
+ecsgepToPort = lens _eC2SecurityGroupEgressPropertyToPort (\s a -> s { _eC2SecurityGroupEgressPropertyToPort = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupIngressProperty.hs b/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupIngressProperty.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupIngressProperty.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html
+
+module Stratosphere.ResourceProperties.EC2SecurityGroupIngressProperty 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 EC2SecurityGroupIngressProperty. See
+-- 'ec2SecurityGroupIngressProperty' for a more convenient constructor.
+data EC2SecurityGroupIngressProperty =
+  EC2SecurityGroupIngressProperty
+  { _eC2SecurityGroupIngressPropertyCidrIp :: Maybe (Val Text)
+  , _eC2SecurityGroupIngressPropertyCidrIpv6 :: Maybe (Val Text)
+  , _eC2SecurityGroupIngressPropertyFromPort :: Maybe (Val Integer')
+  , _eC2SecurityGroupIngressPropertyIpProtocol :: Val Text
+  , _eC2SecurityGroupIngressPropertySourceSecurityGroupId :: Maybe (Val Text)
+  , _eC2SecurityGroupIngressPropertySourceSecurityGroupName :: Maybe (Val Text)
+  , _eC2SecurityGroupIngressPropertySourceSecurityGroupOwnerId :: Maybe (Val Text)
+  , _eC2SecurityGroupIngressPropertyToPort :: Maybe (Val Integer')
+  } deriving (Show, Eq)
+
+instance ToJSON EC2SecurityGroupIngressProperty where
+  toJSON EC2SecurityGroupIngressProperty{..} =
+    object $
+    catMaybes
+    [ ("CidrIp" .=) <$> _eC2SecurityGroupIngressPropertyCidrIp
+    , ("CidrIpv6" .=) <$> _eC2SecurityGroupIngressPropertyCidrIpv6
+    , ("FromPort" .=) <$> _eC2SecurityGroupIngressPropertyFromPort
+    , Just ("IpProtocol" .= _eC2SecurityGroupIngressPropertyIpProtocol)
+    , ("SourceSecurityGroupId" .=) <$> _eC2SecurityGroupIngressPropertySourceSecurityGroupId
+    , ("SourceSecurityGroupName" .=) <$> _eC2SecurityGroupIngressPropertySourceSecurityGroupName
+    , ("SourceSecurityGroupOwnerId" .=) <$> _eC2SecurityGroupIngressPropertySourceSecurityGroupOwnerId
+    , ("ToPort" .=) <$> _eC2SecurityGroupIngressPropertyToPort
+    ]
+
+instance FromJSON EC2SecurityGroupIngressProperty where
+  parseJSON (Object obj) =
+    EC2SecurityGroupIngressProperty <$>
+      obj .:? "CidrIp" <*>
+      obj .:? "CidrIpv6" <*>
+      obj .:? "FromPort" <*>
+      obj .: "IpProtocol" <*>
+      obj .:? "SourceSecurityGroupId" <*>
+      obj .:? "SourceSecurityGroupName" <*>
+      obj .:? "SourceSecurityGroupOwnerId" <*>
+      obj .:? "ToPort"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2SecurityGroupIngressProperty' containing required
+-- fields as arguments.
+ec2SecurityGroupIngressProperty
+  :: Val Text -- ^ 'ecsgipIpProtocol'
+  -> EC2SecurityGroupIngressProperty
+ec2SecurityGroupIngressProperty ipProtocolarg =
+  EC2SecurityGroupIngressProperty
+  { _eC2SecurityGroupIngressPropertyCidrIp = Nothing
+  , _eC2SecurityGroupIngressPropertyCidrIpv6 = Nothing
+  , _eC2SecurityGroupIngressPropertyFromPort = Nothing
+  , _eC2SecurityGroupIngressPropertyIpProtocol = ipProtocolarg
+  , _eC2SecurityGroupIngressPropertySourceSecurityGroupId = Nothing
+  , _eC2SecurityGroupIngressPropertySourceSecurityGroupName = Nothing
+  , _eC2SecurityGroupIngressPropertySourceSecurityGroupOwnerId = Nothing
+  , _eC2SecurityGroupIngressPropertyToPort = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-cidrip
+ecsgipCidrIp :: Lens' EC2SecurityGroupIngressProperty (Maybe (Val Text))
+ecsgipCidrIp = lens _eC2SecurityGroupIngressPropertyCidrIp (\s a -> s { _eC2SecurityGroupIngressPropertyCidrIp = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-cidripv6
+ecsgipCidrIpv6 :: Lens' EC2SecurityGroupIngressProperty (Maybe (Val Text))
+ecsgipCidrIpv6 = lens _eC2SecurityGroupIngressPropertyCidrIpv6 (\s a -> s { _eC2SecurityGroupIngressPropertyCidrIpv6 = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-fromport
+ecsgipFromPort :: Lens' EC2SecurityGroupIngressProperty (Maybe (Val Integer'))
+ecsgipFromPort = lens _eC2SecurityGroupIngressPropertyFromPort (\s a -> s { _eC2SecurityGroupIngressPropertyFromPort = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-ipprotocol
+ecsgipIpProtocol :: Lens' EC2SecurityGroupIngressProperty (Val Text)
+ecsgipIpProtocol = lens _eC2SecurityGroupIngressPropertyIpProtocol (\s a -> s { _eC2SecurityGroupIngressPropertyIpProtocol = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-sourcesecuritygroupid
+ecsgipSourceSecurityGroupId :: Lens' EC2SecurityGroupIngressProperty (Maybe (Val Text))
+ecsgipSourceSecurityGroupId = lens _eC2SecurityGroupIngressPropertySourceSecurityGroupId (\s a -> s { _eC2SecurityGroupIngressPropertySourceSecurityGroupId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-sourcesecuritygroupname
+ecsgipSourceSecurityGroupName :: Lens' EC2SecurityGroupIngressProperty (Maybe (Val Text))
+ecsgipSourceSecurityGroupName = lens _eC2SecurityGroupIngressPropertySourceSecurityGroupName (\s a -> s { _eC2SecurityGroupIngressPropertySourceSecurityGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-sourcesecuritygroupownerid
+ecsgipSourceSecurityGroupOwnerId :: Lens' EC2SecurityGroupIngressProperty (Maybe (Val Text))
+ecsgipSourceSecurityGroupOwnerId = lens _eC2SecurityGroupIngressPropertySourceSecurityGroupOwnerId (\s a -> s { _eC2SecurityGroupIngressPropertySourceSecurityGroupOwnerId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-toport
+ecsgipToPort :: Lens' EC2SecurityGroupIngressProperty (Maybe (Val Integer'))
+ecsgipToPort = lens _eC2SecurityGroupIngressPropertyToPort (\s a -> s { _eC2SecurityGroupIngressPropertyToPort = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupRule.hs b/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupRule.hs
deleted file mode 100644
--- a/library-gen/Stratosphere/ResourceProperties/EC2SecurityGroupRule.hs
+++ /dev/null
@@ -1,97 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html
-
-module Stratosphere.ResourceProperties.EC2SecurityGroupRule 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 EC2SecurityGroupRule. See
--- 'ec2SecurityGroupRule' for a more convenient constructor.
-data EC2SecurityGroupRule =
-  EC2SecurityGroupRule
-  { _eC2SecurityGroupRuleCidrIp :: Maybe (Val Text)
-  , _eC2SecurityGroupRuleFromPort :: Maybe (Val Integer')
-  , _eC2SecurityGroupRuleIpProtocol :: Val Text
-  , _eC2SecurityGroupRuleSourceSecurityGroupId :: Maybe (Val Text)
-  , _eC2SecurityGroupRuleSourceSecurityGroupName :: Maybe (Val Text)
-  , _eC2SecurityGroupRuleSourceSecurityGroupOwnerId :: Maybe (Val Text)
-  , _eC2SecurityGroupRuleToPort :: Maybe (Val Integer')
-  } deriving (Show, Eq)
-
-instance ToJSON EC2SecurityGroupRule where
-  toJSON EC2SecurityGroupRule{..} =
-    object $
-    catMaybes
-    [ ("CidrIp" .=) <$> _eC2SecurityGroupRuleCidrIp
-    , ("FromPort" .=) <$> _eC2SecurityGroupRuleFromPort
-    , Just ("IpProtocol" .= _eC2SecurityGroupRuleIpProtocol)
-    , ("SourceSecurityGroupId" .=) <$> _eC2SecurityGroupRuleSourceSecurityGroupId
-    , ("SourceSecurityGroupName" .=) <$> _eC2SecurityGroupRuleSourceSecurityGroupName
-    , ("SourceSecurityGroupOwnerId" .=) <$> _eC2SecurityGroupRuleSourceSecurityGroupOwnerId
-    , ("ToPort" .=) <$> _eC2SecurityGroupRuleToPort
-    ]
-
-instance FromJSON EC2SecurityGroupRule where
-  parseJSON (Object obj) =
-    EC2SecurityGroupRule <$>
-      obj .:? "CidrIp" <*>
-      obj .:? "FromPort" <*>
-      obj .: "IpProtocol" <*>
-      obj .:? "SourceSecurityGroupId" <*>
-      obj .:? "SourceSecurityGroupName" <*>
-      obj .:? "SourceSecurityGroupOwnerId" <*>
-      obj .:? "ToPort"
-  parseJSON _ = mempty
-
--- | Constructor for 'EC2SecurityGroupRule' containing required fields as
--- arguments.
-ec2SecurityGroupRule
-  :: Val Text -- ^ 'ecsgrIpProtocol'
-  -> EC2SecurityGroupRule
-ec2SecurityGroupRule ipProtocolarg =
-  EC2SecurityGroupRule
-  { _eC2SecurityGroupRuleCidrIp = Nothing
-  , _eC2SecurityGroupRuleFromPort = Nothing
-  , _eC2SecurityGroupRuleIpProtocol = ipProtocolarg
-  , _eC2SecurityGroupRuleSourceSecurityGroupId = Nothing
-  , _eC2SecurityGroupRuleSourceSecurityGroupName = Nothing
-  , _eC2SecurityGroupRuleSourceSecurityGroupOwnerId = Nothing
-  , _eC2SecurityGroupRuleToPort = Nothing
-  }
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-cidrip
-ecsgrCidrIp :: Lens' EC2SecurityGroupRule (Maybe (Val Text))
-ecsgrCidrIp = lens _eC2SecurityGroupRuleCidrIp (\s a -> s { _eC2SecurityGroupRuleCidrIp = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-fromport
-ecsgrFromPort :: Lens' EC2SecurityGroupRule (Maybe (Val Integer'))
-ecsgrFromPort = lens _eC2SecurityGroupRuleFromPort (\s a -> s { _eC2SecurityGroupRuleFromPort = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-ipprotocol
-ecsgrIpProtocol :: Lens' EC2SecurityGroupRule (Val Text)
-ecsgrIpProtocol = lens _eC2SecurityGroupRuleIpProtocol (\s a -> s { _eC2SecurityGroupRuleIpProtocol = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-sourcesecuritygroupid
-ecsgrSourceSecurityGroupId :: Lens' EC2SecurityGroupRule (Maybe (Val Text))
-ecsgrSourceSecurityGroupId = lens _eC2SecurityGroupRuleSourceSecurityGroupId (\s a -> s { _eC2SecurityGroupRuleSourceSecurityGroupId = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-sourcesecuritygroupname
-ecsgrSourceSecurityGroupName :: Lens' EC2SecurityGroupRule (Maybe (Val Text))
-ecsgrSourceSecurityGroupName = lens _eC2SecurityGroupRuleSourceSecurityGroupName (\s a -> s { _eC2SecurityGroupRuleSourceSecurityGroupName = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-sourcesecuritygroupownerid
-ecsgrSourceSecurityGroupOwnerId :: Lens' EC2SecurityGroupRule (Maybe (Val Text))
-ecsgrSourceSecurityGroupOwnerId = lens _eC2SecurityGroupRuleSourceSecurityGroupOwnerId (\s a -> s { _eC2SecurityGroupRuleSourceSecurityGroupOwnerId = a })
-
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html#cfn-ec2-security-group-rule-toport
-ecsgrToPort :: Lens' EC2SecurityGroupRule (Maybe (Val Integer'))
-ecsgrToPort = lens _eC2SecurityGroupRuleToPort (\s a -> s { _eC2SecurityGroupRuleToPort = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceFleetConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceFleetConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceFleetConfig.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetconfig.html
+
+module Stratosphere.ResourceProperties.EMRClusterInstanceFleetConfig 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.EMRClusterInstanceTypeConfig
+import Stratosphere.ResourceProperties.EMRClusterInstanceFleetProvisioningSpecifications
+
+-- | Full data type definition for EMRClusterInstanceFleetConfig. See
+-- 'emrClusterInstanceFleetConfig' for a more convenient constructor.
+data EMRClusterInstanceFleetConfig =
+  EMRClusterInstanceFleetConfig
+  { _eMRClusterInstanceFleetConfigInstanceTypeConfigs :: Maybe [EMRClusterInstanceTypeConfig]
+  , _eMRClusterInstanceFleetConfigLaunchSpecifications :: Maybe EMRClusterInstanceFleetProvisioningSpecifications
+  , _eMRClusterInstanceFleetConfigName :: Maybe (Val Text)
+  , _eMRClusterInstanceFleetConfigTargetOnDemandCapacity :: Maybe (Val Integer')
+  , _eMRClusterInstanceFleetConfigTargetSpotCapacity :: Maybe (Val Integer')
+  } deriving (Show, Eq)
+
+instance ToJSON EMRClusterInstanceFleetConfig where
+  toJSON EMRClusterInstanceFleetConfig{..} =
+    object $
+    catMaybes
+    [ ("InstanceTypeConfigs" .=) <$> _eMRClusterInstanceFleetConfigInstanceTypeConfigs
+    , ("LaunchSpecifications" .=) <$> _eMRClusterInstanceFleetConfigLaunchSpecifications
+    , ("Name" .=) <$> _eMRClusterInstanceFleetConfigName
+    , ("TargetOnDemandCapacity" .=) <$> _eMRClusterInstanceFleetConfigTargetOnDemandCapacity
+    , ("TargetSpotCapacity" .=) <$> _eMRClusterInstanceFleetConfigTargetSpotCapacity
+    ]
+
+instance FromJSON EMRClusterInstanceFleetConfig where
+  parseJSON (Object obj) =
+    EMRClusterInstanceFleetConfig <$>
+      obj .:? "InstanceTypeConfigs" <*>
+      obj .:? "LaunchSpecifications" <*>
+      obj .:? "Name" <*>
+      obj .:? "TargetOnDemandCapacity" <*>
+      obj .:? "TargetSpotCapacity"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRClusterInstanceFleetConfig' containing required
+-- fields as arguments.
+emrClusterInstanceFleetConfig
+  :: EMRClusterInstanceFleetConfig
+emrClusterInstanceFleetConfig  =
+  EMRClusterInstanceFleetConfig
+  { _eMRClusterInstanceFleetConfigInstanceTypeConfigs = Nothing
+  , _eMRClusterInstanceFleetConfigLaunchSpecifications = Nothing
+  , _eMRClusterInstanceFleetConfigName = Nothing
+  , _eMRClusterInstanceFleetConfigTargetOnDemandCapacity = Nothing
+  , _eMRClusterInstanceFleetConfigTargetSpotCapacity = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetconfig.html#cfn-elasticmapreduce-cluster-instancefleetconfig-instancetypeconfigs
+emrcifcInstanceTypeConfigs :: Lens' EMRClusterInstanceFleetConfig (Maybe [EMRClusterInstanceTypeConfig])
+emrcifcInstanceTypeConfigs = lens _eMRClusterInstanceFleetConfigInstanceTypeConfigs (\s a -> s { _eMRClusterInstanceFleetConfigInstanceTypeConfigs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetconfig.html#cfn-elasticmapreduce-cluster-instancefleetconfig-launchspecifications
+emrcifcLaunchSpecifications :: Lens' EMRClusterInstanceFleetConfig (Maybe EMRClusterInstanceFleetProvisioningSpecifications)
+emrcifcLaunchSpecifications = lens _eMRClusterInstanceFleetConfigLaunchSpecifications (\s a -> s { _eMRClusterInstanceFleetConfigLaunchSpecifications = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetconfig.html#cfn-elasticmapreduce-cluster-instancefleetconfig-name
+emrcifcName :: Lens' EMRClusterInstanceFleetConfig (Maybe (Val Text))
+emrcifcName = lens _eMRClusterInstanceFleetConfigName (\s a -> s { _eMRClusterInstanceFleetConfigName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetconfig.html#cfn-elasticmapreduce-cluster-instancefleetconfig-targetondemandcapacity
+emrcifcTargetOnDemandCapacity :: Lens' EMRClusterInstanceFleetConfig (Maybe (Val Integer'))
+emrcifcTargetOnDemandCapacity = lens _eMRClusterInstanceFleetConfigTargetOnDemandCapacity (\s a -> s { _eMRClusterInstanceFleetConfigTargetOnDemandCapacity = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetconfig.html#cfn-elasticmapreduce-cluster-instancefleetconfig-targetspotcapacity
+emrcifcTargetSpotCapacity :: Lens' EMRClusterInstanceFleetConfig (Maybe (Val Integer'))
+emrcifcTargetSpotCapacity = lens _eMRClusterInstanceFleetConfigTargetSpotCapacity (\s a -> s { _eMRClusterInstanceFleetConfigTargetSpotCapacity = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceFleetProvisioningSpecifications.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceFleetProvisioningSpecifications.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceFleetProvisioningSpecifications.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetprovisioningspecifications.html
+
+module Stratosphere.ResourceProperties.EMRClusterInstanceFleetProvisioningSpecifications 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.EMRClusterSpotProvisioningSpecification
+
+-- | Full data type definition for
+-- EMRClusterInstanceFleetProvisioningSpecifications. See
+-- 'emrClusterInstanceFleetProvisioningSpecifications' for a more convenient
+-- constructor.
+data EMRClusterInstanceFleetProvisioningSpecifications =
+  EMRClusterInstanceFleetProvisioningSpecifications
+  { _eMRClusterInstanceFleetProvisioningSpecificationsSpotSpecification :: EMRClusterSpotProvisioningSpecification
+  } deriving (Show, Eq)
+
+instance ToJSON EMRClusterInstanceFleetProvisioningSpecifications where
+  toJSON EMRClusterInstanceFleetProvisioningSpecifications{..} =
+    object $
+    catMaybes
+    [ Just ("SpotSpecification" .= _eMRClusterInstanceFleetProvisioningSpecificationsSpotSpecification)
+    ]
+
+instance FromJSON EMRClusterInstanceFleetProvisioningSpecifications where
+  parseJSON (Object obj) =
+    EMRClusterInstanceFleetProvisioningSpecifications <$>
+      obj .: "SpotSpecification"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRClusterInstanceFleetProvisioningSpecifications'
+-- containing required fields as arguments.
+emrClusterInstanceFleetProvisioningSpecifications
+  :: EMRClusterSpotProvisioningSpecification -- ^ 'emrcifpsSpotSpecification'
+  -> EMRClusterInstanceFleetProvisioningSpecifications
+emrClusterInstanceFleetProvisioningSpecifications spotSpecificationarg =
+  EMRClusterInstanceFleetProvisioningSpecifications
+  { _eMRClusterInstanceFleetProvisioningSpecificationsSpotSpecification = spotSpecificationarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancefleetprovisioningspecifications.html#cfn-elasticmapreduce-cluster-instancefleetprovisioningspecifications-spotspecification
+emrcifpsSpotSpecification :: Lens' EMRClusterInstanceFleetProvisioningSpecifications EMRClusterSpotProvisioningSpecification
+emrcifpsSpotSpecification = lens _eMRClusterInstanceFleetProvisioningSpecificationsSpotSpecification (\s a -> s { _eMRClusterInstanceFleetProvisioningSpecificationsSpotSpecification = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceTypeConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceTypeConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterInstanceTypeConfig.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html
+
+module Stratosphere.ResourceProperties.EMRClusterInstanceTypeConfig 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.EMRClusterConfiguration
+import Stratosphere.ResourceProperties.EMRClusterEbsConfiguration
+
+-- | Full data type definition for EMRClusterInstanceTypeConfig. See
+-- 'emrClusterInstanceTypeConfig' for a more convenient constructor.
+data EMRClusterInstanceTypeConfig =
+  EMRClusterInstanceTypeConfig
+  { _eMRClusterInstanceTypeConfigBidPrice :: Maybe (Val Text)
+  , _eMRClusterInstanceTypeConfigBidPriceAsPercentageOfOnDemandPrice :: Maybe (Val Double')
+  , _eMRClusterInstanceTypeConfigConfigurations :: Maybe [EMRClusterConfiguration]
+  , _eMRClusterInstanceTypeConfigEbsConfiguration :: Maybe EMRClusterEbsConfiguration
+  , _eMRClusterInstanceTypeConfigInstanceType :: Val Text
+  , _eMRClusterInstanceTypeConfigWeightedCapacity :: Maybe (Val Integer')
+  } deriving (Show, Eq)
+
+instance ToJSON EMRClusterInstanceTypeConfig where
+  toJSON EMRClusterInstanceTypeConfig{..} =
+    object $
+    catMaybes
+    [ ("BidPrice" .=) <$> _eMRClusterInstanceTypeConfigBidPrice
+    , ("BidPriceAsPercentageOfOnDemandPrice" .=) <$> _eMRClusterInstanceTypeConfigBidPriceAsPercentageOfOnDemandPrice
+    , ("Configurations" .=) <$> _eMRClusterInstanceTypeConfigConfigurations
+    , ("EbsConfiguration" .=) <$> _eMRClusterInstanceTypeConfigEbsConfiguration
+    , Just ("InstanceType" .= _eMRClusterInstanceTypeConfigInstanceType)
+    , ("WeightedCapacity" .=) <$> _eMRClusterInstanceTypeConfigWeightedCapacity
+    ]
+
+instance FromJSON EMRClusterInstanceTypeConfig where
+  parseJSON (Object obj) =
+    EMRClusterInstanceTypeConfig <$>
+      obj .:? "BidPrice" <*>
+      obj .:? "BidPriceAsPercentageOfOnDemandPrice" <*>
+      obj .:? "Configurations" <*>
+      obj .:? "EbsConfiguration" <*>
+      obj .: "InstanceType" <*>
+      obj .:? "WeightedCapacity"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRClusterInstanceTypeConfig' containing required fields
+-- as arguments.
+emrClusterInstanceTypeConfig
+  :: Val Text -- ^ 'emrcitcInstanceType'
+  -> EMRClusterInstanceTypeConfig
+emrClusterInstanceTypeConfig instanceTypearg =
+  EMRClusterInstanceTypeConfig
+  { _eMRClusterInstanceTypeConfigBidPrice = Nothing
+  , _eMRClusterInstanceTypeConfigBidPriceAsPercentageOfOnDemandPrice = Nothing
+  , _eMRClusterInstanceTypeConfigConfigurations = Nothing
+  , _eMRClusterInstanceTypeConfigEbsConfiguration = Nothing
+  , _eMRClusterInstanceTypeConfigInstanceType = instanceTypearg
+  , _eMRClusterInstanceTypeConfigWeightedCapacity = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html#cfn-elasticmapreduce-cluster-instancetypeconfig-bidprice
+emrcitcBidPrice :: Lens' EMRClusterInstanceTypeConfig (Maybe (Val Text))
+emrcitcBidPrice = lens _eMRClusterInstanceTypeConfigBidPrice (\s a -> s { _eMRClusterInstanceTypeConfigBidPrice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html#cfn-elasticmapreduce-cluster-instancetypeconfig-bidpriceaspercentageofondemandprice
+emrcitcBidPriceAsPercentageOfOnDemandPrice :: Lens' EMRClusterInstanceTypeConfig (Maybe (Val Double'))
+emrcitcBidPriceAsPercentageOfOnDemandPrice = lens _eMRClusterInstanceTypeConfigBidPriceAsPercentageOfOnDemandPrice (\s a -> s { _eMRClusterInstanceTypeConfigBidPriceAsPercentageOfOnDemandPrice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html#cfn-elasticmapreduce-cluster-instancetypeconfig-configurations
+emrcitcConfigurations :: Lens' EMRClusterInstanceTypeConfig (Maybe [EMRClusterConfiguration])
+emrcitcConfigurations = lens _eMRClusterInstanceTypeConfigConfigurations (\s a -> s { _eMRClusterInstanceTypeConfigConfigurations = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html#cfn-elasticmapreduce-cluster-instancetypeconfig-ebsconfiguration
+emrcitcEbsConfiguration :: Lens' EMRClusterInstanceTypeConfig (Maybe EMRClusterEbsConfiguration)
+emrcitcEbsConfiguration = lens _eMRClusterInstanceTypeConfigEbsConfiguration (\s a -> s { _eMRClusterInstanceTypeConfigEbsConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html#cfn-elasticmapreduce-cluster-instancetypeconfig-instancetype
+emrcitcInstanceType :: Lens' EMRClusterInstanceTypeConfig (Val Text)
+emrcitcInstanceType = lens _eMRClusterInstanceTypeConfigInstanceType (\s a -> s { _eMRClusterInstanceTypeConfigInstanceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-instancetypeconfig.html#cfn-elasticmapreduce-cluster-instancetypeconfig-weightedcapacity
+emrcitcWeightedCapacity :: Lens' EMRClusterInstanceTypeConfig (Maybe (Val Integer'))
+emrcitcWeightedCapacity = lens _eMRClusterInstanceTypeConfigWeightedCapacity (\s a -> s { _eMRClusterInstanceTypeConfigWeightedCapacity = a })
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
@@ -12,6 +12,7 @@
 import Data.Text
 
 import Stratosphere.Values
+import Stratosphere.ResourceProperties.EMRClusterInstanceFleetConfig
 import Stratosphere.ResourceProperties.EMRClusterInstanceGroupConfig
 import Stratosphere.ResourceProperties.EMRClusterPlacementType
 
@@ -21,13 +22,15 @@
   EMRClusterJobFlowInstancesConfig
   { _eMRClusterJobFlowInstancesConfigAdditionalMasterSecurityGroups :: Maybe [Val Text]
   , _eMRClusterJobFlowInstancesConfigAdditionalSlaveSecurityGroups :: Maybe [Val Text]
+  , _eMRClusterJobFlowInstancesConfigCoreInstanceFleet :: Maybe EMRClusterInstanceFleetConfig
   , _eMRClusterJobFlowInstancesConfigCoreInstanceGroup :: Maybe EMRClusterInstanceGroupConfig
   , _eMRClusterJobFlowInstancesConfigEc2KeyName :: Maybe (Val Text)
   , _eMRClusterJobFlowInstancesConfigEc2SubnetId :: Maybe (Val Text)
   , _eMRClusterJobFlowInstancesConfigEmrManagedMasterSecurityGroup :: Maybe (Val Text)
   , _eMRClusterJobFlowInstancesConfigEmrManagedSlaveSecurityGroup :: Maybe (Val Text)
   , _eMRClusterJobFlowInstancesConfigHadoopVersion :: Maybe (Val Text)
-  , _eMRClusterJobFlowInstancesConfigMasterInstanceGroup :: EMRClusterInstanceGroupConfig
+  , _eMRClusterJobFlowInstancesConfigMasterInstanceFleet :: Maybe EMRClusterInstanceFleetConfig
+  , _eMRClusterJobFlowInstancesConfigMasterInstanceGroup :: Maybe EMRClusterInstanceGroupConfig
   , _eMRClusterJobFlowInstancesConfigPlacement :: Maybe EMRClusterPlacementType
   , _eMRClusterJobFlowInstancesConfigServiceAccessSecurityGroup :: Maybe (Val Text)
   , _eMRClusterJobFlowInstancesConfigTerminationProtected :: Maybe (Val Bool')
@@ -39,13 +42,15 @@
     catMaybes
     [ ("AdditionalMasterSecurityGroups" .=) <$> _eMRClusterJobFlowInstancesConfigAdditionalMasterSecurityGroups
     , ("AdditionalSlaveSecurityGroups" .=) <$> _eMRClusterJobFlowInstancesConfigAdditionalSlaveSecurityGroups
+    , ("CoreInstanceFleet" .=) <$> _eMRClusterJobFlowInstancesConfigCoreInstanceFleet
     , ("CoreInstanceGroup" .=) <$> _eMRClusterJobFlowInstancesConfigCoreInstanceGroup
     , ("Ec2KeyName" .=) <$> _eMRClusterJobFlowInstancesConfigEc2KeyName
     , ("Ec2SubnetId" .=) <$> _eMRClusterJobFlowInstancesConfigEc2SubnetId
     , ("EmrManagedMasterSecurityGroup" .=) <$> _eMRClusterJobFlowInstancesConfigEmrManagedMasterSecurityGroup
     , ("EmrManagedSlaveSecurityGroup" .=) <$> _eMRClusterJobFlowInstancesConfigEmrManagedSlaveSecurityGroup
     , ("HadoopVersion" .=) <$> _eMRClusterJobFlowInstancesConfigHadoopVersion
-    , Just ("MasterInstanceGroup" .= _eMRClusterJobFlowInstancesConfigMasterInstanceGroup)
+    , ("MasterInstanceFleet" .=) <$> _eMRClusterJobFlowInstancesConfigMasterInstanceFleet
+    , ("MasterInstanceGroup" .=) <$> _eMRClusterJobFlowInstancesConfigMasterInstanceGroup
     , ("Placement" .=) <$> _eMRClusterJobFlowInstancesConfigPlacement
     , ("ServiceAccessSecurityGroup" .=) <$> _eMRClusterJobFlowInstancesConfigServiceAccessSecurityGroup
     , ("TerminationProtected" .=) <$> _eMRClusterJobFlowInstancesConfigTerminationProtected
@@ -56,13 +61,15 @@
     EMRClusterJobFlowInstancesConfig <$>
       obj .:? "AdditionalMasterSecurityGroups" <*>
       obj .:? "AdditionalSlaveSecurityGroups" <*>
+      obj .:? "CoreInstanceFleet" <*>
       obj .:? "CoreInstanceGroup" <*>
       obj .:? "Ec2KeyName" <*>
       obj .:? "Ec2SubnetId" <*>
       obj .:? "EmrManagedMasterSecurityGroup" <*>
       obj .:? "EmrManagedSlaveSecurityGroup" <*>
       obj .:? "HadoopVersion" <*>
-      obj .: "MasterInstanceGroup" <*>
+      obj .:? "MasterInstanceFleet" <*>
+      obj .:? "MasterInstanceGroup" <*>
       obj .:? "Placement" <*>
       obj .:? "ServiceAccessSecurityGroup" <*>
       obj .:? "TerminationProtected"
@@ -71,19 +78,20 @@
 -- | Constructor for 'EMRClusterJobFlowInstancesConfig' containing required
 -- fields as arguments.
 emrClusterJobFlowInstancesConfig
-  :: EMRClusterInstanceGroupConfig -- ^ 'emrcjficMasterInstanceGroup'
-  -> EMRClusterJobFlowInstancesConfig
-emrClusterJobFlowInstancesConfig masterInstanceGrouparg =
+  :: EMRClusterJobFlowInstancesConfig
+emrClusterJobFlowInstancesConfig  =
   EMRClusterJobFlowInstancesConfig
   { _eMRClusterJobFlowInstancesConfigAdditionalMasterSecurityGroups = Nothing
   , _eMRClusterJobFlowInstancesConfigAdditionalSlaveSecurityGroups = Nothing
+  , _eMRClusterJobFlowInstancesConfigCoreInstanceFleet = Nothing
   , _eMRClusterJobFlowInstancesConfigCoreInstanceGroup = Nothing
   , _eMRClusterJobFlowInstancesConfigEc2KeyName = Nothing
   , _eMRClusterJobFlowInstancesConfigEc2SubnetId = Nothing
   , _eMRClusterJobFlowInstancesConfigEmrManagedMasterSecurityGroup = Nothing
   , _eMRClusterJobFlowInstancesConfigEmrManagedSlaveSecurityGroup = Nothing
   , _eMRClusterJobFlowInstancesConfigHadoopVersion = Nothing
-  , _eMRClusterJobFlowInstancesConfigMasterInstanceGroup = masterInstanceGrouparg
+  , _eMRClusterJobFlowInstancesConfigMasterInstanceFleet = Nothing
+  , _eMRClusterJobFlowInstancesConfigMasterInstanceGroup = Nothing
   , _eMRClusterJobFlowInstancesConfigPlacement = Nothing
   , _eMRClusterJobFlowInstancesConfigServiceAccessSecurityGroup = Nothing
   , _eMRClusterJobFlowInstancesConfigTerminationProtected = Nothing
@@ -97,6 +105,10 @@
 emrcjficAdditionalSlaveSecurityGroups :: Lens' EMRClusterJobFlowInstancesConfig (Maybe [Val Text])
 emrcjficAdditionalSlaveSecurityGroups = lens _eMRClusterJobFlowInstancesConfigAdditionalSlaveSecurityGroups (\s a -> s { _eMRClusterJobFlowInstancesConfigAdditionalSlaveSecurityGroups = a })
 
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-coreinstancefleet
+emrcjficCoreInstanceFleet :: Lens' EMRClusterJobFlowInstancesConfig (Maybe EMRClusterInstanceFleetConfig)
+emrcjficCoreInstanceFleet = lens _eMRClusterJobFlowInstancesConfigCoreInstanceFleet (\s a -> s { _eMRClusterJobFlowInstancesConfigCoreInstanceFleet = a })
+
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-coreinstancegroup
 emrcjficCoreInstanceGroup :: Lens' EMRClusterJobFlowInstancesConfig (Maybe EMRClusterInstanceGroupConfig)
 emrcjficCoreInstanceGroup = lens _eMRClusterJobFlowInstancesConfigCoreInstanceGroup (\s a -> s { _eMRClusterJobFlowInstancesConfigCoreInstanceGroup = a })
@@ -121,8 +133,12 @@
 emrcjficHadoopVersion :: Lens' EMRClusterJobFlowInstancesConfig (Maybe (Val Text))
 emrcjficHadoopVersion = lens _eMRClusterJobFlowInstancesConfigHadoopVersion (\s a -> s { _eMRClusterJobFlowInstancesConfigHadoopVersion = a })
 
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-masterinstancegroup
-emrcjficMasterInstanceGroup :: Lens' EMRClusterJobFlowInstancesConfig EMRClusterInstanceGroupConfig
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-elasticmapreduce-cluster-jobflowinstancesconfig-masterinstancefleet
+emrcjficMasterInstanceFleet :: Lens' EMRClusterJobFlowInstancesConfig (Maybe EMRClusterInstanceFleetConfig)
+emrcjficMasterInstanceFleet = lens _eMRClusterJobFlowInstancesConfigMasterInstanceFleet (\s a -> s { _eMRClusterJobFlowInstancesConfigMasterInstanceFleet = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-coreinstancegroup
+emrcjficMasterInstanceGroup :: Lens' EMRClusterJobFlowInstancesConfig (Maybe EMRClusterInstanceGroupConfig)
 emrcjficMasterInstanceGroup = lens _eMRClusterJobFlowInstancesConfigMasterInstanceGroup (\s a -> s { _eMRClusterJobFlowInstancesConfigMasterInstanceGroup = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-cluster-jobflowinstancesconfig.html#cfn-emr-cluster-jobflowinstancesconfig-placement
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRClusterSpotProvisioningSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EMRClusterSpotProvisioningSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRClusterSpotProvisioningSpecification.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-spotprovisioningspecification.html
+
+module Stratosphere.ResourceProperties.EMRClusterSpotProvisioningSpecification 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 EMRClusterSpotProvisioningSpecification.
+-- See 'emrClusterSpotProvisioningSpecification' for a more convenient
+-- constructor.
+data EMRClusterSpotProvisioningSpecification =
+  EMRClusterSpotProvisioningSpecification
+  { _eMRClusterSpotProvisioningSpecificationBlockDurationMinutes :: Maybe (Val Integer')
+  , _eMRClusterSpotProvisioningSpecificationTimeoutAction :: Val Text
+  , _eMRClusterSpotProvisioningSpecificationTimeoutDurationMinutes :: Val Integer'
+  } deriving (Show, Eq)
+
+instance ToJSON EMRClusterSpotProvisioningSpecification where
+  toJSON EMRClusterSpotProvisioningSpecification{..} =
+    object $
+    catMaybes
+    [ ("BlockDurationMinutes" .=) <$> _eMRClusterSpotProvisioningSpecificationBlockDurationMinutes
+    , Just ("TimeoutAction" .= _eMRClusterSpotProvisioningSpecificationTimeoutAction)
+    , Just ("TimeoutDurationMinutes" .= _eMRClusterSpotProvisioningSpecificationTimeoutDurationMinutes)
+    ]
+
+instance FromJSON EMRClusterSpotProvisioningSpecification where
+  parseJSON (Object obj) =
+    EMRClusterSpotProvisioningSpecification <$>
+      obj .:? "BlockDurationMinutes" <*>
+      obj .: "TimeoutAction" <*>
+      obj .: "TimeoutDurationMinutes"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRClusterSpotProvisioningSpecification' containing
+-- required fields as arguments.
+emrClusterSpotProvisioningSpecification
+  :: Val Text -- ^ 'emrcspsTimeoutAction'
+  -> Val Integer' -- ^ 'emrcspsTimeoutDurationMinutes'
+  -> EMRClusterSpotProvisioningSpecification
+emrClusterSpotProvisioningSpecification timeoutActionarg timeoutDurationMinutesarg =
+  EMRClusterSpotProvisioningSpecification
+  { _eMRClusterSpotProvisioningSpecificationBlockDurationMinutes = Nothing
+  , _eMRClusterSpotProvisioningSpecificationTimeoutAction = timeoutActionarg
+  , _eMRClusterSpotProvisioningSpecificationTimeoutDurationMinutes = timeoutDurationMinutesarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-spotprovisioningspecification.html#cfn-elasticmapreduce-cluster-spotprovisioningspecification-blockdurationminutes
+emrcspsBlockDurationMinutes :: Lens' EMRClusterSpotProvisioningSpecification (Maybe (Val Integer'))
+emrcspsBlockDurationMinutes = lens _eMRClusterSpotProvisioningSpecificationBlockDurationMinutes (\s a -> s { _eMRClusterSpotProvisioningSpecificationBlockDurationMinutes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-spotprovisioningspecification.html#cfn-elasticmapreduce-cluster-spotprovisioningspecification-timeoutaction
+emrcspsTimeoutAction :: Lens' EMRClusterSpotProvisioningSpecification (Val Text)
+emrcspsTimeoutAction = lens _eMRClusterSpotProvisioningSpecificationTimeoutAction (\s a -> s { _eMRClusterSpotProvisioningSpecificationTimeoutAction = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-spotprovisioningspecification.html#cfn-elasticmapreduce-cluster-spotprovisioningspecification-timeoutdurationminutes
+emrcspsTimeoutDurationMinutes :: Lens' EMRClusterSpotProvisioningSpecification (Val Integer')
+emrcspsTimeoutDurationMinutes = lens _eMRClusterSpotProvisioningSpecificationTimeoutDurationMinutes (\s a -> s { _eMRClusterSpotProvisioningSpecificationTimeoutDurationMinutes = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigConfiguration.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-configuration.html
+
+module Stratosphere.ResourceProperties.EMRInstanceFleetConfigConfiguration 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 EMRInstanceFleetConfigConfiguration. See
+-- 'emrInstanceFleetConfigConfiguration' for a more convenient constructor.
+data EMRInstanceFleetConfigConfiguration =
+  EMRInstanceFleetConfigConfiguration
+  { _eMRInstanceFleetConfigConfigurationClassification :: Maybe (Val Text)
+  , _eMRInstanceFleetConfigConfigurationConfigurationProperties :: Maybe Object
+  , _eMRInstanceFleetConfigConfigurationConfigurations :: Maybe [EMRInstanceFleetConfigConfiguration]
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceFleetConfigConfiguration where
+  toJSON EMRInstanceFleetConfigConfiguration{..} =
+    object $
+    catMaybes
+    [ ("Classification" .=) <$> _eMRInstanceFleetConfigConfigurationClassification
+    , ("ConfigurationProperties" .=) <$> _eMRInstanceFleetConfigConfigurationConfigurationProperties
+    , ("Configurations" .=) <$> _eMRInstanceFleetConfigConfigurationConfigurations
+    ]
+
+instance FromJSON EMRInstanceFleetConfigConfiguration where
+  parseJSON (Object obj) =
+    EMRInstanceFleetConfigConfiguration <$>
+      obj .:? "Classification" <*>
+      obj .:? "ConfigurationProperties" <*>
+      obj .:? "Configurations"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRInstanceFleetConfigConfiguration' containing required
+-- fields as arguments.
+emrInstanceFleetConfigConfiguration
+  :: EMRInstanceFleetConfigConfiguration
+emrInstanceFleetConfigConfiguration  =
+  EMRInstanceFleetConfigConfiguration
+  { _eMRInstanceFleetConfigConfigurationClassification = Nothing
+  , _eMRInstanceFleetConfigConfigurationConfigurationProperties = Nothing
+  , _eMRInstanceFleetConfigConfigurationConfigurations = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-configuration.html#cfn-elasticmapreduce-instancefleetconfig-configuration-classification
+emrifccClassification :: Lens' EMRInstanceFleetConfigConfiguration (Maybe (Val Text))
+emrifccClassification = lens _eMRInstanceFleetConfigConfigurationClassification (\s a -> s { _eMRInstanceFleetConfigConfigurationClassification = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-configuration.html#cfn-elasticmapreduce-instancefleetconfig-configuration-configurationproperties
+emrifccConfigurationProperties :: Lens' EMRInstanceFleetConfigConfiguration (Maybe Object)
+emrifccConfigurationProperties = lens _eMRInstanceFleetConfigConfigurationConfigurationProperties (\s a -> s { _eMRInstanceFleetConfigConfigurationConfigurationProperties = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-configuration.html#cfn-elasticmapreduce-instancefleetconfig-configuration-configurations
+emrifccConfigurations :: Lens' EMRInstanceFleetConfigConfiguration (Maybe [EMRInstanceFleetConfigConfiguration])
+emrifccConfigurations = lens _eMRInstanceFleetConfigConfigurationConfigurations (\s a -> s { _eMRInstanceFleetConfigConfigurationConfigurations = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigEbsBlockDeviceConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigEbsBlockDeviceConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigEbsBlockDeviceConfig.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ebsblockdeviceconfig.html
+
+module Stratosphere.ResourceProperties.EMRInstanceFleetConfigEbsBlockDeviceConfig 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.EMRInstanceFleetConfigVolumeSpecification
+
+-- | Full data type definition for EMRInstanceFleetConfigEbsBlockDeviceConfig.
+-- See 'emrInstanceFleetConfigEbsBlockDeviceConfig' for a more convenient
+-- constructor.
+data EMRInstanceFleetConfigEbsBlockDeviceConfig =
+  EMRInstanceFleetConfigEbsBlockDeviceConfig
+  { _eMRInstanceFleetConfigEbsBlockDeviceConfigVolumeSpecification :: EMRInstanceFleetConfigVolumeSpecification
+  , _eMRInstanceFleetConfigEbsBlockDeviceConfigVolumesPerInstance :: Maybe (Val Integer')
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceFleetConfigEbsBlockDeviceConfig where
+  toJSON EMRInstanceFleetConfigEbsBlockDeviceConfig{..} =
+    object $
+    catMaybes
+    [ Just ("VolumeSpecification" .= _eMRInstanceFleetConfigEbsBlockDeviceConfigVolumeSpecification)
+    , ("VolumesPerInstance" .=) <$> _eMRInstanceFleetConfigEbsBlockDeviceConfigVolumesPerInstance
+    ]
+
+instance FromJSON EMRInstanceFleetConfigEbsBlockDeviceConfig where
+  parseJSON (Object obj) =
+    EMRInstanceFleetConfigEbsBlockDeviceConfig <$>
+      obj .: "VolumeSpecification" <*>
+      obj .:? "VolumesPerInstance"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRInstanceFleetConfigEbsBlockDeviceConfig' containing
+-- required fields as arguments.
+emrInstanceFleetConfigEbsBlockDeviceConfig
+  :: EMRInstanceFleetConfigVolumeSpecification -- ^ 'emrifcebdcVolumeSpecification'
+  -> EMRInstanceFleetConfigEbsBlockDeviceConfig
+emrInstanceFleetConfigEbsBlockDeviceConfig volumeSpecificationarg =
+  EMRInstanceFleetConfigEbsBlockDeviceConfig
+  { _eMRInstanceFleetConfigEbsBlockDeviceConfigVolumeSpecification = volumeSpecificationarg
+  , _eMRInstanceFleetConfigEbsBlockDeviceConfigVolumesPerInstance = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ebsblockdeviceconfig.html#cfn-elasticmapreduce-instancefleetconfig-ebsblockdeviceconfig-volumespecification
+emrifcebdcVolumeSpecification :: Lens' EMRInstanceFleetConfigEbsBlockDeviceConfig EMRInstanceFleetConfigVolumeSpecification
+emrifcebdcVolumeSpecification = lens _eMRInstanceFleetConfigEbsBlockDeviceConfigVolumeSpecification (\s a -> s { _eMRInstanceFleetConfigEbsBlockDeviceConfigVolumeSpecification = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ebsblockdeviceconfig.html#cfn-elasticmapreduce-instancefleetconfig-ebsblockdeviceconfig-volumesperinstance
+emrifcebdcVolumesPerInstance :: Lens' EMRInstanceFleetConfigEbsBlockDeviceConfig (Maybe (Val Integer'))
+emrifcebdcVolumesPerInstance = lens _eMRInstanceFleetConfigEbsBlockDeviceConfigVolumesPerInstance (\s a -> s { _eMRInstanceFleetConfigEbsBlockDeviceConfigVolumesPerInstance = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigEbsConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigEbsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigEbsConfiguration.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ebsconfiguration.html
+
+module Stratosphere.ResourceProperties.EMRInstanceFleetConfigEbsConfiguration 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.EMRInstanceFleetConfigEbsBlockDeviceConfig
+
+-- | Full data type definition for EMRInstanceFleetConfigEbsConfiguration. See
+-- 'emrInstanceFleetConfigEbsConfiguration' for a more convenient
+-- constructor.
+data EMRInstanceFleetConfigEbsConfiguration =
+  EMRInstanceFleetConfigEbsConfiguration
+  { _eMRInstanceFleetConfigEbsConfigurationEbsBlockDeviceConfigs :: Maybe [EMRInstanceFleetConfigEbsBlockDeviceConfig]
+  , _eMRInstanceFleetConfigEbsConfigurationEbsOptimized :: Maybe (Val Bool')
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceFleetConfigEbsConfiguration where
+  toJSON EMRInstanceFleetConfigEbsConfiguration{..} =
+    object $
+    catMaybes
+    [ ("EbsBlockDeviceConfigs" .=) <$> _eMRInstanceFleetConfigEbsConfigurationEbsBlockDeviceConfigs
+    , ("EbsOptimized" .=) <$> _eMRInstanceFleetConfigEbsConfigurationEbsOptimized
+    ]
+
+instance FromJSON EMRInstanceFleetConfigEbsConfiguration where
+  parseJSON (Object obj) =
+    EMRInstanceFleetConfigEbsConfiguration <$>
+      obj .:? "EbsBlockDeviceConfigs" <*>
+      obj .:? "EbsOptimized"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRInstanceFleetConfigEbsConfiguration' containing
+-- required fields as arguments.
+emrInstanceFleetConfigEbsConfiguration
+  :: EMRInstanceFleetConfigEbsConfiguration
+emrInstanceFleetConfigEbsConfiguration  =
+  EMRInstanceFleetConfigEbsConfiguration
+  { _eMRInstanceFleetConfigEbsConfigurationEbsBlockDeviceConfigs = Nothing
+  , _eMRInstanceFleetConfigEbsConfigurationEbsOptimized = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ebsconfiguration.html#cfn-elasticmapreduce-instancefleetconfig-ebsconfiguration-ebsblockdeviceconfigs
+emrifcecEbsBlockDeviceConfigs :: Lens' EMRInstanceFleetConfigEbsConfiguration (Maybe [EMRInstanceFleetConfigEbsBlockDeviceConfig])
+emrifcecEbsBlockDeviceConfigs = lens _eMRInstanceFleetConfigEbsConfigurationEbsBlockDeviceConfigs (\s a -> s { _eMRInstanceFleetConfigEbsConfigurationEbsBlockDeviceConfigs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-ebsconfiguration.html#cfn-elasticmapreduce-instancefleetconfig-ebsconfiguration-ebsoptimized
+emrifcecEbsOptimized :: Lens' EMRInstanceFleetConfigEbsConfiguration (Maybe (Val Bool'))
+emrifcecEbsOptimized = lens _eMRInstanceFleetConfigEbsConfigurationEbsOptimized (\s a -> s { _eMRInstanceFleetConfigEbsConfigurationEbsOptimized = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications.hs
@@ -0,0 +1,52 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancefleetprovisioningspecifications.html
+
+module Stratosphere.ResourceProperties.EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications 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.EMRInstanceFleetConfigSpotProvisioningSpecification
+
+-- | Full data type definition for
+-- EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications. See
+-- 'emrInstanceFleetConfigInstanceFleetProvisioningSpecifications' for a
+-- more convenient constructor.
+data EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications =
+  EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications
+  { _eMRInstanceFleetConfigInstanceFleetProvisioningSpecificationsSpotSpecification :: EMRInstanceFleetConfigSpotProvisioningSpecification
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications where
+  toJSON EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications{..} =
+    object $
+    catMaybes
+    [ Just ("SpotSpecification" .= _eMRInstanceFleetConfigInstanceFleetProvisioningSpecificationsSpotSpecification)
+    ]
+
+instance FromJSON EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications where
+  parseJSON (Object obj) =
+    EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications <$>
+      obj .: "SpotSpecification"
+  parseJSON _ = mempty
+
+-- | Constructor for
+-- 'EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications'
+-- containing required fields as arguments.
+emrInstanceFleetConfigInstanceFleetProvisioningSpecifications
+  :: EMRInstanceFleetConfigSpotProvisioningSpecification -- ^ 'emrifcifpsSpotSpecification'
+  -> EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications
+emrInstanceFleetConfigInstanceFleetProvisioningSpecifications spotSpecificationarg =
+  EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications
+  { _eMRInstanceFleetConfigInstanceFleetProvisioningSpecificationsSpotSpecification = spotSpecificationarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancefleetprovisioningspecifications.html#cfn-elasticmapreduce-instancefleetconfig-instancefleetprovisioningspecifications-spotspecification
+emrifcifpsSpotSpecification :: Lens' EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications EMRInstanceFleetConfigSpotProvisioningSpecification
+emrifcifpsSpotSpecification = lens _eMRInstanceFleetConfigInstanceFleetProvisioningSpecificationsSpotSpecification (\s a -> s { _eMRInstanceFleetConfigInstanceFleetProvisioningSpecificationsSpotSpecification = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigInstanceTypeConfig.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigInstanceTypeConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigInstanceTypeConfig.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html
+
+module Stratosphere.ResourceProperties.EMRInstanceFleetConfigInstanceTypeConfig 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.EMRInstanceFleetConfigConfiguration
+import Stratosphere.ResourceProperties.EMRInstanceFleetConfigEbsConfiguration
+
+-- | Full data type definition for EMRInstanceFleetConfigInstanceTypeConfig.
+-- See 'emrInstanceFleetConfigInstanceTypeConfig' for a more convenient
+-- constructor.
+data EMRInstanceFleetConfigInstanceTypeConfig =
+  EMRInstanceFleetConfigInstanceTypeConfig
+  { _eMRInstanceFleetConfigInstanceTypeConfigBidPrice :: Maybe (Val Text)
+  , _eMRInstanceFleetConfigInstanceTypeConfigBidPriceAsPercentageOfOnDemandPrice :: Maybe (Val Double')
+  , _eMRInstanceFleetConfigInstanceTypeConfigConfigurations :: Maybe [EMRInstanceFleetConfigConfiguration]
+  , _eMRInstanceFleetConfigInstanceTypeConfigEbsConfiguration :: Maybe EMRInstanceFleetConfigEbsConfiguration
+  , _eMRInstanceFleetConfigInstanceTypeConfigInstanceType :: Val Text
+  , _eMRInstanceFleetConfigInstanceTypeConfigWeightedCapacity :: Maybe (Val Integer')
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceFleetConfigInstanceTypeConfig where
+  toJSON EMRInstanceFleetConfigInstanceTypeConfig{..} =
+    object $
+    catMaybes
+    [ ("BidPrice" .=) <$> _eMRInstanceFleetConfigInstanceTypeConfigBidPrice
+    , ("BidPriceAsPercentageOfOnDemandPrice" .=) <$> _eMRInstanceFleetConfigInstanceTypeConfigBidPriceAsPercentageOfOnDemandPrice
+    , ("Configurations" .=) <$> _eMRInstanceFleetConfigInstanceTypeConfigConfigurations
+    , ("EbsConfiguration" .=) <$> _eMRInstanceFleetConfigInstanceTypeConfigEbsConfiguration
+    , Just ("InstanceType" .= _eMRInstanceFleetConfigInstanceTypeConfigInstanceType)
+    , ("WeightedCapacity" .=) <$> _eMRInstanceFleetConfigInstanceTypeConfigWeightedCapacity
+    ]
+
+instance FromJSON EMRInstanceFleetConfigInstanceTypeConfig where
+  parseJSON (Object obj) =
+    EMRInstanceFleetConfigInstanceTypeConfig <$>
+      obj .:? "BidPrice" <*>
+      obj .:? "BidPriceAsPercentageOfOnDemandPrice" <*>
+      obj .:? "Configurations" <*>
+      obj .:? "EbsConfiguration" <*>
+      obj .: "InstanceType" <*>
+      obj .:? "WeightedCapacity"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRInstanceFleetConfigInstanceTypeConfig' containing
+-- required fields as arguments.
+emrInstanceFleetConfigInstanceTypeConfig
+  :: Val Text -- ^ 'emrifcitcInstanceType'
+  -> EMRInstanceFleetConfigInstanceTypeConfig
+emrInstanceFleetConfigInstanceTypeConfig instanceTypearg =
+  EMRInstanceFleetConfigInstanceTypeConfig
+  { _eMRInstanceFleetConfigInstanceTypeConfigBidPrice = Nothing
+  , _eMRInstanceFleetConfigInstanceTypeConfigBidPriceAsPercentageOfOnDemandPrice = Nothing
+  , _eMRInstanceFleetConfigInstanceTypeConfigConfigurations = Nothing
+  , _eMRInstanceFleetConfigInstanceTypeConfigEbsConfiguration = Nothing
+  , _eMRInstanceFleetConfigInstanceTypeConfigInstanceType = instanceTypearg
+  , _eMRInstanceFleetConfigInstanceTypeConfigWeightedCapacity = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfig-bidprice
+emrifcitcBidPrice :: Lens' EMRInstanceFleetConfigInstanceTypeConfig (Maybe (Val Text))
+emrifcitcBidPrice = lens _eMRInstanceFleetConfigInstanceTypeConfigBidPrice (\s a -> s { _eMRInstanceFleetConfigInstanceTypeConfigBidPrice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfig-bidpriceaspercentageofondemandprice
+emrifcitcBidPriceAsPercentageOfOnDemandPrice :: Lens' EMRInstanceFleetConfigInstanceTypeConfig (Maybe (Val Double'))
+emrifcitcBidPriceAsPercentageOfOnDemandPrice = lens _eMRInstanceFleetConfigInstanceTypeConfigBidPriceAsPercentageOfOnDemandPrice (\s a -> s { _eMRInstanceFleetConfigInstanceTypeConfigBidPriceAsPercentageOfOnDemandPrice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfig-configurations
+emrifcitcConfigurations :: Lens' EMRInstanceFleetConfigInstanceTypeConfig (Maybe [EMRInstanceFleetConfigConfiguration])
+emrifcitcConfigurations = lens _eMRInstanceFleetConfigInstanceTypeConfigConfigurations (\s a -> s { _eMRInstanceFleetConfigInstanceTypeConfigConfigurations = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfig-ebsconfiguration
+emrifcitcEbsConfiguration :: Lens' EMRInstanceFleetConfigInstanceTypeConfig (Maybe EMRInstanceFleetConfigEbsConfiguration)
+emrifcitcEbsConfiguration = lens _eMRInstanceFleetConfigInstanceTypeConfigEbsConfiguration (\s a -> s { _eMRInstanceFleetConfigInstanceTypeConfigEbsConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfig-instancetype
+emrifcitcInstanceType :: Lens' EMRInstanceFleetConfigInstanceTypeConfig (Val Text)
+emrifcitcInstanceType = lens _eMRInstanceFleetConfigInstanceTypeConfigInstanceType (\s a -> s { _eMRInstanceFleetConfigInstanceTypeConfigInstanceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-instancetypeconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfig-weightedcapacity
+emrifcitcWeightedCapacity :: Lens' EMRInstanceFleetConfigInstanceTypeConfig (Maybe (Val Integer'))
+emrifcitcWeightedCapacity = lens _eMRInstanceFleetConfigInstanceTypeConfigWeightedCapacity (\s a -> s { _eMRInstanceFleetConfigInstanceTypeConfigWeightedCapacity = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigSpotProvisioningSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigSpotProvisioningSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigSpotProvisioningSpecification.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotprovisioningspecification.html
+
+module Stratosphere.ResourceProperties.EMRInstanceFleetConfigSpotProvisioningSpecification 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
+-- EMRInstanceFleetConfigSpotProvisioningSpecification. See
+-- 'emrInstanceFleetConfigSpotProvisioningSpecification' for a more
+-- convenient constructor.
+data EMRInstanceFleetConfigSpotProvisioningSpecification =
+  EMRInstanceFleetConfigSpotProvisioningSpecification
+  { _eMRInstanceFleetConfigSpotProvisioningSpecificationBlockDurationMinutes :: Maybe (Val Integer')
+  , _eMRInstanceFleetConfigSpotProvisioningSpecificationTimeoutAction :: Val Text
+  , _eMRInstanceFleetConfigSpotProvisioningSpecificationTimeoutDurationMinutes :: Val Integer'
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceFleetConfigSpotProvisioningSpecification where
+  toJSON EMRInstanceFleetConfigSpotProvisioningSpecification{..} =
+    object $
+    catMaybes
+    [ ("BlockDurationMinutes" .=) <$> _eMRInstanceFleetConfigSpotProvisioningSpecificationBlockDurationMinutes
+    , Just ("TimeoutAction" .= _eMRInstanceFleetConfigSpotProvisioningSpecificationTimeoutAction)
+    , Just ("TimeoutDurationMinutes" .= _eMRInstanceFleetConfigSpotProvisioningSpecificationTimeoutDurationMinutes)
+    ]
+
+instance FromJSON EMRInstanceFleetConfigSpotProvisioningSpecification where
+  parseJSON (Object obj) =
+    EMRInstanceFleetConfigSpotProvisioningSpecification <$>
+      obj .:? "BlockDurationMinutes" <*>
+      obj .: "TimeoutAction" <*>
+      obj .: "TimeoutDurationMinutes"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRInstanceFleetConfigSpotProvisioningSpecification'
+-- containing required fields as arguments.
+emrInstanceFleetConfigSpotProvisioningSpecification
+  :: Val Text -- ^ 'emrifcspsTimeoutAction'
+  -> Val Integer' -- ^ 'emrifcspsTimeoutDurationMinutes'
+  -> EMRInstanceFleetConfigSpotProvisioningSpecification
+emrInstanceFleetConfigSpotProvisioningSpecification timeoutActionarg timeoutDurationMinutesarg =
+  EMRInstanceFleetConfigSpotProvisioningSpecification
+  { _eMRInstanceFleetConfigSpotProvisioningSpecificationBlockDurationMinutes = Nothing
+  , _eMRInstanceFleetConfigSpotProvisioningSpecificationTimeoutAction = timeoutActionarg
+  , _eMRInstanceFleetConfigSpotProvisioningSpecificationTimeoutDurationMinutes = timeoutDurationMinutesarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotprovisioningspecification.html#cfn-elasticmapreduce-instancefleetconfig-spotprovisioningspecification-blockdurationminutes
+emrifcspsBlockDurationMinutes :: Lens' EMRInstanceFleetConfigSpotProvisioningSpecification (Maybe (Val Integer'))
+emrifcspsBlockDurationMinutes = lens _eMRInstanceFleetConfigSpotProvisioningSpecificationBlockDurationMinutes (\s a -> s { _eMRInstanceFleetConfigSpotProvisioningSpecificationBlockDurationMinutes = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotprovisioningspecification.html#cfn-elasticmapreduce-instancefleetconfig-spotprovisioningspecification-timeoutaction
+emrifcspsTimeoutAction :: Lens' EMRInstanceFleetConfigSpotProvisioningSpecification (Val Text)
+emrifcspsTimeoutAction = lens _eMRInstanceFleetConfigSpotProvisioningSpecificationTimeoutAction (\s a -> s { _eMRInstanceFleetConfigSpotProvisioningSpecificationTimeoutAction = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotprovisioningspecification.html#cfn-elasticmapreduce-instancefleetconfig-spotprovisioningspecification-timeoutdurationminutes
+emrifcspsTimeoutDurationMinutes :: Lens' EMRInstanceFleetConfigSpotProvisioningSpecification (Val Integer')
+emrifcspsTimeoutDurationMinutes = lens _eMRInstanceFleetConfigSpotProvisioningSpecificationTimeoutDurationMinutes (\s a -> s { _eMRInstanceFleetConfigSpotProvisioningSpecificationTimeoutDurationMinutes = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigVolumeSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigVolumeSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EMRInstanceFleetConfigVolumeSpecification.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-volumespecification.html
+
+module Stratosphere.ResourceProperties.EMRInstanceFleetConfigVolumeSpecification 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 EMRInstanceFleetConfigVolumeSpecification.
+-- See 'emrInstanceFleetConfigVolumeSpecification' for a more convenient
+-- constructor.
+data EMRInstanceFleetConfigVolumeSpecification =
+  EMRInstanceFleetConfigVolumeSpecification
+  { _eMRInstanceFleetConfigVolumeSpecificationIops :: Maybe (Val Integer')
+  , _eMRInstanceFleetConfigVolumeSpecificationSizeInGB :: Val Integer'
+  , _eMRInstanceFleetConfigVolumeSpecificationVolumeType :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceFleetConfigVolumeSpecification where
+  toJSON EMRInstanceFleetConfigVolumeSpecification{..} =
+    object $
+    catMaybes
+    [ ("Iops" .=) <$> _eMRInstanceFleetConfigVolumeSpecificationIops
+    , Just ("SizeInGB" .= _eMRInstanceFleetConfigVolumeSpecificationSizeInGB)
+    , Just ("VolumeType" .= _eMRInstanceFleetConfigVolumeSpecificationVolumeType)
+    ]
+
+instance FromJSON EMRInstanceFleetConfigVolumeSpecification where
+  parseJSON (Object obj) =
+    EMRInstanceFleetConfigVolumeSpecification <$>
+      obj .:? "Iops" <*>
+      obj .: "SizeInGB" <*>
+      obj .: "VolumeType"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRInstanceFleetConfigVolumeSpecification' containing
+-- required fields as arguments.
+emrInstanceFleetConfigVolumeSpecification
+  :: Val Integer' -- ^ 'emrifcvsSizeInGB'
+  -> Val Text -- ^ 'emrifcvsVolumeType'
+  -> EMRInstanceFleetConfigVolumeSpecification
+emrInstanceFleetConfigVolumeSpecification sizeInGBarg volumeTypearg =
+  EMRInstanceFleetConfigVolumeSpecification
+  { _eMRInstanceFleetConfigVolumeSpecificationIops = Nothing
+  , _eMRInstanceFleetConfigVolumeSpecificationSizeInGB = sizeInGBarg
+  , _eMRInstanceFleetConfigVolumeSpecificationVolumeType = volumeTypearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-volumespecification.html#cfn-elasticmapreduce-instancefleetconfig-volumespecification-iops
+emrifcvsIops :: Lens' EMRInstanceFleetConfigVolumeSpecification (Maybe (Val Integer'))
+emrifcvsIops = lens _eMRInstanceFleetConfigVolumeSpecificationIops (\s a -> s { _eMRInstanceFleetConfigVolumeSpecificationIops = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-volumespecification.html#cfn-elasticmapreduce-instancefleetconfig-volumespecification-sizeingb
+emrifcvsSizeInGB :: Lens' EMRInstanceFleetConfigVolumeSpecification (Val Integer')
+emrifcvsSizeInGB = lens _eMRInstanceFleetConfigVolumeSpecificationSizeInGB (\s a -> s { _eMRInstanceFleetConfigVolumeSpecificationSizeInGB = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-volumespecification.html#cfn-elasticmapreduce-instancefleetconfig-volumespecification-volumetype
+emrifcvsVolumeType :: Lens' EMRInstanceFleetConfigVolumeSpecification (Val Text)
+emrifcvsVolumeType = lens _eMRInstanceFleetConfigVolumeSpecificationVolumeType (\s a -> s { _eMRInstanceFleetConfigVolumeSpecificationVolumeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration.hs
@@ -15,6 +15,7 @@
 import Stratosphere.Types
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchBufferingHints
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamProcessingConfiguration
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchRetryOptions
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamS3DestinationConfiguration
 
@@ -29,6 +30,7 @@
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationDomainARN :: Val Text
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexName :: Val Text
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexRotationPeriod :: Val Text
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationProcessingConfiguration :: Maybe KinesisFirehoseDeliveryStreamProcessingConfiguration
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRetryOptions :: KinesisFirehoseDeliveryStreamElasticsearchRetryOptions
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRoleARN :: Val Text
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationS3BackupMode :: Val KinesisFirehoseElasticsearchS3BackupMode
@@ -45,6 +47,7 @@
     , Just ("DomainARN" .= _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationDomainARN)
     , Just ("IndexName" .= _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexName)
     , Just ("IndexRotationPeriod" .= _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexRotationPeriod)
+    , ("ProcessingConfiguration" .=) <$> _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationProcessingConfiguration
     , Just ("RetryOptions" .= _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRetryOptions)
     , Just ("RoleARN" .= _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRoleARN)
     , Just ("S3BackupMode" .= _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationS3BackupMode)
@@ -60,6 +63,7 @@
       obj .: "DomainARN" <*>
       obj .: "IndexName" <*>
       obj .: "IndexRotationPeriod" <*>
+      obj .:? "ProcessingConfiguration" <*>
       obj .: "RetryOptions" <*>
       obj .: "RoleARN" <*>
       obj .: "S3BackupMode" <*>
@@ -88,6 +92,7 @@
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationDomainARN = domainARNarg
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexName = indexNamearg
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexRotationPeriod = indexRotationPeriodarg
+  , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationProcessingConfiguration = Nothing
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRetryOptions = retryOptionsarg
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationRoleARN = roleARNarg
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationS3BackupMode = s3BackupModearg
@@ -114,6 +119,10 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-indexrotationperiod
 kfdsedcIndexRotationPeriod :: Lens' KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration (Val Text)
 kfdsedcIndexRotationPeriod = lens _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexRotationPeriod (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationIndexRotationPeriod = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration
+kfdsedcProcessingConfiguration :: Lens' KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration (Maybe KinesisFirehoseDeliveryStreamProcessingConfiguration)
+kfdsedcProcessingConfiguration = lens _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationProcessingConfiguration (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfigurationProcessingConfiguration = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-elasticsearchdestinationconfiguration-retryoptions
 kfdsedcRetryOptions :: Lens' KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration KinesisFirehoseDeliveryStreamElasticsearchRetryOptions
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-extendeds3destinationconfiguration.html
+
+module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration 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.KinesisFirehoseDeliveryStreamBufferingHints
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamEncryptionConfiguration
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamProcessingConfiguration
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamS3DestinationConfiguration
+
+-- | Full data type definition for
+-- KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration. See
+-- 'kinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration' for a
+-- more convenient constructor.
+data KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration =
+  KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration
+  { _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationBucketARN :: Val Text
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationBufferingHints :: KinesisFirehoseDeliveryStreamBufferingHints
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationCloudWatchLoggingOptions :: Maybe KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationCompressionFormat :: Val Text
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationEncryptionConfiguration :: Maybe KinesisFirehoseDeliveryStreamEncryptionConfiguration
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationPrefix :: Val Text
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationProcessingConfiguration :: Maybe KinesisFirehoseDeliveryStreamProcessingConfiguration
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationRoleARN :: Val Text
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationS3BackupConfiguration :: Maybe KinesisFirehoseDeliveryStreamS3DestinationConfiguration
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationS3BackupMode :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration where
+  toJSON KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration{..} =
+    object $
+    catMaybes
+    [ Just ("BucketARN" .= _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationBucketARN)
+    , Just ("BufferingHints" .= _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationBufferingHints)
+    , ("CloudWatchLoggingOptions" .=) <$> _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationCloudWatchLoggingOptions
+    , Just ("CompressionFormat" .= _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationCompressionFormat)
+    , ("EncryptionConfiguration" .=) <$> _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationEncryptionConfiguration
+    , Just ("Prefix" .= _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationPrefix)
+    , ("ProcessingConfiguration" .=) <$> _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationProcessingConfiguration
+    , Just ("RoleARN" .= _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationRoleARN)
+    , ("S3BackupConfiguration" .=) <$> _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationS3BackupConfiguration
+    , ("S3BackupMode" .=) <$> _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationS3BackupMode
+    ]
+
+instance FromJSON KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration where
+  parseJSON (Object obj) =
+    KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration <$>
+      obj .: "BucketARN" <*>
+      obj .: "BufferingHints" <*>
+      obj .:? "CloudWatchLoggingOptions" <*>
+      obj .: "CompressionFormat" <*>
+      obj .:? "EncryptionConfiguration" <*>
+      obj .: "Prefix" <*>
+      obj .:? "ProcessingConfiguration" <*>
+      obj .: "RoleARN" <*>
+      obj .:? "S3BackupConfiguration" <*>
+      obj .:? "S3BackupMode"
+  parseJSON _ = mempty
+
+-- | Constructor for
+-- 'KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration'
+-- containing required fields as arguments.
+kinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration
+  :: Val Text -- ^ 'kfdsesdcBucketARN'
+  -> KinesisFirehoseDeliveryStreamBufferingHints -- ^ 'kfdsesdcBufferingHints'
+  -> Val Text -- ^ 'kfdsesdcCompressionFormat'
+  -> Val Text -- ^ 'kfdsesdcPrefix'
+  -> Val Text -- ^ 'kfdsesdcRoleARN'
+  -> KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration
+kinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration bucketARNarg bufferingHintsarg compressionFormatarg prefixarg roleARNarg =
+  KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration
+  { _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationBucketARN = bucketARNarg
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationBufferingHints = bufferingHintsarg
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationCloudWatchLoggingOptions = Nothing
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationCompressionFormat = compressionFormatarg
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationEncryptionConfiguration = Nothing
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationPrefix = prefixarg
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationProcessingConfiguration = Nothing
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationRoleARN = roleARNarg
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationS3BackupConfiguration = Nothing
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationS3BackupMode = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-extendeds3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-bucketarn
+kfdsesdcBucketARN :: Lens' KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration (Val Text)
+kfdsesdcBucketARN = lens _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationBucketARN (\s a -> s { _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationBucketARN = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-extendeds3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-bufferinghints
+kfdsesdcBufferingHints :: Lens' KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration KinesisFirehoseDeliveryStreamBufferingHints
+kfdsesdcBufferingHints = lens _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationBufferingHints (\s a -> s { _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationBufferingHints = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-extendeds3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-cloudwatchloggingoptions
+kfdsesdcCloudWatchLoggingOptions :: Lens' KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration (Maybe KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions)
+kfdsesdcCloudWatchLoggingOptions = lens _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationCloudWatchLoggingOptions (\s a -> s { _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationCloudWatchLoggingOptions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-extendeds3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-compressionformat
+kfdsesdcCompressionFormat :: Lens' KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration (Val Text)
+kfdsesdcCompressionFormat = lens _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationCompressionFormat (\s a -> s { _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationCompressionFormat = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-extendeds3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-encryptionconfiguration
+kfdsesdcEncryptionConfiguration :: Lens' KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration (Maybe KinesisFirehoseDeliveryStreamEncryptionConfiguration)
+kfdsesdcEncryptionConfiguration = lens _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationEncryptionConfiguration (\s a -> s { _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationEncryptionConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-extendeds3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-prefix
+kfdsesdcPrefix :: Lens' KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration (Val Text)
+kfdsesdcPrefix = lens _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationPrefix (\s a -> s { _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationPrefix = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-extendeds3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-processingccnfiguration
+kfdsesdcProcessingConfiguration :: Lens' KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration (Maybe KinesisFirehoseDeliveryStreamProcessingConfiguration)
+kfdsesdcProcessingConfiguration = lens _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationProcessingConfiguration (\s a -> s { _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationProcessingConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-extendeds3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration-rolearn
+kfdsesdcRoleARN :: Lens' KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration (Val Text)
+kfdsesdcRoleARN = lens _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationRoleARN (\s a -> s { _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationRoleARN = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-extendeds3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3destinationconfiguration
+kfdsesdcS3BackupConfiguration :: Lens' KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration (Maybe KinesisFirehoseDeliveryStreamS3DestinationConfiguration)
+kfdsesdcS3BackupConfiguration = lens _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationS3BackupConfiguration (\s a -> s { _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationS3BackupConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-extendeds3destinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-s3backupmode
+kfdsesdcS3BackupMode :: Lens' KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration (Maybe (Val Text))
+kfdsesdcS3BackupMode = lens _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationS3BackupMode (\s a -> s { _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfigurationS3BackupMode = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamProcessingConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamProcessingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamProcessingConfiguration.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration.html
+
+module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamProcessingConfiguration 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.KinesisFirehoseDeliveryStreamProcessor
+
+-- | Full data type definition for
+-- KinesisFirehoseDeliveryStreamProcessingConfiguration. See
+-- 'kinesisFirehoseDeliveryStreamProcessingConfiguration' for a more
+-- convenient constructor.
+data KinesisFirehoseDeliveryStreamProcessingConfiguration =
+  KinesisFirehoseDeliveryStreamProcessingConfiguration
+  { _kinesisFirehoseDeliveryStreamProcessingConfigurationEnabled :: Val Bool'
+  , _kinesisFirehoseDeliveryStreamProcessingConfigurationProcessors :: [KinesisFirehoseDeliveryStreamProcessor]
+  } deriving (Show, Eq)
+
+instance ToJSON KinesisFirehoseDeliveryStreamProcessingConfiguration where
+  toJSON KinesisFirehoseDeliveryStreamProcessingConfiguration{..} =
+    object $
+    catMaybes
+    [ Just ("Enabled" .= _kinesisFirehoseDeliveryStreamProcessingConfigurationEnabled)
+    , Just ("Processors" .= _kinesisFirehoseDeliveryStreamProcessingConfigurationProcessors)
+    ]
+
+instance FromJSON KinesisFirehoseDeliveryStreamProcessingConfiguration where
+  parseJSON (Object obj) =
+    KinesisFirehoseDeliveryStreamProcessingConfiguration <$>
+      obj .: "Enabled" <*>
+      obj .: "Processors"
+  parseJSON _ = mempty
+
+-- | Constructor for 'KinesisFirehoseDeliveryStreamProcessingConfiguration'
+-- containing required fields as arguments.
+kinesisFirehoseDeliveryStreamProcessingConfiguration
+  :: Val Bool' -- ^ 'kfdspcEnabled'
+  -> [KinesisFirehoseDeliveryStreamProcessor] -- ^ 'kfdspcProcessors'
+  -> KinesisFirehoseDeliveryStreamProcessingConfiguration
+kinesisFirehoseDeliveryStreamProcessingConfiguration enabledarg processorsarg =
+  KinesisFirehoseDeliveryStreamProcessingConfiguration
+  { _kinesisFirehoseDeliveryStreamProcessingConfigurationEnabled = enabledarg
+  , _kinesisFirehoseDeliveryStreamProcessingConfigurationProcessors = processorsarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration-ProcessingConfiguration-Enabled
+kfdspcEnabled :: Lens' KinesisFirehoseDeliveryStreamProcessingConfiguration (Val Bool')
+kfdspcEnabled = lens _kinesisFirehoseDeliveryStreamProcessingConfigurationEnabled (\s a -> s { _kinesisFirehoseDeliveryStreamProcessingConfigurationEnabled = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration-ProcessingConfiguration-Processors
+kfdspcProcessors :: Lens' KinesisFirehoseDeliveryStreamProcessingConfiguration [KinesisFirehoseDeliveryStreamProcessor]
+kfdspcProcessors = lens _kinesisFirehoseDeliveryStreamProcessingConfigurationProcessors (\s a -> s { _kinesisFirehoseDeliveryStreamProcessingConfigurationProcessors = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamProcessor.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamProcessor.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamProcessor.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration.html
+
+module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamProcessor 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.KinesisFirehoseDeliveryStreamProcessorParameter
+
+-- | Full data type definition for KinesisFirehoseDeliveryStreamProcessor. See
+-- 'kinesisFirehoseDeliveryStreamProcessor' for a more convenient
+-- constructor.
+data KinesisFirehoseDeliveryStreamProcessor =
+  KinesisFirehoseDeliveryStreamProcessor
+  { _kinesisFirehoseDeliveryStreamProcessorParameters :: [KinesisFirehoseDeliveryStreamProcessorParameter]
+  , _kinesisFirehoseDeliveryStreamProcessorType :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON KinesisFirehoseDeliveryStreamProcessor where
+  toJSON KinesisFirehoseDeliveryStreamProcessor{..} =
+    object $
+    catMaybes
+    [ Just ("Parameters" .= _kinesisFirehoseDeliveryStreamProcessorParameters)
+    , Just ("Type" .= _kinesisFirehoseDeliveryStreamProcessorType)
+    ]
+
+instance FromJSON KinesisFirehoseDeliveryStreamProcessor where
+  parseJSON (Object obj) =
+    KinesisFirehoseDeliveryStreamProcessor <$>
+      obj .: "Parameters" <*>
+      obj .: "Type"
+  parseJSON _ = mempty
+
+-- | Constructor for 'KinesisFirehoseDeliveryStreamProcessor' containing
+-- required fields as arguments.
+kinesisFirehoseDeliveryStreamProcessor
+  :: [KinesisFirehoseDeliveryStreamProcessorParameter] -- ^ 'kfdspParameters'
+  -> Val Text -- ^ 'kfdspType'
+  -> KinesisFirehoseDeliveryStreamProcessor
+kinesisFirehoseDeliveryStreamProcessor parametersarg typearg =
+  KinesisFirehoseDeliveryStreamProcessor
+  { _kinesisFirehoseDeliveryStreamProcessorParameters = parametersarg
+  , _kinesisFirehoseDeliveryStreamProcessorType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration-Processor-Parameter
+kfdspParameters :: Lens' KinesisFirehoseDeliveryStreamProcessor [KinesisFirehoseDeliveryStreamProcessorParameter]
+kfdspParameters = lens _kinesisFirehoseDeliveryStreamProcessorParameters (\s a -> s { _kinesisFirehoseDeliveryStreamProcessorParameters = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration-Processor-Type
+kfdspType :: Lens' KinesisFirehoseDeliveryStreamProcessor (Val Text)
+kfdspType = lens _kinesisFirehoseDeliveryStreamProcessorType (\s a -> s { _kinesisFirehoseDeliveryStreamProcessorType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamProcessorParameter.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamProcessorParameter.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamProcessorParameter.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration.html
+
+module Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamProcessorParameter 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
+-- KinesisFirehoseDeliveryStreamProcessorParameter. See
+-- 'kinesisFirehoseDeliveryStreamProcessorParameter' for a more convenient
+-- constructor.
+data KinesisFirehoseDeliveryStreamProcessorParameter =
+  KinesisFirehoseDeliveryStreamProcessorParameter
+  { _kinesisFirehoseDeliveryStreamProcessorParameterParameterName :: Val Text
+  , _kinesisFirehoseDeliveryStreamProcessorParameterParameterValue :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON KinesisFirehoseDeliveryStreamProcessorParameter where
+  toJSON KinesisFirehoseDeliveryStreamProcessorParameter{..} =
+    object $
+    catMaybes
+    [ Just ("ParameterName" .= _kinesisFirehoseDeliveryStreamProcessorParameterParameterName)
+    , Just ("ParameterValue" .= _kinesisFirehoseDeliveryStreamProcessorParameterParameterValue)
+    ]
+
+instance FromJSON KinesisFirehoseDeliveryStreamProcessorParameter where
+  parseJSON (Object obj) =
+    KinesisFirehoseDeliveryStreamProcessorParameter <$>
+      obj .: "ParameterName" <*>
+      obj .: "ParameterValue"
+  parseJSON _ = mempty
+
+-- | Constructor for 'KinesisFirehoseDeliveryStreamProcessorParameter'
+-- containing required fields as arguments.
+kinesisFirehoseDeliveryStreamProcessorParameter
+  :: Val Text -- ^ 'kfdsppParameterName'
+  -> Val Text -- ^ 'kfdsppParameterValue'
+  -> KinesisFirehoseDeliveryStreamProcessorParameter
+kinesisFirehoseDeliveryStreamProcessorParameter parameterNamearg parameterValuearg =
+  KinesisFirehoseDeliveryStreamProcessorParameter
+  { _kinesisFirehoseDeliveryStreamProcessorParameterParameterName = parameterNamearg
+  , _kinesisFirehoseDeliveryStreamProcessorParameterParameterValue = parameterValuearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration-Processor-Parameter-ParameterName
+kfdsppParameterName :: Lens' KinesisFirehoseDeliveryStreamProcessorParameter (Val Text)
+kfdsppParameterName = lens _kinesisFirehoseDeliveryStreamProcessorParameterParameterName (\s a -> s { _kinesisFirehoseDeliveryStreamProcessorParameterParameterName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration-Processor-Parameter-ParameterValue
+kfdsppParameterValue :: Lens' KinesisFirehoseDeliveryStreamProcessorParameter (Val Text)
+kfdsppParameterValue = lens _kinesisFirehoseDeliveryStreamProcessorParameterParameterValue (\s a -> s { _kinesisFirehoseDeliveryStreamProcessorParameterParameterValue = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration.hs b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration.hs
--- a/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration.hs
+++ b/library-gen/Stratosphere/ResourceProperties/KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration.hs
@@ -14,6 +14,7 @@
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCloudWatchLoggingOptions
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamCopyCommand
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamProcessingConfiguration
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamS3DestinationConfiguration
 
 -- | Full data type definition for
@@ -26,6 +27,7 @@
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationClusterJDBCURL :: Val Text
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationCopyCommand :: KinesisFirehoseDeliveryStreamCopyCommand
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationPassword :: Val Text
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationProcessingConfiguration :: Maybe KinesisFirehoseDeliveryStreamProcessingConfiguration
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationRoleARN :: Val Text
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationS3Configuration :: KinesisFirehoseDeliveryStreamS3DestinationConfiguration
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationUsername :: Val Text
@@ -39,6 +41,7 @@
     , Just ("ClusterJDBCURL" .= _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationClusterJDBCURL)
     , Just ("CopyCommand" .= _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationCopyCommand)
     , Just ("Password" .= _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationPassword)
+    , ("ProcessingConfiguration" .=) <$> _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationProcessingConfiguration
     , Just ("RoleARN" .= _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationRoleARN)
     , Just ("S3Configuration" .= _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationS3Configuration)
     , Just ("Username" .= _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationUsername)
@@ -51,6 +54,7 @@
       obj .: "ClusterJDBCURL" <*>
       obj .: "CopyCommand" <*>
       obj .: "Password" <*>
+      obj .:? "ProcessingConfiguration" <*>
       obj .: "RoleARN" <*>
       obj .: "S3Configuration" <*>
       obj .: "Username"
@@ -73,6 +77,7 @@
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationClusterJDBCURL = clusterJDBCURLarg
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationCopyCommand = copyCommandarg
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationPassword = passwordarg
+  , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationProcessingConfiguration = Nothing
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationRoleARN = roleARNarg
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationS3Configuration = s3Configurationarg
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationUsername = usernamearg
@@ -93,6 +98,10 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-password
 kfdsrdcPassword :: Lens' KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration (Val Text)
 kfdsrdcPassword = lens _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationPassword (\s a -> s { _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationPassword = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-ProcessingConfiguration
+kfdsrdcProcessingConfiguration :: Lens' KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration (Maybe KinesisFirehoseDeliveryStreamProcessingConfiguration)
+kfdsrdcProcessingConfiguration = lens _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationProcessingConfiguration (\s a -> s { _kinesisFirehoseDeliveryStreamRedshiftDestinationConfigurationProcessingConfiguration = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration.html#cfn-kinesisfirehose-kinesisdeliverystream-redshiftdestinationconfiguration-rolearn
 kfdsrdcRoleARN :: Lens' KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration (Val Text)
diff --git a/library-gen/Stratosphere/ResourceProperties/RedshiftClusterLoggingProperties.hs b/library-gen/Stratosphere/ResourceProperties/RedshiftClusterLoggingProperties.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/RedshiftClusterLoggingProperties.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshift-cluster-loggingproperties.html
+
+module Stratosphere.ResourceProperties.RedshiftClusterLoggingProperties 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 RedshiftClusterLoggingProperties. See
+-- 'redshiftClusterLoggingProperties' for a more convenient constructor.
+data RedshiftClusterLoggingProperties =
+  RedshiftClusterLoggingProperties
+  { _redshiftClusterLoggingPropertiesBucketName :: Val Text
+  , _redshiftClusterLoggingPropertiesS3KeyPrefix :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON RedshiftClusterLoggingProperties where
+  toJSON RedshiftClusterLoggingProperties{..} =
+    object $
+    catMaybes
+    [ Just ("BucketName" .= _redshiftClusterLoggingPropertiesBucketName)
+    , ("S3KeyPrefix" .=) <$> _redshiftClusterLoggingPropertiesS3KeyPrefix
+    ]
+
+instance FromJSON RedshiftClusterLoggingProperties where
+  parseJSON (Object obj) =
+    RedshiftClusterLoggingProperties <$>
+      obj .: "BucketName" <*>
+      obj .:? "S3KeyPrefix"
+  parseJSON _ = mempty
+
+-- | Constructor for 'RedshiftClusterLoggingProperties' containing required
+-- fields as arguments.
+redshiftClusterLoggingProperties
+  :: Val Text -- ^ 'rclpBucketName'
+  -> RedshiftClusterLoggingProperties
+redshiftClusterLoggingProperties bucketNamearg =
+  RedshiftClusterLoggingProperties
+  { _redshiftClusterLoggingPropertiesBucketName = bucketNamearg
+  , _redshiftClusterLoggingPropertiesS3KeyPrefix = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshift-cluster-loggingproperties.html#cfn-redshift-cluster-loggingproperties-bucketname
+rclpBucketName :: Lens' RedshiftClusterLoggingProperties (Val Text)
+rclpBucketName = lens _redshiftClusterLoggingPropertiesBucketName (\s a -> s { _redshiftClusterLoggingPropertiesBucketName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshift-cluster-loggingproperties.html#cfn-redshift-cluster-loggingproperties-s3keyprefix
+rclpS3KeyPrefix :: Lens' RedshiftClusterLoggingProperties (Maybe (Val Text))
+rclpS3KeyPrefix = lens _redshiftClusterLoggingPropertiesS3KeyPrefix (\s a -> s { _redshiftClusterLoggingPropertiesS3KeyPrefix = 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
@@ -51,12 +51,14 @@
 import Stratosphere.Resources.ApiGatewayBasePathMapping as X
 import Stratosphere.Resources.ApiGatewayClientCertificate as X
 import Stratosphere.Resources.ApiGatewayDeployment as X
+import Stratosphere.Resources.ApiGatewayDomainName as X
 import Stratosphere.Resources.ApiGatewayMethod as X
 import Stratosphere.Resources.ApiGatewayModel as X
 import Stratosphere.Resources.ApiGatewayResource as X
 import Stratosphere.Resources.ApiGatewayRestApi as X
 import Stratosphere.Resources.ApiGatewayStage as X
 import Stratosphere.Resources.ApiGatewayUsagePlan as X
+import Stratosphere.Resources.ApiGatewayUsagePlanKey as X
 import Stratosphere.Resources.ApplicationAutoScalingScalableTarget as X
 import Stratosphere.Resources.ApplicationAutoScalingScalingPolicy as X
 import Stratosphere.Resources.AutoScalingAutoScalingGroup as X
@@ -97,6 +99,7 @@
 import Stratosphere.Resources.EC2DHCPOptions as X
 import Stratosphere.Resources.EC2EIP as X
 import Stratosphere.Resources.EC2EIPAssociation as X
+import Stratosphere.Resources.EC2EgressOnlyInternetGateway as X
 import Stratosphere.Resources.EC2FlowLog as X
 import Stratosphere.Resources.EC2Host as X
 import Stratosphere.Resources.EC2Instance as X
@@ -106,6 +109,7 @@
 import Stratosphere.Resources.EC2NetworkAclEntry as X
 import Stratosphere.Resources.EC2NetworkInterface as X
 import Stratosphere.Resources.EC2NetworkInterfaceAttachment as X
+import Stratosphere.Resources.EC2NetworkInterfacePermission as X
 import Stratosphere.Resources.EC2PlacementGroup as X
 import Stratosphere.Resources.EC2Route as X
 import Stratosphere.Resources.EC2RouteTable as X
@@ -117,6 +121,7 @@
 import Stratosphere.Resources.EC2SubnetCidrBlock as X
 import Stratosphere.Resources.EC2SubnetNetworkAclAssociation as X
 import Stratosphere.Resources.EC2SubnetRouteTableAssociation as X
+import Stratosphere.Resources.EC2TrunkInterfaceAssociation as X
 import Stratosphere.Resources.EC2VPC as X
 import Stratosphere.Resources.EC2VPCCidrBlock as X
 import Stratosphere.Resources.EC2VPCDHCPOptionsAssociation as X
@@ -136,6 +141,7 @@
 import Stratosphere.Resources.EFSFileSystem as X
 import Stratosphere.Resources.EFSMountTarget as X
 import Stratosphere.Resources.EMRCluster as X
+import Stratosphere.Resources.EMRInstanceFleetConfig as X
 import Stratosphere.Resources.EMRInstanceGroupConfig as X
 import Stratosphere.Resources.EMRSecurityConfiguration as X
 import Stratosphere.Resources.EMRStep as X
@@ -252,10 +258,14 @@
 import Stratosphere.ResourceProperties.ApiGatewayUsagePlanApiStage as X
 import Stratosphere.ResourceProperties.ApiGatewayUsagePlanQuotaSettings as X
 import Stratosphere.ResourceProperties.ApiGatewayUsagePlanThrottleSettings as X
+import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification as X
+import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyMetricDimension as X
+import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification as X
 import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepAdjustment as X
 import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration as X
+import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration as X
 import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupMetricsCollection as X
-import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupNotificationConfigurations as X
+import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupNotificationConfiguration as X
 import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupTagProperty as X
 import Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDevice as X
 import Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDeviceMapping as X
@@ -355,7 +365,8 @@
 import Stratosphere.ResourceProperties.EC2NetworkAclEntryPortRange as X
 import Stratosphere.ResourceProperties.EC2NetworkInterfaceInstanceIpv6Address as X
 import Stratosphere.ResourceProperties.EC2NetworkInterfacePrivateIpAddressSpecification as X
-import Stratosphere.ResourceProperties.EC2SecurityGroupRule as X
+import Stratosphere.ResourceProperties.EC2SecurityGroupEgressProperty as X
+import Stratosphere.ResourceProperties.EC2SecurityGroupIngressProperty as X
 import Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMapping as X
 import Stratosphere.ResourceProperties.EC2SpotFleetEbsBlockDevice as X
 import Stratosphere.ResourceProperties.EC2SpotFleetGroupIdentifier as X
@@ -390,7 +401,10 @@
 import Stratosphere.ResourceProperties.EMRClusterConfiguration as X
 import Stratosphere.ResourceProperties.EMRClusterEbsBlockDeviceConfig as X
 import Stratosphere.ResourceProperties.EMRClusterEbsConfiguration as X
+import Stratosphere.ResourceProperties.EMRClusterInstanceFleetConfig as X
+import Stratosphere.ResourceProperties.EMRClusterInstanceFleetProvisioningSpecifications as X
 import Stratosphere.ResourceProperties.EMRClusterInstanceGroupConfig as X
+import Stratosphere.ResourceProperties.EMRClusterInstanceTypeConfig as X
 import Stratosphere.ResourceProperties.EMRClusterJobFlowInstancesConfig as X
 import Stratosphere.ResourceProperties.EMRClusterMetricDimension as X
 import Stratosphere.ResourceProperties.EMRClusterPlacementType as X
@@ -400,7 +414,15 @@
 import Stratosphere.ResourceProperties.EMRClusterScalingTrigger as X
 import Stratosphere.ResourceProperties.EMRClusterScriptBootstrapActionConfig as X
 import Stratosphere.ResourceProperties.EMRClusterSimpleScalingPolicyConfiguration as X
+import Stratosphere.ResourceProperties.EMRClusterSpotProvisioningSpecification as X
 import Stratosphere.ResourceProperties.EMRClusterVolumeSpecification as X
+import Stratosphere.ResourceProperties.EMRInstanceFleetConfigConfiguration as X
+import Stratosphere.ResourceProperties.EMRInstanceFleetConfigEbsBlockDeviceConfig as X
+import Stratosphere.ResourceProperties.EMRInstanceFleetConfigEbsConfiguration as X
+import Stratosphere.ResourceProperties.EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications as X
+import Stratosphere.ResourceProperties.EMRInstanceFleetConfigInstanceTypeConfig as X
+import Stratosphere.ResourceProperties.EMRInstanceFleetConfigSpotProvisioningSpecification as X
+import Stratosphere.ResourceProperties.EMRInstanceFleetConfigVolumeSpecification as X
 import Stratosphere.ResourceProperties.EMRInstanceGroupConfigAutoScalingPolicy as X
 import Stratosphere.ResourceProperties.EMRInstanceGroupConfigCloudWatchAlarmDefinition as X
 import Stratosphere.ResourceProperties.EMRInstanceGroupConfigConfiguration as X
@@ -469,7 +491,11 @@
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration as X
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchRetryOptions as X
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamEncryptionConfiguration as X
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration as X
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamKMSEncryptionConfig as X
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamProcessingConfiguration as X
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamProcessor as X
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamProcessorParameter as X
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration as X
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamS3DestinationConfiguration as X
 import Stratosphere.ResourceProperties.LambdaFunctionCode as X
@@ -499,6 +525,7 @@
 import Stratosphere.ResourceProperties.RDSDBSecurityGroupIngressProperty as X
 import Stratosphere.ResourceProperties.RDSOptionGroupOptionConfiguration as X
 import Stratosphere.ResourceProperties.RDSOptionGroupOptionSetting as X
+import Stratosphere.ResourceProperties.RedshiftClusterLoggingProperties as X
 import Stratosphere.ResourceProperties.RedshiftClusterParameterGroupParameter as X
 import Stratosphere.ResourceProperties.Route53HealthCheckAlarmIdentifier as X
 import Stratosphere.ResourceProperties.Route53HealthCheckHealthCheckConfig as X
@@ -579,12 +606,14 @@
   | ApiGatewayBasePathMappingProperties ApiGatewayBasePathMapping
   | ApiGatewayClientCertificateProperties ApiGatewayClientCertificate
   | ApiGatewayDeploymentProperties ApiGatewayDeployment
+  | ApiGatewayDomainNameProperties ApiGatewayDomainName
   | ApiGatewayMethodProperties ApiGatewayMethod
   | ApiGatewayModelProperties ApiGatewayModel
   | ApiGatewayResourceProperties ApiGatewayResource
   | ApiGatewayRestApiProperties ApiGatewayRestApi
   | ApiGatewayStageProperties ApiGatewayStage
   | ApiGatewayUsagePlanProperties ApiGatewayUsagePlan
+  | ApiGatewayUsagePlanKeyProperties ApiGatewayUsagePlanKey
   | ApplicationAutoScalingScalableTargetProperties ApplicationAutoScalingScalableTarget
   | ApplicationAutoScalingScalingPolicyProperties ApplicationAutoScalingScalingPolicy
   | AutoScalingAutoScalingGroupProperties AutoScalingAutoScalingGroup
@@ -625,6 +654,7 @@
   | EC2DHCPOptionsProperties EC2DHCPOptions
   | EC2EIPProperties EC2EIP
   | EC2EIPAssociationProperties EC2EIPAssociation
+  | EC2EgressOnlyInternetGatewayProperties EC2EgressOnlyInternetGateway
   | EC2FlowLogProperties EC2FlowLog
   | EC2HostProperties EC2Host
   | EC2InstanceProperties EC2Instance
@@ -634,6 +664,7 @@
   | EC2NetworkAclEntryProperties EC2NetworkAclEntry
   | EC2NetworkInterfaceProperties EC2NetworkInterface
   | EC2NetworkInterfaceAttachmentProperties EC2NetworkInterfaceAttachment
+  | EC2NetworkInterfacePermissionProperties EC2NetworkInterfacePermission
   | EC2PlacementGroupProperties EC2PlacementGroup
   | EC2RouteProperties EC2Route
   | EC2RouteTableProperties EC2RouteTable
@@ -645,6 +676,7 @@
   | EC2SubnetCidrBlockProperties EC2SubnetCidrBlock
   | EC2SubnetNetworkAclAssociationProperties EC2SubnetNetworkAclAssociation
   | EC2SubnetRouteTableAssociationProperties EC2SubnetRouteTableAssociation
+  | EC2TrunkInterfaceAssociationProperties EC2TrunkInterfaceAssociation
   | EC2VPCProperties EC2VPC
   | EC2VPCCidrBlockProperties EC2VPCCidrBlock
   | EC2VPCDHCPOptionsAssociationProperties EC2VPCDHCPOptionsAssociation
@@ -664,6 +696,7 @@
   | EFSFileSystemProperties EFSFileSystem
   | EFSMountTargetProperties EFSMountTarget
   | EMRClusterProperties EMRCluster
+  | EMRInstanceFleetConfigProperties EMRInstanceFleetConfig
   | EMRInstanceGroupConfigProperties EMRInstanceGroupConfig
   | EMRSecurityConfigurationProperties EMRSecurityConfiguration
   | EMRStepProperties EMRStep
@@ -833,6 +866,8 @@
   [ "Type" .= ("AWS::ApiGateway::ClientCertificate" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (ApiGatewayDeploymentProperties x) =
   [ "Type" .= ("AWS::ApiGateway::Deployment" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ApiGatewayDomainNameProperties x) =
+  [ "Type" .= ("AWS::ApiGateway::DomainName" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (ApiGatewayMethodProperties x) =
   [ "Type" .= ("AWS::ApiGateway::Method" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (ApiGatewayModelProperties x) =
@@ -845,6 +880,8 @@
   [ "Type" .= ("AWS::ApiGateway::Stage" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (ApiGatewayUsagePlanProperties x) =
   [ "Type" .= ("AWS::ApiGateway::UsagePlan" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (ApiGatewayUsagePlanKeyProperties x) =
+  [ "Type" .= ("AWS::ApiGateway::UsagePlanKey" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (ApplicationAutoScalingScalableTargetProperties x) =
   [ "Type" .= ("AWS::ApplicationAutoScaling::ScalableTarget" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (ApplicationAutoScalingScalingPolicyProperties x) =
@@ -925,6 +962,8 @@
   [ "Type" .= ("AWS::EC2::EIP" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EC2EIPAssociationProperties x) =
   [ "Type" .= ("AWS::EC2::EIPAssociation" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2EgressOnlyInternetGatewayProperties x) =
+  [ "Type" .= ("AWS::EC2::EgressOnlyInternetGateway" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EC2FlowLogProperties x) =
   [ "Type" .= ("AWS::EC2::FlowLog" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EC2HostProperties x) =
@@ -943,6 +982,8 @@
   [ "Type" .= ("AWS::EC2::NetworkInterface" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EC2NetworkInterfaceAttachmentProperties x) =
   [ "Type" .= ("AWS::EC2::NetworkInterfaceAttachment" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2NetworkInterfacePermissionProperties x) =
+  [ "Type" .= ("AWS::EC2::NetworkInterfacePermission" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EC2PlacementGroupProperties x) =
   [ "Type" .= ("AWS::EC2::PlacementGroup" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EC2RouteProperties x) =
@@ -965,6 +1006,8 @@
   [ "Type" .= ("AWS::EC2::SubnetNetworkAclAssociation" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EC2SubnetRouteTableAssociationProperties x) =
   [ "Type" .= ("AWS::EC2::SubnetRouteTableAssociation" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2TrunkInterfaceAssociationProperties x) =
+  [ "Type" .= ("AWS::EC2::TrunkInterfaceAssociation" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EC2VPCProperties x) =
   [ "Type" .= ("AWS::EC2::VPC" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EC2VPCCidrBlockProperties x) =
@@ -1003,6 +1046,8 @@
   [ "Type" .= ("AWS::EFS::MountTarget" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EMRClusterProperties x) =
   [ "Type" .= ("AWS::EMR::Cluster" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EMRInstanceFleetConfigProperties x) =
+  [ "Type" .= ("AWS::EMR::InstanceFleetConfig" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EMRInstanceGroupConfigProperties x) =
   [ "Type" .= ("AWS::EMR::InstanceGroupConfig" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EMRSecurityConfigurationProperties x) =
@@ -1225,12 +1270,14 @@
          "AWS::ApiGateway::BasePathMapping" -> ApiGatewayBasePathMappingProperties <$> (o .: "Properties")
          "AWS::ApiGateway::ClientCertificate" -> ApiGatewayClientCertificateProperties <$> (o .: "Properties")
          "AWS::ApiGateway::Deployment" -> ApiGatewayDeploymentProperties <$> (o .: "Properties")
+         "AWS::ApiGateway::DomainName" -> ApiGatewayDomainNameProperties <$> (o .: "Properties")
          "AWS::ApiGateway::Method" -> ApiGatewayMethodProperties <$> (o .: "Properties")
          "AWS::ApiGateway::Model" -> ApiGatewayModelProperties <$> (o .: "Properties")
          "AWS::ApiGateway::Resource" -> ApiGatewayResourceProperties <$> (o .: "Properties")
          "AWS::ApiGateway::RestApi" -> ApiGatewayRestApiProperties <$> (o .: "Properties")
          "AWS::ApiGateway::Stage" -> ApiGatewayStageProperties <$> (o .: "Properties")
          "AWS::ApiGateway::UsagePlan" -> ApiGatewayUsagePlanProperties <$> (o .: "Properties")
+         "AWS::ApiGateway::UsagePlanKey" -> ApiGatewayUsagePlanKeyProperties <$> (o .: "Properties")
          "AWS::ApplicationAutoScaling::ScalableTarget" -> ApplicationAutoScalingScalableTargetProperties <$> (o .: "Properties")
          "AWS::ApplicationAutoScaling::ScalingPolicy" -> ApplicationAutoScalingScalingPolicyProperties <$> (o .: "Properties")
          "AWS::AutoScaling::AutoScalingGroup" -> AutoScalingAutoScalingGroupProperties <$> (o .: "Properties")
@@ -1271,6 +1318,7 @@
          "AWS::EC2::DHCPOptions" -> EC2DHCPOptionsProperties <$> (o .: "Properties")
          "AWS::EC2::EIP" -> EC2EIPProperties <$> (o .: "Properties")
          "AWS::EC2::EIPAssociation" -> EC2EIPAssociationProperties <$> (o .: "Properties")
+         "AWS::EC2::EgressOnlyInternetGateway" -> EC2EgressOnlyInternetGatewayProperties <$> (o .: "Properties")
          "AWS::EC2::FlowLog" -> EC2FlowLogProperties <$> (o .: "Properties")
          "AWS::EC2::Host" -> EC2HostProperties <$> (o .: "Properties")
          "AWS::EC2::Instance" -> EC2InstanceProperties <$> (o .: "Properties")
@@ -1280,6 +1328,7 @@
          "AWS::EC2::NetworkAclEntry" -> EC2NetworkAclEntryProperties <$> (o .: "Properties")
          "AWS::EC2::NetworkInterface" -> EC2NetworkInterfaceProperties <$> (o .: "Properties")
          "AWS::EC2::NetworkInterfaceAttachment" -> EC2NetworkInterfaceAttachmentProperties <$> (o .: "Properties")
+         "AWS::EC2::NetworkInterfacePermission" -> EC2NetworkInterfacePermissionProperties <$> (o .: "Properties")
          "AWS::EC2::PlacementGroup" -> EC2PlacementGroupProperties <$> (o .: "Properties")
          "AWS::EC2::Route" -> EC2RouteProperties <$> (o .: "Properties")
          "AWS::EC2::RouteTable" -> EC2RouteTableProperties <$> (o .: "Properties")
@@ -1291,6 +1340,7 @@
          "AWS::EC2::SubnetCidrBlock" -> EC2SubnetCidrBlockProperties <$> (o .: "Properties")
          "AWS::EC2::SubnetNetworkAclAssociation" -> EC2SubnetNetworkAclAssociationProperties <$> (o .: "Properties")
          "AWS::EC2::SubnetRouteTableAssociation" -> EC2SubnetRouteTableAssociationProperties <$> (o .: "Properties")
+         "AWS::EC2::TrunkInterfaceAssociation" -> EC2TrunkInterfaceAssociationProperties <$> (o .: "Properties")
          "AWS::EC2::VPC" -> EC2VPCProperties <$> (o .: "Properties")
          "AWS::EC2::VPCCidrBlock" -> EC2VPCCidrBlockProperties <$> (o .: "Properties")
          "AWS::EC2::VPCDHCPOptionsAssociation" -> EC2VPCDHCPOptionsAssociationProperties <$> (o .: "Properties")
@@ -1310,6 +1360,7 @@
          "AWS::EFS::FileSystem" -> EFSFileSystemProperties <$> (o .: "Properties")
          "AWS::EFS::MountTarget" -> EFSMountTargetProperties <$> (o .: "Properties")
          "AWS::EMR::Cluster" -> EMRClusterProperties <$> (o .: "Properties")
+         "AWS::EMR::InstanceFleetConfig" -> EMRInstanceFleetConfigProperties <$> (o .: "Properties")
          "AWS::EMR::InstanceGroupConfig" -> EMRInstanceGroupConfigProperties <$> (o .: "Properties")
          "AWS::EMR::SecurityConfiguration" -> EMRSecurityConfigurationProperties <$> (o .: "Properties")
          "AWS::EMR::Step" -> EMRStepProperties <$> (o .: "Properties")
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayDomainName.hs b/library-gen/Stratosphere/Resources/ApiGatewayDomainName.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ApiGatewayDomainName.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html
+
+module Stratosphere.Resources.ApiGatewayDomainName 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 ApiGatewayDomainName. See
+-- 'apiGatewayDomainName' for a more convenient constructor.
+data ApiGatewayDomainName =
+  ApiGatewayDomainName
+  { _apiGatewayDomainNameCertificateArn :: Val Text
+  , _apiGatewayDomainNameDomainName :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON ApiGatewayDomainName where
+  toJSON ApiGatewayDomainName{..} =
+    object $
+    catMaybes
+    [ Just ("CertificateArn" .= _apiGatewayDomainNameCertificateArn)
+    , Just ("DomainName" .= _apiGatewayDomainNameDomainName)
+    ]
+
+instance FromJSON ApiGatewayDomainName where
+  parseJSON (Object obj) =
+    ApiGatewayDomainName <$>
+      obj .: "CertificateArn" <*>
+      obj .: "DomainName"
+  parseJSON _ = mempty
+
+-- | Constructor for 'ApiGatewayDomainName' containing required fields as
+-- arguments.
+apiGatewayDomainName
+  :: Val Text -- ^ 'agdnCertificateArn'
+  -> Val Text -- ^ 'agdnDomainName'
+  -> ApiGatewayDomainName
+apiGatewayDomainName certificateArnarg domainNamearg =
+  ApiGatewayDomainName
+  { _apiGatewayDomainNameCertificateArn = certificateArnarg
+  , _apiGatewayDomainNameDomainName = domainNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html#cfn-apigateway-domainname-certificatearn
+agdnCertificateArn :: Lens' ApiGatewayDomainName (Val Text)
+agdnCertificateArn = lens _apiGatewayDomainNameCertificateArn (\s a -> s { _apiGatewayDomainNameCertificateArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html#cfn-apigateway-domainname-domainname
+agdnDomainName :: Lens' ApiGatewayDomainName (Val Text)
+agdnDomainName = lens _apiGatewayDomainNameDomainName (\s a -> s { _apiGatewayDomainNameDomainName = a })
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayRestApi.hs b/library-gen/Stratosphere/Resources/ApiGatewayRestApi.hs
--- a/library-gen/Stratosphere/Resources/ApiGatewayRestApi.hs
+++ b/library-gen/Stratosphere/Resources/ApiGatewayRestApi.hs
@@ -18,7 +18,8 @@
 -- for a more convenient constructor.
 data ApiGatewayRestApi =
   ApiGatewayRestApi
-  { _apiGatewayRestApiBody :: Maybe Object
+  { _apiGatewayRestApiBinaryMediaTypes :: Maybe [Val Text]
+  , _apiGatewayRestApiBody :: Maybe Object
   , _apiGatewayRestApiBodyS3Location :: Maybe ApiGatewayRestApiS3Location
   , _apiGatewayRestApiCloneFrom :: Maybe (Val Text)
   , _apiGatewayRestApiDescription :: Maybe (Val Text)
@@ -32,7 +33,8 @@
   toJSON ApiGatewayRestApi{..} =
     object $
     catMaybes
-    [ ("Body" .=) <$> _apiGatewayRestApiBody
+    [ ("BinaryMediaTypes" .=) <$> _apiGatewayRestApiBinaryMediaTypes
+    , ("Body" .=) <$> _apiGatewayRestApiBody
     , ("BodyS3Location" .=) <$> _apiGatewayRestApiBodyS3Location
     , ("CloneFrom" .=) <$> _apiGatewayRestApiCloneFrom
     , ("Description" .=) <$> _apiGatewayRestApiDescription
@@ -45,6 +47,7 @@
 instance FromJSON ApiGatewayRestApi where
   parseJSON (Object obj) =
     ApiGatewayRestApi <$>
+      obj .:? "BinaryMediaTypes" <*>
       obj .:? "Body" <*>
       obj .:? "BodyS3Location" <*>
       obj .:? "CloneFrom" <*>
@@ -61,7 +64,8 @@
   :: ApiGatewayRestApi
 apiGatewayRestApi  =
   ApiGatewayRestApi
-  { _apiGatewayRestApiBody = Nothing
+  { _apiGatewayRestApiBinaryMediaTypes = Nothing
+  , _apiGatewayRestApiBody = Nothing
   , _apiGatewayRestApiBodyS3Location = Nothing
   , _apiGatewayRestApiCloneFrom = Nothing
   , _apiGatewayRestApiDescription = Nothing
@@ -70,6 +74,10 @@
   , _apiGatewayRestApiName = Nothing
   , _apiGatewayRestApiParameters = Nothing
   }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-binarymediatypes
+agraBinaryMediaTypes :: Lens' ApiGatewayRestApi (Maybe [Val Text])
+agraBinaryMediaTypes = lens _apiGatewayRestApiBinaryMediaTypes (\s a -> s { _apiGatewayRestApiBinaryMediaTypes = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-body
 agraBody :: Lens' ApiGatewayRestApi (Maybe Object)
diff --git a/library-gen/Stratosphere/Resources/ApiGatewayUsagePlanKey.hs b/library-gen/Stratosphere/Resources/ApiGatewayUsagePlanKey.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/ApiGatewayUsagePlanKey.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplankey.html
+
+module Stratosphere.Resources.ApiGatewayUsagePlanKey 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 ApiGatewayUsagePlanKey. See
+-- 'apiGatewayUsagePlanKey' for a more convenient constructor.
+data ApiGatewayUsagePlanKey =
+  ApiGatewayUsagePlanKey
+  { _apiGatewayUsagePlanKeyKeyId :: Val Text
+  , _apiGatewayUsagePlanKeyKeyType :: Val Text
+  , _apiGatewayUsagePlanKeyUsagePlanId :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON ApiGatewayUsagePlanKey where
+  toJSON ApiGatewayUsagePlanKey{..} =
+    object $
+    catMaybes
+    [ Just ("KeyId" .= _apiGatewayUsagePlanKeyKeyId)
+    , Just ("KeyType" .= _apiGatewayUsagePlanKeyKeyType)
+    , Just ("UsagePlanId" .= _apiGatewayUsagePlanKeyUsagePlanId)
+    ]
+
+instance FromJSON ApiGatewayUsagePlanKey where
+  parseJSON (Object obj) =
+    ApiGatewayUsagePlanKey <$>
+      obj .: "KeyId" <*>
+      obj .: "KeyType" <*>
+      obj .: "UsagePlanId"
+  parseJSON _ = mempty
+
+-- | Constructor for 'ApiGatewayUsagePlanKey' containing required fields as
+-- arguments.
+apiGatewayUsagePlanKey
+  :: Val Text -- ^ 'agupkKeyId'
+  -> Val Text -- ^ 'agupkKeyType'
+  -> Val Text -- ^ 'agupkUsagePlanId'
+  -> ApiGatewayUsagePlanKey
+apiGatewayUsagePlanKey keyIdarg keyTypearg usagePlanIdarg =
+  ApiGatewayUsagePlanKey
+  { _apiGatewayUsagePlanKeyKeyId = keyIdarg
+  , _apiGatewayUsagePlanKeyKeyType = keyTypearg
+  , _apiGatewayUsagePlanKeyUsagePlanId = usagePlanIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplankey.html#cfn-apigateway-usageplankey-keyid
+agupkKeyId :: Lens' ApiGatewayUsagePlanKey (Val Text)
+agupkKeyId = lens _apiGatewayUsagePlanKeyKeyId (\s a -> s { _apiGatewayUsagePlanKeyKeyId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplankey.html#cfn-apigateway-usageplankey-keytype
+agupkKeyType :: Lens' ApiGatewayUsagePlanKey (Val Text)
+agupkKeyType = lens _apiGatewayUsagePlanKeyKeyType (\s a -> s { _apiGatewayUsagePlanKeyKeyType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplankey.html#cfn-apigateway-usageplankey-usageplanid
+agupkUsagePlanId :: Lens' ApiGatewayUsagePlanKey (Val Text)
+agupkUsagePlanId = lens _apiGatewayUsagePlanKeyUsagePlanId (\s a -> s { _apiGatewayUsagePlanKeyUsagePlanId = a })
diff --git a/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalingPolicy.hs b/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalingPolicy.hs
--- a/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalingPolicy.hs
+++ b/library-gen/Stratosphere/Resources/ApplicationAutoScalingScalingPolicy.hs
@@ -13,6 +13,7 @@
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
+import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration
 
 -- | Full data type definition for ApplicationAutoScalingScalingPolicy. See
 -- 'applicationAutoScalingScalingPolicy' for a more convenient constructor.
@@ -25,6 +26,7 @@
   , _applicationAutoScalingScalingPolicyScalingTargetId :: Maybe (Val Text)
   , _applicationAutoScalingScalingPolicyServiceNamespace :: Maybe (Val Text)
   , _applicationAutoScalingScalingPolicyStepScalingPolicyConfiguration :: Maybe ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
+  , _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration :: Maybe ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration
   } deriving (Show, Eq)
 
 instance ToJSON ApplicationAutoScalingScalingPolicy where
@@ -38,6 +40,7 @@
     , ("ScalingTargetId" .=) <$> _applicationAutoScalingScalingPolicyScalingTargetId
     , ("ServiceNamespace" .=) <$> _applicationAutoScalingScalingPolicyServiceNamespace
     , ("StepScalingPolicyConfiguration" .=) <$> _applicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
+    , ("TargetTrackingScalingPolicyConfiguration" .=) <$> _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration
     ]
 
 instance FromJSON ApplicationAutoScalingScalingPolicy where
@@ -49,7 +52,8 @@
       obj .:? "ScalableDimension" <*>
       obj .:? "ScalingTargetId" <*>
       obj .:? "ServiceNamespace" <*>
-      obj .:? "StepScalingPolicyConfiguration"
+      obj .:? "StepScalingPolicyConfiguration" <*>
+      obj .:? "TargetTrackingScalingPolicyConfiguration"
   parseJSON _ = mempty
 
 -- | Constructor for 'ApplicationAutoScalingScalingPolicy' containing required
@@ -67,6 +71,7 @@
   , _applicationAutoScalingScalingPolicyScalingTargetId = Nothing
   , _applicationAutoScalingScalingPolicyServiceNamespace = Nothing
   , _applicationAutoScalingScalingPolicyStepScalingPolicyConfiguration = Nothing
+  , _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration = Nothing
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-policyname
@@ -96,3 +101,7 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-stepscalingpolicyconfiguration
 aasspStepScalingPolicyConfiguration :: Lens' ApplicationAutoScalingScalingPolicy (Maybe ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration)
 aasspStepScalingPolicyConfiguration = lens _applicationAutoScalingScalingPolicyStepScalingPolicyConfiguration (\s a -> s { _applicationAutoScalingScalingPolicyStepScalingPolicyConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html#cfn-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration
+aasspTargetTrackingScalingPolicyConfiguration :: Lens' ApplicationAutoScalingScalingPolicy (Maybe ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration)
+aasspTargetTrackingScalingPolicyConfiguration = lens _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration (\s a -> s { _applicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration = a })
diff --git a/library-gen/Stratosphere/Resources/AutoScalingAutoScalingGroup.hs b/library-gen/Stratosphere/Resources/AutoScalingAutoScalingGroup.hs
--- a/library-gen/Stratosphere/Resources/AutoScalingAutoScalingGroup.hs
+++ b/library-gen/Stratosphere/Resources/AutoScalingAutoScalingGroup.hs
@@ -13,7 +13,7 @@
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupMetricsCollection
-import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupNotificationConfigurations
+import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupNotificationConfiguration
 import Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupTagProperty
 
 -- | Full data type definition for AutoScalingAutoScalingGroup. See
@@ -29,9 +29,9 @@
   , _autoScalingAutoScalingGroupLaunchConfigurationName :: Maybe (Val Text)
   , _autoScalingAutoScalingGroupLoadBalancerNames :: Maybe [Val Text]
   , _autoScalingAutoScalingGroupMaxSize :: Val Text
-  , _autoScalingAutoScalingGroupMetricsCollection :: Maybe AutoScalingAutoScalingGroupMetricsCollection
+  , _autoScalingAutoScalingGroupMetricsCollection :: Maybe [AutoScalingAutoScalingGroupMetricsCollection]
   , _autoScalingAutoScalingGroupMinSize :: Val Text
-  , _autoScalingAutoScalingGroupNotificationConfigurations :: Maybe AutoScalingAutoScalingGroupNotificationConfigurations
+  , _autoScalingAutoScalingGroupNotificationConfigurations :: Maybe [AutoScalingAutoScalingGroupNotificationConfiguration]
   , _autoScalingAutoScalingGroupPlacementGroup :: Maybe (Val Text)
   , _autoScalingAutoScalingGroupTags :: Maybe [AutoScalingAutoScalingGroupTagProperty]
   , _autoScalingAutoScalingGroupTargetGroupARNs :: Maybe [Val Text]
@@ -148,7 +148,7 @@
 asasgMaxSize = lens _autoScalingAutoScalingGroupMaxSize (\s a -> s { _autoScalingAutoScalingGroupMaxSize = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-metricscollection
-asasgMetricsCollection :: Lens' AutoScalingAutoScalingGroup (Maybe AutoScalingAutoScalingGroupMetricsCollection)
+asasgMetricsCollection :: Lens' AutoScalingAutoScalingGroup (Maybe [AutoScalingAutoScalingGroupMetricsCollection])
 asasgMetricsCollection = lens _autoScalingAutoScalingGroupMetricsCollection (\s a -> s { _autoScalingAutoScalingGroupMetricsCollection = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-minsize
@@ -156,7 +156,7 @@
 asasgMinSize = lens _autoScalingAutoScalingGroupMinSize (\s a -> s { _autoScalingAutoScalingGroupMinSize = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-notificationconfigurations
-asasgNotificationConfigurations :: Lens' AutoScalingAutoScalingGroup (Maybe AutoScalingAutoScalingGroupNotificationConfigurations)
+asasgNotificationConfigurations :: Lens' AutoScalingAutoScalingGroup (Maybe [AutoScalingAutoScalingGroupNotificationConfiguration])
 asasgNotificationConfigurations = lens _autoScalingAutoScalingGroupNotificationConfigurations (\s a -> s { _autoScalingAutoScalingGroupNotificationConfigurations = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-placementgroup
diff --git a/library-gen/Stratosphere/Resources/CloudTrailTrail.hs b/library-gen/Stratosphere/Resources/CloudTrailTrail.hs
--- a/library-gen/Stratosphere/Resources/CloudTrailTrail.hs
+++ b/library-gen/Stratosphere/Resources/CloudTrailTrail.hs
@@ -12,7 +12,7 @@
 import Data.Text
 
 import Stratosphere.Values
-
+import Stratosphere.ResourceProperties.Tag
 
 -- | Full data type definition for CloudTrailTrail. See 'cloudTrailTrail' for
 -- a more convenient constructor.
@@ -28,6 +28,8 @@
   , _cloudTrailTrailS3BucketName :: Val Text
   , _cloudTrailTrailS3KeyPrefix :: Maybe (Val Text)
   , _cloudTrailTrailSnsTopicName :: Maybe (Val Text)
+  , _cloudTrailTrailTags :: Maybe [Tag]
+  , _cloudTrailTrailTrailName :: Maybe (Val Text)
   } deriving (Show, Eq)
 
 instance ToJSON CloudTrailTrail where
@@ -44,6 +46,8 @@
     , Just ("S3BucketName" .= _cloudTrailTrailS3BucketName)
     , ("S3KeyPrefix" .=) <$> _cloudTrailTrailS3KeyPrefix
     , ("SnsTopicName" .=) <$> _cloudTrailTrailSnsTopicName
+    , ("Tags" .=) <$> _cloudTrailTrailTags
+    , ("TrailName" .=) <$> _cloudTrailTrailTrailName
     ]
 
 instance FromJSON CloudTrailTrail where
@@ -58,7 +62,9 @@
       obj .:? "KMSKeyId" <*>
       obj .: "S3BucketName" <*>
       obj .:? "S3KeyPrefix" <*>
-      obj .:? "SnsTopicName"
+      obj .:? "SnsTopicName" <*>
+      obj .:? "Tags" <*>
+      obj .:? "TrailName"
   parseJSON _ = mempty
 
 -- | Constructor for 'CloudTrailTrail' containing required fields as
@@ -79,6 +85,8 @@
   , _cloudTrailTrailS3BucketName = s3BucketNamearg
   , _cloudTrailTrailS3KeyPrefix = Nothing
   , _cloudTrailTrailSnsTopicName = Nothing
+  , _cloudTrailTrailTags = Nothing
+  , _cloudTrailTrailTrailName = Nothing
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-cloudwatchlogsloggrouparn
@@ -120,3 +128,11 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-snstopicname
 cttSnsTopicName :: Lens' CloudTrailTrail (Maybe (Val Text))
 cttSnsTopicName = lens _cloudTrailTrailSnsTopicName (\s a -> s { _cloudTrailTrailSnsTopicName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-tags
+cttTags :: Lens' CloudTrailTrail (Maybe [Tag])
+cttTags = lens _cloudTrailTrailTags (\s a -> s { _cloudTrailTrailTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-trailname
+cttTrailName :: Lens' CloudTrailTrail (Maybe (Val Text))
+cttTrailName = lens _cloudTrailTrailTrailName (\s a -> s { _cloudTrailTrailTrailName = a })
diff --git a/library-gen/Stratosphere/Resources/CodeBuildProject.hs b/library-gen/Stratosphere/Resources/CodeBuildProject.hs
--- a/library-gen/Stratosphere/Resources/CodeBuildProject.hs
+++ b/library-gen/Stratosphere/Resources/CodeBuildProject.hs
@@ -21,13 +21,13 @@
 -- for a more convenient constructor.
 data CodeBuildProject =
   CodeBuildProject
-  { _codeBuildProjectArtifacts :: Maybe CodeBuildProjectArtifacts
+  { _codeBuildProjectArtifacts :: CodeBuildProjectArtifacts
   , _codeBuildProjectDescription :: Maybe (Val Text)
   , _codeBuildProjectEncryptionKey :: Maybe (Val Text)
-  , _codeBuildProjectEnvironment :: Maybe CodeBuildProjectEnvironment
+  , _codeBuildProjectEnvironment :: CodeBuildProjectEnvironment
   , _codeBuildProjectName :: Maybe (Val Text)
-  , _codeBuildProjectServiceRole :: Maybe (Val Text)
-  , _codeBuildProjectSource :: Maybe CodeBuildProjectSource
+  , _codeBuildProjectServiceRole :: Val Text
+  , _codeBuildProjectSource :: CodeBuildProjectSource
   , _codeBuildProjectTags :: Maybe [Tag]
   , _codeBuildProjectTimeoutInMinutes :: Maybe (Val Integer')
   } deriving (Show, Eq)
@@ -36,13 +36,13 @@
   toJSON CodeBuildProject{..} =
     object $
     catMaybes
-    [ ("Artifacts" .=) <$> _codeBuildProjectArtifacts
+    [ Just ("Artifacts" .= _codeBuildProjectArtifacts)
     , ("Description" .=) <$> _codeBuildProjectDescription
     , ("EncryptionKey" .=) <$> _codeBuildProjectEncryptionKey
-    , ("Environment" .=) <$> _codeBuildProjectEnvironment
+    , Just ("Environment" .= _codeBuildProjectEnvironment)
     , ("Name" .=) <$> _codeBuildProjectName
-    , ("ServiceRole" .=) <$> _codeBuildProjectServiceRole
-    , ("Source" .=) <$> _codeBuildProjectSource
+    , Just ("ServiceRole" .= _codeBuildProjectServiceRole)
+    , Just ("Source" .= _codeBuildProjectSource)
     , ("Tags" .=) <$> _codeBuildProjectTags
     , ("TimeoutInMinutes" .=) <$> _codeBuildProjectTimeoutInMinutes
     ]
@@ -50,13 +50,13 @@
 instance FromJSON CodeBuildProject where
   parseJSON (Object obj) =
     CodeBuildProject <$>
-      obj .:? "Artifacts" <*>
+      obj .: "Artifacts" <*>
       obj .:? "Description" <*>
       obj .:? "EncryptionKey" <*>
-      obj .:? "Environment" <*>
+      obj .: "Environment" <*>
       obj .:? "Name" <*>
-      obj .:? "ServiceRole" <*>
-      obj .:? "Source" <*>
+      obj .: "ServiceRole" <*>
+      obj .: "Source" <*>
       obj .:? "Tags" <*>
       obj .:? "TimeoutInMinutes"
   parseJSON _ = mempty
@@ -64,22 +64,26 @@
 -- | Constructor for 'CodeBuildProject' containing required fields as
 -- arguments.
 codeBuildProject
-  :: CodeBuildProject
-codeBuildProject  =
+  :: CodeBuildProjectArtifacts -- ^ 'cbpArtifacts'
+  -> CodeBuildProjectEnvironment -- ^ 'cbpEnvironment'
+  -> Val Text -- ^ 'cbpServiceRole'
+  -> CodeBuildProjectSource -- ^ 'cbpSource'
+  -> CodeBuildProject
+codeBuildProject artifactsarg environmentarg serviceRolearg sourcearg =
   CodeBuildProject
-  { _codeBuildProjectArtifacts = Nothing
+  { _codeBuildProjectArtifacts = artifactsarg
   , _codeBuildProjectDescription = Nothing
   , _codeBuildProjectEncryptionKey = Nothing
-  , _codeBuildProjectEnvironment = Nothing
+  , _codeBuildProjectEnvironment = environmentarg
   , _codeBuildProjectName = Nothing
-  , _codeBuildProjectServiceRole = Nothing
-  , _codeBuildProjectSource = Nothing
+  , _codeBuildProjectServiceRole = serviceRolearg
+  , _codeBuildProjectSource = sourcearg
   , _codeBuildProjectTags = Nothing
   , _codeBuildProjectTimeoutInMinutes = Nothing
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-artifacts
-cbpArtifacts :: Lens' CodeBuildProject (Maybe CodeBuildProjectArtifacts)
+cbpArtifacts :: Lens' CodeBuildProject CodeBuildProjectArtifacts
 cbpArtifacts = lens _codeBuildProjectArtifacts (\s a -> s { _codeBuildProjectArtifacts = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-description
@@ -91,7 +95,7 @@
 cbpEncryptionKey = lens _codeBuildProjectEncryptionKey (\s a -> s { _codeBuildProjectEncryptionKey = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-environment
-cbpEnvironment :: Lens' CodeBuildProject (Maybe CodeBuildProjectEnvironment)
+cbpEnvironment :: Lens' CodeBuildProject CodeBuildProjectEnvironment
 cbpEnvironment = lens _codeBuildProjectEnvironment (\s a -> s { _codeBuildProjectEnvironment = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-name
@@ -99,11 +103,11 @@
 cbpName = lens _codeBuildProjectName (\s a -> s { _codeBuildProjectName = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-servicerole
-cbpServiceRole :: Lens' CodeBuildProject (Maybe (Val Text))
+cbpServiceRole :: Lens' CodeBuildProject (Val Text)
 cbpServiceRole = lens _codeBuildProjectServiceRole (\s a -> s { _codeBuildProjectServiceRole = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-source
-cbpSource :: Lens' CodeBuildProject (Maybe CodeBuildProjectSource)
+cbpSource :: Lens' CodeBuildProject CodeBuildProjectSource
 cbpSource = lens _codeBuildProjectSource (\s a -> s { _codeBuildProjectSource = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-tags
diff --git a/library-gen/Stratosphere/Resources/ConfigConfigurationRecorder.hs b/library-gen/Stratosphere/Resources/ConfigConfigurationRecorder.hs
--- a/library-gen/Stratosphere/Resources/ConfigConfigurationRecorder.hs
+++ b/library-gen/Stratosphere/Resources/ConfigConfigurationRecorder.hs
@@ -20,7 +20,7 @@
   ConfigConfigurationRecorder
   { _configConfigurationRecorderName :: Maybe (Val Text)
   , _configConfigurationRecorderRecordingGroup :: Maybe ConfigConfigurationRecorderRecordingGroup
-  , _configConfigurationRecorderRoleArn :: Val Text
+  , _configConfigurationRecorderRoleARN :: Val Text
   } deriving (Show, Eq)
 
 instance ToJSON ConfigConfigurationRecorder where
@@ -29,7 +29,7 @@
     catMaybes
     [ ("Name" .=) <$> _configConfigurationRecorderName
     , ("RecordingGroup" .=) <$> _configConfigurationRecorderRecordingGroup
-    , Just ("RoleArn" .= _configConfigurationRecorderRoleArn)
+    , Just ("RoleARN" .= _configConfigurationRecorderRoleARN)
     ]
 
 instance FromJSON ConfigConfigurationRecorder where
@@ -37,19 +37,19 @@
     ConfigConfigurationRecorder <$>
       obj .:? "Name" <*>
       obj .:? "RecordingGroup" <*>
-      obj .: "RoleArn"
+      obj .: "RoleARN"
   parseJSON _ = mempty
 
 -- | Constructor for 'ConfigConfigurationRecorder' containing required fields
 -- as arguments.
 configConfigurationRecorder
-  :: Val Text -- ^ 'ccrRoleArn'
+  :: Val Text -- ^ 'ccrRoleARN'
   -> ConfigConfigurationRecorder
-configConfigurationRecorder roleArnarg =
+configConfigurationRecorder roleARNarg =
   ConfigConfigurationRecorder
   { _configConfigurationRecorderName = Nothing
   , _configConfigurationRecorderRecordingGroup = Nothing
-  , _configConfigurationRecorderRoleArn = roleArnarg
+  , _configConfigurationRecorderRoleARN = roleARNarg
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configurationrecorder.html#cfn-config-configurationrecorder-name
@@ -61,5 +61,5 @@
 ccrRecordingGroup = lens _configConfigurationRecorderRecordingGroup (\s a -> s { _configConfigurationRecorderRecordingGroup = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configurationrecorder.html#cfn-config-configurationrecorder-rolearn
-ccrRoleArn :: Lens' ConfigConfigurationRecorder (Val Text)
-ccrRoleArn = lens _configConfigurationRecorderRoleArn (\s a -> s { _configConfigurationRecorderRoleArn = a })
+ccrRoleARN :: Lens' ConfigConfigurationRecorder (Val Text)
+ccrRoleARN = lens _configConfigurationRecorderRoleARN (\s a -> s { _configConfigurationRecorderRoleARN = a })
diff --git a/library-gen/Stratosphere/Resources/EC2DHCPOptions.hs b/library-gen/Stratosphere/Resources/EC2DHCPOptions.hs
--- a/library-gen/Stratosphere/Resources/EC2DHCPOptions.hs
+++ b/library-gen/Stratosphere/Resources/EC2DHCPOptions.hs
@@ -22,7 +22,7 @@
   , _eC2DHCPOptionsDomainNameServers :: Maybe [Val Text]
   , _eC2DHCPOptionsNetbiosNameServers :: Maybe [Val Text]
   , _eC2DHCPOptionsNetbiosNodeType :: Maybe (Val Integer')
-  , _eC2DHCPOptionsNtpServers :: Maybe (Val Text)
+  , _eC2DHCPOptionsNtpServers :: Maybe [Val Text]
   , _eC2DHCPOptionsTags :: Maybe [Tag]
   } deriving (Show, Eq)
 
@@ -79,7 +79,7 @@
 ecdhcpoNetbiosNodeType = lens _eC2DHCPOptionsNetbiosNodeType (\s a -> s { _eC2DHCPOptionsNetbiosNodeType = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcp-options.html#cfn-ec2-dhcpoptions-ntpservers
-ecdhcpoNtpServers :: Lens' EC2DHCPOptions (Maybe (Val Text))
+ecdhcpoNtpServers :: Lens' EC2DHCPOptions (Maybe [Val Text])
 ecdhcpoNtpServers = lens _eC2DHCPOptionsNtpServers (\s a -> s { _eC2DHCPOptionsNtpServers = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcp-options.html#cfn-ec2-dhcpoptions-tags
diff --git a/library-gen/Stratosphere/Resources/EC2EgressOnlyInternetGateway.hs b/library-gen/Stratosphere/Resources/EC2EgressOnlyInternetGateway.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2EgressOnlyInternetGateway.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-egressonlyinternetgateway.html
+
+module Stratosphere.Resources.EC2EgressOnlyInternetGateway 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 EC2EgressOnlyInternetGateway. See
+-- 'ec2EgressOnlyInternetGateway' for a more convenient constructor.
+data EC2EgressOnlyInternetGateway =
+  EC2EgressOnlyInternetGateway
+  { _eC2EgressOnlyInternetGatewayVpcId :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON EC2EgressOnlyInternetGateway where
+  toJSON EC2EgressOnlyInternetGateway{..} =
+    object $
+    catMaybes
+    [ Just ("VpcId" .= _eC2EgressOnlyInternetGatewayVpcId)
+    ]
+
+instance FromJSON EC2EgressOnlyInternetGateway where
+  parseJSON (Object obj) =
+    EC2EgressOnlyInternetGateway <$>
+      obj .: "VpcId"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2EgressOnlyInternetGateway' containing required fields
+-- as arguments.
+ec2EgressOnlyInternetGateway
+  :: Val Text -- ^ 'eceoigVpcId'
+  -> EC2EgressOnlyInternetGateway
+ec2EgressOnlyInternetGateway vpcIdarg =
+  EC2EgressOnlyInternetGateway
+  { _eC2EgressOnlyInternetGatewayVpcId = vpcIdarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-egressonlyinternetgateway.html#cfn-ec2-egressonlyinternetgateway-vpcid
+eceoigVpcId :: Lens' EC2EgressOnlyInternetGateway (Val Text)
+eceoigVpcId = lens _eC2EgressOnlyInternetGatewayVpcId (\s a -> s { _eC2EgressOnlyInternetGatewayVpcId = a })
diff --git a/library-gen/Stratosphere/Resources/EC2InternetGateway.hs b/library-gen/Stratosphere/Resources/EC2InternetGateway.hs
--- a/library-gen/Stratosphere/Resources/EC2InternetGateway.hs
+++ b/library-gen/Stratosphere/Resources/EC2InternetGateway.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE RecordWildCards #-}
 
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-internet-gateway.html
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-internetgateway.html
 
 module Stratosphere.Resources.EC2InternetGateway where
 
@@ -43,6 +43,6 @@
   { _eC2InternetGatewayTags = Nothing
   }
 
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-internet-gateway.html#cfn-ec2-internetgateway-tags
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-internetgateway.html#cfn-ec2-internetgateway-tags
 ecigTags :: Lens' EC2InternetGateway (Maybe [Tag])
 ecigTags = lens _eC2InternetGatewayTags (\s a -> s { _eC2InternetGatewayTags = a })
diff --git a/library-gen/Stratosphere/Resources/EC2NetworkInterface.hs b/library-gen/Stratosphere/Resources/EC2NetworkInterface.hs
--- a/library-gen/Stratosphere/Resources/EC2NetworkInterface.hs
+++ b/library-gen/Stratosphere/Resources/EC2NetworkInterface.hs
@@ -22,6 +22,7 @@
   EC2NetworkInterface
   { _eC2NetworkInterfaceDescription :: Maybe (Val Text)
   , _eC2NetworkInterfaceGroupSet :: Maybe [Val Text]
+  , _eC2NetworkInterfaceInterfaceType :: Maybe (Val Text)
   , _eC2NetworkInterfaceIpv6AddressCount :: Maybe (Val Integer')
   , _eC2NetworkInterfaceIpv6Addresses :: Maybe EC2NetworkInterfaceInstanceIpv6Address
   , _eC2NetworkInterfacePrivateIpAddress :: Maybe (Val Text)
@@ -38,6 +39,7 @@
     catMaybes
     [ ("Description" .=) <$> _eC2NetworkInterfaceDescription
     , ("GroupSet" .=) <$> _eC2NetworkInterfaceGroupSet
+    , ("InterfaceType" .=) <$> _eC2NetworkInterfaceInterfaceType
     , ("Ipv6AddressCount" .=) <$> _eC2NetworkInterfaceIpv6AddressCount
     , ("Ipv6Addresses" .=) <$> _eC2NetworkInterfaceIpv6Addresses
     , ("PrivateIpAddress" .=) <$> _eC2NetworkInterfacePrivateIpAddress
@@ -53,6 +55,7 @@
     EC2NetworkInterface <$>
       obj .:? "Description" <*>
       obj .:? "GroupSet" <*>
+      obj .:? "InterfaceType" <*>
       obj .:? "Ipv6AddressCount" <*>
       obj .:? "Ipv6Addresses" <*>
       obj .:? "PrivateIpAddress" <*>
@@ -72,6 +75,7 @@
   EC2NetworkInterface
   { _eC2NetworkInterfaceDescription = Nothing
   , _eC2NetworkInterfaceGroupSet = Nothing
+  , _eC2NetworkInterfaceInterfaceType = Nothing
   , _eC2NetworkInterfaceIpv6AddressCount = Nothing
   , _eC2NetworkInterfaceIpv6Addresses = Nothing
   , _eC2NetworkInterfacePrivateIpAddress = Nothing
@@ -89,6 +93,10 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html#cfn-awsec2networkinterface-groupset
 ecniGroupSet :: Lens' EC2NetworkInterface (Maybe [Val Text])
 ecniGroupSet = lens _eC2NetworkInterfaceGroupSet (\s a -> s { _eC2NetworkInterfaceGroupSet = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html#cfn-ec2-networkinterface-interfacetype
+ecniInterfaceType :: Lens' EC2NetworkInterface (Maybe (Val Text))
+ecniInterfaceType = lens _eC2NetworkInterfaceInterfaceType (\s a -> s { _eC2NetworkInterfaceInterfaceType = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html#cfn-ec2-networkinterface-ipv6addresscount
 ecniIpv6AddressCount :: Lens' EC2NetworkInterface (Maybe (Val Integer'))
diff --git a/library-gen/Stratosphere/Resources/EC2NetworkInterfacePermission.hs b/library-gen/Stratosphere/Resources/EC2NetworkInterfacePermission.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2NetworkInterfacePermission.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterfacepermission.html
+
+module Stratosphere.Resources.EC2NetworkInterfacePermission 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 EC2NetworkInterfacePermission. See
+-- 'ec2NetworkInterfacePermission' for a more convenient constructor.
+data EC2NetworkInterfacePermission =
+  EC2NetworkInterfacePermission
+  { _eC2NetworkInterfacePermissionAwsAccountId :: Val Text
+  , _eC2NetworkInterfacePermissionNetworkInterfaceId :: Val Text
+  , _eC2NetworkInterfacePermissionPermission :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON EC2NetworkInterfacePermission where
+  toJSON EC2NetworkInterfacePermission{..} =
+    object $
+    catMaybes
+    [ Just ("AwsAccountId" .= _eC2NetworkInterfacePermissionAwsAccountId)
+    , Just ("NetworkInterfaceId" .= _eC2NetworkInterfacePermissionNetworkInterfaceId)
+    , Just ("Permission" .= _eC2NetworkInterfacePermissionPermission)
+    ]
+
+instance FromJSON EC2NetworkInterfacePermission where
+  parseJSON (Object obj) =
+    EC2NetworkInterfacePermission <$>
+      obj .: "AwsAccountId" <*>
+      obj .: "NetworkInterfaceId" <*>
+      obj .: "Permission"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2NetworkInterfacePermission' containing required
+-- fields as arguments.
+ec2NetworkInterfacePermission
+  :: Val Text -- ^ 'ecnipAwsAccountId'
+  -> Val Text -- ^ 'ecnipNetworkInterfaceId'
+  -> Val Text -- ^ 'ecnipPermission'
+  -> EC2NetworkInterfacePermission
+ec2NetworkInterfacePermission awsAccountIdarg networkInterfaceIdarg permissionarg =
+  EC2NetworkInterfacePermission
+  { _eC2NetworkInterfacePermissionAwsAccountId = awsAccountIdarg
+  , _eC2NetworkInterfacePermissionNetworkInterfaceId = networkInterfaceIdarg
+  , _eC2NetworkInterfacePermissionPermission = permissionarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterfacepermission.html#cfn-ec2-networkinterfacepermission-awsaccountid
+ecnipAwsAccountId :: Lens' EC2NetworkInterfacePermission (Val Text)
+ecnipAwsAccountId = lens _eC2NetworkInterfacePermissionAwsAccountId (\s a -> s { _eC2NetworkInterfacePermissionAwsAccountId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterfacepermission.html#cfn-ec2-networkinterfacepermission-networkinterfaceid
+ecnipNetworkInterfaceId :: Lens' EC2NetworkInterfacePermission (Val Text)
+ecnipNetworkInterfaceId = lens _eC2NetworkInterfacePermissionNetworkInterfaceId (\s a -> s { _eC2NetworkInterfacePermissionNetworkInterfaceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterfacepermission.html#cfn-ec2-networkinterfacepermission-permission
+ecnipPermission :: Lens' EC2NetworkInterfacePermission (Val Text)
+ecnipPermission = lens _eC2NetworkInterfacePermissionPermission (\s a -> s { _eC2NetworkInterfacePermissionPermission = a })
diff --git a/library-gen/Stratosphere/Resources/EC2Route.hs b/library-gen/Stratosphere/Resources/EC2Route.hs
--- a/library-gen/Stratosphere/Resources/EC2Route.hs
+++ b/library-gen/Stratosphere/Resources/EC2Route.hs
@@ -18,7 +18,7 @@
 -- convenient constructor.
 data EC2Route =
   EC2Route
-  { _eC2RouteDestinationCidrBlock :: Val Text
+  { _eC2RouteDestinationCidrBlock :: Maybe (Val Text)
   , _eC2RouteDestinationIpv6CidrBlock :: Maybe (Val Text)
   , _eC2RouteGatewayId :: Maybe (Val Text)
   , _eC2RouteInstanceId :: Maybe (Val Text)
@@ -32,7 +32,7 @@
   toJSON EC2Route{..} =
     object $
     catMaybes
-    [ Just ("DestinationCidrBlock" .= _eC2RouteDestinationCidrBlock)
+    [ ("DestinationCidrBlock" .=) <$> _eC2RouteDestinationCidrBlock
     , ("DestinationIpv6CidrBlock" .=) <$> _eC2RouteDestinationIpv6CidrBlock
     , ("GatewayId" .=) <$> _eC2RouteGatewayId
     , ("InstanceId" .=) <$> _eC2RouteInstanceId
@@ -45,7 +45,7 @@
 instance FromJSON EC2Route where
   parseJSON (Object obj) =
     EC2Route <$>
-      obj .: "DestinationCidrBlock" <*>
+      obj .:? "DestinationCidrBlock" <*>
       obj .:? "DestinationIpv6CidrBlock" <*>
       obj .:? "GatewayId" <*>
       obj .:? "InstanceId" <*>
@@ -57,12 +57,11 @@
 
 -- | Constructor for 'EC2Route' containing required fields as arguments.
 ec2Route
-  :: Val Text -- ^ 'ecrDestinationCidrBlock'
-  -> Val Text -- ^ 'ecrRouteTableId'
+  :: Val Text -- ^ 'ecrRouteTableId'
   -> EC2Route
-ec2Route destinationCidrBlockarg routeTableIdarg =
+ec2Route routeTableIdarg =
   EC2Route
-  { _eC2RouteDestinationCidrBlock = destinationCidrBlockarg
+  { _eC2RouteDestinationCidrBlock = Nothing
   , _eC2RouteDestinationIpv6CidrBlock = Nothing
   , _eC2RouteGatewayId = Nothing
   , _eC2RouteInstanceId = Nothing
@@ -73,7 +72,7 @@
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-destinationcidrblock
-ecrDestinationCidrBlock :: Lens' EC2Route (Val Text)
+ecrDestinationCidrBlock :: Lens' EC2Route (Maybe (Val Text))
 ecrDestinationCidrBlock = lens _eC2RouteDestinationCidrBlock (\s a -> s { _eC2RouteDestinationCidrBlock = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-destinationipv6cidrblock
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
@@ -12,7 +12,8 @@
 import Data.Text
 
 import Stratosphere.Values
-import Stratosphere.ResourceProperties.EC2SecurityGroupRule
+import Stratosphere.ResourceProperties.EC2SecurityGroupEgressProperty
+import Stratosphere.ResourceProperties.EC2SecurityGroupIngressProperty
 import Stratosphere.ResourceProperties.Tag
 
 -- | Full data type definition for EC2SecurityGroup. See 'ec2SecurityGroup'
@@ -21,8 +22,8 @@
   EC2SecurityGroup
   { _eC2SecurityGroupGroupDescription :: Val Text
   , _eC2SecurityGroupGroupName :: Maybe (Val Text)
-  , _eC2SecurityGroupSecurityGroupEgress :: Maybe [EC2SecurityGroupRule]
-  , _eC2SecurityGroupSecurityGroupIngress :: Maybe [EC2SecurityGroupRule]
+  , _eC2SecurityGroupSecurityGroupEgress :: Maybe [EC2SecurityGroupEgressProperty]
+  , _eC2SecurityGroupSecurityGroupIngress :: Maybe [EC2SecurityGroupIngressProperty]
   , _eC2SecurityGroupTags :: Maybe [Tag]
   , _eC2SecurityGroupVpcId :: Maybe (Val Text)
   } deriving (Show, Eq)
@@ -74,11 +75,11 @@
 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])
+ecsgSecurityGroupEgress :: Lens' EC2SecurityGroup (Maybe [EC2SecurityGroupEgressProperty])
 ecsgSecurityGroupEgress = lens _eC2SecurityGroupSecurityGroupEgress (\s a -> s { _eC2SecurityGroupSecurityGroupEgress = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html#cfn-ec2-securitygroup-securitygroupingress
-ecsgSecurityGroupIngress :: Lens' EC2SecurityGroup (Maybe [EC2SecurityGroupRule])
+ecsgSecurityGroupIngress :: Lens' EC2SecurityGroup (Maybe [EC2SecurityGroupIngressProperty])
 ecsgSecurityGroupIngress = lens _eC2SecurityGroupSecurityGroupIngress (\s a -> s { _eC2SecurityGroupSecurityGroupIngress = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html#cfn-ec2-securitygroup-tags
diff --git a/library-gen/Stratosphere/Resources/EC2TrunkInterfaceAssociation.hs b/library-gen/Stratosphere/Resources/EC2TrunkInterfaceAssociation.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2TrunkInterfaceAssociation.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trunkinterfaceassociation.html
+
+module Stratosphere.Resources.EC2TrunkInterfaceAssociation 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 EC2TrunkInterfaceAssociation. See
+-- 'ec2TrunkInterfaceAssociation' for a more convenient constructor.
+data EC2TrunkInterfaceAssociation =
+  EC2TrunkInterfaceAssociation
+  { _eC2TrunkInterfaceAssociationBranchInterfaceId :: Val Text
+  , _eC2TrunkInterfaceAssociationGREKey :: Maybe (Val Integer')
+  , _eC2TrunkInterfaceAssociationTrunkInterfaceId :: Val Text
+  , _eC2TrunkInterfaceAssociationVLANId :: Maybe (Val Integer')
+  } deriving (Show, Eq)
+
+instance ToJSON EC2TrunkInterfaceAssociation where
+  toJSON EC2TrunkInterfaceAssociation{..} =
+    object $
+    catMaybes
+    [ Just ("BranchInterfaceId" .= _eC2TrunkInterfaceAssociationBranchInterfaceId)
+    , ("GREKey" .=) <$> _eC2TrunkInterfaceAssociationGREKey
+    , Just ("TrunkInterfaceId" .= _eC2TrunkInterfaceAssociationTrunkInterfaceId)
+    , ("VLANId" .=) <$> _eC2TrunkInterfaceAssociationVLANId
+    ]
+
+instance FromJSON EC2TrunkInterfaceAssociation where
+  parseJSON (Object obj) =
+    EC2TrunkInterfaceAssociation <$>
+      obj .: "BranchInterfaceId" <*>
+      obj .:? "GREKey" <*>
+      obj .: "TrunkInterfaceId" <*>
+      obj .:? "VLANId"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2TrunkInterfaceAssociation' containing required fields
+-- as arguments.
+ec2TrunkInterfaceAssociation
+  :: Val Text -- ^ 'ectiaBranchInterfaceId'
+  -> Val Text -- ^ 'ectiaTrunkInterfaceId'
+  -> EC2TrunkInterfaceAssociation
+ec2TrunkInterfaceAssociation branchInterfaceIdarg trunkInterfaceIdarg =
+  EC2TrunkInterfaceAssociation
+  { _eC2TrunkInterfaceAssociationBranchInterfaceId = branchInterfaceIdarg
+  , _eC2TrunkInterfaceAssociationGREKey = Nothing
+  , _eC2TrunkInterfaceAssociationTrunkInterfaceId = trunkInterfaceIdarg
+  , _eC2TrunkInterfaceAssociationVLANId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trunkinterfaceassociation.html#cfn-ec2-trunkinterfaceassociation-branchinterfaceid
+ectiaBranchInterfaceId :: Lens' EC2TrunkInterfaceAssociation (Val Text)
+ectiaBranchInterfaceId = lens _eC2TrunkInterfaceAssociationBranchInterfaceId (\s a -> s { _eC2TrunkInterfaceAssociationBranchInterfaceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trunkinterfaceassociation.html#cfn-ec2-trunkinterfaceassociation-grekey
+ectiaGREKey :: Lens' EC2TrunkInterfaceAssociation (Maybe (Val Integer'))
+ectiaGREKey = lens _eC2TrunkInterfaceAssociationGREKey (\s a -> s { _eC2TrunkInterfaceAssociationGREKey = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trunkinterfaceassociation.html#cfn-ec2-trunkinterfaceassociation-trunkinterfaceid
+ectiaTrunkInterfaceId :: Lens' EC2TrunkInterfaceAssociation (Val Text)
+ectiaTrunkInterfaceId = lens _eC2TrunkInterfaceAssociationTrunkInterfaceId (\s a -> s { _eC2TrunkInterfaceAssociationTrunkInterfaceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trunkinterfaceassociation.html#cfn-ec2-trunkinterfaceassociation-vlanid
+ectiaVLANId :: Lens' EC2TrunkInterfaceAssociation (Maybe (Val Integer'))
+ectiaVLANId = lens _eC2TrunkInterfaceAssociationVLANId (\s a -> s { _eC2TrunkInterfaceAssociationVLANId = a })
diff --git a/library-gen/Stratosphere/Resources/EMRInstanceFleetConfig.hs b/library-gen/Stratosphere/Resources/EMRInstanceFleetConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EMRInstanceFleetConfig.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html
+
+module Stratosphere.Resources.EMRInstanceFleetConfig 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.EMRInstanceFleetConfigInstanceTypeConfig
+import Stratosphere.ResourceProperties.EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications
+
+-- | Full data type definition for EMRInstanceFleetConfig. See
+-- 'emrInstanceFleetConfig' for a more convenient constructor.
+data EMRInstanceFleetConfig =
+  EMRInstanceFleetConfig
+  { _eMRInstanceFleetConfigClusterId :: Val Text
+  , _eMRInstanceFleetConfigInstanceFleetType :: Val Text
+  , _eMRInstanceFleetConfigInstanceTypeConfigs :: Maybe [EMRInstanceFleetConfigInstanceTypeConfig]
+  , _eMRInstanceFleetConfigLaunchSpecifications :: Maybe EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications
+  , _eMRInstanceFleetConfigName :: Maybe (Val Text)
+  , _eMRInstanceFleetConfigTargetOnDemandCapacity :: Maybe (Val Integer')
+  , _eMRInstanceFleetConfigTargetSpotCapacity :: Maybe (Val Integer')
+  } deriving (Show, Eq)
+
+instance ToJSON EMRInstanceFleetConfig where
+  toJSON EMRInstanceFleetConfig{..} =
+    object $
+    catMaybes
+    [ Just ("ClusterId" .= _eMRInstanceFleetConfigClusterId)
+    , Just ("InstanceFleetType" .= _eMRInstanceFleetConfigInstanceFleetType)
+    , ("InstanceTypeConfigs" .=) <$> _eMRInstanceFleetConfigInstanceTypeConfigs
+    , ("LaunchSpecifications" .=) <$> _eMRInstanceFleetConfigLaunchSpecifications
+    , ("Name" .=) <$> _eMRInstanceFleetConfigName
+    , ("TargetOnDemandCapacity" .=) <$> _eMRInstanceFleetConfigTargetOnDemandCapacity
+    , ("TargetSpotCapacity" .=) <$> _eMRInstanceFleetConfigTargetSpotCapacity
+    ]
+
+instance FromJSON EMRInstanceFleetConfig where
+  parseJSON (Object obj) =
+    EMRInstanceFleetConfig <$>
+      obj .: "ClusterId" <*>
+      obj .: "InstanceFleetType" <*>
+      obj .:? "InstanceTypeConfigs" <*>
+      obj .:? "LaunchSpecifications" <*>
+      obj .:? "Name" <*>
+      obj .:? "TargetOnDemandCapacity" <*>
+      obj .:? "TargetSpotCapacity"
+  parseJSON _ = mempty
+
+-- | Constructor for 'EMRInstanceFleetConfig' containing required fields as
+-- arguments.
+emrInstanceFleetConfig
+  :: Val Text -- ^ 'emrifcClusterId'
+  -> Val Text -- ^ 'emrifcInstanceFleetType'
+  -> EMRInstanceFleetConfig
+emrInstanceFleetConfig clusterIdarg instanceFleetTypearg =
+  EMRInstanceFleetConfig
+  { _eMRInstanceFleetConfigClusterId = clusterIdarg
+  , _eMRInstanceFleetConfigInstanceFleetType = instanceFleetTypearg
+  , _eMRInstanceFleetConfigInstanceTypeConfigs = Nothing
+  , _eMRInstanceFleetConfigLaunchSpecifications = Nothing
+  , _eMRInstanceFleetConfigName = Nothing
+  , _eMRInstanceFleetConfigTargetOnDemandCapacity = Nothing
+  , _eMRInstanceFleetConfigTargetSpotCapacity = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html#cfn-elasticmapreduce-instancefleetconfig-clusterid
+emrifcClusterId :: Lens' EMRInstanceFleetConfig (Val Text)
+emrifcClusterId = lens _eMRInstanceFleetConfigClusterId (\s a -> s { _eMRInstanceFleetConfigClusterId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancefleettype
+emrifcInstanceFleetType :: Lens' EMRInstanceFleetConfig (Val Text)
+emrifcInstanceFleetType = lens _eMRInstanceFleetConfigInstanceFleetType (\s a -> s { _eMRInstanceFleetConfigInstanceFleetType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html#cfn-elasticmapreduce-instancefleetconfig-instancetypeconfigs
+emrifcInstanceTypeConfigs :: Lens' EMRInstanceFleetConfig (Maybe [EMRInstanceFleetConfigInstanceTypeConfig])
+emrifcInstanceTypeConfigs = lens _eMRInstanceFleetConfigInstanceTypeConfigs (\s a -> s { _eMRInstanceFleetConfigInstanceTypeConfigs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html#cfn-elasticmapreduce-instancefleetconfig-launchspecifications
+emrifcLaunchSpecifications :: Lens' EMRInstanceFleetConfig (Maybe EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications)
+emrifcLaunchSpecifications = lens _eMRInstanceFleetConfigLaunchSpecifications (\s a -> s { _eMRInstanceFleetConfigLaunchSpecifications = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html#cfn-elasticmapreduce-instancefleetconfig-name
+emrifcName :: Lens' EMRInstanceFleetConfig (Maybe (Val Text))
+emrifcName = lens _eMRInstanceFleetConfigName (\s a -> s { _eMRInstanceFleetConfigName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html#cfn-elasticmapreduce-instancefleetconfig-targetondemandcapacity
+emrifcTargetOnDemandCapacity :: Lens' EMRInstanceFleetConfig (Maybe (Val Integer'))
+emrifcTargetOnDemandCapacity = lens _eMRInstanceFleetConfigTargetOnDemandCapacity (\s a -> s { _eMRInstanceFleetConfigTargetOnDemandCapacity = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-instancefleetconfig.html#cfn-elasticmapreduce-instancefleetconfig-targetspotcapacity
+emrifcTargetSpotCapacity :: Lens' EMRInstanceFleetConfig (Maybe (Val Integer'))
+emrifcTargetSpotCapacity = lens _eMRInstanceFleetConfigTargetSpotCapacity (\s a -> s { _eMRInstanceFleetConfigTargetSpotCapacity = a })
diff --git a/library-gen/Stratosphere/Resources/EMRStep.hs b/library-gen/Stratosphere/Resources/EMRStep.hs
--- a/library-gen/Stratosphere/Resources/EMRStep.hs
+++ b/library-gen/Stratosphere/Resources/EMRStep.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE RecordWildCards #-}
 
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-step.html
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-step.html
 
 module Stratosphere.Resources.EMRStep where
 
@@ -58,18 +58,18 @@
   , _eMRStepName = namearg
   }
 
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-step.html#cfn-elasticmapreduce-step-actiononfailure
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-step.html#cfn-elasticmapreduce-step-actiononfailure
 emrsActionOnFailure :: Lens' EMRStep (Val Text)
 emrsActionOnFailure = lens _eMRStepActionOnFailure (\s a -> s { _eMRStepActionOnFailure = a })
 
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-step.html#cfn-elasticmapreduce-step-hadoopjarstep
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-step.html#cfn-elasticmapreduce-step-hadoopjarstep
 emrsHadoopJarStep :: Lens' EMRStep EMRStepHadoopJarStepConfig
 emrsHadoopJarStep = lens _eMRStepHadoopJarStep (\s a -> s { _eMRStepHadoopJarStep = a })
 
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-step.html#cfn-elasticmapreduce-step-jobflowid
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-step.html#cfn-elasticmapreduce-step-jobflowid
 emrsJobFlowId :: Lens' EMRStep (Val Text)
 emrsJobFlowId = lens _eMRStepJobFlowId (\s a -> s { _eMRStepJobFlowId = a })
 
--- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-step.html#cfn-elasticmapreduce-step-name
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-step.html#cfn-elasticmapreduce-step-name
 emrsName :: Lens' EMRStep (Val Text)
 emrsName = lens _eMRStepName (\s a -> s { _eMRStepName = a })
diff --git a/library-gen/Stratosphere/Resources/ElasticBeanstalkEnvironment.hs b/library-gen/Stratosphere/Resources/ElasticBeanstalkEnvironment.hs
--- a/library-gen/Stratosphere/Resources/ElasticBeanstalkEnvironment.hs
+++ b/library-gen/Stratosphere/Resources/ElasticBeanstalkEnvironment.hs
@@ -13,6 +13,7 @@
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.ElasticBeanstalkEnvironmentOptionSettings
+import Stratosphere.ResourceProperties.Tag
 import Stratosphere.ResourceProperties.ElasticBeanstalkEnvironmentTier
 
 -- | Full data type definition for ElasticBeanstalkEnvironment. See
@@ -25,6 +26,7 @@
   , _elasticBeanstalkEnvironmentEnvironmentName :: Maybe (Val Text)
   , _elasticBeanstalkEnvironmentOptionSettings :: Maybe [ElasticBeanstalkEnvironmentOptionSettings]
   , _elasticBeanstalkEnvironmentSolutionStackName :: Maybe (Val Text)
+  , _elasticBeanstalkEnvironmentTags :: Maybe [Tag]
   , _elasticBeanstalkEnvironmentTemplateName :: Maybe (Val Text)
   , _elasticBeanstalkEnvironmentTier :: Maybe ElasticBeanstalkEnvironmentTier
   , _elasticBeanstalkEnvironmentVersionLabel :: Maybe (Val Text)
@@ -40,6 +42,7 @@
     , ("EnvironmentName" .=) <$> _elasticBeanstalkEnvironmentEnvironmentName
     , ("OptionSettings" .=) <$> _elasticBeanstalkEnvironmentOptionSettings
     , ("SolutionStackName" .=) <$> _elasticBeanstalkEnvironmentSolutionStackName
+    , ("Tags" .=) <$> _elasticBeanstalkEnvironmentTags
     , ("TemplateName" .=) <$> _elasticBeanstalkEnvironmentTemplateName
     , ("Tier" .=) <$> _elasticBeanstalkEnvironmentTier
     , ("VersionLabel" .=) <$> _elasticBeanstalkEnvironmentVersionLabel
@@ -54,6 +57,7 @@
       obj .:? "EnvironmentName" <*>
       obj .:? "OptionSettings" <*>
       obj .:? "SolutionStackName" <*>
+      obj .:? "Tags" <*>
       obj .:? "TemplateName" <*>
       obj .:? "Tier" <*>
       obj .:? "VersionLabel"
@@ -72,6 +76,7 @@
   , _elasticBeanstalkEnvironmentEnvironmentName = Nothing
   , _elasticBeanstalkEnvironmentOptionSettings = Nothing
   , _elasticBeanstalkEnvironmentSolutionStackName = Nothing
+  , _elasticBeanstalkEnvironmentTags = Nothing
   , _elasticBeanstalkEnvironmentTemplateName = Nothing
   , _elasticBeanstalkEnvironmentTier = Nothing
   , _elasticBeanstalkEnvironmentVersionLabel = Nothing
@@ -100,6 +105,10 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html#cfn-beanstalk-environment-solutionstackname
 ebeSolutionStackName :: Lens' ElasticBeanstalkEnvironment (Maybe (Val Text))
 ebeSolutionStackName = lens _elasticBeanstalkEnvironmentSolutionStackName (\s a -> s { _elasticBeanstalkEnvironmentSolutionStackName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html#cfn-elasticbeanstalk-environment-tags
+ebeTags :: Lens' ElasticBeanstalkEnvironment (Maybe [Tag])
+ebeTags = lens _elasticBeanstalkEnvironmentTags (\s a -> s { _elasticBeanstalkEnvironmentTags = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html#cfn-beanstalk-environment-templatename
 ebeTemplateName :: Lens' ElasticBeanstalkEnvironment (Maybe (Val Text))
diff --git a/library-gen/Stratosphere/Resources/KinesisFirehoseDeliveryStream.hs b/library-gen/Stratosphere/Resources/KinesisFirehoseDeliveryStream.hs
--- a/library-gen/Stratosphere/Resources/KinesisFirehoseDeliveryStream.hs
+++ b/library-gen/Stratosphere/Resources/KinesisFirehoseDeliveryStream.hs
@@ -13,6 +13,7 @@
 
 import Stratosphere.Values
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration
+import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration
 import Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamS3DestinationConfiguration
 
@@ -22,6 +23,7 @@
   KinesisFirehoseDeliveryStream
   { _kinesisFirehoseDeliveryStreamDeliveryStreamName :: Maybe (Val Text)
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration :: Maybe KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration :: Maybe KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration :: Maybe KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration
   , _kinesisFirehoseDeliveryStreamS3DestinationConfiguration :: Maybe KinesisFirehoseDeliveryStreamS3DestinationConfiguration
   } deriving (Show, Eq)
@@ -32,6 +34,7 @@
     catMaybes
     [ ("DeliveryStreamName" .=) <$> _kinesisFirehoseDeliveryStreamDeliveryStreamName
     , ("ElasticsearchDestinationConfiguration" .=) <$> _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration
+    , ("ExtendedS3DestinationConfiguration" .=) <$> _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration
     , ("RedshiftDestinationConfiguration" .=) <$> _kinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration
     , ("S3DestinationConfiguration" .=) <$> _kinesisFirehoseDeliveryStreamS3DestinationConfiguration
     ]
@@ -41,6 +44,7 @@
     KinesisFirehoseDeliveryStream <$>
       obj .:? "DeliveryStreamName" <*>
       obj .:? "ElasticsearchDestinationConfiguration" <*>
+      obj .:? "ExtendedS3DestinationConfiguration" <*>
       obj .:? "RedshiftDestinationConfiguration" <*>
       obj .:? "S3DestinationConfiguration"
   parseJSON _ = mempty
@@ -53,6 +57,7 @@
   KinesisFirehoseDeliveryStream
   { _kinesisFirehoseDeliveryStreamDeliveryStreamName = Nothing
   , _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration = Nothing
+  , _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration = Nothing
   , _kinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration = Nothing
   , _kinesisFirehoseDeliveryStreamS3DestinationConfiguration = Nothing
   }
@@ -64,6 +69,10 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#cfn-kinesisfirehose-deliverstream-elasticsearchdestinationconfiguration
 kfdsElasticsearchDestinationConfiguration :: Lens' KinesisFirehoseDeliveryStream (Maybe KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration)
 kfdsElasticsearchDestinationConfiguration = lens _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration (\s a -> s { _kinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#cfn-kinesisfirehose-deliverystream-extendeds3destinationconfiguration
+kfdsExtendedS3DestinationConfiguration :: Lens' KinesisFirehoseDeliveryStream (Maybe KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration)
+kfdsExtendedS3DestinationConfiguration = lens _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration (\s a -> s { _kinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#cfn-kinesisfirehose-deliverystream-redshiftdestinationconfiguration
 kfdsRedshiftDestinationConfiguration :: Lens' KinesisFirehoseDeliveryStream (Maybe KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration)
diff --git a/library-gen/Stratosphere/Resources/KinesisStream.hs b/library-gen/Stratosphere/Resources/KinesisStream.hs
--- a/library-gen/Stratosphere/Resources/KinesisStream.hs
+++ b/library-gen/Stratosphere/Resources/KinesisStream.hs
@@ -19,6 +19,7 @@
 data KinesisStream =
   KinesisStream
   { _kinesisStreamName :: Maybe (Val Text)
+  , _kinesisStreamRetentionPeriodHours :: Maybe (Val Integer')
   , _kinesisStreamShardCount :: Val Integer'
   , _kinesisStreamTags :: Maybe [Tag]
   } deriving (Show, Eq)
@@ -28,6 +29,7 @@
     object $
     catMaybes
     [ ("Name" .=) <$> _kinesisStreamName
+    , ("RetentionPeriodHours" .=) <$> _kinesisStreamRetentionPeriodHours
     , Just ("ShardCount" .= _kinesisStreamShardCount)
     , ("Tags" .=) <$> _kinesisStreamTags
     ]
@@ -36,6 +38,7 @@
   parseJSON (Object obj) =
     KinesisStream <$>
       obj .:? "Name" <*>
+      obj .:? "RetentionPeriodHours" <*>
       obj .: "ShardCount" <*>
       obj .:? "Tags"
   parseJSON _ = mempty
@@ -47,6 +50,7 @@
 kinesisStream shardCountarg =
   KinesisStream
   { _kinesisStreamName = Nothing
+  , _kinesisStreamRetentionPeriodHours = Nothing
   , _kinesisStreamShardCount = shardCountarg
   , _kinesisStreamTags = Nothing
   }
@@ -54,6 +58,10 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html#cfn-kinesis-stream-name
 ksName :: Lens' KinesisStream (Maybe (Val Text))
 ksName = lens _kinesisStreamName (\s a -> s { _kinesisStreamName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html#cfn-kinesis-stream-retentionperiodhours
+ksRetentionPeriodHours :: Lens' KinesisStream (Maybe (Val Integer'))
+ksRetentionPeriodHours = lens _kinesisStreamRetentionPeriodHours (\s a -> s { _kinesisStreamRetentionPeriodHours = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesis-stream.html#cfn-kinesis-stream-shardcount
 ksShardCount :: Lens' KinesisStream (Val Integer')
diff --git a/library-gen/Stratosphere/Resources/RDSDBCluster.hs b/library-gen/Stratosphere/Resources/RDSDBCluster.hs
--- a/library-gen/Stratosphere/Resources/RDSDBCluster.hs
+++ b/library-gen/Stratosphere/Resources/RDSDBCluster.hs
@@ -31,6 +31,7 @@
   , _rDSDBClusterPort :: Maybe (Val Integer')
   , _rDSDBClusterPreferredBackupWindow :: Maybe (Val Text)
   , _rDSDBClusterPreferredMaintenanceWindow :: Maybe (Val Text)
+  , _rDSDBClusterReplicationSourceIdentifier :: Maybe (Val Text)
   , _rDSDBClusterSnapshotIdentifier :: Maybe (Val Text)
   , _rDSDBClusterStorageEncrypted :: Maybe (Val Bool')
   , _rDSDBClusterTags :: Maybe [Tag]
@@ -54,6 +55,7 @@
     , ("Port" .=) <$> _rDSDBClusterPort
     , ("PreferredBackupWindow" .=) <$> _rDSDBClusterPreferredBackupWindow
     , ("PreferredMaintenanceWindow" .=) <$> _rDSDBClusterPreferredMaintenanceWindow
+    , ("ReplicationSourceIdentifier" .=) <$> _rDSDBClusterReplicationSourceIdentifier
     , ("SnapshotIdentifier" .=) <$> _rDSDBClusterSnapshotIdentifier
     , ("StorageEncrypted" .=) <$> _rDSDBClusterStorageEncrypted
     , ("Tags" .=) <$> _rDSDBClusterTags
@@ -76,6 +78,7 @@
       obj .:? "Port" <*>
       obj .:? "PreferredBackupWindow" <*>
       obj .:? "PreferredMaintenanceWindow" <*>
+      obj .:? "ReplicationSourceIdentifier" <*>
       obj .:? "SnapshotIdentifier" <*>
       obj .:? "StorageEncrypted" <*>
       obj .:? "Tags" <*>
@@ -101,6 +104,7 @@
   , _rDSDBClusterPort = Nothing
   , _rDSDBClusterPreferredBackupWindow = Nothing
   , _rDSDBClusterPreferredMaintenanceWindow = Nothing
+  , _rDSDBClusterReplicationSourceIdentifier = Nothing
   , _rDSDBClusterSnapshotIdentifier = Nothing
   , _rDSDBClusterStorageEncrypted = Nothing
   , _rDSDBClusterTags = Nothing
@@ -158,6 +162,10 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-preferredmaintenancewindow
 rdsdbcPreferredMaintenanceWindow :: Lens' RDSDBCluster (Maybe (Val Text))
 rdsdbcPreferredMaintenanceWindow = lens _rDSDBClusterPreferredMaintenanceWindow (\s a -> s { _rDSDBClusterPreferredMaintenanceWindow = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-replicationsourceidentifier
+rdsdbcReplicationSourceIdentifier :: Lens' RDSDBCluster (Maybe (Val Text))
+rdsdbcReplicationSourceIdentifier = lens _rDSDBClusterReplicationSourceIdentifier (\s a -> s { _rDSDBClusterReplicationSourceIdentifier = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-snapshotidentifier
 rdsdbcSnapshotIdentifier :: Lens' RDSDBCluster (Maybe (Val Text))
diff --git a/library-gen/Stratosphere/Resources/RDSDBInstance.hs b/library-gen/Stratosphere/Resources/RDSDBInstance.hs
--- a/library-gen/Stratosphere/Resources/RDSDBInstance.hs
+++ b/library-gen/Stratosphere/Resources/RDSDBInstance.hs
@@ -24,6 +24,7 @@
   , _rDSDBInstanceAvailabilityZone :: Maybe (Val Text)
   , _rDSDBInstanceBackupRetentionPeriod :: Maybe (Val Text)
   , _rDSDBInstanceCharacterSetName :: Maybe (Val Text)
+  , _rDSDBInstanceCopyTagsToSnapshot :: Maybe (Val Bool')
   , _rDSDBInstanceDBClusterIdentifier :: Maybe (Val Text)
   , _rDSDBInstanceDBInstanceClass :: Val Text
   , _rDSDBInstanceDBInstanceIdentifier :: Maybe (Val Text)
@@ -67,6 +68,7 @@
     , ("AvailabilityZone" .=) <$> _rDSDBInstanceAvailabilityZone
     , ("BackupRetentionPeriod" .=) <$> _rDSDBInstanceBackupRetentionPeriod
     , ("CharacterSetName" .=) <$> _rDSDBInstanceCharacterSetName
+    , ("CopyTagsToSnapshot" .=) <$> _rDSDBInstanceCopyTagsToSnapshot
     , ("DBClusterIdentifier" .=) <$> _rDSDBInstanceDBClusterIdentifier
     , Just ("DBInstanceClass" .= _rDSDBInstanceDBInstanceClass)
     , ("DBInstanceIdentifier" .=) <$> _rDSDBInstanceDBInstanceIdentifier
@@ -109,6 +111,7 @@
       obj .:? "AvailabilityZone" <*>
       obj .:? "BackupRetentionPeriod" <*>
       obj .:? "CharacterSetName" <*>
+      obj .:? "CopyTagsToSnapshot" <*>
       obj .:? "DBClusterIdentifier" <*>
       obj .: "DBInstanceClass" <*>
       obj .:? "DBInstanceIdentifier" <*>
@@ -154,6 +157,7 @@
   , _rDSDBInstanceAvailabilityZone = Nothing
   , _rDSDBInstanceBackupRetentionPeriod = Nothing
   , _rDSDBInstanceCharacterSetName = Nothing
+  , _rDSDBInstanceCopyTagsToSnapshot = Nothing
   , _rDSDBInstanceDBClusterIdentifier = Nothing
   , _rDSDBInstanceDBInstanceClass = dBInstanceClassarg
   , _rDSDBInstanceDBInstanceIdentifier = Nothing
@@ -210,6 +214,10 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-charactersetname
 rdsdbiCharacterSetName :: Lens' RDSDBInstance (Maybe (Val Text))
 rdsdbiCharacterSetName = lens _rDSDBInstanceCharacterSetName (\s a -> s { _rDSDBInstanceCharacterSetName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-copytagstosnapshot
+rdsdbiCopyTagsToSnapshot :: Lens' RDSDBInstance (Maybe (Val Bool'))
+rdsdbiCopyTagsToSnapshot = lens _rDSDBInstanceCopyTagsToSnapshot (\s a -> s { _rDSDBInstanceCopyTagsToSnapshot = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-dbclusteridentifier
 rdsdbiDBClusterIdentifier :: Lens' RDSDBInstance (Maybe (Val Text))
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,6 +12,7 @@
 import Data.Text
 
 import Stratosphere.Values
+import Stratosphere.ResourceProperties.RedshiftClusterLoggingProperties
 import Stratosphere.ResourceProperties.Tag
 
 -- | Full data type definition for RedshiftCluster. See 'redshiftCluster' for
@@ -33,6 +34,7 @@
   , _redshiftClusterHsmConfigurationIdentifier :: Maybe (Val Text)
   , _redshiftClusterIamRoles :: Maybe [Val Text]
   , _redshiftClusterKmsKeyId :: Maybe (Val Text)
+  , _redshiftClusterLoggingProperties :: Maybe RedshiftClusterLoggingProperties
   , _redshiftClusterMasterUserPassword :: Val Text
   , _redshiftClusterMasterUsername :: Val Text
   , _redshiftClusterNodeType :: Val Text
@@ -66,6 +68,7 @@
     , ("HsmConfigurationIdentifier" .=) <$> _redshiftClusterHsmConfigurationIdentifier
     , ("IamRoles" .=) <$> _redshiftClusterIamRoles
     , ("KmsKeyId" .=) <$> _redshiftClusterKmsKeyId
+    , ("LoggingProperties" .=) <$> _redshiftClusterLoggingProperties
     , Just ("MasterUserPassword" .= _redshiftClusterMasterUserPassword)
     , Just ("MasterUsername" .= _redshiftClusterMasterUsername)
     , Just ("NodeType" .= _redshiftClusterNodeType)
@@ -98,6 +101,7 @@
       obj .:? "HsmConfigurationIdentifier" <*>
       obj .:? "IamRoles" <*>
       obj .:? "KmsKeyId" <*>
+      obj .:? "LoggingProperties" <*>
       obj .: "MasterUserPassword" <*>
       obj .: "MasterUsername" <*>
       obj .: "NodeType" <*>
@@ -138,6 +142,7 @@
   , _redshiftClusterHsmConfigurationIdentifier = Nothing
   , _redshiftClusterIamRoles = Nothing
   , _redshiftClusterKmsKeyId = Nothing
+  , _redshiftClusterLoggingProperties = Nothing
   , _redshiftClusterMasterUserPassword = masterUserPasswordarg
   , _redshiftClusterMasterUsername = masterUsernamearg
   , _redshiftClusterNodeType = nodeTypearg
@@ -211,6 +216,10 @@
 -- | 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 })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-loggingproperties
+rcLoggingProperties :: Lens' RedshiftCluster (Maybe RedshiftClusterLoggingProperties)
+rcLoggingProperties = lens _redshiftClusterLoggingProperties (\s a -> s { _redshiftClusterLoggingProperties = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-masteruserpassword
 rcMasterUserPassword :: Lens' RedshiftCluster (Val Text)
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.3
+version:        0.4.4
 synopsis:       EDSL for AWS CloudFormation
 description:    EDSL for AWS CloudFormation
 category:       AWS, Cloud
@@ -71,10 +71,14 @@
       Stratosphere.ResourceProperties.ApiGatewayUsagePlanApiStage
       Stratosphere.ResourceProperties.ApiGatewayUsagePlanQuotaSettings
       Stratosphere.ResourceProperties.ApiGatewayUsagePlanThrottleSettings
+      Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification
+      Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyMetricDimension
+      Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyPredefinedMetricSpecification
       Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepAdjustment
       Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
+      Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration
       Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupMetricsCollection
-      Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupNotificationConfigurations
+      Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupNotificationConfiguration
       Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupTagProperty
       Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDevice
       Stratosphere.ResourceProperties.AutoScalingLaunchConfigurationBlockDeviceMapping
@@ -174,7 +178,8 @@
       Stratosphere.ResourceProperties.EC2NetworkAclEntryPortRange
       Stratosphere.ResourceProperties.EC2NetworkInterfaceInstanceIpv6Address
       Stratosphere.ResourceProperties.EC2NetworkInterfacePrivateIpAddressSpecification
-      Stratosphere.ResourceProperties.EC2SecurityGroupRule
+      Stratosphere.ResourceProperties.EC2SecurityGroupEgressProperty
+      Stratosphere.ResourceProperties.EC2SecurityGroupIngressProperty
       Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMapping
       Stratosphere.ResourceProperties.EC2SpotFleetEbsBlockDevice
       Stratosphere.ResourceProperties.EC2SpotFleetGroupIdentifier
@@ -234,7 +239,10 @@
       Stratosphere.ResourceProperties.EMRClusterConfiguration
       Stratosphere.ResourceProperties.EMRClusterEbsBlockDeviceConfig
       Stratosphere.ResourceProperties.EMRClusterEbsConfiguration
+      Stratosphere.ResourceProperties.EMRClusterInstanceFleetConfig
+      Stratosphere.ResourceProperties.EMRClusterInstanceFleetProvisioningSpecifications
       Stratosphere.ResourceProperties.EMRClusterInstanceGroupConfig
+      Stratosphere.ResourceProperties.EMRClusterInstanceTypeConfig
       Stratosphere.ResourceProperties.EMRClusterJobFlowInstancesConfig
       Stratosphere.ResourceProperties.EMRClusterMetricDimension
       Stratosphere.ResourceProperties.EMRClusterPlacementType
@@ -244,7 +252,15 @@
       Stratosphere.ResourceProperties.EMRClusterScalingTrigger
       Stratosphere.ResourceProperties.EMRClusterScriptBootstrapActionConfig
       Stratosphere.ResourceProperties.EMRClusterSimpleScalingPolicyConfiguration
+      Stratosphere.ResourceProperties.EMRClusterSpotProvisioningSpecification
       Stratosphere.ResourceProperties.EMRClusterVolumeSpecification
+      Stratosphere.ResourceProperties.EMRInstanceFleetConfigConfiguration
+      Stratosphere.ResourceProperties.EMRInstanceFleetConfigEbsBlockDeviceConfig
+      Stratosphere.ResourceProperties.EMRInstanceFleetConfigEbsConfiguration
+      Stratosphere.ResourceProperties.EMRInstanceFleetConfigInstanceFleetProvisioningSpecifications
+      Stratosphere.ResourceProperties.EMRInstanceFleetConfigInstanceTypeConfig
+      Stratosphere.ResourceProperties.EMRInstanceFleetConfigSpotProvisioningSpecification
+      Stratosphere.ResourceProperties.EMRInstanceFleetConfigVolumeSpecification
       Stratosphere.ResourceProperties.EMRInstanceGroupConfigAutoScalingPolicy
       Stratosphere.ResourceProperties.EMRInstanceGroupConfigCloudWatchAlarmDefinition
       Stratosphere.ResourceProperties.EMRInstanceGroupConfigConfiguration
@@ -288,7 +304,11 @@
       Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchDestinationConfiguration
       Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamElasticsearchRetryOptions
       Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamEncryptionConfiguration
+      Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamExtendedS3DestinationConfiguration
       Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamKMSEncryptionConfig
+      Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamProcessingConfiguration
+      Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamProcessor
+      Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamProcessorParameter
       Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamRedshiftDestinationConfiguration
       Stratosphere.ResourceProperties.KinesisFirehoseDeliveryStreamS3DestinationConfiguration
       Stratosphere.ResourceProperties.LambdaFunctionCode
@@ -318,6 +338,7 @@
       Stratosphere.ResourceProperties.RDSDBSecurityGroupIngressProperty
       Stratosphere.ResourceProperties.RDSOptionGroupOptionConfiguration
       Stratosphere.ResourceProperties.RDSOptionGroupOptionSetting
+      Stratosphere.ResourceProperties.RedshiftClusterLoggingProperties
       Stratosphere.ResourceProperties.RedshiftClusterParameterGroupParameter
       Stratosphere.ResourceProperties.Route53HealthCheckAlarmIdentifier
       Stratosphere.ResourceProperties.Route53HealthCheckHealthCheckConfig
@@ -388,12 +409,14 @@
       Stratosphere.Resources.ApiGatewayBasePathMapping
       Stratosphere.Resources.ApiGatewayClientCertificate
       Stratosphere.Resources.ApiGatewayDeployment
+      Stratosphere.Resources.ApiGatewayDomainName
       Stratosphere.Resources.ApiGatewayMethod
       Stratosphere.Resources.ApiGatewayModel
       Stratosphere.Resources.ApiGatewayResource
       Stratosphere.Resources.ApiGatewayRestApi
       Stratosphere.Resources.ApiGatewayStage
       Stratosphere.Resources.ApiGatewayUsagePlan
+      Stratosphere.Resources.ApiGatewayUsagePlanKey
       Stratosphere.Resources.ApplicationAutoScalingScalableTarget
       Stratosphere.Resources.ApplicationAutoScalingScalingPolicy
       Stratosphere.Resources.AutoScalingAutoScalingGroup
@@ -432,6 +455,7 @@
       Stratosphere.Resources.DynamoDBTable
       Stratosphere.Resources.EC2CustomerGateway
       Stratosphere.Resources.EC2DHCPOptions
+      Stratosphere.Resources.EC2EgressOnlyInternetGateway
       Stratosphere.Resources.EC2EIP
       Stratosphere.Resources.EC2EIPAssociation
       Stratosphere.Resources.EC2FlowLog
@@ -443,6 +467,7 @@
       Stratosphere.Resources.EC2NetworkAclEntry
       Stratosphere.Resources.EC2NetworkInterface
       Stratosphere.Resources.EC2NetworkInterfaceAttachment
+      Stratosphere.Resources.EC2NetworkInterfacePermission
       Stratosphere.Resources.EC2PlacementGroup
       Stratosphere.Resources.EC2Route
       Stratosphere.Resources.EC2RouteTable
@@ -454,6 +479,7 @@
       Stratosphere.Resources.EC2SubnetCidrBlock
       Stratosphere.Resources.EC2SubnetNetworkAclAssociation
       Stratosphere.Resources.EC2SubnetRouteTableAssociation
+      Stratosphere.Resources.EC2TrunkInterfaceAssociation
       Stratosphere.Resources.EC2Volume
       Stratosphere.Resources.EC2VolumeAttachment
       Stratosphere.Resources.EC2VPC
@@ -489,6 +515,7 @@
       Stratosphere.Resources.ElasticLoadBalancingV2TargetGroup
       Stratosphere.Resources.ElasticsearchDomain
       Stratosphere.Resources.EMRCluster
+      Stratosphere.Resources.EMRInstanceFleetConfig
       Stratosphere.Resources.EMRInstanceGroupConfig
       Stratosphere.Resources.EMRSecurityConfiguration
       Stratosphere.Resources.EMRStep
