diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Change Log
 
+## 0.21.0
+
+* Update resource specification document to some new unspecified version.
+* Add new `nodejs8.10` to lambda
+
 ## 0.20.0
 
 * Fix name of `AutoScalingRollingUpdatePolicy` `SuspendProcesses` parameter
diff --git a/library-gen/Stratosphere/ResourceProperties/AppSyncDataSourceDynamoDBConfig.hs b/library-gen/Stratosphere/ResourceProperties/AppSyncDataSourceDynamoDBConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppSyncDataSourceDynamoDBConfig.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-dynamodbconfig.html
+
+module Stratosphere.ResourceProperties.AppSyncDataSourceDynamoDBConfig where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppSyncDataSourceDynamoDBConfig. See
+-- 'appSyncDataSourceDynamoDBConfig' for a more convenient constructor.
+data AppSyncDataSourceDynamoDBConfig =
+  AppSyncDataSourceDynamoDBConfig
+  { _appSyncDataSourceDynamoDBConfigAwsRegion :: Val Text
+  , _appSyncDataSourceDynamoDBConfigTableName :: Val Text
+  , _appSyncDataSourceDynamoDBConfigUseCallerCredentials :: Maybe (Val Bool)
+  } deriving (Show, Eq)
+
+instance ToJSON AppSyncDataSourceDynamoDBConfig where
+  toJSON AppSyncDataSourceDynamoDBConfig{..} =
+    object $
+    catMaybes
+    [ (Just . ("AwsRegion",) . toJSON) _appSyncDataSourceDynamoDBConfigAwsRegion
+    , (Just . ("TableName",) . toJSON) _appSyncDataSourceDynamoDBConfigTableName
+    , fmap (("UseCallerCredentials",) . toJSON . fmap Bool') _appSyncDataSourceDynamoDBConfigUseCallerCredentials
+    ]
+
+instance FromJSON AppSyncDataSourceDynamoDBConfig where
+  parseJSON (Object obj) =
+    AppSyncDataSourceDynamoDBConfig <$>
+      (obj .: "AwsRegion") <*>
+      (obj .: "TableName") <*>
+      fmap (fmap (fmap unBool')) (obj .:? "UseCallerCredentials")
+  parseJSON _ = mempty
+
+-- | Constructor for 'AppSyncDataSourceDynamoDBConfig' containing required
+-- fields as arguments.
+appSyncDataSourceDynamoDBConfig
+  :: Val Text -- ^ 'asdsddbcAwsRegion'
+  -> Val Text -- ^ 'asdsddbcTableName'
+  -> AppSyncDataSourceDynamoDBConfig
+appSyncDataSourceDynamoDBConfig awsRegionarg tableNamearg =
+  AppSyncDataSourceDynamoDBConfig
+  { _appSyncDataSourceDynamoDBConfigAwsRegion = awsRegionarg
+  , _appSyncDataSourceDynamoDBConfigTableName = tableNamearg
+  , _appSyncDataSourceDynamoDBConfigUseCallerCredentials = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-dynamodbconfig.html#cfn-appsync-datasource-dynamodbconfig-awsregion
+asdsddbcAwsRegion :: Lens' AppSyncDataSourceDynamoDBConfig (Val Text)
+asdsddbcAwsRegion = lens _appSyncDataSourceDynamoDBConfigAwsRegion (\s a -> s { _appSyncDataSourceDynamoDBConfigAwsRegion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-dynamodbconfig.html#cfn-appsync-datasource-dynamodbconfig-tablename
+asdsddbcTableName :: Lens' AppSyncDataSourceDynamoDBConfig (Val Text)
+asdsddbcTableName = lens _appSyncDataSourceDynamoDBConfigTableName (\s a -> s { _appSyncDataSourceDynamoDBConfigTableName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-dynamodbconfig.html#cfn-appsync-datasource-dynamodbconfig-usecallercredentials
+asdsddbcUseCallerCredentials :: Lens' AppSyncDataSourceDynamoDBConfig (Maybe (Val Bool))
+asdsddbcUseCallerCredentials = lens _appSyncDataSourceDynamoDBConfigUseCallerCredentials (\s a -> s { _appSyncDataSourceDynamoDBConfigUseCallerCredentials = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppSyncDataSourceElasticsearchConfig.hs b/library-gen/Stratosphere/ResourceProperties/AppSyncDataSourceElasticsearchConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppSyncDataSourceElasticsearchConfig.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-elasticsearchconfig.html
+
+module Stratosphere.ResourceProperties.AppSyncDataSourceElasticsearchConfig where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppSyncDataSourceElasticsearchConfig. See
+-- 'appSyncDataSourceElasticsearchConfig' for a more convenient constructor.
+data AppSyncDataSourceElasticsearchConfig =
+  AppSyncDataSourceElasticsearchConfig
+  { _appSyncDataSourceElasticsearchConfigAwsRegion :: Val Text
+  , _appSyncDataSourceElasticsearchConfigEndpoint :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON AppSyncDataSourceElasticsearchConfig where
+  toJSON AppSyncDataSourceElasticsearchConfig{..} =
+    object $
+    catMaybes
+    [ (Just . ("AwsRegion",) . toJSON) _appSyncDataSourceElasticsearchConfigAwsRegion
+    , (Just . ("Endpoint",) . toJSON) _appSyncDataSourceElasticsearchConfigEndpoint
+    ]
+
+instance FromJSON AppSyncDataSourceElasticsearchConfig where
+  parseJSON (Object obj) =
+    AppSyncDataSourceElasticsearchConfig <$>
+      (obj .: "AwsRegion") <*>
+      (obj .: "Endpoint")
+  parseJSON _ = mempty
+
+-- | Constructor for 'AppSyncDataSourceElasticsearchConfig' containing
+-- required fields as arguments.
+appSyncDataSourceElasticsearchConfig
+  :: Val Text -- ^ 'asdsecAwsRegion'
+  -> Val Text -- ^ 'asdsecEndpoint'
+  -> AppSyncDataSourceElasticsearchConfig
+appSyncDataSourceElasticsearchConfig awsRegionarg endpointarg =
+  AppSyncDataSourceElasticsearchConfig
+  { _appSyncDataSourceElasticsearchConfigAwsRegion = awsRegionarg
+  , _appSyncDataSourceElasticsearchConfigEndpoint = endpointarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-elasticsearchconfig.html#cfn-appsync-datasource-elasticsearchconfig-awsregion
+asdsecAwsRegion :: Lens' AppSyncDataSourceElasticsearchConfig (Val Text)
+asdsecAwsRegion = lens _appSyncDataSourceElasticsearchConfigAwsRegion (\s a -> s { _appSyncDataSourceElasticsearchConfigAwsRegion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-elasticsearchconfig.html#cfn-appsync-datasource-elasticsearchconfig-endpoint
+asdsecEndpoint :: Lens' AppSyncDataSourceElasticsearchConfig (Val Text)
+asdsecEndpoint = lens _appSyncDataSourceElasticsearchConfigEndpoint (\s a -> s { _appSyncDataSourceElasticsearchConfigEndpoint = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppSyncDataSourceLambdaConfig.hs b/library-gen/Stratosphere/ResourceProperties/AppSyncDataSourceLambdaConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppSyncDataSourceLambdaConfig.hs
@@ -0,0 +1,44 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-lambdaconfig.html
+
+module Stratosphere.ResourceProperties.AppSyncDataSourceLambdaConfig where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppSyncDataSourceLambdaConfig. See
+-- 'appSyncDataSourceLambdaConfig' for a more convenient constructor.
+data AppSyncDataSourceLambdaConfig =
+  AppSyncDataSourceLambdaConfig
+  { _appSyncDataSourceLambdaConfigLambdaFunctionArn :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON AppSyncDataSourceLambdaConfig where
+  toJSON AppSyncDataSourceLambdaConfig{..} =
+    object $
+    catMaybes
+    [ (Just . ("LambdaFunctionArn",) . toJSON) _appSyncDataSourceLambdaConfigLambdaFunctionArn
+    ]
+
+instance FromJSON AppSyncDataSourceLambdaConfig where
+  parseJSON (Object obj) =
+    AppSyncDataSourceLambdaConfig <$>
+      (obj .: "LambdaFunctionArn")
+  parseJSON _ = mempty
+
+-- | Constructor for 'AppSyncDataSourceLambdaConfig' containing required
+-- fields as arguments.
+appSyncDataSourceLambdaConfig
+  :: Val Text -- ^ 'asdslcLambdaFunctionArn'
+  -> AppSyncDataSourceLambdaConfig
+appSyncDataSourceLambdaConfig lambdaFunctionArnarg =
+  AppSyncDataSourceLambdaConfig
+  { _appSyncDataSourceLambdaConfigLambdaFunctionArn = lambdaFunctionArnarg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-lambdaconfig.html#cfn-appsync-datasource-lambdaconfig-lambdafunctionarn
+asdslcLambdaFunctionArn :: Lens' AppSyncDataSourceLambdaConfig (Val Text)
+asdslcLambdaFunctionArn = lens _appSyncDataSourceLambdaConfigLambdaFunctionArn (\s a -> s { _appSyncDataSourceLambdaConfigLambdaFunctionArn = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppSyncGraphQLApiLogConfig.hs b/library-gen/Stratosphere/ResourceProperties/AppSyncGraphQLApiLogConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppSyncGraphQLApiLogConfig.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-logconfig.html
+
+module Stratosphere.ResourceProperties.AppSyncGraphQLApiLogConfig where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppSyncGraphQLApiLogConfig. See
+-- 'appSyncGraphQLApiLogConfig' for a more convenient constructor.
+data AppSyncGraphQLApiLogConfig =
+  AppSyncGraphQLApiLogConfig
+  { _appSyncGraphQLApiLogConfigCloudWatchLogsRoleArn :: Maybe (Val Text)
+  , _appSyncGraphQLApiLogConfigFieldLogLevel :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON AppSyncGraphQLApiLogConfig where
+  toJSON AppSyncGraphQLApiLogConfig{..} =
+    object $
+    catMaybes
+    [ fmap (("CloudWatchLogsRoleArn",) . toJSON) _appSyncGraphQLApiLogConfigCloudWatchLogsRoleArn
+    , fmap (("FieldLogLevel",) . toJSON) _appSyncGraphQLApiLogConfigFieldLogLevel
+    ]
+
+instance FromJSON AppSyncGraphQLApiLogConfig where
+  parseJSON (Object obj) =
+    AppSyncGraphQLApiLogConfig <$>
+      (obj .:? "CloudWatchLogsRoleArn") <*>
+      (obj .:? "FieldLogLevel")
+  parseJSON _ = mempty
+
+-- | Constructor for 'AppSyncGraphQLApiLogConfig' containing required fields
+-- as arguments.
+appSyncGraphQLApiLogConfig
+  :: AppSyncGraphQLApiLogConfig
+appSyncGraphQLApiLogConfig  =
+  AppSyncGraphQLApiLogConfig
+  { _appSyncGraphQLApiLogConfigCloudWatchLogsRoleArn = Nothing
+  , _appSyncGraphQLApiLogConfigFieldLogLevel = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-logconfig.html#cfn-appsync-graphqlapi-logconfig-cloudwatchlogsrolearn
+asgqlalcCloudWatchLogsRoleArn :: Lens' AppSyncGraphQLApiLogConfig (Maybe (Val Text))
+asgqlalcCloudWatchLogsRoleArn = lens _appSyncGraphQLApiLogConfigCloudWatchLogsRoleArn (\s a -> s { _appSyncGraphQLApiLogConfigCloudWatchLogsRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-logconfig.html#cfn-appsync-graphqlapi-logconfig-fieldloglevel
+asgqlalcFieldLogLevel :: Lens' AppSyncGraphQLApiLogConfig (Maybe (Val Text))
+asgqlalcFieldLogLevel = lens _appSyncGraphQLApiLogConfigFieldLogLevel (\s a -> s { _appSyncGraphQLApiLogConfigFieldLogLevel = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/AppSyncGraphQLApiUserPoolConfig.hs b/library-gen/Stratosphere/ResourceProperties/AppSyncGraphQLApiUserPoolConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/AppSyncGraphQLApiUserPoolConfig.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-userpoolconfig.html
+
+module Stratosphere.ResourceProperties.AppSyncGraphQLApiUserPoolConfig where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppSyncGraphQLApiUserPoolConfig. See
+-- 'appSyncGraphQLApiUserPoolConfig' for a more convenient constructor.
+data AppSyncGraphQLApiUserPoolConfig =
+  AppSyncGraphQLApiUserPoolConfig
+  { _appSyncGraphQLApiUserPoolConfigAppIdClientRegex :: Maybe (Val Text)
+  , _appSyncGraphQLApiUserPoolConfigAwsRegion :: Maybe (Val Text)
+  , _appSyncGraphQLApiUserPoolConfigDefaultAction :: Maybe (Val Text)
+  , _appSyncGraphQLApiUserPoolConfigUserPoolId :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON AppSyncGraphQLApiUserPoolConfig where
+  toJSON AppSyncGraphQLApiUserPoolConfig{..} =
+    object $
+    catMaybes
+    [ fmap (("AppIdClientRegex",) . toJSON) _appSyncGraphQLApiUserPoolConfigAppIdClientRegex
+    , fmap (("AwsRegion",) . toJSON) _appSyncGraphQLApiUserPoolConfigAwsRegion
+    , fmap (("DefaultAction",) . toJSON) _appSyncGraphQLApiUserPoolConfigDefaultAction
+    , fmap (("UserPoolId",) . toJSON) _appSyncGraphQLApiUserPoolConfigUserPoolId
+    ]
+
+instance FromJSON AppSyncGraphQLApiUserPoolConfig where
+  parseJSON (Object obj) =
+    AppSyncGraphQLApiUserPoolConfig <$>
+      (obj .:? "AppIdClientRegex") <*>
+      (obj .:? "AwsRegion") <*>
+      (obj .:? "DefaultAction") <*>
+      (obj .:? "UserPoolId")
+  parseJSON _ = mempty
+
+-- | Constructor for 'AppSyncGraphQLApiUserPoolConfig' containing required
+-- fields as arguments.
+appSyncGraphQLApiUserPoolConfig
+  :: AppSyncGraphQLApiUserPoolConfig
+appSyncGraphQLApiUserPoolConfig  =
+  AppSyncGraphQLApiUserPoolConfig
+  { _appSyncGraphQLApiUserPoolConfigAppIdClientRegex = Nothing
+  , _appSyncGraphQLApiUserPoolConfigAwsRegion = Nothing
+  , _appSyncGraphQLApiUserPoolConfigDefaultAction = Nothing
+  , _appSyncGraphQLApiUserPoolConfigUserPoolId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-userpoolconfig.html#cfn-appsync-graphqlapi-userpoolconfig-appidclientregex
+asgqlaupcAppIdClientRegex :: Lens' AppSyncGraphQLApiUserPoolConfig (Maybe (Val Text))
+asgqlaupcAppIdClientRegex = lens _appSyncGraphQLApiUserPoolConfigAppIdClientRegex (\s a -> s { _appSyncGraphQLApiUserPoolConfigAppIdClientRegex = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-userpoolconfig.html#cfn-appsync-graphqlapi-userpoolconfig-awsregion
+asgqlaupcAwsRegion :: Lens' AppSyncGraphQLApiUserPoolConfig (Maybe (Val Text))
+asgqlaupcAwsRegion = lens _appSyncGraphQLApiUserPoolConfigAwsRegion (\s a -> s { _appSyncGraphQLApiUserPoolConfigAwsRegion = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-userpoolconfig.html#cfn-appsync-graphqlapi-userpoolconfig-defaultaction
+asgqlaupcDefaultAction :: Lens' AppSyncGraphQLApiUserPoolConfig (Maybe (Val Text))
+asgqlaupcDefaultAction = lens _appSyncGraphQLApiUserPoolConfigDefaultAction (\s a -> s { _appSyncGraphQLApiUserPoolConfigDefaultAction = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-graphqlapi-userpoolconfig.html#cfn-appsync-graphqlapi-userpoolconfig-userpoolid
+asgqlaupcUserPoolId :: Lens' AppSyncGraphQLApiUserPoolConfig (Maybe (Val Text))
+asgqlaupcUserPoolId = lens _appSyncGraphQLApiUserPoolConfigUserPoolId (\s a -> s { _appSyncGraphQLApiUserPoolConfigUserPoolId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateBlockDeviceMapping.hs b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateBlockDeviceMapping.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateBlockDeviceMapping.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping.html
+
+module Stratosphere.ResourceProperties.EC2LaunchTemplateBlockDeviceMapping where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.EC2LaunchTemplateEbs
+
+-- | Full data type definition for EC2LaunchTemplateBlockDeviceMapping. See
+-- 'ec2LaunchTemplateBlockDeviceMapping' for a more convenient constructor.
+data EC2LaunchTemplateBlockDeviceMapping =
+  EC2LaunchTemplateBlockDeviceMapping
+  { _eC2LaunchTemplateBlockDeviceMappingDeviceName :: Maybe (Val Text)
+  , _eC2LaunchTemplateBlockDeviceMappingEbs :: Maybe EC2LaunchTemplateEbs
+  , _eC2LaunchTemplateBlockDeviceMappingNoDevice :: Maybe (Val Text)
+  , _eC2LaunchTemplateBlockDeviceMappingVirtualName :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2LaunchTemplateBlockDeviceMapping where
+  toJSON EC2LaunchTemplateBlockDeviceMapping{..} =
+    object $
+    catMaybes
+    [ fmap (("DeviceName",) . toJSON) _eC2LaunchTemplateBlockDeviceMappingDeviceName
+    , fmap (("Ebs",) . toJSON) _eC2LaunchTemplateBlockDeviceMappingEbs
+    , fmap (("NoDevice",) . toJSON) _eC2LaunchTemplateBlockDeviceMappingNoDevice
+    , fmap (("VirtualName",) . toJSON) _eC2LaunchTemplateBlockDeviceMappingVirtualName
+    ]
+
+instance FromJSON EC2LaunchTemplateBlockDeviceMapping where
+  parseJSON (Object obj) =
+    EC2LaunchTemplateBlockDeviceMapping <$>
+      (obj .:? "DeviceName") <*>
+      (obj .:? "Ebs") <*>
+      (obj .:? "NoDevice") <*>
+      (obj .:? "VirtualName")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2LaunchTemplateBlockDeviceMapping' containing required
+-- fields as arguments.
+ec2LaunchTemplateBlockDeviceMapping
+  :: EC2LaunchTemplateBlockDeviceMapping
+ec2LaunchTemplateBlockDeviceMapping  =
+  EC2LaunchTemplateBlockDeviceMapping
+  { _eC2LaunchTemplateBlockDeviceMappingDeviceName = Nothing
+  , _eC2LaunchTemplateBlockDeviceMappingEbs = Nothing
+  , _eC2LaunchTemplateBlockDeviceMappingNoDevice = Nothing
+  , _eC2LaunchTemplateBlockDeviceMappingVirtualName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping.html#cfn-ec2-launchtemplate-blockdevicemapping-devicename
+ecltbdmDeviceName :: Lens' EC2LaunchTemplateBlockDeviceMapping (Maybe (Val Text))
+ecltbdmDeviceName = lens _eC2LaunchTemplateBlockDeviceMappingDeviceName (\s a -> s { _eC2LaunchTemplateBlockDeviceMappingDeviceName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping.html#cfn-ec2-launchtemplate-blockdevicemapping-ebs
+ecltbdmEbs :: Lens' EC2LaunchTemplateBlockDeviceMapping (Maybe EC2LaunchTemplateEbs)
+ecltbdmEbs = lens _eC2LaunchTemplateBlockDeviceMappingEbs (\s a -> s { _eC2LaunchTemplateBlockDeviceMappingEbs = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping.html#cfn-ec2-launchtemplate-blockdevicemapping-nodevice
+ecltbdmNoDevice :: Lens' EC2LaunchTemplateBlockDeviceMapping (Maybe (Val Text))
+ecltbdmNoDevice = lens _eC2LaunchTemplateBlockDeviceMappingNoDevice (\s a -> s { _eC2LaunchTemplateBlockDeviceMappingNoDevice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping.html#cfn-ec2-launchtemplate-blockdevicemapping-virtualname
+ecltbdmVirtualName :: Lens' EC2LaunchTemplateBlockDeviceMapping (Maybe (Val Text))
+ecltbdmVirtualName = lens _eC2LaunchTemplateBlockDeviceMappingVirtualName (\s a -> s { _eC2LaunchTemplateBlockDeviceMappingVirtualName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateCreditSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateCreditSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateCreditSpecification.hs
@@ -0,0 +1,43 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-creditspecification.html
+
+module Stratosphere.ResourceProperties.EC2LaunchTemplateCreditSpecification where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for EC2LaunchTemplateCreditSpecification. See
+-- 'ec2LaunchTemplateCreditSpecification' for a more convenient constructor.
+data EC2LaunchTemplateCreditSpecification =
+  EC2LaunchTemplateCreditSpecification
+  { _eC2LaunchTemplateCreditSpecificationCpuCredits :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2LaunchTemplateCreditSpecification where
+  toJSON EC2LaunchTemplateCreditSpecification{..} =
+    object $
+    catMaybes
+    [ fmap (("CpuCredits",) . toJSON) _eC2LaunchTemplateCreditSpecificationCpuCredits
+    ]
+
+instance FromJSON EC2LaunchTemplateCreditSpecification where
+  parseJSON (Object obj) =
+    EC2LaunchTemplateCreditSpecification <$>
+      (obj .:? "CpuCredits")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2LaunchTemplateCreditSpecification' containing
+-- required fields as arguments.
+ec2LaunchTemplateCreditSpecification
+  :: EC2LaunchTemplateCreditSpecification
+ec2LaunchTemplateCreditSpecification  =
+  EC2LaunchTemplateCreditSpecification
+  { _eC2LaunchTemplateCreditSpecificationCpuCredits = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-creditspecification.html#cfn-ec2-launchtemplate-launchtemplatedata-creditspecification-cpucredits
+ecltcsCpuCredits :: Lens' EC2LaunchTemplateCreditSpecification (Maybe (Val Text))
+ecltcsCpuCredits = lens _eC2LaunchTemplateCreditSpecificationCpuCredits (\s a -> s { _eC2LaunchTemplateCreditSpecificationCpuCredits = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateEbs.hs b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateEbs.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateEbs.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping-ebs.html
+
+module Stratosphere.ResourceProperties.EC2LaunchTemplateEbs where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for EC2LaunchTemplateEbs. See
+-- 'ec2LaunchTemplateEbs' for a more convenient constructor.
+data EC2LaunchTemplateEbs =
+  EC2LaunchTemplateEbs
+  { _eC2LaunchTemplateEbsDeleteOnTermination :: Maybe (Val Bool)
+  , _eC2LaunchTemplateEbsEncrypted :: Maybe (Val Bool)
+  , _eC2LaunchTemplateEbsIops :: Maybe (Val Integer)
+  , _eC2LaunchTemplateEbsKmsKeyId :: Maybe (Val Text)
+  , _eC2LaunchTemplateEbsSnapshotId :: Maybe (Val Text)
+  , _eC2LaunchTemplateEbsVolumeSize :: Maybe (Val Integer)
+  , _eC2LaunchTemplateEbsVolumeType :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2LaunchTemplateEbs where
+  toJSON EC2LaunchTemplateEbs{..} =
+    object $
+    catMaybes
+    [ fmap (("DeleteOnTermination",) . toJSON . fmap Bool') _eC2LaunchTemplateEbsDeleteOnTermination
+    , fmap (("Encrypted",) . toJSON . fmap Bool') _eC2LaunchTemplateEbsEncrypted
+    , fmap (("Iops",) . toJSON . fmap Integer') _eC2LaunchTemplateEbsIops
+    , fmap (("KmsKeyId",) . toJSON) _eC2LaunchTemplateEbsKmsKeyId
+    , fmap (("SnapshotId",) . toJSON) _eC2LaunchTemplateEbsSnapshotId
+    , fmap (("VolumeSize",) . toJSON . fmap Integer') _eC2LaunchTemplateEbsVolumeSize
+    , fmap (("VolumeType",) . toJSON) _eC2LaunchTemplateEbsVolumeType
+    ]
+
+instance FromJSON EC2LaunchTemplateEbs where
+  parseJSON (Object obj) =
+    EC2LaunchTemplateEbs <$>
+      fmap (fmap (fmap unBool')) (obj .:? "DeleteOnTermination") <*>
+      fmap (fmap (fmap unBool')) (obj .:? "Encrypted") <*>
+      fmap (fmap (fmap unInteger')) (obj .:? "Iops") <*>
+      (obj .:? "KmsKeyId") <*>
+      (obj .:? "SnapshotId") <*>
+      fmap (fmap (fmap unInteger')) (obj .:? "VolumeSize") <*>
+      (obj .:? "VolumeType")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2LaunchTemplateEbs' containing required fields as
+-- arguments.
+ec2LaunchTemplateEbs
+  :: EC2LaunchTemplateEbs
+ec2LaunchTemplateEbs  =
+  EC2LaunchTemplateEbs
+  { _eC2LaunchTemplateEbsDeleteOnTermination = Nothing
+  , _eC2LaunchTemplateEbsEncrypted = Nothing
+  , _eC2LaunchTemplateEbsIops = Nothing
+  , _eC2LaunchTemplateEbsKmsKeyId = Nothing
+  , _eC2LaunchTemplateEbsSnapshotId = Nothing
+  , _eC2LaunchTemplateEbsVolumeSize = Nothing
+  , _eC2LaunchTemplateEbsVolumeType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping-ebs.html#cfn-ec2-launchtemplate-blockdevicemapping-ebs-deleteontermination
+eclteDeleteOnTermination :: Lens' EC2LaunchTemplateEbs (Maybe (Val Bool))
+eclteDeleteOnTermination = lens _eC2LaunchTemplateEbsDeleteOnTermination (\s a -> s { _eC2LaunchTemplateEbsDeleteOnTermination = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping-ebs.html#cfn-ec2-launchtemplate-blockdevicemapping-ebs-encrypted
+eclteEncrypted :: Lens' EC2LaunchTemplateEbs (Maybe (Val Bool))
+eclteEncrypted = lens _eC2LaunchTemplateEbsEncrypted (\s a -> s { _eC2LaunchTemplateEbsEncrypted = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping-ebs.html#cfn-ec2-launchtemplate-blockdevicemapping-ebs-iops
+eclteIops :: Lens' EC2LaunchTemplateEbs (Maybe (Val Integer))
+eclteIops = lens _eC2LaunchTemplateEbsIops (\s a -> s { _eC2LaunchTemplateEbsIops = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping-ebs.html#cfn-ec2-launchtemplate-blockdevicemapping-ebs-kmskeyid
+eclteKmsKeyId :: Lens' EC2LaunchTemplateEbs (Maybe (Val Text))
+eclteKmsKeyId = lens _eC2LaunchTemplateEbsKmsKeyId (\s a -> s { _eC2LaunchTemplateEbsKmsKeyId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping-ebs.html#cfn-ec2-launchtemplate-blockdevicemapping-ebs-snapshotid
+eclteSnapshotId :: Lens' EC2LaunchTemplateEbs (Maybe (Val Text))
+eclteSnapshotId = lens _eC2LaunchTemplateEbsSnapshotId (\s a -> s { _eC2LaunchTemplateEbsSnapshotId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping-ebs.html#cfn-ec2-launchtemplate-blockdevicemapping-ebs-volumesize
+eclteVolumeSize :: Lens' EC2LaunchTemplateEbs (Maybe (Val Integer))
+eclteVolumeSize = lens _eC2LaunchTemplateEbsVolumeSize (\s a -> s { _eC2LaunchTemplateEbsVolumeSize = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping-ebs.html#cfn-ec2-launchtemplate-blockdevicemapping-ebs-volumetype
+eclteVolumeType :: Lens' EC2LaunchTemplateEbs (Maybe (Val Text))
+eclteVolumeType = lens _eC2LaunchTemplateEbsVolumeType (\s a -> s { _eC2LaunchTemplateEbsVolumeType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateElasticGpuSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateElasticGpuSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateElasticGpuSpecification.hs
@@ -0,0 +1,44 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-elasticgpuspecification.html
+
+module Stratosphere.ResourceProperties.EC2LaunchTemplateElasticGpuSpecification where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for EC2LaunchTemplateElasticGpuSpecification.
+-- See 'ec2LaunchTemplateElasticGpuSpecification' for a more convenient
+-- constructor.
+data EC2LaunchTemplateElasticGpuSpecification =
+  EC2LaunchTemplateElasticGpuSpecification
+  { _eC2LaunchTemplateElasticGpuSpecificationType :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2LaunchTemplateElasticGpuSpecification where
+  toJSON EC2LaunchTemplateElasticGpuSpecification{..} =
+    object $
+    catMaybes
+    [ fmap (("Type",) . toJSON) _eC2LaunchTemplateElasticGpuSpecificationType
+    ]
+
+instance FromJSON EC2LaunchTemplateElasticGpuSpecification where
+  parseJSON (Object obj) =
+    EC2LaunchTemplateElasticGpuSpecification <$>
+      (obj .:? "Type")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2LaunchTemplateElasticGpuSpecification' containing
+-- required fields as arguments.
+ec2LaunchTemplateElasticGpuSpecification
+  :: EC2LaunchTemplateElasticGpuSpecification
+ec2LaunchTemplateElasticGpuSpecification  =
+  EC2LaunchTemplateElasticGpuSpecification
+  { _eC2LaunchTemplateElasticGpuSpecificationType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-elasticgpuspecification.html#cfn-ec2-launchtemplate-elasticgpuspecification-type
+ecltegsType :: Lens' EC2LaunchTemplateElasticGpuSpecification (Maybe (Val Text))
+ecltegsType = lens _eC2LaunchTemplateElasticGpuSpecificationType (\s a -> s { _eC2LaunchTemplateElasticGpuSpecificationType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateIamInstanceProfile.hs b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateIamInstanceProfile.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateIamInstanceProfile.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-iaminstanceprofile.html
+
+module Stratosphere.ResourceProperties.EC2LaunchTemplateIamInstanceProfile where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for EC2LaunchTemplateIamInstanceProfile. See
+-- 'ec2LaunchTemplateIamInstanceProfile' for a more convenient constructor.
+data EC2LaunchTemplateIamInstanceProfile =
+  EC2LaunchTemplateIamInstanceProfile
+  { _eC2LaunchTemplateIamInstanceProfileArn :: Maybe (Val Text)
+  , _eC2LaunchTemplateIamInstanceProfileName :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2LaunchTemplateIamInstanceProfile where
+  toJSON EC2LaunchTemplateIamInstanceProfile{..} =
+    object $
+    catMaybes
+    [ fmap (("Arn",) . toJSON) _eC2LaunchTemplateIamInstanceProfileArn
+    , fmap (("Name",) . toJSON) _eC2LaunchTemplateIamInstanceProfileName
+    ]
+
+instance FromJSON EC2LaunchTemplateIamInstanceProfile where
+  parseJSON (Object obj) =
+    EC2LaunchTemplateIamInstanceProfile <$>
+      (obj .:? "Arn") <*>
+      (obj .:? "Name")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2LaunchTemplateIamInstanceProfile' containing required
+-- fields as arguments.
+ec2LaunchTemplateIamInstanceProfile
+  :: EC2LaunchTemplateIamInstanceProfile
+ec2LaunchTemplateIamInstanceProfile  =
+  EC2LaunchTemplateIamInstanceProfile
+  { _eC2LaunchTemplateIamInstanceProfileArn = Nothing
+  , _eC2LaunchTemplateIamInstanceProfileName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-iaminstanceprofile.html#cfn-ec2-launchtemplate-launchtemplatedata-iaminstanceprofile-arn
+ecltiipArn :: Lens' EC2LaunchTemplateIamInstanceProfile (Maybe (Val Text))
+ecltiipArn = lens _eC2LaunchTemplateIamInstanceProfileArn (\s a -> s { _eC2LaunchTemplateIamInstanceProfileArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-iaminstanceprofile.html#cfn-ec2-launchtemplate-launchtemplatedata-iaminstanceprofile-name
+ecltiipName :: Lens' EC2LaunchTemplateIamInstanceProfile (Maybe (Val Text))
+ecltiipName = lens _eC2LaunchTemplateIamInstanceProfileName (\s a -> s { _eC2LaunchTemplateIamInstanceProfileName = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateInstanceMarketOptions.hs b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateInstanceMarketOptions.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateInstanceMarketOptions.hs
@@ -0,0 +1,52 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-instancemarketoptions.html
+
+module Stratosphere.ResourceProperties.EC2LaunchTemplateInstanceMarketOptions where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.EC2LaunchTemplateSpotOptions
+
+-- | Full data type definition for EC2LaunchTemplateInstanceMarketOptions. See
+-- 'ec2LaunchTemplateInstanceMarketOptions' for a more convenient
+-- constructor.
+data EC2LaunchTemplateInstanceMarketOptions =
+  EC2LaunchTemplateInstanceMarketOptions
+  { _eC2LaunchTemplateInstanceMarketOptionsMarketType :: Maybe (Val Text)
+  , _eC2LaunchTemplateInstanceMarketOptionsSpotOptions :: Maybe EC2LaunchTemplateSpotOptions
+  } deriving (Show, Eq)
+
+instance ToJSON EC2LaunchTemplateInstanceMarketOptions where
+  toJSON EC2LaunchTemplateInstanceMarketOptions{..} =
+    object $
+    catMaybes
+    [ fmap (("MarketType",) . toJSON) _eC2LaunchTemplateInstanceMarketOptionsMarketType
+    , fmap (("SpotOptions",) . toJSON) _eC2LaunchTemplateInstanceMarketOptionsSpotOptions
+    ]
+
+instance FromJSON EC2LaunchTemplateInstanceMarketOptions where
+  parseJSON (Object obj) =
+    EC2LaunchTemplateInstanceMarketOptions <$>
+      (obj .:? "MarketType") <*>
+      (obj .:? "SpotOptions")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2LaunchTemplateInstanceMarketOptions' containing
+-- required fields as arguments.
+ec2LaunchTemplateInstanceMarketOptions
+  :: EC2LaunchTemplateInstanceMarketOptions
+ec2LaunchTemplateInstanceMarketOptions  =
+  EC2LaunchTemplateInstanceMarketOptions
+  { _eC2LaunchTemplateInstanceMarketOptionsMarketType = Nothing
+  , _eC2LaunchTemplateInstanceMarketOptionsSpotOptions = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-instancemarketoptions.html#cfn-ec2-launchtemplate-launchtemplatedata-instancemarketoptions-markettype
+ecltimoMarketType :: Lens' EC2LaunchTemplateInstanceMarketOptions (Maybe (Val Text))
+ecltimoMarketType = lens _eC2LaunchTemplateInstanceMarketOptionsMarketType (\s a -> s { _eC2LaunchTemplateInstanceMarketOptionsMarketType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-instancemarketoptions.html#cfn-ec2-launchtemplate-launchtemplatedata-instancemarketoptions-spotoptions
+ecltimoSpotOptions :: Lens' EC2LaunchTemplateInstanceMarketOptions (Maybe EC2LaunchTemplateSpotOptions)
+ecltimoSpotOptions = lens _eC2LaunchTemplateInstanceMarketOptionsSpotOptions (\s a -> s { _eC2LaunchTemplateInstanceMarketOptionsSpotOptions = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateIpv6Add.hs b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateIpv6Add.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateIpv6Add.hs
@@ -0,0 +1,43 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ipv6add.html
+
+module Stratosphere.ResourceProperties.EC2LaunchTemplateIpv6Add where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for EC2LaunchTemplateIpv6Add. See
+-- 'ec2LaunchTemplateIpv6Add' for a more convenient constructor.
+data EC2LaunchTemplateIpv6Add =
+  EC2LaunchTemplateIpv6Add
+  { _eC2LaunchTemplateIpv6AddIpv6Address :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2LaunchTemplateIpv6Add where
+  toJSON EC2LaunchTemplateIpv6Add{..} =
+    object $
+    catMaybes
+    [ fmap (("Ipv6Address",) . toJSON) _eC2LaunchTemplateIpv6AddIpv6Address
+    ]
+
+instance FromJSON EC2LaunchTemplateIpv6Add where
+  parseJSON (Object obj) =
+    EC2LaunchTemplateIpv6Add <$>
+      (obj .:? "Ipv6Address")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2LaunchTemplateIpv6Add' containing required fields as
+-- arguments.
+ec2LaunchTemplateIpv6Add
+  :: EC2LaunchTemplateIpv6Add
+ec2LaunchTemplateIpv6Add  =
+  EC2LaunchTemplateIpv6Add
+  { _eC2LaunchTemplateIpv6AddIpv6Address = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ipv6add.html#cfn-ec2-launchtemplate-ipv6add-ipv6address
+ecltiaIpv6Address :: Lens' EC2LaunchTemplateIpv6Add (Maybe (Val Text))
+ecltiaIpv6Address = lens _eC2LaunchTemplateIpv6AddIpv6Address (\s a -> s { _eC2LaunchTemplateIpv6AddIpv6Address = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateLaunchTemplateData.hs b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateLaunchTemplateData.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateLaunchTemplateData.hs
@@ -0,0 +1,203 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html
+
+module Stratosphere.ResourceProperties.EC2LaunchTemplateLaunchTemplateData where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.EC2LaunchTemplateBlockDeviceMapping
+import Stratosphere.ResourceProperties.EC2LaunchTemplateCreditSpecification
+import Stratosphere.ResourceProperties.EC2LaunchTemplateElasticGpuSpecification
+import Stratosphere.ResourceProperties.EC2LaunchTemplateIamInstanceProfile
+import Stratosphere.ResourceProperties.EC2LaunchTemplateInstanceMarketOptions
+import Stratosphere.ResourceProperties.EC2LaunchTemplateMonitoring
+import Stratosphere.ResourceProperties.EC2LaunchTemplateNetworkInterface
+import Stratosphere.ResourceProperties.EC2LaunchTemplatePlacement
+import Stratosphere.ResourceProperties.EC2LaunchTemplateTagSpecification
+
+-- | Full data type definition for EC2LaunchTemplateLaunchTemplateData. See
+-- 'ec2LaunchTemplateLaunchTemplateData' for a more convenient constructor.
+data EC2LaunchTemplateLaunchTemplateData =
+  EC2LaunchTemplateLaunchTemplateData
+  { _eC2LaunchTemplateLaunchTemplateDataBlockDeviceMappings :: Maybe [EC2LaunchTemplateBlockDeviceMapping]
+  , _eC2LaunchTemplateLaunchTemplateDataCreditSpecification :: Maybe EC2LaunchTemplateCreditSpecification
+  , _eC2LaunchTemplateLaunchTemplateDataDisableApiTermination :: Maybe (Val Bool)
+  , _eC2LaunchTemplateLaunchTemplateDataEbsOptimized :: Maybe (Val Bool)
+  , _eC2LaunchTemplateLaunchTemplateDataElasticGpuSpecifications :: Maybe [EC2LaunchTemplateElasticGpuSpecification]
+  , _eC2LaunchTemplateLaunchTemplateDataIamInstanceProfile :: Maybe EC2LaunchTemplateIamInstanceProfile
+  , _eC2LaunchTemplateLaunchTemplateDataImageId :: Maybe (Val Text)
+  , _eC2LaunchTemplateLaunchTemplateDataInstanceInitiatedShutdownBehavior :: Maybe (Val Text)
+  , _eC2LaunchTemplateLaunchTemplateDataInstanceMarketOptions :: Maybe EC2LaunchTemplateInstanceMarketOptions
+  , _eC2LaunchTemplateLaunchTemplateDataInstanceType :: Maybe (Val Text)
+  , _eC2LaunchTemplateLaunchTemplateDataKernelId :: Maybe (Val Text)
+  , _eC2LaunchTemplateLaunchTemplateDataKeyName :: Maybe (Val Text)
+  , _eC2LaunchTemplateLaunchTemplateDataMonitoring :: Maybe EC2LaunchTemplateMonitoring
+  , _eC2LaunchTemplateLaunchTemplateDataNetworkInterfaces :: Maybe [EC2LaunchTemplateNetworkInterface]
+  , _eC2LaunchTemplateLaunchTemplateDataPlacement :: Maybe EC2LaunchTemplatePlacement
+  , _eC2LaunchTemplateLaunchTemplateDataRamDiskId :: Maybe (Val Text)
+  , _eC2LaunchTemplateLaunchTemplateDataSecurityGroupIds :: Maybe (ValList Text)
+  , _eC2LaunchTemplateLaunchTemplateDataSecurityGroups :: Maybe (ValList Text)
+  , _eC2LaunchTemplateLaunchTemplateDataTagSpecifications :: Maybe [EC2LaunchTemplateTagSpecification]
+  , _eC2LaunchTemplateLaunchTemplateDataUserData :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2LaunchTemplateLaunchTemplateData where
+  toJSON EC2LaunchTemplateLaunchTemplateData{..} =
+    object $
+    catMaybes
+    [ fmap (("BlockDeviceMappings",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataBlockDeviceMappings
+    , fmap (("CreditSpecification",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataCreditSpecification
+    , fmap (("DisableApiTermination",) . toJSON . fmap Bool') _eC2LaunchTemplateLaunchTemplateDataDisableApiTermination
+    , fmap (("EbsOptimized",) . toJSON . fmap Bool') _eC2LaunchTemplateLaunchTemplateDataEbsOptimized
+    , fmap (("ElasticGpuSpecifications",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataElasticGpuSpecifications
+    , fmap (("IamInstanceProfile",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataIamInstanceProfile
+    , fmap (("ImageId",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataImageId
+    , fmap (("InstanceInitiatedShutdownBehavior",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataInstanceInitiatedShutdownBehavior
+    , fmap (("InstanceMarketOptions",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataInstanceMarketOptions
+    , fmap (("InstanceType",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataInstanceType
+    , fmap (("KernelId",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataKernelId
+    , fmap (("KeyName",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataKeyName
+    , fmap (("Monitoring",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataMonitoring
+    , fmap (("NetworkInterfaces",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataNetworkInterfaces
+    , fmap (("Placement",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataPlacement
+    , fmap (("RamDiskId",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataRamDiskId
+    , fmap (("SecurityGroupIds",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataSecurityGroupIds
+    , fmap (("SecurityGroups",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataSecurityGroups
+    , fmap (("TagSpecifications",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataTagSpecifications
+    , fmap (("UserData",) . toJSON) _eC2LaunchTemplateLaunchTemplateDataUserData
+    ]
+
+instance FromJSON EC2LaunchTemplateLaunchTemplateData where
+  parseJSON (Object obj) =
+    EC2LaunchTemplateLaunchTemplateData <$>
+      (obj .:? "BlockDeviceMappings") <*>
+      (obj .:? "CreditSpecification") <*>
+      fmap (fmap (fmap unBool')) (obj .:? "DisableApiTermination") <*>
+      fmap (fmap (fmap unBool')) (obj .:? "EbsOptimized") <*>
+      (obj .:? "ElasticGpuSpecifications") <*>
+      (obj .:? "IamInstanceProfile") <*>
+      (obj .:? "ImageId") <*>
+      (obj .:? "InstanceInitiatedShutdownBehavior") <*>
+      (obj .:? "InstanceMarketOptions") <*>
+      (obj .:? "InstanceType") <*>
+      (obj .:? "KernelId") <*>
+      (obj .:? "KeyName") <*>
+      (obj .:? "Monitoring") <*>
+      (obj .:? "NetworkInterfaces") <*>
+      (obj .:? "Placement") <*>
+      (obj .:? "RamDiskId") <*>
+      (obj .:? "SecurityGroupIds") <*>
+      (obj .:? "SecurityGroups") <*>
+      (obj .:? "TagSpecifications") <*>
+      (obj .:? "UserData")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2LaunchTemplateLaunchTemplateData' containing required
+-- fields as arguments.
+ec2LaunchTemplateLaunchTemplateData
+  :: EC2LaunchTemplateLaunchTemplateData
+ec2LaunchTemplateLaunchTemplateData  =
+  EC2LaunchTemplateLaunchTemplateData
+  { _eC2LaunchTemplateLaunchTemplateDataBlockDeviceMappings = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataCreditSpecification = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataDisableApiTermination = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataEbsOptimized = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataElasticGpuSpecifications = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataIamInstanceProfile = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataImageId = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataInstanceInitiatedShutdownBehavior = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataInstanceMarketOptions = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataInstanceType = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataKernelId = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataKeyName = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataMonitoring = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataNetworkInterfaces = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataPlacement = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataRamDiskId = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataSecurityGroupIds = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataSecurityGroups = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataTagSpecifications = Nothing
+  , _eC2LaunchTemplateLaunchTemplateDataUserData = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-blockdevicemappings
+ecltltdBlockDeviceMappings :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe [EC2LaunchTemplateBlockDeviceMapping])
+ecltltdBlockDeviceMappings = lens _eC2LaunchTemplateLaunchTemplateDataBlockDeviceMappings (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataBlockDeviceMappings = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-creditspecification
+ecltltdCreditSpecification :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe EC2LaunchTemplateCreditSpecification)
+ecltltdCreditSpecification = lens _eC2LaunchTemplateLaunchTemplateDataCreditSpecification (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataCreditSpecification = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-disableapitermination
+ecltltdDisableApiTermination :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe (Val Bool))
+ecltltdDisableApiTermination = lens _eC2LaunchTemplateLaunchTemplateDataDisableApiTermination (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataDisableApiTermination = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-ebsoptimized
+ecltltdEbsOptimized :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe (Val Bool))
+ecltltdEbsOptimized = lens _eC2LaunchTemplateLaunchTemplateDataEbsOptimized (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataEbsOptimized = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-elasticgpuspecifications
+ecltltdElasticGpuSpecifications :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe [EC2LaunchTemplateElasticGpuSpecification])
+ecltltdElasticGpuSpecifications = lens _eC2LaunchTemplateLaunchTemplateDataElasticGpuSpecifications (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataElasticGpuSpecifications = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-iaminstanceprofile
+ecltltdIamInstanceProfile :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe EC2LaunchTemplateIamInstanceProfile)
+ecltltdIamInstanceProfile = lens _eC2LaunchTemplateLaunchTemplateDataIamInstanceProfile (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataIamInstanceProfile = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-imageid
+ecltltdImageId :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe (Val Text))
+ecltltdImageId = lens _eC2LaunchTemplateLaunchTemplateDataImageId (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataImageId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-instanceinitiatedshutdownbehavior
+ecltltdInstanceInitiatedShutdownBehavior :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe (Val Text))
+ecltltdInstanceInitiatedShutdownBehavior = lens _eC2LaunchTemplateLaunchTemplateDataInstanceInitiatedShutdownBehavior (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataInstanceInitiatedShutdownBehavior = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-instancemarketoptions
+ecltltdInstanceMarketOptions :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe EC2LaunchTemplateInstanceMarketOptions)
+ecltltdInstanceMarketOptions = lens _eC2LaunchTemplateLaunchTemplateDataInstanceMarketOptions (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataInstanceMarketOptions = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-instancetype
+ecltltdInstanceType :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe (Val Text))
+ecltltdInstanceType = lens _eC2LaunchTemplateLaunchTemplateDataInstanceType (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataInstanceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-kernelid
+ecltltdKernelId :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe (Val Text))
+ecltltdKernelId = lens _eC2LaunchTemplateLaunchTemplateDataKernelId (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataKernelId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-keyname
+ecltltdKeyName :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe (Val Text))
+ecltltdKeyName = lens _eC2LaunchTemplateLaunchTemplateDataKeyName (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataKeyName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-monitoring
+ecltltdMonitoring :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe EC2LaunchTemplateMonitoring)
+ecltltdMonitoring = lens _eC2LaunchTemplateLaunchTemplateDataMonitoring (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataMonitoring = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-networkinterfaces
+ecltltdNetworkInterfaces :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe [EC2LaunchTemplateNetworkInterface])
+ecltltdNetworkInterfaces = lens _eC2LaunchTemplateLaunchTemplateDataNetworkInterfaces (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataNetworkInterfaces = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-placement
+ecltltdPlacement :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe EC2LaunchTemplatePlacement)
+ecltltdPlacement = lens _eC2LaunchTemplateLaunchTemplateDataPlacement (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataPlacement = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-ramdiskid
+ecltltdRamDiskId :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe (Val Text))
+ecltltdRamDiskId = lens _eC2LaunchTemplateLaunchTemplateDataRamDiskId (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataRamDiskId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-securitygroupids
+ecltltdSecurityGroupIds :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe (ValList Text))
+ecltltdSecurityGroupIds = lens _eC2LaunchTemplateLaunchTemplateDataSecurityGroupIds (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataSecurityGroupIds = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-securitygroups
+ecltltdSecurityGroups :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe (ValList Text))
+ecltltdSecurityGroups = lens _eC2LaunchTemplateLaunchTemplateDataSecurityGroups (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataSecurityGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-tagspecifications
+ecltltdTagSpecifications :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe [EC2LaunchTemplateTagSpecification])
+ecltltdTagSpecifications = lens _eC2LaunchTemplateLaunchTemplateDataTagSpecifications (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataTagSpecifications = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-userdata
+ecltltdUserData :: Lens' EC2LaunchTemplateLaunchTemplateData (Maybe (Val Text))
+ecltltdUserData = lens _eC2LaunchTemplateLaunchTemplateDataUserData (\s a -> s { _eC2LaunchTemplateLaunchTemplateDataUserData = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateMonitoring.hs b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateMonitoring.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateMonitoring.hs
@@ -0,0 +1,43 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-monitoring.html
+
+module Stratosphere.ResourceProperties.EC2LaunchTemplateMonitoring where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for EC2LaunchTemplateMonitoring. See
+-- 'ec2LaunchTemplateMonitoring' for a more convenient constructor.
+data EC2LaunchTemplateMonitoring =
+  EC2LaunchTemplateMonitoring
+  { _eC2LaunchTemplateMonitoringEnabled :: Maybe (Val Bool)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2LaunchTemplateMonitoring where
+  toJSON EC2LaunchTemplateMonitoring{..} =
+    object $
+    catMaybes
+    [ fmap (("Enabled",) . toJSON . fmap Bool') _eC2LaunchTemplateMonitoringEnabled
+    ]
+
+instance FromJSON EC2LaunchTemplateMonitoring where
+  parseJSON (Object obj) =
+    EC2LaunchTemplateMonitoring <$>
+      fmap (fmap (fmap unBool')) (obj .:? "Enabled")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2LaunchTemplateMonitoring' containing required fields
+-- as arguments.
+ec2LaunchTemplateMonitoring
+  :: EC2LaunchTemplateMonitoring
+ec2LaunchTemplateMonitoring  =
+  EC2LaunchTemplateMonitoring
+  { _eC2LaunchTemplateMonitoringEnabled = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-monitoring.html#cfn-ec2-launchtemplate-launchtemplatedata-monitoring-enabled
+ecltmEnabled :: Lens' EC2LaunchTemplateMonitoring (Maybe (Val Bool))
+ecltmEnabled = lens _eC2LaunchTemplateMonitoringEnabled (\s a -> s { _eC2LaunchTemplateMonitoringEnabled = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateNetworkInterface.hs b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateNetworkInterface.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateNetworkInterface.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html
+
+module Stratosphere.ResourceProperties.EC2LaunchTemplateNetworkInterface where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.EC2LaunchTemplateIpv6Add
+import Stratosphere.ResourceProperties.EC2LaunchTemplatePrivateIpAdd
+
+-- | Full data type definition for EC2LaunchTemplateNetworkInterface. See
+-- 'ec2LaunchTemplateNetworkInterface' for a more convenient constructor.
+data EC2LaunchTemplateNetworkInterface =
+  EC2LaunchTemplateNetworkInterface
+  { _eC2LaunchTemplateNetworkInterfaceAssociatePublicIpAddress :: Maybe (Val Bool)
+  , _eC2LaunchTemplateNetworkInterfaceDeleteOnTermination :: Maybe (Val Bool)
+  , _eC2LaunchTemplateNetworkInterfaceDescription :: Maybe (Val Text)
+  , _eC2LaunchTemplateNetworkInterfaceDeviceIndex :: Maybe (Val Integer)
+  , _eC2LaunchTemplateNetworkInterfaceGroups :: Maybe (ValList Text)
+  , _eC2LaunchTemplateNetworkInterfaceIpv6AddressCount :: Maybe (Val Integer)
+  , _eC2LaunchTemplateNetworkInterfaceIpv6Addresses :: Maybe [EC2LaunchTemplateIpv6Add]
+  , _eC2LaunchTemplateNetworkInterfaceNetworkInterfaceId :: Maybe (Val Text)
+  , _eC2LaunchTemplateNetworkInterfacePrivateIpAddress :: Maybe (Val Text)
+  , _eC2LaunchTemplateNetworkInterfacePrivateIpAddresses :: Maybe [EC2LaunchTemplatePrivateIpAdd]
+  , _eC2LaunchTemplateNetworkInterfaceSecondaryPrivateIpAddressCount :: Maybe (Val Integer)
+  , _eC2LaunchTemplateNetworkInterfaceSubnetId :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2LaunchTemplateNetworkInterface where
+  toJSON EC2LaunchTemplateNetworkInterface{..} =
+    object $
+    catMaybes
+    [ fmap (("AssociatePublicIpAddress",) . toJSON . fmap Bool') _eC2LaunchTemplateNetworkInterfaceAssociatePublicIpAddress
+    , fmap (("DeleteOnTermination",) . toJSON . fmap Bool') _eC2LaunchTemplateNetworkInterfaceDeleteOnTermination
+    , fmap (("Description",) . toJSON) _eC2LaunchTemplateNetworkInterfaceDescription
+    , fmap (("DeviceIndex",) . toJSON . fmap Integer') _eC2LaunchTemplateNetworkInterfaceDeviceIndex
+    , fmap (("Groups",) . toJSON) _eC2LaunchTemplateNetworkInterfaceGroups
+    , fmap (("Ipv6AddressCount",) . toJSON . fmap Integer') _eC2LaunchTemplateNetworkInterfaceIpv6AddressCount
+    , fmap (("Ipv6Addresses",) . toJSON) _eC2LaunchTemplateNetworkInterfaceIpv6Addresses
+    , fmap (("NetworkInterfaceId",) . toJSON) _eC2LaunchTemplateNetworkInterfaceNetworkInterfaceId
+    , fmap (("PrivateIpAddress",) . toJSON) _eC2LaunchTemplateNetworkInterfacePrivateIpAddress
+    , fmap (("PrivateIpAddresses",) . toJSON) _eC2LaunchTemplateNetworkInterfacePrivateIpAddresses
+    , fmap (("SecondaryPrivateIpAddressCount",) . toJSON . fmap Integer') _eC2LaunchTemplateNetworkInterfaceSecondaryPrivateIpAddressCount
+    , fmap (("SubnetId",) . toJSON) _eC2LaunchTemplateNetworkInterfaceSubnetId
+    ]
+
+instance FromJSON EC2LaunchTemplateNetworkInterface where
+  parseJSON (Object obj) =
+    EC2LaunchTemplateNetworkInterface <$>
+      fmap (fmap (fmap unBool')) (obj .:? "AssociatePublicIpAddress") <*>
+      fmap (fmap (fmap unBool')) (obj .:? "DeleteOnTermination") <*>
+      (obj .:? "Description") <*>
+      fmap (fmap (fmap unInteger')) (obj .:? "DeviceIndex") <*>
+      (obj .:? "Groups") <*>
+      fmap (fmap (fmap unInteger')) (obj .:? "Ipv6AddressCount") <*>
+      (obj .:? "Ipv6Addresses") <*>
+      (obj .:? "NetworkInterfaceId") <*>
+      (obj .:? "PrivateIpAddress") <*>
+      (obj .:? "PrivateIpAddresses") <*>
+      fmap (fmap (fmap unInteger')) (obj .:? "SecondaryPrivateIpAddressCount") <*>
+      (obj .:? "SubnetId")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2LaunchTemplateNetworkInterface' containing required
+-- fields as arguments.
+ec2LaunchTemplateNetworkInterface
+  :: EC2LaunchTemplateNetworkInterface
+ec2LaunchTemplateNetworkInterface  =
+  EC2LaunchTemplateNetworkInterface
+  { _eC2LaunchTemplateNetworkInterfaceAssociatePublicIpAddress = Nothing
+  , _eC2LaunchTemplateNetworkInterfaceDeleteOnTermination = Nothing
+  , _eC2LaunchTemplateNetworkInterfaceDescription = Nothing
+  , _eC2LaunchTemplateNetworkInterfaceDeviceIndex = Nothing
+  , _eC2LaunchTemplateNetworkInterfaceGroups = Nothing
+  , _eC2LaunchTemplateNetworkInterfaceIpv6AddressCount = Nothing
+  , _eC2LaunchTemplateNetworkInterfaceIpv6Addresses = Nothing
+  , _eC2LaunchTemplateNetworkInterfaceNetworkInterfaceId = Nothing
+  , _eC2LaunchTemplateNetworkInterfacePrivateIpAddress = Nothing
+  , _eC2LaunchTemplateNetworkInterfacePrivateIpAddresses = Nothing
+  , _eC2LaunchTemplateNetworkInterfaceSecondaryPrivateIpAddressCount = Nothing
+  , _eC2LaunchTemplateNetworkInterfaceSubnetId = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-associatepublicipaddress
+ecltniAssociatePublicIpAddress :: Lens' EC2LaunchTemplateNetworkInterface (Maybe (Val Bool))
+ecltniAssociatePublicIpAddress = lens _eC2LaunchTemplateNetworkInterfaceAssociatePublicIpAddress (\s a -> s { _eC2LaunchTemplateNetworkInterfaceAssociatePublicIpAddress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-deleteontermination
+ecltniDeleteOnTermination :: Lens' EC2LaunchTemplateNetworkInterface (Maybe (Val Bool))
+ecltniDeleteOnTermination = lens _eC2LaunchTemplateNetworkInterfaceDeleteOnTermination (\s a -> s { _eC2LaunchTemplateNetworkInterfaceDeleteOnTermination = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-description
+ecltniDescription :: Lens' EC2LaunchTemplateNetworkInterface (Maybe (Val Text))
+ecltniDescription = lens _eC2LaunchTemplateNetworkInterfaceDescription (\s a -> s { _eC2LaunchTemplateNetworkInterfaceDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-deviceindex
+ecltniDeviceIndex :: Lens' EC2LaunchTemplateNetworkInterface (Maybe (Val Integer))
+ecltniDeviceIndex = lens _eC2LaunchTemplateNetworkInterfaceDeviceIndex (\s a -> s { _eC2LaunchTemplateNetworkInterfaceDeviceIndex = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-groups
+ecltniGroups :: Lens' EC2LaunchTemplateNetworkInterface (Maybe (ValList Text))
+ecltniGroups = lens _eC2LaunchTemplateNetworkInterfaceGroups (\s a -> s { _eC2LaunchTemplateNetworkInterfaceGroups = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-ipv6addresscount
+ecltniIpv6AddressCount :: Lens' EC2LaunchTemplateNetworkInterface (Maybe (Val Integer))
+ecltniIpv6AddressCount = lens _eC2LaunchTemplateNetworkInterfaceIpv6AddressCount (\s a -> s { _eC2LaunchTemplateNetworkInterfaceIpv6AddressCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-ipv6addresses
+ecltniIpv6Addresses :: Lens' EC2LaunchTemplateNetworkInterface (Maybe [EC2LaunchTemplateIpv6Add])
+ecltniIpv6Addresses = lens _eC2LaunchTemplateNetworkInterfaceIpv6Addresses (\s a -> s { _eC2LaunchTemplateNetworkInterfaceIpv6Addresses = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-networkinterfaceid
+ecltniNetworkInterfaceId :: Lens' EC2LaunchTemplateNetworkInterface (Maybe (Val Text))
+ecltniNetworkInterfaceId = lens _eC2LaunchTemplateNetworkInterfaceNetworkInterfaceId (\s a -> s { _eC2LaunchTemplateNetworkInterfaceNetworkInterfaceId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-privateipaddress
+ecltniPrivateIpAddress :: Lens' EC2LaunchTemplateNetworkInterface (Maybe (Val Text))
+ecltniPrivateIpAddress = lens _eC2LaunchTemplateNetworkInterfacePrivateIpAddress (\s a -> s { _eC2LaunchTemplateNetworkInterfacePrivateIpAddress = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-privateipaddresses
+ecltniPrivateIpAddresses :: Lens' EC2LaunchTemplateNetworkInterface (Maybe [EC2LaunchTemplatePrivateIpAdd])
+ecltniPrivateIpAddresses = lens _eC2LaunchTemplateNetworkInterfacePrivateIpAddresses (\s a -> s { _eC2LaunchTemplateNetworkInterfacePrivateIpAddresses = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-secondaryprivateipaddresscount
+ecltniSecondaryPrivateIpAddressCount :: Lens' EC2LaunchTemplateNetworkInterface (Maybe (Val Integer))
+ecltniSecondaryPrivateIpAddressCount = lens _eC2LaunchTemplateNetworkInterfaceSecondaryPrivateIpAddressCount (\s a -> s { _eC2LaunchTemplateNetworkInterfaceSecondaryPrivateIpAddressCount = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-subnetid
+ecltniSubnetId :: Lens' EC2LaunchTemplateNetworkInterface (Maybe (Val Text))
+ecltniSubnetId = lens _eC2LaunchTemplateNetworkInterfaceSubnetId (\s a -> s { _eC2LaunchTemplateNetworkInterfaceSubnetId = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplatePlacement.hs b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplatePlacement.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplatePlacement.hs
@@ -0,0 +1,75 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-placement.html
+
+module Stratosphere.ResourceProperties.EC2LaunchTemplatePlacement where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for EC2LaunchTemplatePlacement. See
+-- 'ec2LaunchTemplatePlacement' for a more convenient constructor.
+data EC2LaunchTemplatePlacement =
+  EC2LaunchTemplatePlacement
+  { _eC2LaunchTemplatePlacementAffinity :: Maybe (Val Text)
+  , _eC2LaunchTemplatePlacementAvailabilityZone :: Maybe (Val Text)
+  , _eC2LaunchTemplatePlacementGroupName :: Maybe (Val Text)
+  , _eC2LaunchTemplatePlacementHostId :: Maybe (Val Text)
+  , _eC2LaunchTemplatePlacementTenancy :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2LaunchTemplatePlacement where
+  toJSON EC2LaunchTemplatePlacement{..} =
+    object $
+    catMaybes
+    [ fmap (("Affinity",) . toJSON) _eC2LaunchTemplatePlacementAffinity
+    , fmap (("AvailabilityZone",) . toJSON) _eC2LaunchTemplatePlacementAvailabilityZone
+    , fmap (("GroupName",) . toJSON) _eC2LaunchTemplatePlacementGroupName
+    , fmap (("HostId",) . toJSON) _eC2LaunchTemplatePlacementHostId
+    , fmap (("Tenancy",) . toJSON) _eC2LaunchTemplatePlacementTenancy
+    ]
+
+instance FromJSON EC2LaunchTemplatePlacement where
+  parseJSON (Object obj) =
+    EC2LaunchTemplatePlacement <$>
+      (obj .:? "Affinity") <*>
+      (obj .:? "AvailabilityZone") <*>
+      (obj .:? "GroupName") <*>
+      (obj .:? "HostId") <*>
+      (obj .:? "Tenancy")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2LaunchTemplatePlacement' containing required fields
+-- as arguments.
+ec2LaunchTemplatePlacement
+  :: EC2LaunchTemplatePlacement
+ec2LaunchTemplatePlacement  =
+  EC2LaunchTemplatePlacement
+  { _eC2LaunchTemplatePlacementAffinity = Nothing
+  , _eC2LaunchTemplatePlacementAvailabilityZone = Nothing
+  , _eC2LaunchTemplatePlacementGroupName = Nothing
+  , _eC2LaunchTemplatePlacementHostId = Nothing
+  , _eC2LaunchTemplatePlacementTenancy = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-placement.html#cfn-ec2-launchtemplate-launchtemplatedata-placement-affinity
+ecltpAffinity :: Lens' EC2LaunchTemplatePlacement (Maybe (Val Text))
+ecltpAffinity = lens _eC2LaunchTemplatePlacementAffinity (\s a -> s { _eC2LaunchTemplatePlacementAffinity = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-placement.html#cfn-ec2-launchtemplate-launchtemplatedata-placement-availabilityzone
+ecltpAvailabilityZone :: Lens' EC2LaunchTemplatePlacement (Maybe (Val Text))
+ecltpAvailabilityZone = lens _eC2LaunchTemplatePlacementAvailabilityZone (\s a -> s { _eC2LaunchTemplatePlacementAvailabilityZone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-placement.html#cfn-ec2-launchtemplate-launchtemplatedata-placement-groupname
+ecltpGroupName :: Lens' EC2LaunchTemplatePlacement (Maybe (Val Text))
+ecltpGroupName = lens _eC2LaunchTemplatePlacementGroupName (\s a -> s { _eC2LaunchTemplatePlacementGroupName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-placement.html#cfn-ec2-launchtemplate-launchtemplatedata-placement-hostid
+ecltpHostId :: Lens' EC2LaunchTemplatePlacement (Maybe (Val Text))
+ecltpHostId = lens _eC2LaunchTemplatePlacementHostId (\s a -> s { _eC2LaunchTemplatePlacementHostId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-placement.html#cfn-ec2-launchtemplate-launchtemplatedata-placement-tenancy
+ecltpTenancy :: Lens' EC2LaunchTemplatePlacement (Maybe (Val Text))
+ecltpTenancy = lens _eC2LaunchTemplatePlacementTenancy (\s a -> s { _eC2LaunchTemplatePlacementTenancy = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplatePrivateIpAdd.hs b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplatePrivateIpAdd.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplatePrivateIpAdd.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-privateipadd.html
+
+module Stratosphere.ResourceProperties.EC2LaunchTemplatePrivateIpAdd where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for EC2LaunchTemplatePrivateIpAdd. See
+-- 'ec2LaunchTemplatePrivateIpAdd' for a more convenient constructor.
+data EC2LaunchTemplatePrivateIpAdd =
+  EC2LaunchTemplatePrivateIpAdd
+  { _eC2LaunchTemplatePrivateIpAddPrimary :: Maybe (Val Bool)
+  , _eC2LaunchTemplatePrivateIpAddPrivateIpAddress :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2LaunchTemplatePrivateIpAdd where
+  toJSON EC2LaunchTemplatePrivateIpAdd{..} =
+    object $
+    catMaybes
+    [ fmap (("Primary",) . toJSON . fmap Bool') _eC2LaunchTemplatePrivateIpAddPrimary
+    , fmap (("PrivateIpAddress",) . toJSON) _eC2LaunchTemplatePrivateIpAddPrivateIpAddress
+    ]
+
+instance FromJSON EC2LaunchTemplatePrivateIpAdd where
+  parseJSON (Object obj) =
+    EC2LaunchTemplatePrivateIpAdd <$>
+      fmap (fmap (fmap unBool')) (obj .:? "Primary") <*>
+      (obj .:? "PrivateIpAddress")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2LaunchTemplatePrivateIpAdd' containing required
+-- fields as arguments.
+ec2LaunchTemplatePrivateIpAdd
+  :: EC2LaunchTemplatePrivateIpAdd
+ec2LaunchTemplatePrivateIpAdd  =
+  EC2LaunchTemplatePrivateIpAdd
+  { _eC2LaunchTemplatePrivateIpAddPrimary = Nothing
+  , _eC2LaunchTemplatePrivateIpAddPrivateIpAddress = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-privateipadd.html#cfn-ec2-launchtemplate-privateipadd-primary
+ecltpiaPrimary :: Lens' EC2LaunchTemplatePrivateIpAdd (Maybe (Val Bool))
+ecltpiaPrimary = lens _eC2LaunchTemplatePrivateIpAddPrimary (\s a -> s { _eC2LaunchTemplatePrivateIpAddPrimary = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-privateipadd.html#cfn-ec2-launchtemplate-privateipadd-privateipaddress
+ecltpiaPrivateIpAddress :: Lens' EC2LaunchTemplatePrivateIpAdd (Maybe (Val Text))
+ecltpiaPrivateIpAddress = lens _eC2LaunchTemplatePrivateIpAddPrivateIpAddress (\s a -> s { _eC2LaunchTemplatePrivateIpAddPrivateIpAddress = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateSpotOptions.hs b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateSpotOptions.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateSpotOptions.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-instancemarketoptions-spotoptions.html
+
+module Stratosphere.ResourceProperties.EC2LaunchTemplateSpotOptions where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for EC2LaunchTemplateSpotOptions. See
+-- 'ec2LaunchTemplateSpotOptions' for a more convenient constructor.
+data EC2LaunchTemplateSpotOptions =
+  EC2LaunchTemplateSpotOptions
+  { _eC2LaunchTemplateSpotOptionsInstanceInterruptionBehavior :: Maybe (Val Text)
+  , _eC2LaunchTemplateSpotOptionsMaxPrice :: Maybe (Val Text)
+  , _eC2LaunchTemplateSpotOptionsSpotInstanceType :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2LaunchTemplateSpotOptions where
+  toJSON EC2LaunchTemplateSpotOptions{..} =
+    object $
+    catMaybes
+    [ fmap (("InstanceInterruptionBehavior",) . toJSON) _eC2LaunchTemplateSpotOptionsInstanceInterruptionBehavior
+    , fmap (("MaxPrice",) . toJSON) _eC2LaunchTemplateSpotOptionsMaxPrice
+    , fmap (("SpotInstanceType",) . toJSON) _eC2LaunchTemplateSpotOptionsSpotInstanceType
+    ]
+
+instance FromJSON EC2LaunchTemplateSpotOptions where
+  parseJSON (Object obj) =
+    EC2LaunchTemplateSpotOptions <$>
+      (obj .:? "InstanceInterruptionBehavior") <*>
+      (obj .:? "MaxPrice") <*>
+      (obj .:? "SpotInstanceType")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2LaunchTemplateSpotOptions' containing required fields
+-- as arguments.
+ec2LaunchTemplateSpotOptions
+  :: EC2LaunchTemplateSpotOptions
+ec2LaunchTemplateSpotOptions  =
+  EC2LaunchTemplateSpotOptions
+  { _eC2LaunchTemplateSpotOptionsInstanceInterruptionBehavior = Nothing
+  , _eC2LaunchTemplateSpotOptionsMaxPrice = Nothing
+  , _eC2LaunchTemplateSpotOptionsSpotInstanceType = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-instancemarketoptions-spotoptions.html#cfn-ec2-launchtemplate-launchtemplatedata-instancemarketoptions-spotoptions-instanceinterruptionbehavior
+ecltsoInstanceInterruptionBehavior :: Lens' EC2LaunchTemplateSpotOptions (Maybe (Val Text))
+ecltsoInstanceInterruptionBehavior = lens _eC2LaunchTemplateSpotOptionsInstanceInterruptionBehavior (\s a -> s { _eC2LaunchTemplateSpotOptionsInstanceInterruptionBehavior = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-instancemarketoptions-spotoptions.html#cfn-ec2-launchtemplate-launchtemplatedata-instancemarketoptions-spotoptions-maxprice
+ecltsoMaxPrice :: Lens' EC2LaunchTemplateSpotOptions (Maybe (Val Text))
+ecltsoMaxPrice = lens _eC2LaunchTemplateSpotOptionsMaxPrice (\s a -> s { _eC2LaunchTemplateSpotOptionsMaxPrice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-instancemarketoptions-spotoptions.html#cfn-ec2-launchtemplate-launchtemplatedata-instancemarketoptions-spotoptions-spotinstancetype
+ecltsoSpotInstanceType :: Lens' EC2LaunchTemplateSpotOptions (Maybe (Val Text))
+ecltsoSpotInstanceType = lens _eC2LaunchTemplateSpotOptionsSpotInstanceType (\s a -> s { _eC2LaunchTemplateSpotOptionsSpotInstanceType = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateTagSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateTagSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2LaunchTemplateTagSpecification.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-tagspecification.html
+
+module Stratosphere.ResourceProperties.EC2LaunchTemplateTagSpecification where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.Tag
+
+-- | Full data type definition for EC2LaunchTemplateTagSpecification. See
+-- 'ec2LaunchTemplateTagSpecification' for a more convenient constructor.
+data EC2LaunchTemplateTagSpecification =
+  EC2LaunchTemplateTagSpecification
+  { _eC2LaunchTemplateTagSpecificationResourceType :: Maybe (Val Text)
+  , _eC2LaunchTemplateTagSpecificationTags :: Maybe [Tag]
+  } deriving (Show, Eq)
+
+instance ToJSON EC2LaunchTemplateTagSpecification where
+  toJSON EC2LaunchTemplateTagSpecification{..} =
+    object $
+    catMaybes
+    [ fmap (("ResourceType",) . toJSON) _eC2LaunchTemplateTagSpecificationResourceType
+    , fmap (("Tags",) . toJSON) _eC2LaunchTemplateTagSpecificationTags
+    ]
+
+instance FromJSON EC2LaunchTemplateTagSpecification where
+  parseJSON (Object obj) =
+    EC2LaunchTemplateTagSpecification <$>
+      (obj .:? "ResourceType") <*>
+      (obj .:? "Tags")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2LaunchTemplateTagSpecification' containing required
+-- fields as arguments.
+ec2LaunchTemplateTagSpecification
+  :: EC2LaunchTemplateTagSpecification
+ec2LaunchTemplateTagSpecification  =
+  EC2LaunchTemplateTagSpecification
+  { _eC2LaunchTemplateTagSpecificationResourceType = Nothing
+  , _eC2LaunchTemplateTagSpecificationTags = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-tagspecification.html#cfn-ec2-launchtemplate-tagspecification-resourcetype
+eclttsResourceType :: Lens' EC2LaunchTemplateTagSpecification (Maybe (Val Text))
+eclttsResourceType = lens _eC2LaunchTemplateTagSpecificationResourceType (\s a -> s { _eC2LaunchTemplateTagSpecificationResourceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-tagspecification.html#cfn-ec2-launchtemplate-tagspecification-tags
+eclttsTags :: Lens' EC2LaunchTemplateTagSpecification (Maybe [Tag])
+eclttsTags = lens _eC2LaunchTemplateTagSpecificationTags (\s a -> s { _eC2LaunchTemplateTagSpecificationTags = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetFleetLaunchTemplateSpecification.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetFleetLaunchTemplateSpecification.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetFleetLaunchTemplateSpecification.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-fleetlaunchtemplatespecification.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetFleetLaunchTemplateSpecification where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for
+-- EC2SpotFleetFleetLaunchTemplateSpecification. See
+-- 'ec2SpotFleetFleetLaunchTemplateSpecification' for a more convenient
+-- constructor.
+data EC2SpotFleetFleetLaunchTemplateSpecification =
+  EC2SpotFleetFleetLaunchTemplateSpecification
+  { _eC2SpotFleetFleetLaunchTemplateSpecificationLaunchTemplateId :: Maybe (Val Text)
+  , _eC2SpotFleetFleetLaunchTemplateSpecificationLaunchTemplateName :: Maybe (Val Text)
+  , _eC2SpotFleetFleetLaunchTemplateSpecificationVersion :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2SpotFleetFleetLaunchTemplateSpecification where
+  toJSON EC2SpotFleetFleetLaunchTemplateSpecification{..} =
+    object $
+    catMaybes
+    [ fmap (("LaunchTemplateId",) . toJSON) _eC2SpotFleetFleetLaunchTemplateSpecificationLaunchTemplateId
+    , fmap (("LaunchTemplateName",) . toJSON) _eC2SpotFleetFleetLaunchTemplateSpecificationLaunchTemplateName
+    , fmap (("Version",) . toJSON) _eC2SpotFleetFleetLaunchTemplateSpecificationVersion
+    ]
+
+instance FromJSON EC2SpotFleetFleetLaunchTemplateSpecification where
+  parseJSON (Object obj) =
+    EC2SpotFleetFleetLaunchTemplateSpecification <$>
+      (obj .:? "LaunchTemplateId") <*>
+      (obj .:? "LaunchTemplateName") <*>
+      (obj .:? "Version")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2SpotFleetFleetLaunchTemplateSpecification' containing
+-- required fields as arguments.
+ec2SpotFleetFleetLaunchTemplateSpecification
+  :: EC2SpotFleetFleetLaunchTemplateSpecification
+ec2SpotFleetFleetLaunchTemplateSpecification  =
+  EC2SpotFleetFleetLaunchTemplateSpecification
+  { _eC2SpotFleetFleetLaunchTemplateSpecificationLaunchTemplateId = Nothing
+  , _eC2SpotFleetFleetLaunchTemplateSpecificationLaunchTemplateName = Nothing
+  , _eC2SpotFleetFleetLaunchTemplateSpecificationVersion = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-fleetlaunchtemplatespecification.html#cfn-ec2-spotfleet-fleetlaunchtemplatespecification-launchtemplateid
+ecsffltsLaunchTemplateId :: Lens' EC2SpotFleetFleetLaunchTemplateSpecification (Maybe (Val Text))
+ecsffltsLaunchTemplateId = lens _eC2SpotFleetFleetLaunchTemplateSpecificationLaunchTemplateId (\s a -> s { _eC2SpotFleetFleetLaunchTemplateSpecificationLaunchTemplateId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-fleetlaunchtemplatespecification.html#cfn-ec2-spotfleet-fleetlaunchtemplatespecification-launchtemplatename
+ecsffltsLaunchTemplateName :: Lens' EC2SpotFleetFleetLaunchTemplateSpecification (Maybe (Val Text))
+ecsffltsLaunchTemplateName = lens _eC2SpotFleetFleetLaunchTemplateSpecificationLaunchTemplateName (\s a -> s { _eC2SpotFleetFleetLaunchTemplateSpecificationLaunchTemplateName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-fleetlaunchtemplatespecification.html#cfn-ec2-spotfleet-fleetlaunchtemplatespecification-version
+ecsffltsVersion :: Lens' EC2SpotFleetFleetLaunchTemplateSpecification (Maybe (Val Text))
+ecsffltsVersion = lens _eC2SpotFleetFleetLaunchTemplateSpecificationVersion (\s a -> s { _eC2SpotFleetFleetLaunchTemplateSpecificationVersion = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchTemplateConfig.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchTemplateConfig.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchTemplateConfig.hs
@@ -0,0 +1,52 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateconfig.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetLaunchTemplateConfig where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.EC2SpotFleetFleetLaunchTemplateSpecification
+import Stratosphere.ResourceProperties.EC2SpotFleetLaunchTemplateOverrides
+
+-- | Full data type definition for EC2SpotFleetLaunchTemplateConfig. See
+-- 'ec2SpotFleetLaunchTemplateConfig' for a more convenient constructor.
+data EC2SpotFleetLaunchTemplateConfig =
+  EC2SpotFleetLaunchTemplateConfig
+  { _eC2SpotFleetLaunchTemplateConfigLaunchTemplateSpecification :: Maybe EC2SpotFleetFleetLaunchTemplateSpecification
+  , _eC2SpotFleetLaunchTemplateConfigOverrides :: Maybe [EC2SpotFleetLaunchTemplateOverrides]
+  } deriving (Show, Eq)
+
+instance ToJSON EC2SpotFleetLaunchTemplateConfig where
+  toJSON EC2SpotFleetLaunchTemplateConfig{..} =
+    object $
+    catMaybes
+    [ fmap (("LaunchTemplateSpecification",) . toJSON) _eC2SpotFleetLaunchTemplateConfigLaunchTemplateSpecification
+    , fmap (("Overrides",) . toJSON) _eC2SpotFleetLaunchTemplateConfigOverrides
+    ]
+
+instance FromJSON EC2SpotFleetLaunchTemplateConfig where
+  parseJSON (Object obj) =
+    EC2SpotFleetLaunchTemplateConfig <$>
+      (obj .:? "LaunchTemplateSpecification") <*>
+      (obj .:? "Overrides")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2SpotFleetLaunchTemplateConfig' containing required
+-- fields as arguments.
+ec2SpotFleetLaunchTemplateConfig
+  :: EC2SpotFleetLaunchTemplateConfig
+ec2SpotFleetLaunchTemplateConfig  =
+  EC2SpotFleetLaunchTemplateConfig
+  { _eC2SpotFleetLaunchTemplateConfigLaunchTemplateSpecification = Nothing
+  , _eC2SpotFleetLaunchTemplateConfigOverrides = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateconfig.html#cfn-ec2-spotfleet-launchtemplateconfig-launchtemplatespecification
+ecsfltcLaunchTemplateSpecification :: Lens' EC2SpotFleetLaunchTemplateConfig (Maybe EC2SpotFleetFleetLaunchTemplateSpecification)
+ecsfltcLaunchTemplateSpecification = lens _eC2SpotFleetLaunchTemplateConfigLaunchTemplateSpecification (\s a -> s { _eC2SpotFleetLaunchTemplateConfigLaunchTemplateSpecification = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateconfig.html#cfn-ec2-spotfleet-launchtemplateconfig-overrides
+ecsfltcOverrides :: Lens' EC2SpotFleetLaunchTemplateConfig (Maybe [EC2SpotFleetLaunchTemplateOverrides])
+ecsfltcOverrides = lens _eC2SpotFleetLaunchTemplateConfigOverrides (\s a -> s { _eC2SpotFleetLaunchTemplateConfigOverrides = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchTemplateOverrides.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchTemplateOverrides.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetLaunchTemplateOverrides.hs
@@ -0,0 +1,75 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateoverrides.html
+
+module Stratosphere.ResourceProperties.EC2SpotFleetLaunchTemplateOverrides where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for EC2SpotFleetLaunchTemplateOverrides. See
+-- 'ec2SpotFleetLaunchTemplateOverrides' for a more convenient constructor.
+data EC2SpotFleetLaunchTemplateOverrides =
+  EC2SpotFleetLaunchTemplateOverrides
+  { _eC2SpotFleetLaunchTemplateOverridesAvailabilityZone :: Maybe (Val Text)
+  , _eC2SpotFleetLaunchTemplateOverridesInstanceType :: Maybe (Val Text)
+  , _eC2SpotFleetLaunchTemplateOverridesSpotPrice :: Maybe (Val Text)
+  , _eC2SpotFleetLaunchTemplateOverridesSubnetId :: Maybe (Val Text)
+  , _eC2SpotFleetLaunchTemplateOverridesWeightedCapacity :: Maybe (Val Double)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2SpotFleetLaunchTemplateOverrides where
+  toJSON EC2SpotFleetLaunchTemplateOverrides{..} =
+    object $
+    catMaybes
+    [ fmap (("AvailabilityZone",) . toJSON) _eC2SpotFleetLaunchTemplateOverridesAvailabilityZone
+    , fmap (("InstanceType",) . toJSON) _eC2SpotFleetLaunchTemplateOverridesInstanceType
+    , fmap (("SpotPrice",) . toJSON) _eC2SpotFleetLaunchTemplateOverridesSpotPrice
+    , fmap (("SubnetId",) . toJSON) _eC2SpotFleetLaunchTemplateOverridesSubnetId
+    , fmap (("WeightedCapacity",) . toJSON . fmap Double') _eC2SpotFleetLaunchTemplateOverridesWeightedCapacity
+    ]
+
+instance FromJSON EC2SpotFleetLaunchTemplateOverrides where
+  parseJSON (Object obj) =
+    EC2SpotFleetLaunchTemplateOverrides <$>
+      (obj .:? "AvailabilityZone") <*>
+      (obj .:? "InstanceType") <*>
+      (obj .:? "SpotPrice") <*>
+      (obj .:? "SubnetId") <*>
+      fmap (fmap (fmap unDouble')) (obj .:? "WeightedCapacity")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2SpotFleetLaunchTemplateOverrides' containing required
+-- fields as arguments.
+ec2SpotFleetLaunchTemplateOverrides
+  :: EC2SpotFleetLaunchTemplateOverrides
+ec2SpotFleetLaunchTemplateOverrides  =
+  EC2SpotFleetLaunchTemplateOverrides
+  { _eC2SpotFleetLaunchTemplateOverridesAvailabilityZone = Nothing
+  , _eC2SpotFleetLaunchTemplateOverridesInstanceType = Nothing
+  , _eC2SpotFleetLaunchTemplateOverridesSpotPrice = Nothing
+  , _eC2SpotFleetLaunchTemplateOverridesSubnetId = Nothing
+  , _eC2SpotFleetLaunchTemplateOverridesWeightedCapacity = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateoverrides.html#cfn-ec2-spotfleet-launchtemplateoverrides-availabilityzone
+ecsfltoAvailabilityZone :: Lens' EC2SpotFleetLaunchTemplateOverrides (Maybe (Val Text))
+ecsfltoAvailabilityZone = lens _eC2SpotFleetLaunchTemplateOverridesAvailabilityZone (\s a -> s { _eC2SpotFleetLaunchTemplateOverridesAvailabilityZone = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateoverrides.html#cfn-ec2-spotfleet-launchtemplateoverrides-instancetype
+ecsfltoInstanceType :: Lens' EC2SpotFleetLaunchTemplateOverrides (Maybe (Val Text))
+ecsfltoInstanceType = lens _eC2SpotFleetLaunchTemplateOverridesInstanceType (\s a -> s { _eC2SpotFleetLaunchTemplateOverridesInstanceType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateoverrides.html#cfn-ec2-spotfleet-launchtemplateoverrides-spotprice
+ecsfltoSpotPrice :: Lens' EC2SpotFleetLaunchTemplateOverrides (Maybe (Val Text))
+ecsfltoSpotPrice = lens _eC2SpotFleetLaunchTemplateOverridesSpotPrice (\s a -> s { _eC2SpotFleetLaunchTemplateOverridesSpotPrice = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateoverrides.html#cfn-ec2-spotfleet-launchtemplateoverrides-subnetid
+ecsfltoSubnetId :: Lens' EC2SpotFleetLaunchTemplateOverrides (Maybe (Val Text))
+ecsfltoSubnetId = lens _eC2SpotFleetLaunchTemplateOverridesSubnetId (\s a -> s { _eC2SpotFleetLaunchTemplateOverridesSubnetId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateoverrides.html#cfn-ec2-spotfleet-launchtemplateoverrides-weightedcapacity
+ecsfltoWeightedCapacity :: Lens' EC2SpotFleetLaunchTemplateOverrides (Maybe (Val Double))
+ecsfltoWeightedCapacity = lens _eC2SpotFleetLaunchTemplateOverridesWeightedCapacity (\s a -> s { _eC2SpotFleetLaunchTemplateOverridesWeightedCapacity = a })
diff --git a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetRequestConfigData.hs b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetRequestConfigData.hs
--- a/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetRequestConfigData.hs
+++ b/library-gen/Stratosphere/ResourceProperties/EC2SpotFleetSpotFleetRequestConfigData.hs
@@ -8,6 +8,7 @@
 
 import Stratosphere.ResourceImports
 import Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetLaunchSpecification
+import Stratosphere.ResourceProperties.EC2SpotFleetLaunchTemplateConfig
 
 -- | Full data type definition for EC2SpotFleetSpotFleetRequestConfigData. See
 -- 'ec2SpotFleetSpotFleetRequestConfigData' for a more convenient
@@ -17,7 +18,8 @@
   { _eC2SpotFleetSpotFleetRequestConfigDataAllocationStrategy :: Maybe (Val Text)
   , _eC2SpotFleetSpotFleetRequestConfigDataExcessCapacityTerminationPolicy :: Maybe (Val Text)
   , _eC2SpotFleetSpotFleetRequestConfigDataIamFleetRole :: Val Text
-  , _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications :: [EC2SpotFleetSpotFleetLaunchSpecification]
+  , _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications :: Maybe [EC2SpotFleetSpotFleetLaunchSpecification]
+  , _eC2SpotFleetSpotFleetRequestConfigDataLaunchTemplateConfigs :: Maybe [EC2SpotFleetLaunchTemplateConfig]
   , _eC2SpotFleetSpotFleetRequestConfigDataReplaceUnhealthyInstances :: Maybe (Val Bool)
   , _eC2SpotFleetSpotFleetRequestConfigDataSpotPrice :: Maybe (Val Text)
   , _eC2SpotFleetSpotFleetRequestConfigDataTargetCapacity :: Val Integer
@@ -34,7 +36,8 @@
     [ fmap (("AllocationStrategy",) . toJSON) _eC2SpotFleetSpotFleetRequestConfigDataAllocationStrategy
     , fmap (("ExcessCapacityTerminationPolicy",) . toJSON) _eC2SpotFleetSpotFleetRequestConfigDataExcessCapacityTerminationPolicy
     , (Just . ("IamFleetRole",) . toJSON) _eC2SpotFleetSpotFleetRequestConfigDataIamFleetRole
-    , (Just . ("LaunchSpecifications",) . toJSON) _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications
+    , fmap (("LaunchSpecifications",) . toJSON) _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications
+    , fmap (("LaunchTemplateConfigs",) . toJSON) _eC2SpotFleetSpotFleetRequestConfigDataLaunchTemplateConfigs
     , fmap (("ReplaceUnhealthyInstances",) . toJSON . fmap Bool') _eC2SpotFleetSpotFleetRequestConfigDataReplaceUnhealthyInstances
     , fmap (("SpotPrice",) . toJSON) _eC2SpotFleetSpotFleetRequestConfigDataSpotPrice
     , (Just . ("TargetCapacity",) . toJSON . fmap Integer') _eC2SpotFleetSpotFleetRequestConfigDataTargetCapacity
@@ -50,7 +53,8 @@
       (obj .:? "AllocationStrategy") <*>
       (obj .:? "ExcessCapacityTerminationPolicy") <*>
       (obj .: "IamFleetRole") <*>
-      (obj .: "LaunchSpecifications") <*>
+      (obj .:? "LaunchSpecifications") <*>
+      (obj .:? "LaunchTemplateConfigs") <*>
       fmap (fmap (fmap unBool')) (obj .:? "ReplaceUnhealthyInstances") <*>
       (obj .:? "SpotPrice") <*>
       fmap (fmap unInteger') (obj .: "TargetCapacity") <*>
@@ -64,15 +68,15 @@
 -- required fields as arguments.
 ec2SpotFleetSpotFleetRequestConfigData
   :: Val Text -- ^ 'ecsfsfrcdIamFleetRole'
-  -> [EC2SpotFleetSpotFleetLaunchSpecification] -- ^ 'ecsfsfrcdLaunchSpecifications'
   -> Val Integer -- ^ 'ecsfsfrcdTargetCapacity'
   -> EC2SpotFleetSpotFleetRequestConfigData
-ec2SpotFleetSpotFleetRequestConfigData iamFleetRolearg launchSpecificationsarg targetCapacityarg =
+ec2SpotFleetSpotFleetRequestConfigData iamFleetRolearg targetCapacityarg =
   EC2SpotFleetSpotFleetRequestConfigData
   { _eC2SpotFleetSpotFleetRequestConfigDataAllocationStrategy = Nothing
   , _eC2SpotFleetSpotFleetRequestConfigDataExcessCapacityTerminationPolicy = Nothing
   , _eC2SpotFleetSpotFleetRequestConfigDataIamFleetRole = iamFleetRolearg
-  , _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications = launchSpecificationsarg
+  , _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications = Nothing
+  , _eC2SpotFleetSpotFleetRequestConfigDataLaunchTemplateConfigs = Nothing
   , _eC2SpotFleetSpotFleetRequestConfigDataReplaceUnhealthyInstances = Nothing
   , _eC2SpotFleetSpotFleetRequestConfigDataSpotPrice = Nothing
   , _eC2SpotFleetSpotFleetRequestConfigDataTargetCapacity = targetCapacityarg
@@ -95,8 +99,12 @@
 ecsfsfrcdIamFleetRole = lens _eC2SpotFleetSpotFleetRequestConfigDataIamFleetRole (\s a -> s { _eC2SpotFleetSpotFleetRequestConfigDataIamFleetRole = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications
-ecsfsfrcdLaunchSpecifications :: Lens' EC2SpotFleetSpotFleetRequestConfigData [EC2SpotFleetSpotFleetLaunchSpecification]
+ecsfsfrcdLaunchSpecifications :: Lens' EC2SpotFleetSpotFleetRequestConfigData (Maybe [EC2SpotFleetSpotFleetLaunchSpecification])
 ecsfsfrcdLaunchSpecifications = lens _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications (\s a -> s { _eC2SpotFleetSpotFleetRequestConfigDataLaunchSpecifications = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-launchtemplateconfigs
+ecsfsfrcdLaunchTemplateConfigs :: Lens' EC2SpotFleetSpotFleetRequestConfigData (Maybe [EC2SpotFleetLaunchTemplateConfig])
+ecsfsfrcdLaunchTemplateConfigs = lens _eC2SpotFleetSpotFleetRequestConfigDataLaunchTemplateConfigs (\s a -> s { _eC2SpotFleetSpotFleetRequestConfigDataLaunchTemplateConfigs = a })
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-replaceunhealthyinstances
 ecsfsfrcdReplaceUnhealthyInstances :: Lens' EC2SpotFleetSpotFleetRequestConfigData (Maybe (Val Bool))
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
@@ -66,6 +66,11 @@
 import Stratosphere.Resources.ApiGatewayUsagePlan as X
 import Stratosphere.Resources.ApiGatewayUsagePlanKey as X
 import Stratosphere.Resources.ApiGatewayVpcLink as X
+import Stratosphere.Resources.AppSyncApiKey as X
+import Stratosphere.Resources.AppSyncDataSource as X
+import Stratosphere.Resources.AppSyncGraphQLApi as X
+import Stratosphere.Resources.AppSyncGraphQLSchema as X
+import Stratosphere.Resources.AppSyncResolver as X
 import Stratosphere.Resources.ApplicationAutoScalingScalableTarget as X
 import Stratosphere.Resources.ApplicationAutoScalingScalingPolicy as X
 import Stratosphere.Resources.AthenaNamedQuery as X
@@ -128,6 +133,7 @@
 import Stratosphere.Resources.EC2Host as X
 import Stratosphere.Resources.EC2Instance as X
 import Stratosphere.Resources.EC2InternetGateway as X
+import Stratosphere.Resources.EC2LaunchTemplate as X
 import Stratosphere.Resources.EC2NatGateway as X
 import Stratosphere.Resources.EC2NetworkAcl as X
 import Stratosphere.Resources.EC2NetworkAclEntry as X
@@ -318,6 +324,11 @@
 import Stratosphere.ResourceProperties.ApiGatewayUsagePlanApiStage as X
 import Stratosphere.ResourceProperties.ApiGatewayUsagePlanQuotaSettings as X
 import Stratosphere.ResourceProperties.ApiGatewayUsagePlanThrottleSettings as X
+import Stratosphere.ResourceProperties.AppSyncDataSourceDynamoDBConfig as X
+import Stratosphere.ResourceProperties.AppSyncDataSourceElasticsearchConfig as X
+import Stratosphere.ResourceProperties.AppSyncDataSourceLambdaConfig as X
+import Stratosphere.ResourceProperties.AppSyncGraphQLApiLogConfig as X
+import Stratosphere.ResourceProperties.AppSyncGraphQLApiUserPoolConfig as X
 import Stratosphere.ResourceProperties.ApplicationAutoScalingScalableTargetScalableTargetAction as X
 import Stratosphere.ResourceProperties.ApplicationAutoScalingScalableTargetScheduledAction as X
 import Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification as X
@@ -461,6 +472,20 @@
 import Stratosphere.ResourceProperties.EC2InstancePrivateIpAddressSpecification as X
 import Stratosphere.ResourceProperties.EC2InstanceSsmAssociation as X
 import Stratosphere.ResourceProperties.EC2InstanceVolume as X
+import Stratosphere.ResourceProperties.EC2LaunchTemplateBlockDeviceMapping as X
+import Stratosphere.ResourceProperties.EC2LaunchTemplateCreditSpecification as X
+import Stratosphere.ResourceProperties.EC2LaunchTemplateEbs as X
+import Stratosphere.ResourceProperties.EC2LaunchTemplateElasticGpuSpecification as X
+import Stratosphere.ResourceProperties.EC2LaunchTemplateIamInstanceProfile as X
+import Stratosphere.ResourceProperties.EC2LaunchTemplateInstanceMarketOptions as X
+import Stratosphere.ResourceProperties.EC2LaunchTemplateIpv6Add as X
+import Stratosphere.ResourceProperties.EC2LaunchTemplateLaunchTemplateData as X
+import Stratosphere.ResourceProperties.EC2LaunchTemplateMonitoring as X
+import Stratosphere.ResourceProperties.EC2LaunchTemplateNetworkInterface as X
+import Stratosphere.ResourceProperties.EC2LaunchTemplatePlacement as X
+import Stratosphere.ResourceProperties.EC2LaunchTemplatePrivateIpAdd as X
+import Stratosphere.ResourceProperties.EC2LaunchTemplateSpotOptions as X
+import Stratosphere.ResourceProperties.EC2LaunchTemplateTagSpecification as X
 import Stratosphere.ResourceProperties.EC2NetworkAclEntryIcmp as X
 import Stratosphere.ResourceProperties.EC2NetworkAclEntryPortRange as X
 import Stratosphere.ResourceProperties.EC2NetworkInterfaceInstanceIpv6Address as X
@@ -469,10 +494,13 @@
 import Stratosphere.ResourceProperties.EC2SecurityGroupIngressProperty as X
 import Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMapping as X
 import Stratosphere.ResourceProperties.EC2SpotFleetEbsBlockDevice as X
+import Stratosphere.ResourceProperties.EC2SpotFleetFleetLaunchTemplateSpecification as X
 import Stratosphere.ResourceProperties.EC2SpotFleetGroupIdentifier as X
 import Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfileSpecification as X
 import Stratosphere.ResourceProperties.EC2SpotFleetInstanceIpv6Address as X
 import Stratosphere.ResourceProperties.EC2SpotFleetInstanceNetworkInterfaceSpecification as X
+import Stratosphere.ResourceProperties.EC2SpotFleetLaunchTemplateConfig as X
+import Stratosphere.ResourceProperties.EC2SpotFleetLaunchTemplateOverrides as X
 import Stratosphere.ResourceProperties.EC2SpotFleetPrivateIpAddressSpecification as X
 import Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetLaunchSpecification as X
 import Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetMonitoring as X
@@ -846,6 +874,11 @@
   | ApiGatewayUsagePlanProperties ApiGatewayUsagePlan
   | ApiGatewayUsagePlanKeyProperties ApiGatewayUsagePlanKey
   | ApiGatewayVpcLinkProperties ApiGatewayVpcLink
+  | AppSyncApiKeyProperties AppSyncApiKey
+  | AppSyncDataSourceProperties AppSyncDataSource
+  | AppSyncGraphQLApiProperties AppSyncGraphQLApi
+  | AppSyncGraphQLSchemaProperties AppSyncGraphQLSchema
+  | AppSyncResolverProperties AppSyncResolver
   | ApplicationAutoScalingScalableTargetProperties ApplicationAutoScalingScalableTarget
   | ApplicationAutoScalingScalingPolicyProperties ApplicationAutoScalingScalingPolicy
   | AthenaNamedQueryProperties AthenaNamedQuery
@@ -908,6 +941,7 @@
   | EC2HostProperties EC2Host
   | EC2InstanceProperties EC2Instance
   | EC2InternetGatewayProperties EC2InternetGateway
+  | EC2LaunchTemplateProperties EC2LaunchTemplate
   | EC2NatGatewayProperties EC2NatGateway
   | EC2NetworkAclProperties EC2NetworkAcl
   | EC2NetworkAclEntryProperties EC2NetworkAclEntry
@@ -1177,6 +1211,16 @@
   [ "Type" .= ("AWS::ApiGateway::UsagePlanKey" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (ApiGatewayVpcLinkProperties x) =
   [ "Type" .= ("AWS::ApiGateway::VpcLink" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (AppSyncApiKeyProperties x) =
+  [ "Type" .= ("AWS::AppSync::ApiKey" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (AppSyncDataSourceProperties x) =
+  [ "Type" .= ("AWS::AppSync::DataSource" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (AppSyncGraphQLApiProperties x) =
+  [ "Type" .= ("AWS::AppSync::GraphQLApi" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (AppSyncGraphQLSchemaProperties x) =
+  [ "Type" .= ("AWS::AppSync::GraphQLSchema" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (AppSyncResolverProperties x) =
+  [ "Type" .= ("AWS::AppSync::Resolver" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (ApplicationAutoScalingScalableTargetProperties x) =
   [ "Type" .= ("AWS::ApplicationAutoScaling::ScalableTarget" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (ApplicationAutoScalingScalingPolicyProperties x) =
@@ -1301,6 +1345,8 @@
   [ "Type" .= ("AWS::EC2::Instance" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EC2InternetGatewayProperties x) =
   [ "Type" .= ("AWS::EC2::InternetGateway" :: String), "Properties" .= toJSON x]
+resourcePropertiesJSON (EC2LaunchTemplateProperties x) =
+  [ "Type" .= ("AWS::EC2::LaunchTemplate" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EC2NatGatewayProperties x) =
   [ "Type" .= ("AWS::EC2::NatGateway" :: String), "Properties" .= toJSON x]
 resourcePropertiesJSON (EC2NetworkAclProperties x) =
@@ -1678,6 +1724,11 @@
          "AWS::ApiGateway::UsagePlan" -> ApiGatewayUsagePlanProperties <$> (o .: "Properties")
          "AWS::ApiGateway::UsagePlanKey" -> ApiGatewayUsagePlanKeyProperties <$> (o .: "Properties")
          "AWS::ApiGateway::VpcLink" -> ApiGatewayVpcLinkProperties <$> (o .: "Properties")
+         "AWS::AppSync::ApiKey" -> AppSyncApiKeyProperties <$> (o .: "Properties")
+         "AWS::AppSync::DataSource" -> AppSyncDataSourceProperties <$> (o .: "Properties")
+         "AWS::AppSync::GraphQLApi" -> AppSyncGraphQLApiProperties <$> (o .: "Properties")
+         "AWS::AppSync::GraphQLSchema" -> AppSyncGraphQLSchemaProperties <$> (o .: "Properties")
+         "AWS::AppSync::Resolver" -> AppSyncResolverProperties <$> (o .: "Properties")
          "AWS::ApplicationAutoScaling::ScalableTarget" -> ApplicationAutoScalingScalableTargetProperties <$> (o .: "Properties")
          "AWS::ApplicationAutoScaling::ScalingPolicy" -> ApplicationAutoScalingScalingPolicyProperties <$> (o .: "Properties")
          "AWS::Athena::NamedQuery" -> AthenaNamedQueryProperties <$> (o .: "Properties")
@@ -1740,6 +1791,7 @@
          "AWS::EC2::Host" -> EC2HostProperties <$> (o .: "Properties")
          "AWS::EC2::Instance" -> EC2InstanceProperties <$> (o .: "Properties")
          "AWS::EC2::InternetGateway" -> EC2InternetGatewayProperties <$> (o .: "Properties")
+         "AWS::EC2::LaunchTemplate" -> EC2LaunchTemplateProperties <$> (o .: "Properties")
          "AWS::EC2::NatGateway" -> EC2NatGatewayProperties <$> (o .: "Properties")
          "AWS::EC2::NetworkAcl" -> EC2NetworkAclProperties <$> (o .: "Properties")
          "AWS::EC2::NetworkAclEntry" -> EC2NetworkAclEntryProperties <$> (o .: "Properties")
diff --git a/library-gen/Stratosphere/Resources/AppSyncApiKey.hs b/library-gen/Stratosphere/Resources/AppSyncApiKey.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/AppSyncApiKey.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apikey.html
+
+module Stratosphere.Resources.AppSyncApiKey where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppSyncApiKey. See 'appSyncApiKey' for a
+-- more convenient constructor.
+data AppSyncApiKey =
+  AppSyncApiKey
+  { _appSyncApiKeyApiId :: Val Text
+  , _appSyncApiKeyDescription :: Maybe (Val Text)
+  , _appSyncApiKeyExpires :: Maybe (Val Double)
+  } deriving (Show, Eq)
+
+instance ToJSON AppSyncApiKey where
+  toJSON AppSyncApiKey{..} =
+    object $
+    catMaybes
+    [ (Just . ("ApiId",) . toJSON) _appSyncApiKeyApiId
+    , fmap (("Description",) . toJSON) _appSyncApiKeyDescription
+    , fmap (("Expires",) . toJSON . fmap Double') _appSyncApiKeyExpires
+    ]
+
+instance FromJSON AppSyncApiKey where
+  parseJSON (Object obj) =
+    AppSyncApiKey <$>
+      (obj .: "ApiId") <*>
+      (obj .:? "Description") <*>
+      fmap (fmap (fmap unDouble')) (obj .:? "Expires")
+  parseJSON _ = mempty
+
+-- | Constructor for 'AppSyncApiKey' containing required fields as arguments.
+appSyncApiKey
+  :: Val Text -- ^ 'asakApiId'
+  -> AppSyncApiKey
+appSyncApiKey apiIdarg =
+  AppSyncApiKey
+  { _appSyncApiKeyApiId = apiIdarg
+  , _appSyncApiKeyDescription = Nothing
+  , _appSyncApiKeyExpires = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apikey.html#cfn-appsync-apikey-apiid
+asakApiId :: Lens' AppSyncApiKey (Val Text)
+asakApiId = lens _appSyncApiKeyApiId (\s a -> s { _appSyncApiKeyApiId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apikey.html#cfn-appsync-apikey-description
+asakDescription :: Lens' AppSyncApiKey (Maybe (Val Text))
+asakDescription = lens _appSyncApiKeyDescription (\s a -> s { _appSyncApiKeyDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apikey.html#cfn-appsync-apikey-expires
+asakExpires :: Lens' AppSyncApiKey (Maybe (Val Double))
+asakExpires = lens _appSyncApiKeyExpires (\s a -> s { _appSyncApiKeyExpires = a })
diff --git a/library-gen/Stratosphere/Resources/AppSyncDataSource.hs b/library-gen/Stratosphere/Resources/AppSyncDataSource.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/AppSyncDataSource.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html
+
+module Stratosphere.Resources.AppSyncDataSource where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppSyncDataSourceDynamoDBConfig
+import Stratosphere.ResourceProperties.AppSyncDataSourceElasticsearchConfig
+import Stratosphere.ResourceProperties.AppSyncDataSourceLambdaConfig
+
+-- | Full data type definition for AppSyncDataSource. See 'appSyncDataSource'
+-- for a more convenient constructor.
+data AppSyncDataSource =
+  AppSyncDataSource
+  { _appSyncDataSourceApiId :: Val Text
+  , _appSyncDataSourceDescription :: Maybe (Val Text)
+  , _appSyncDataSourceDynamoDBConfig :: Maybe AppSyncDataSourceDynamoDBConfig
+  , _appSyncDataSourceElasticsearchConfig :: Maybe AppSyncDataSourceElasticsearchConfig
+  , _appSyncDataSourceLambdaConfig :: Maybe AppSyncDataSourceLambdaConfig
+  , _appSyncDataSourceName :: Val Text
+  , _appSyncDataSourceServiceRoleArn :: Maybe (Val Text)
+  , _appSyncDataSourceType :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON AppSyncDataSource where
+  toJSON AppSyncDataSource{..} =
+    object $
+    catMaybes
+    [ (Just . ("ApiId",) . toJSON) _appSyncDataSourceApiId
+    , fmap (("Description",) . toJSON) _appSyncDataSourceDescription
+    , fmap (("DynamoDBConfig",) . toJSON) _appSyncDataSourceDynamoDBConfig
+    , fmap (("ElasticsearchConfig",) . toJSON) _appSyncDataSourceElasticsearchConfig
+    , fmap (("LambdaConfig",) . toJSON) _appSyncDataSourceLambdaConfig
+    , (Just . ("Name",) . toJSON) _appSyncDataSourceName
+    , fmap (("ServiceRoleArn",) . toJSON) _appSyncDataSourceServiceRoleArn
+    , (Just . ("Type",) . toJSON) _appSyncDataSourceType
+    ]
+
+instance FromJSON AppSyncDataSource where
+  parseJSON (Object obj) =
+    AppSyncDataSource <$>
+      (obj .: "ApiId") <*>
+      (obj .:? "Description") <*>
+      (obj .:? "DynamoDBConfig") <*>
+      (obj .:? "ElasticsearchConfig") <*>
+      (obj .:? "LambdaConfig") <*>
+      (obj .: "Name") <*>
+      (obj .:? "ServiceRoleArn") <*>
+      (obj .: "Type")
+  parseJSON _ = mempty
+
+-- | Constructor for 'AppSyncDataSource' containing required fields as
+-- arguments.
+appSyncDataSource
+  :: Val Text -- ^ 'asdsApiId'
+  -> Val Text -- ^ 'asdsName'
+  -> Val Text -- ^ 'asdsType'
+  -> AppSyncDataSource
+appSyncDataSource apiIdarg namearg typearg =
+  AppSyncDataSource
+  { _appSyncDataSourceApiId = apiIdarg
+  , _appSyncDataSourceDescription = Nothing
+  , _appSyncDataSourceDynamoDBConfig = Nothing
+  , _appSyncDataSourceElasticsearchConfig = Nothing
+  , _appSyncDataSourceLambdaConfig = Nothing
+  , _appSyncDataSourceName = namearg
+  , _appSyncDataSourceServiceRoleArn = Nothing
+  , _appSyncDataSourceType = typearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-apiid
+asdsApiId :: Lens' AppSyncDataSource (Val Text)
+asdsApiId = lens _appSyncDataSourceApiId (\s a -> s { _appSyncDataSourceApiId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-description
+asdsDescription :: Lens' AppSyncDataSource (Maybe (Val Text))
+asdsDescription = lens _appSyncDataSourceDescription (\s a -> s { _appSyncDataSourceDescription = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-dynamodbconfig
+asdsDynamoDBConfig :: Lens' AppSyncDataSource (Maybe AppSyncDataSourceDynamoDBConfig)
+asdsDynamoDBConfig = lens _appSyncDataSourceDynamoDBConfig (\s a -> s { _appSyncDataSourceDynamoDBConfig = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-elasticsearchconfig
+asdsElasticsearchConfig :: Lens' AppSyncDataSource (Maybe AppSyncDataSourceElasticsearchConfig)
+asdsElasticsearchConfig = lens _appSyncDataSourceElasticsearchConfig (\s a -> s { _appSyncDataSourceElasticsearchConfig = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-lambdaconfig
+asdsLambdaConfig :: Lens' AppSyncDataSource (Maybe AppSyncDataSourceLambdaConfig)
+asdsLambdaConfig = lens _appSyncDataSourceLambdaConfig (\s a -> s { _appSyncDataSourceLambdaConfig = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-name
+asdsName :: Lens' AppSyncDataSource (Val Text)
+asdsName = lens _appSyncDataSourceName (\s a -> s { _appSyncDataSourceName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-servicerolearn
+asdsServiceRoleArn :: Lens' AppSyncDataSource (Maybe (Val Text))
+asdsServiceRoleArn = lens _appSyncDataSourceServiceRoleArn (\s a -> s { _appSyncDataSourceServiceRoleArn = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-type
+asdsType :: Lens' AppSyncDataSource (Val Text)
+asdsType = lens _appSyncDataSourceType (\s a -> s { _appSyncDataSourceType = a })
diff --git a/library-gen/Stratosphere/Resources/AppSyncGraphQLApi.hs b/library-gen/Stratosphere/Resources/AppSyncGraphQLApi.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/AppSyncGraphQLApi.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html
+
+module Stratosphere.Resources.AppSyncGraphQLApi where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.AppSyncGraphQLApiLogConfig
+import Stratosphere.ResourceProperties.AppSyncGraphQLApiUserPoolConfig
+
+-- | Full data type definition for AppSyncGraphQLApi. See 'appSyncGraphQLApi'
+-- for a more convenient constructor.
+data AppSyncGraphQLApi =
+  AppSyncGraphQLApi
+  { _appSyncGraphQLApiAuthenticationType :: Val Text
+  , _appSyncGraphQLApiLogConfig :: Maybe AppSyncGraphQLApiLogConfig
+  , _appSyncGraphQLApiName :: Val Text
+  , _appSyncGraphQLApiUserPoolConfig :: Maybe AppSyncGraphQLApiUserPoolConfig
+  } deriving (Show, Eq)
+
+instance ToJSON AppSyncGraphQLApi where
+  toJSON AppSyncGraphQLApi{..} =
+    object $
+    catMaybes
+    [ (Just . ("AuthenticationType",) . toJSON) _appSyncGraphQLApiAuthenticationType
+    , fmap (("LogConfig",) . toJSON) _appSyncGraphQLApiLogConfig
+    , (Just . ("Name",) . toJSON) _appSyncGraphQLApiName
+    , fmap (("UserPoolConfig",) . toJSON) _appSyncGraphQLApiUserPoolConfig
+    ]
+
+instance FromJSON AppSyncGraphQLApi where
+  parseJSON (Object obj) =
+    AppSyncGraphQLApi <$>
+      (obj .: "AuthenticationType") <*>
+      (obj .:? "LogConfig") <*>
+      (obj .: "Name") <*>
+      (obj .:? "UserPoolConfig")
+  parseJSON _ = mempty
+
+-- | Constructor for 'AppSyncGraphQLApi' containing required fields as
+-- arguments.
+appSyncGraphQLApi
+  :: Val Text -- ^ 'asgqlaAuthenticationType'
+  -> Val Text -- ^ 'asgqlaName'
+  -> AppSyncGraphQLApi
+appSyncGraphQLApi authenticationTypearg namearg =
+  AppSyncGraphQLApi
+  { _appSyncGraphQLApiAuthenticationType = authenticationTypearg
+  , _appSyncGraphQLApiLogConfig = Nothing
+  , _appSyncGraphQLApiName = namearg
+  , _appSyncGraphQLApiUserPoolConfig = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-authenticationtype
+asgqlaAuthenticationType :: Lens' AppSyncGraphQLApi (Val Text)
+asgqlaAuthenticationType = lens _appSyncGraphQLApiAuthenticationType (\s a -> s { _appSyncGraphQLApiAuthenticationType = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-logconfig
+asgqlaLogConfig :: Lens' AppSyncGraphQLApi (Maybe AppSyncGraphQLApiLogConfig)
+asgqlaLogConfig = lens _appSyncGraphQLApiLogConfig (\s a -> s { _appSyncGraphQLApiLogConfig = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-name
+asgqlaName :: Lens' AppSyncGraphQLApi (Val Text)
+asgqlaName = lens _appSyncGraphQLApiName (\s a -> s { _appSyncGraphQLApiName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html#cfn-appsync-graphqlapi-userpoolconfig
+asgqlaUserPoolConfig :: Lens' AppSyncGraphQLApi (Maybe AppSyncGraphQLApiUserPoolConfig)
+asgqlaUserPoolConfig = lens _appSyncGraphQLApiUserPoolConfig (\s a -> s { _appSyncGraphQLApiUserPoolConfig = a })
diff --git a/library-gen/Stratosphere/Resources/AppSyncGraphQLSchema.hs b/library-gen/Stratosphere/Resources/AppSyncGraphQLSchema.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/AppSyncGraphQLSchema.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlschema.html
+
+module Stratosphere.Resources.AppSyncGraphQLSchema where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppSyncGraphQLSchema. See
+-- 'appSyncGraphQLSchema' for a more convenient constructor.
+data AppSyncGraphQLSchema =
+  AppSyncGraphQLSchema
+  { _appSyncGraphQLSchemaApiId :: Val Text
+  , _appSyncGraphQLSchemaDefinition :: Maybe (Val Text)
+  , _appSyncGraphQLSchemaDefinitionS3Location :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON AppSyncGraphQLSchema where
+  toJSON AppSyncGraphQLSchema{..} =
+    object $
+    catMaybes
+    [ (Just . ("ApiId",) . toJSON) _appSyncGraphQLSchemaApiId
+    , fmap (("Definition",) . toJSON) _appSyncGraphQLSchemaDefinition
+    , fmap (("DefinitionS3Location",) . toJSON) _appSyncGraphQLSchemaDefinitionS3Location
+    ]
+
+instance FromJSON AppSyncGraphQLSchema where
+  parseJSON (Object obj) =
+    AppSyncGraphQLSchema <$>
+      (obj .: "ApiId") <*>
+      (obj .:? "Definition") <*>
+      (obj .:? "DefinitionS3Location")
+  parseJSON _ = mempty
+
+-- | Constructor for 'AppSyncGraphQLSchema' containing required fields as
+-- arguments.
+appSyncGraphQLSchema
+  :: Val Text -- ^ 'asgqlsApiId'
+  -> AppSyncGraphQLSchema
+appSyncGraphQLSchema apiIdarg =
+  AppSyncGraphQLSchema
+  { _appSyncGraphQLSchemaApiId = apiIdarg
+  , _appSyncGraphQLSchemaDefinition = Nothing
+  , _appSyncGraphQLSchemaDefinitionS3Location = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlschema.html#cfn-appsync-graphqlschema-apiid
+asgqlsApiId :: Lens' AppSyncGraphQLSchema (Val Text)
+asgqlsApiId = lens _appSyncGraphQLSchemaApiId (\s a -> s { _appSyncGraphQLSchemaApiId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlschema.html#cfn-appsync-graphqlschema-definition
+asgqlsDefinition :: Lens' AppSyncGraphQLSchema (Maybe (Val Text))
+asgqlsDefinition = lens _appSyncGraphQLSchemaDefinition (\s a -> s { _appSyncGraphQLSchemaDefinition = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlschema.html#cfn-appsync-graphqlschema-definitions3location
+asgqlsDefinitionS3Location :: Lens' AppSyncGraphQLSchema (Maybe (Val Text))
+asgqlsDefinitionS3Location = lens _appSyncGraphQLSchemaDefinitionS3Location (\s a -> s { _appSyncGraphQLSchemaDefinitionS3Location = a })
diff --git a/library-gen/Stratosphere/Resources/AppSyncResolver.hs b/library-gen/Stratosphere/Resources/AppSyncResolver.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/AppSyncResolver.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html
+
+module Stratosphere.Resources.AppSyncResolver where
+
+import Stratosphere.ResourceImports
+
+
+-- | Full data type definition for AppSyncResolver. See 'appSyncResolver' for
+-- a more convenient constructor.
+data AppSyncResolver =
+  AppSyncResolver
+  { _appSyncResolverApiId :: Val Text
+  , _appSyncResolverDataSourceName :: Val Text
+  , _appSyncResolverFieldName :: Val Text
+  , _appSyncResolverRequestMappingTemplate :: Maybe (Val Text)
+  , _appSyncResolverRequestMappingTemplateS3Location :: Maybe (Val Text)
+  , _appSyncResolverResponseMappingTemplate :: Maybe (Val Text)
+  , _appSyncResolverResponseMappingTemplateS3Location :: Maybe (Val Text)
+  , _appSyncResolverTypeName :: Val Text
+  } deriving (Show, Eq)
+
+instance ToJSON AppSyncResolver where
+  toJSON AppSyncResolver{..} =
+    object $
+    catMaybes
+    [ (Just . ("ApiId",) . toJSON) _appSyncResolverApiId
+    , (Just . ("DataSourceName",) . toJSON) _appSyncResolverDataSourceName
+    , (Just . ("FieldName",) . toJSON) _appSyncResolverFieldName
+    , fmap (("RequestMappingTemplate",) . toJSON) _appSyncResolverRequestMappingTemplate
+    , fmap (("RequestMappingTemplateS3Location",) . toJSON) _appSyncResolverRequestMappingTemplateS3Location
+    , fmap (("ResponseMappingTemplate",) . toJSON) _appSyncResolverResponseMappingTemplate
+    , fmap (("ResponseMappingTemplateS3Location",) . toJSON) _appSyncResolverResponseMappingTemplateS3Location
+    , (Just . ("TypeName",) . toJSON) _appSyncResolverTypeName
+    ]
+
+instance FromJSON AppSyncResolver where
+  parseJSON (Object obj) =
+    AppSyncResolver <$>
+      (obj .: "ApiId") <*>
+      (obj .: "DataSourceName") <*>
+      (obj .: "FieldName") <*>
+      (obj .:? "RequestMappingTemplate") <*>
+      (obj .:? "RequestMappingTemplateS3Location") <*>
+      (obj .:? "ResponseMappingTemplate") <*>
+      (obj .:? "ResponseMappingTemplateS3Location") <*>
+      (obj .: "TypeName")
+  parseJSON _ = mempty
+
+-- | Constructor for 'AppSyncResolver' containing required fields as
+-- arguments.
+appSyncResolver
+  :: Val Text -- ^ 'asrApiId'
+  -> Val Text -- ^ 'asrDataSourceName'
+  -> Val Text -- ^ 'asrFieldName'
+  -> Val Text -- ^ 'asrTypeName'
+  -> AppSyncResolver
+appSyncResolver apiIdarg dataSourceNamearg fieldNamearg typeNamearg =
+  AppSyncResolver
+  { _appSyncResolverApiId = apiIdarg
+  , _appSyncResolverDataSourceName = dataSourceNamearg
+  , _appSyncResolverFieldName = fieldNamearg
+  , _appSyncResolverRequestMappingTemplate = Nothing
+  , _appSyncResolverRequestMappingTemplateS3Location = Nothing
+  , _appSyncResolverResponseMappingTemplate = Nothing
+  , _appSyncResolverResponseMappingTemplateS3Location = Nothing
+  , _appSyncResolverTypeName = typeNamearg
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-apiid
+asrApiId :: Lens' AppSyncResolver (Val Text)
+asrApiId = lens _appSyncResolverApiId (\s a -> s { _appSyncResolverApiId = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-datasourcename
+asrDataSourceName :: Lens' AppSyncResolver (Val Text)
+asrDataSourceName = lens _appSyncResolverDataSourceName (\s a -> s { _appSyncResolverDataSourceName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-fieldname
+asrFieldName :: Lens' AppSyncResolver (Val Text)
+asrFieldName = lens _appSyncResolverFieldName (\s a -> s { _appSyncResolverFieldName = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-requestmappingtemplate
+asrRequestMappingTemplate :: Lens' AppSyncResolver (Maybe (Val Text))
+asrRequestMappingTemplate = lens _appSyncResolverRequestMappingTemplate (\s a -> s { _appSyncResolverRequestMappingTemplate = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-requestmappingtemplates3location
+asrRequestMappingTemplateS3Location :: Lens' AppSyncResolver (Maybe (Val Text))
+asrRequestMappingTemplateS3Location = lens _appSyncResolverRequestMappingTemplateS3Location (\s a -> s { _appSyncResolverRequestMappingTemplateS3Location = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-responsemappingtemplate
+asrResponseMappingTemplate :: Lens' AppSyncResolver (Maybe (Val Text))
+asrResponseMappingTemplate = lens _appSyncResolverResponseMappingTemplate (\s a -> s { _appSyncResolverResponseMappingTemplate = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-responsemappingtemplates3location
+asrResponseMappingTemplateS3Location :: Lens' AppSyncResolver (Maybe (Val Text))
+asrResponseMappingTemplateS3Location = lens _appSyncResolverResponseMappingTemplateS3Location (\s a -> s { _appSyncResolverResponseMappingTemplateS3Location = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-typename
+asrTypeName :: Lens' AppSyncResolver (Val Text)
+asrTypeName = lens _appSyncResolverTypeName (\s a -> s { _appSyncResolverTypeName = a })
diff --git a/library-gen/Stratosphere/Resources/CognitoUserPool.hs b/library-gen/Stratosphere/Resources/CognitoUserPool.hs
--- a/library-gen/Stratosphere/Resources/CognitoUserPool.hs
+++ b/library-gen/Stratosphere/Resources/CognitoUserPool.hs
@@ -35,6 +35,7 @@
   , _cognitoUserPoolSmsVerificationMessage :: Maybe (Val Text)
   , _cognitoUserPoolUserPoolName :: Maybe (Val Text)
   , _cognitoUserPoolUserPoolTags :: Maybe Object
+  , _cognitoUserPoolUsernameAttributes :: Maybe (ValList Text)
   } deriving (Show, Eq)
 
 instance ToJSON CognitoUserPool where
@@ -57,6 +58,7 @@
     , fmap (("SmsVerificationMessage",) . toJSON) _cognitoUserPoolSmsVerificationMessage
     , fmap (("UserPoolName",) . toJSON) _cognitoUserPoolUserPoolName
     , fmap (("UserPoolTags",) . toJSON) _cognitoUserPoolUserPoolTags
+    , fmap (("UsernameAttributes",) . toJSON) _cognitoUserPoolUsernameAttributes
     ]
 
 instance FromJSON CognitoUserPool where
@@ -77,7 +79,8 @@
       (obj .:? "SmsConfiguration") <*>
       (obj .:? "SmsVerificationMessage") <*>
       (obj .:? "UserPoolName") <*>
-      (obj .:? "UserPoolTags")
+      (obj .:? "UserPoolTags") <*>
+      (obj .:? "UsernameAttributes")
   parseJSON _ = mempty
 
 -- | Constructor for 'CognitoUserPool' containing required fields as
@@ -102,6 +105,7 @@
   , _cognitoUserPoolSmsVerificationMessage = Nothing
   , _cognitoUserPoolUserPoolName = Nothing
   , _cognitoUserPoolUserPoolTags = Nothing
+  , _cognitoUserPoolUsernameAttributes = Nothing
   }
 
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-admincreateuserconfig
@@ -167,3 +171,7 @@
 -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-userpooltags
 cupUserPoolTags :: Lens' CognitoUserPool (Maybe Object)
 cupUserPoolTags = lens _cognitoUserPoolUserPoolTags (\s a -> s { _cognitoUserPoolUserPoolTags = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html#cfn-cognito-userpool-usernameattributes
+cupUsernameAttributes :: Lens' CognitoUserPool (Maybe (ValList Text))
+cupUsernameAttributes = lens _cognitoUserPoolUsernameAttributes (\s a -> s { _cognitoUserPoolUsernameAttributes = a })
diff --git a/library-gen/Stratosphere/Resources/EC2LaunchTemplate.hs b/library-gen/Stratosphere/Resources/EC2LaunchTemplate.hs
new file mode 100644
--- /dev/null
+++ b/library-gen/Stratosphere/Resources/EC2LaunchTemplate.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections #-}
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html
+
+module Stratosphere.Resources.EC2LaunchTemplate where
+
+import Stratosphere.ResourceImports
+import Stratosphere.ResourceProperties.EC2LaunchTemplateLaunchTemplateData
+
+-- | Full data type definition for EC2LaunchTemplate. See 'ec2LaunchTemplate'
+-- for a more convenient constructor.
+data EC2LaunchTemplate =
+  EC2LaunchTemplate
+  { _eC2LaunchTemplateLaunchTemplateData :: Maybe EC2LaunchTemplateLaunchTemplateData
+  , _eC2LaunchTemplateLaunchTemplateName :: Maybe (Val Text)
+  } deriving (Show, Eq)
+
+instance ToJSON EC2LaunchTemplate where
+  toJSON EC2LaunchTemplate{..} =
+    object $
+    catMaybes
+    [ fmap (("LaunchTemplateData",) . toJSON) _eC2LaunchTemplateLaunchTemplateData
+    , fmap (("LaunchTemplateName",) . toJSON) _eC2LaunchTemplateLaunchTemplateName
+    ]
+
+instance FromJSON EC2LaunchTemplate where
+  parseJSON (Object obj) =
+    EC2LaunchTemplate <$>
+      (obj .:? "LaunchTemplateData") <*>
+      (obj .:? "LaunchTemplateName")
+  parseJSON _ = mempty
+
+-- | Constructor for 'EC2LaunchTemplate' containing required fields as
+-- arguments.
+ec2LaunchTemplate
+  :: EC2LaunchTemplate
+ec2LaunchTemplate  =
+  EC2LaunchTemplate
+  { _eC2LaunchTemplateLaunchTemplateData = Nothing
+  , _eC2LaunchTemplateLaunchTemplateName = Nothing
+  }
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html#cfn-ec2-launchtemplate-launchtemplatedata
+ecltLaunchTemplateData :: Lens' EC2LaunchTemplate (Maybe EC2LaunchTemplateLaunchTemplateData)
+ecltLaunchTemplateData = lens _eC2LaunchTemplateLaunchTemplateData (\s a -> s { _eC2LaunchTemplateLaunchTemplateData = a })
+
+-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html#cfn-ec2-launchtemplate-launchtemplatename
+ecltLaunchTemplateName :: Lens' EC2LaunchTemplate (Maybe (Val Text))
+ecltLaunchTemplateName = lens _eC2LaunchTemplateLaunchTemplateName (\s a -> s { _eC2LaunchTemplateLaunchTemplateName = a })
diff --git a/library/Stratosphere/Types.hs b/library/Stratosphere/Types.hs
--- a/library/Stratosphere/Types.hs
+++ b/library/Stratosphere/Types.hs
@@ -174,6 +174,7 @@
   | NodeJS43
   | NodeJS43Edge
   | NodeJS610
+  | NodeJS810
   | Java8
   | Python27
   | Python36
@@ -190,6 +191,7 @@
       parse "nodejs4.3" = pure NodeJS43
       parse "nodejs4.3-edge" = pure NodeJS43Edge
       parse "nodejs6.10" = pure NodeJS610
+      parse "nodejs8.10" = pure NodeJS810
       parse "java8" = pure Java8
       parse "python2.7" = pure Python27
       parse "python3.6" = pure Python36
@@ -203,6 +205,7 @@
   toJSON NodeJS43 = String "nodejs4.3"
   toJSON NodeJS43Edge = String "nodejs4.3-edge"
   toJSON NodeJS610 = String "nodejs6.10"
+  toJSON NodeJS810 = String "nodejs8.10"
   toJSON Java8 = String "java8"
   toJSON Python27 = String "python2.7"
   toJSON Python36 = String "python3.6"
diff --git a/stratosphere.cabal b/stratosphere.cabal
--- a/stratosphere.cabal
+++ b/stratosphere.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 93a50095a8cd5df309de96dfda03a59ead7c055c1d2b062b951190f09ec7c2b3
+-- hash: 8aebbd10d21f3b866d891fb4a07cbd63cdef2fa3ab045a59255fdfd6fc01fd15
 
 name:           stratosphere
-version:        0.20.0
+version:        0.21.0
 synopsis:       EDSL for AWS CloudFormation
 description:    EDSL for AWS CloudFormation
 category:       AWS, Cloud
@@ -85,6 +85,11 @@
       Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepAdjustment
       Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyStepScalingPolicyConfiguration
       Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyTargetTrackingScalingPolicyConfiguration
+      Stratosphere.ResourceProperties.AppSyncDataSourceDynamoDBConfig
+      Stratosphere.ResourceProperties.AppSyncDataSourceElasticsearchConfig
+      Stratosphere.ResourceProperties.AppSyncDataSourceLambdaConfig
+      Stratosphere.ResourceProperties.AppSyncGraphQLApiLogConfig
+      Stratosphere.ResourceProperties.AppSyncGraphQLApiUserPoolConfig
       Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupLifecycleHookSpecification
       Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupMetricsCollection
       Stratosphere.ResourceProperties.AutoScalingAutoScalingGroupNotificationConfiguration
@@ -220,6 +225,20 @@
       Stratosphere.ResourceProperties.EC2InstancePrivateIpAddressSpecification
       Stratosphere.ResourceProperties.EC2InstanceSsmAssociation
       Stratosphere.ResourceProperties.EC2InstanceVolume
+      Stratosphere.ResourceProperties.EC2LaunchTemplateBlockDeviceMapping
+      Stratosphere.ResourceProperties.EC2LaunchTemplateCreditSpecification
+      Stratosphere.ResourceProperties.EC2LaunchTemplateEbs
+      Stratosphere.ResourceProperties.EC2LaunchTemplateElasticGpuSpecification
+      Stratosphere.ResourceProperties.EC2LaunchTemplateIamInstanceProfile
+      Stratosphere.ResourceProperties.EC2LaunchTemplateInstanceMarketOptions
+      Stratosphere.ResourceProperties.EC2LaunchTemplateIpv6Add
+      Stratosphere.ResourceProperties.EC2LaunchTemplateLaunchTemplateData
+      Stratosphere.ResourceProperties.EC2LaunchTemplateMonitoring
+      Stratosphere.ResourceProperties.EC2LaunchTemplateNetworkInterface
+      Stratosphere.ResourceProperties.EC2LaunchTemplatePlacement
+      Stratosphere.ResourceProperties.EC2LaunchTemplatePrivateIpAdd
+      Stratosphere.ResourceProperties.EC2LaunchTemplateSpotOptions
+      Stratosphere.ResourceProperties.EC2LaunchTemplateTagSpecification
       Stratosphere.ResourceProperties.EC2NetworkAclEntryIcmp
       Stratosphere.ResourceProperties.EC2NetworkAclEntryPortRange
       Stratosphere.ResourceProperties.EC2NetworkInterfaceInstanceIpv6Address
@@ -228,10 +247,13 @@
       Stratosphere.ResourceProperties.EC2SecurityGroupIngressProperty
       Stratosphere.ResourceProperties.EC2SpotFleetBlockDeviceMapping
       Stratosphere.ResourceProperties.EC2SpotFleetEbsBlockDevice
+      Stratosphere.ResourceProperties.EC2SpotFleetFleetLaunchTemplateSpecification
       Stratosphere.ResourceProperties.EC2SpotFleetGroupIdentifier
       Stratosphere.ResourceProperties.EC2SpotFleetIamInstanceProfileSpecification
       Stratosphere.ResourceProperties.EC2SpotFleetInstanceIpv6Address
       Stratosphere.ResourceProperties.EC2SpotFleetInstanceNetworkInterfaceSpecification
+      Stratosphere.ResourceProperties.EC2SpotFleetLaunchTemplateConfig
+      Stratosphere.ResourceProperties.EC2SpotFleetLaunchTemplateOverrides
       Stratosphere.ResourceProperties.EC2SpotFleetPrivateIpAddressSpecification
       Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetLaunchSpecification
       Stratosphere.ResourceProperties.EC2SpotFleetSpotFleetMonitoring
@@ -597,6 +619,11 @@
       Stratosphere.Resources.ApiGatewayVpcLink
       Stratosphere.Resources.ApplicationAutoScalingScalableTarget
       Stratosphere.Resources.ApplicationAutoScalingScalingPolicy
+      Stratosphere.Resources.AppSyncApiKey
+      Stratosphere.Resources.AppSyncDataSource
+      Stratosphere.Resources.AppSyncGraphQLApi
+      Stratosphere.Resources.AppSyncGraphQLSchema
+      Stratosphere.Resources.AppSyncResolver
       Stratosphere.Resources.AthenaNamedQuery
       Stratosphere.Resources.AutoScalingAutoScalingGroup
       Stratosphere.Resources.AutoScalingLaunchConfiguration
@@ -657,6 +684,7 @@
       Stratosphere.Resources.EC2Host
       Stratosphere.Resources.EC2Instance
       Stratosphere.Resources.EC2InternetGateway
+      Stratosphere.Resources.EC2LaunchTemplate
       Stratosphere.Resources.EC2NatGateway
       Stratosphere.Resources.EC2NetworkAcl
       Stratosphere.Resources.EC2NetworkAclEntry
